)]}'
{"cyborg/image/__init__.py":[{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"2914c3fc3ea3a7e21dec0511099a60b81fe98c4e","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"def API():"},{"line_number":15,"context_line":"    # Needed to prevent circular import..."},{"line_number":16,"context_line":"    import cyborg.image.api"},{"line_number":17,"context_line":"    return cyborg.image.api.API()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_5381429f","line":17,"range":{"start_line":15,"start_character":0,"end_line":17,"end_character":33},"updated":"2018-10-16 03:08:57.000000000","message":"Can we put this part in cyborg/image/api.py to avoid circular import?","commit_id":"e4e799c0658c4ed1d4903cdfcb6f7bde52ac8100"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"1ca744aad34b7b14d02080963497e656220c5363","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"def API():"},{"line_number":15,"context_line":"    # Needed to prevent circular import..."},{"line_number":16,"context_line":"    import cyborg.image.api"},{"line_number":17,"context_line":"    return cyborg.image.api.API()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_b3151997","line":17,"range":{"start_line":15,"start_character":0,"end_line":17,"end_character":33},"in_reply_to":"3f79a3b5_5381429f","updated":"2018-10-17 02:33:51.000000000","message":"Done","commit_id":"e4e799c0658c4ed1d4903cdfcb6f7bde52ac8100"}],"cyborg/image/api.py":[{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"91235546d5307ce339ac7e08a80ab506f2dca9db","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                                 image_ref)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def get_all(self, context, **kwargs):"},{"line_number":63,"context_line":"        \"\"\"Retrieves all information records about all disk images available"},{"line_number":64,"context_line":"        to show to the requesting user. If the requesting user is an admin,"},{"line_number":65,"context_line":"        all images in an ACTIVE status are returned. If the requesting user"},{"line_number":66,"context_line":"        is not an admin, the all public images and all private images that"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_93583a89","line":63,"updated":"2018-10-16 03:14:38.000000000","message":"\"disk images\": Lots of stuff here seem like cut-n-paste.","commit_id":"e4e799c0658c4ed1d4903cdfcb6f7bde52ac8100"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"1ca744aad34b7b14d02080963497e656220c5363","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                                 image_ref)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def get_all(self, context, **kwargs):"},{"line_number":63,"context_line":"        \"\"\"Retrieves all information records about all disk images available"},{"line_number":64,"context_line":"        to show to the requesting user. If the requesting user is an admin,"},{"line_number":65,"context_line":"        all images in an ACTIVE status are returned. If the requesting user"},{"line_number":66,"context_line":"        is not an admin, the all public images and all private images that"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_531125ae","line":63,"in_reply_to":"3f79a3b5_93583a89","updated":"2018-10-17 02:33:51.000000000","message":"Done","commit_id":"e4e799c0658c4ed1d4903cdfcb6f7bde52ac8100"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"91235546d5307ce339ac7e08a80ab506f2dca9db","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        session \u003d self._get_session(context)"},{"line_number":74,"context_line":"        return session.detail(context, **kwargs)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def get(self, context, id_or_uri, include_locations\u003dFalse,"},{"line_number":77,"context_line":"            show_deleted\u003dTrue):"},{"line_number":78,"context_line":"        \"\"\"Retrieves the information record for a single disk image. If the"},{"line_number":79,"context_line":"        supplied identifier parameter is a UUID, the default driver will"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_33d846ee","line":76,"updated":"2018-10-16 03:14:38.000000000","message":"1. This is not providing the functionality needed to fetch bitstreams based on properties. May be that is for the future?\n\n2. What exactly does \u0027include_locations\u0027 mean? \n3. Why do we need the parameter \u0027show_deleted\u0027?","commit_id":"e4e799c0658c4ed1d4903cdfcb6f7bde52ac8100"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"1ca744aad34b7b14d02080963497e656220c5363","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        session \u003d self._get_session(context)"},{"line_number":74,"context_line":"        return session.detail(context, **kwargs)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def get(self, context, id_or_uri, include_locations\u003dFalse,"},{"line_number":77,"context_line":"            show_deleted\u003dTrue):"},{"line_number":78,"context_line":"        \"\"\"Retrieves the information record for a single disk image. If the"},{"line_number":79,"context_line":"        supplied identifier parameter is a UUID, the default driver will"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_13072d72","line":76,"in_reply_to":"3f79a3b5_33d846ee","updated":"2018-10-17 02:33:51.000000000","message":"1. Yes, that\u0027s for some upcominig patch in future.\n2. Removed\n3. Removed","commit_id":"e4e799c0658c4ed1d4903cdfcb6f7bde52ac8100"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"91235546d5307ce339ac7e08a80ab506f2dca9db","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                            include_locations\u003dinclude_locations,"},{"line_number":99,"context_line":"                            show_deleted\u003dshow_deleted)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def create(self, context, image_info, data\u003dNone):"},{"line_number":102,"context_line":"        \"\"\"Creates a new image record, optionally passing the image bits to"},{"line_number":103,"context_line":"        backend storage."},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_13d98aef","line":101,"updated":"2018-10-16 03:14:38.000000000","message":"Cyborg should not allow bitstream images to be created without the mandatory metadata, such as which region type it is compatible with.","commit_id":"e4e799c0658c4ed1d4903cdfcb6f7bde52ac8100"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"1ca744aad34b7b14d02080963497e656220c5363","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                            include_locations\u003dinclude_locations,"},{"line_number":99,"context_line":"                            show_deleted\u003dshow_deleted)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def create(self, context, image_info, data\u003dNone):"},{"line_number":102,"context_line":"        \"\"\"Creates a new image record, optionally passing the image bits to"},{"line_number":103,"context_line":"        backend storage."},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_f336314f","line":101,"in_reply_to":"3f79a3b5_13d98aef","updated":"2018-10-17 02:33:51.000000000","message":"Done. Removed.","commit_id":"e4e799c0658c4ed1d4903cdfcb6f7bde52ac8100"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"91235546d5307ce339ac7e08a80ab506f2dca9db","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        :param id_or_uri: A UUID identifier or an image URI to look up image"},{"line_number":156,"context_line":"                          information for."},{"line_number":157,"context_line":"        :param data: A file object to use in downloading image data."},{"line_number":158,"context_line":"        :param dest_path: Filepath to transfer image bits to."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        Note that because of the poor design of the"},{"line_number":161,"context_line":"        `glance.ImageService.download` method, the function returns different"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_737c7ee9","line":158,"updated":"2018-10-16 03:14:38.000000000","message":"Wondering if storing the bitstream in a local file is the right thing to do architecturally.\n1. Who makes sure it has the right user/group permissions for security? \n2. How will the file be deleted when it is no longer used?\n\nMay be it is better to keep this as a buffer in memory.","commit_id":"e4e799c0658c4ed1d4903cdfcb6f7bde52ac8100"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"1ca744aad34b7b14d02080963497e656220c5363","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        :param id_or_uri: A UUID identifier or an image URI to look up image"},{"line_number":156,"context_line":"                          information for."},{"line_number":157,"context_line":"        :param data: A file object to use in downloading image data."},{"line_number":158,"context_line":"        :param dest_path: Filepath to transfer image bits to."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        Note that because of the poor design of the"},{"line_number":161,"context_line":"        `glance.ImageService.download` method, the function returns different"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_33310959","line":158,"in_reply_to":"3f79a3b5_737c7ee9","updated":"2018-10-17 02:33:51.000000000","message":"1. For now, I think we might need to facilitate keystone for access controls. \n2. The file removal is up to the Agent, this client only helps the downloading","commit_id":"e4e799c0658c4ed1d4903cdfcb6f7bde52ac8100"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"91235546d5307ce339ac7e08a80ab506f2dca9db","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        and the reason it needs to be cleaned up and standardized across the"},{"line_number":179,"context_line":"        virt driver callers."},{"line_number":180,"context_line":"        \"\"\""},{"line_number":181,"context_line":"        # TODO(jaypipes): Deprecate and remove this method entirely when we"},{"line_number":182,"context_line":"        #                 move to a system that simply returns a file handle"},{"line_number":183,"context_line":"        #                 to a bytestream iterator and allows the caller to"},{"line_number":184,"context_line":"        #                 handle streaming/copying/zero-copy as they see fit."}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_136bca1b","line":181,"updated":"2018-10-16 03:14:38.000000000","message":"Is this a copy-n-paste?","commit_id":"e4e799c0658c4ed1d4903cdfcb6f7bde52ac8100"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"1ca744aad34b7b14d02080963497e656220c5363","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        and the reason it needs to be cleaned up and standardized across the"},{"line_number":179,"context_line":"        virt driver callers."},{"line_number":180,"context_line":"        \"\"\""},{"line_number":181,"context_line":"        # TODO(jaypipes): Deprecate and remove this method entirely when we"},{"line_number":182,"context_line":"        #                 move to a system that simply returns a file handle"},{"line_number":183,"context_line":"        #                 to a bytestream iterator and allows the caller to"},{"line_number":184,"context_line":"        #                 handle streaming/copying/zero-copy as they see fit."}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_931a5dc4","line":181,"in_reply_to":"3f79a3b5_136bca1b","updated":"2018-10-17 02:33:51.000000000","message":"Removed","commit_id":"e4e799c0658c4ed1d4903cdfcb6f7bde52ac8100"}],"cyborg/image/download/__init__.py":[{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"91235546d5307ce339ac7e08a80ab506f2dca9db","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                module_dictionary[scheme] \u003d mgr.driver"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    if module_dictionary:"},{"line_number":45,"context_line":"        LOG.warning(\u0027The cyborg.image.download.modules extension point is \u0027"},{"line_number":46,"context_line":"                    \u0027deprecated for removal starting in the 17.0.0 Queens \u0027"},{"line_number":47,"context_line":"                    \u0027release and may be removed as early as the 18.0.0 Rocky \u0027"},{"line_number":48,"context_line":"                    \u0027release. It is not maintained and there is no indication \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_53fce23d","line":45,"updated":"2018-10-16 03:14:38.000000000","message":"Lots of this is cut-n-paste. Not applicable to Cyborg.","commit_id":"e4e799c0658c4ed1d4903cdfcb6f7bde52ac8100"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"1ca744aad34b7b14d02080963497e656220c5363","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                module_dictionary[scheme] \u003d mgr.driver"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    if module_dictionary:"},{"line_number":45,"context_line":"        LOG.warning(\u0027The cyborg.image.download.modules extension point is \u0027"},{"line_number":46,"context_line":"                    \u0027deprecated for removal starting in the 17.0.0 Queens \u0027"},{"line_number":47,"context_line":"                    \u0027release and may be removed as early as the 18.0.0 Rocky \u0027"},{"line_number":48,"context_line":"                    \u0027release. It is not maintained and there is no indication \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_f364f14e","line":45,"in_reply_to":"3f79a3b5_53fce23d","updated":"2018-10-17 02:33:51.000000000","message":"Removed","commit_id":"e4e799c0658c4ed1d4903cdfcb6f7bde52ac8100"}],"cyborg/image/glance.py":[{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"91235546d5307ce339ac7e08a80ab506f2dca9db","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    return itertools.cycle(api_servers)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"class GlanceClientWrapper(object):"},{"line_number":139,"context_line":"    \"\"\"Glance client wrapper class that implements retries.\"\"\""},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def __init__(self, context\u003dNone, endpoint\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_338606bc","line":138,"updated":"2018-10-16 03:14:38.000000000","message":"A little confused here: there is another file that also provides glance access for get/download etc. How does that relate to this?","commit_id":"e4e799c0658c4ed1d4903cdfcb6f7bde52ac8100"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"1ca744aad34b7b14d02080963497e656220c5363","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    return itertools.cycle(api_servers)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"class GlanceClientWrapper(object):"},{"line_number":139,"context_line":"    \"\"\"Glance client wrapper class that implements retries.\"\"\""},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def __init__(self, context\u003dNone, endpoint\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_f34dd1c4","line":138,"in_reply_to":"3f79a3b5_338606bc","updated":"2018-10-17 02:33:51.000000000","message":"This is the actual implementation calling the glance rest api. The other one is the api exposed to cyborg client.","commit_id":"e4e799c0658c4ed1d4903cdfcb6f7bde52ac8100"}]}
