)]}'
{"ceilometer/image/glance.py":[{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"5689d9f3deb0b1ff87a8ceaec317778cd583112a","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        return [\u0027image\u0027, \u0027image.size\u0027]"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def get_counters(self, manager):"},{"line_number":84,"context_line":"        "},{"line_number":85,"context_line":"        imageIdSet \u003d set()"},{"line_number":86,"context_line":"        "},{"line_number":87,"context_line":"        for image in self.iter_images(manager.keystone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F4Bs%3D","line":84,"updated":"2013-05-21 06:42:20.000000000","message":"pep8 violation. Please remove the whitespace and the followings.","commit_id":"20e4b0f96133911d6ad4a76f5581c0763de2a8ec"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"5689d9f3deb0b1ff87a8ceaec317778cd583112a","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        "},{"line_number":87,"context_line":"        for image in self.iter_images(manager.keystone):"},{"line_number":88,"context_line":"            "},{"line_number":89,"context_line":"            # When retrieving images from glance, glance will check whether the user is"},{"line_number":90,"context_line":"            # of \u0027admin_role\u0027 which is configured in glance-api.conf. If the user is of admin_role, and"},{"line_number":91,"context_line":"            # is querying public images(which means that the \u0027is_public\u0027 param is set to be True), "},{"line_number":92,"context_line":"            # glance will ignore \u0027is_public\u0027 parameter and returns all the public images together with"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F4BQ%3D","line":89,"updated":"2013-05-21 06:42:20.000000000","message":"These comment lines are too long to meet the pep8. Generally, it\u0027s no more than 79/80 characters.","commit_id":"20e4b0f96133911d6ad4a76f5581c0763de2a8ec"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"2c015a9ff95b3bbd1143fc8009ca6222972ce9c3","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            # the _Base.iter_images method will return a image list"},{"line_number":99,"context_line":"            # which contains duplicate images. Add the following"},{"line_number":100,"context_line":"            # code to avoid recording down duplicate image events."},{"line_number":101,"context_line":"            if(image.id in imageIdSet):"},{"line_number":102,"context_line":"                continue"},{"line_number":103,"context_line":"            else:"},{"line_number":104,"context_line":"                imageIdSet.add(image.id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F0Lo%3D","line":101,"updated":"2013-05-22 13:12:28.000000000","message":"Funny flake8 didn\u0027t tell you about this, but I\u0027d prefer:\n\nif image.id in ImageidSet:\n\nand you can remove the else: keyword anyway.","commit_id":"814369163f2beae06879d75280e6fcdcbbe357e6"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"92035ff2f0b1475aee0b133714541a9f4f101e14","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            # the _Base.iter_images method will return a image list"},{"line_number":99,"context_line":"            # which contains duplicate images. Add the following"},{"line_number":100,"context_line":"            # code to avoid recording down duplicate image events."},{"line_number":101,"context_line":"            if(image.id in imageIdSet):"},{"line_number":102,"context_line":"                continue"},{"line_number":103,"context_line":"            else:"},{"line_number":104,"context_line":"                imageIdSet.add(image.id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fynw%3D","line":101,"in_reply_to":"AAAAPH%2F%2F0Lo%3D","updated":"2013-05-22 22:46:36.000000000","message":"It would be better to have this check done in iter_images() so that the output of that method is unique images. That would also let you add a test for that method, mocking out the glance client to return duplicate values.","commit_id":"814369163f2beae06879d75280e6fcdcbbe357e6"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"34b9ff80ffcd814b65bed5c9d1577628523f6355","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        # When retrieving images from glance, glance will check"},{"line_number":55,"context_line":"        # whether the user is of \u0027admin_role\u0027 which is"},{"line_number":56,"context_line":"        # configured in glance-api.conf. If the user is of"},{"line_number":57,"context_line":"        # admin_role, and is querying public images(which means"},{"line_number":58,"context_line":"        # that the \u0027is_public\u0027 param is set to be True),"},{"line_number":59,"context_line":"        # glance will ignore \u0027is_public\u0027 parameter and returns"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FxLQ%3D","line":56,"updated":"2013-05-23 14:19:57.000000000","message":"FYI glance now also allows admin-ness to be defined via the RBAC policy.json (as opposed to admin_role in glance-api.conf).","commit_id":"9007578a9553a8abd83c83ee641fb2a6f2892412"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"34b9ff80ffcd814b65bed5c9d1577628523f6355","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        # that the \u0027is_public\u0027 param is set to be True),"},{"line_number":59,"context_line":"        # glance will ignore \u0027is_public\u0027 parameter and returns"},{"line_number":60,"context_line":"        # all the public images together with private images."},{"line_number":61,"context_line":"        # As a result, when user uses account of \u0027admin_role\u0027"},{"line_number":62,"context_line":"        # for ceilometer to collect image list,"},{"line_number":63,"context_line":"        # the _Base.iter_images method will return a image list"},{"line_number":64,"context_line":"        # which contains duplicate images. Add the following"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FxLM%3D","line":61,"updated":"2013-05-23 14:19:57.000000000","message":"Note roles are granted to the combination of user \u0026 tenant, not just the user:\n\n  s,when user uses account of \u0027admin_role\u0027,if the user/tenant has an admin role,","commit_id":"9007578a9553a8abd83c83ee641fb2a6f2892412"},{"author":{"_account_id":7302,"name":"xingzhou","email":"xingzhou@cn.ibm.com","username":"xingzhou"},"change_message_id":"defe530280f63abec8e4fa9453a7638ae3db1c83","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        # that the \u0027is_public\u0027 param is set to be True),"},{"line_number":59,"context_line":"        # glance will ignore \u0027is_public\u0027 parameter and returns"},{"line_number":60,"context_line":"        # all the public images together with private images."},{"line_number":61,"context_line":"        # As a result, when user uses account of \u0027admin_role\u0027"},{"line_number":62,"context_line":"        # for ceilometer to collect image list,"},{"line_number":63,"context_line":"        # the _Base.iter_images method will return a image list"},{"line_number":64,"context_line":"        # which contains duplicate images. Add the following"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FvMI%3D","line":61,"in_reply_to":"AAAAPH%2F%2FxLM%3D","updated":"2013-05-24 03:27:32.000000000","message":"Hi Eoghan, thanks for the review, I can change the comments based on your suggestions","commit_id":"9007578a9553a8abd83c83ee641fb2a6f2892412"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"11654d6a33da106c3ba8f196897452390a01503c","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            if image.id in imageIdSet:"},{"line_number":71,"context_line":"                continue"},{"line_number":72,"context_line":"            imageIdSet.add(image.id)"},{"line_number":73,"context_line":"            uniqueImageList.append(image)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        return uniqueImageList"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fxc8%3D","line":73,"updated":"2013-05-23 12:21:49.000000000","message":"This seems useless, I think you can do something like:\n\nreturn iter(set(itertools.chain(....)))","commit_id":"9007578a9553a8abd83c83ee641fb2a6f2892412"},{"author":{"_account_id":7302,"name":"xingzhou","email":"xingzhou@cn.ibm.com","username":"xingzhou"},"change_message_id":"d839afbc9d86525ae15a561c4da91a10cd7eb5e6","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            if image.id in imageIdSet:"},{"line_number":71,"context_line":"                continue"},{"line_number":72,"context_line":"            imageIdSet.add(image.id)"},{"line_number":73,"context_line":"            uniqueImageList.append(image)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        return uniqueImageList"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fuyg%3D","line":73,"in_reply_to":"AAAAPH%2F%2Fu0U%3D","updated":"2013-05-24 08:45:02.000000000","message":"other methods like get_counters, are based on the image object returned by iter_images, so based on your comments(I think the return in your comment will only return the image id list not the image object list), I would like to modify the code as:\n\nuniqueImageList \u003d []\nimageIdSet \u003d set(image.id for image in rawImageList)\n\nfor image in rawImageList:\n      if image.id in imageIdSet\n           continue\n      uniqueImageList.append(image)\n\nis that ok? thanks","commit_id":"9007578a9553a8abd83c83ee641fb2a6f2892412"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c437dd7046607d72d4c7034fa9c500594d2735dc","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            if image.id in imageIdSet:"},{"line_number":71,"context_line":"                continue"},{"line_number":72,"context_line":"            imageIdSet.add(image.id)"},{"line_number":73,"context_line":"            uniqueImageList.append(image)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        return uniqueImageList"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fu0U%3D","line":73,"in_reply_to":"AAAAPH%2F%2Fu1Y%3D","updated":"2013-05-24 08:24:21.000000000","message":"Your analysis is right indeed, so you would need to rather do:\n\nreturn iter(set(image.id for image in itertools.chain(....)))","commit_id":"9007578a9553a8abd83c83ee641fb2a6f2892412"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"ea831f316284f5a0a33adf28df307d5785f0ac40","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            if image.id in imageIdSet:"},{"line_number":71,"context_line":"                continue"},{"line_number":72,"context_line":"            imageIdSet.add(image.id)"},{"line_number":73,"context_line":"            uniqueImageList.append(image)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        return uniqueImageList"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Ftnc%3D","line":73,"in_reply_to":"AAAAPH%2F%2Fuxw%3D","updated":"2013-05-24 17:55:55.000000000","message":"What would we gain by that refactor? We\u0027re still keeping a full set() in memory. What would the yield buy us?","commit_id":"9007578a9553a8abd83c83ee641fb2a6f2892412"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"2310df754a5fa4c56b431be23b53c83da9d6e8bb","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            if image.id in imageIdSet:"},{"line_number":71,"context_line":"                continue"},{"line_number":72,"context_line":"            imageIdSet.add(image.id)"},{"line_number":73,"context_line":"            uniqueImageList.append(image)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        return uniqueImageList"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fuxw%3D","line":73,"in_reply_to":"AAAAPH%2F%2Fuyg%3D","updated":"2013-05-24 08:59:15.000000000","message":"You\u0027re right I missed that. Your example seems wrong, I\u0027d do something like:\n\nimageIdSet \u003d set(image.id for image in rawImageList)\n\nfor image in rawImageList:\n    if image.id in imageIdSet:\n        imageIdSetimage -\u003d set([image.id])\n        yield image","commit_id":"9007578a9553a8abd83c83ee641fb2a6f2892412"},{"author":{"_account_id":7302,"name":"xingzhou","email":"xingzhou@cn.ibm.com","username":"xingzhou"},"change_message_id":"defe530280f63abec8e4fa9453a7638ae3db1c83","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            if image.id in imageIdSet:"},{"line_number":71,"context_line":"                continue"},{"line_number":72,"context_line":"            imageIdSet.add(image.id)"},{"line_number":73,"context_line":"            uniqueImageList.append(image)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        return uniqueImageList"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FvMU%3D","line":73,"in_reply_to":"AAAAPH%2F%2Fxc8%3D","updated":"2013-05-24 03:27:32.000000000","message":"Hi Julien, Thanks for your review. I tried your suggestion today, but seems the returned image list will contain duplicate images. I just tried to use iter(set(itertools.chain(...))) but the set seems not filter out the duplicate images, Python is new to me, am I wrong anywhere? Thanks for your help","commit_id":"9007578a9553a8abd83c83ee641fb2a6f2892412"},{"author":{"_account_id":7302,"name":"xingzhou","email":"xingzhou@cn.ibm.com","username":"xingzhou"},"change_message_id":"c0b49138245a4d35d13ce5ba3dab81454cefc44c","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            if image.id in imageIdSet:"},{"line_number":71,"context_line":"                continue"},{"line_number":72,"context_line":"            imageIdSet.add(image.id)"},{"line_number":73,"context_line":"            uniqueImageList.append(image)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        return uniqueImageList"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fu1Y%3D","line":73,"in_reply_to":"AAAAPH%2F%2Fxc8%3D","updated":"2013-05-24 08:09:20.000000000","message":"The image object returned by glance client is of type glanceclient.v1.images.image, and this class uses default __hash__ method to return the object code, so I think set can not judge which image object is duplicate.","commit_id":"9007578a9553a8abd83c83ee641fb2a6f2892412"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"21a7689668577fe68164fda5e285630b24e90c97","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        imageIdSet \u003d set(image.id for image in rawImageList)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        for image in rawImageList:"},{"line_number":69,"context_line":"            print image.id"},{"line_number":70,"context_line":"            if image.id in imageIdSet:"},{"line_number":71,"context_line":"                imageIdSet -\u003d set([image.id])"},{"line_number":72,"context_line":"                yield image"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Frmw%3D","line":69,"updated":"2013-05-27 12:33:07.000000000","message":"print!","commit_id":"eaaf700bcf246a218f755745a3f60707f48cae83"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"9043ba81b6c5b73d87bb671fd29ad655399051c2","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        for image in rawImageList:"},{"line_number":69,"context_line":"            if image.id in imageIdSet:"},{"line_number":70,"context_line":"                imageIdSet -\u003d set([image.id])"},{"line_number":71,"context_line":"                yield image"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2Fqac%3D","line":70,"updated":"2013-05-28 10:43:18.000000000","message":"@jd__ ... I don\u0027t know what the point of this refactor was? The entire list is kept in memory anyway. What did we buy from requiring this code change?","commit_id":"dfcd0dd7c4dad64b282843f681213b335ab735f4"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"2062c4a9ba06453b6068192f71efc5265aba7747","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        for image in rawImageList:"},{"line_number":69,"context_line":"            if image.id in imageIdSet:"},{"line_number":70,"context_line":"                imageIdSet -\u003d set([image.id])"},{"line_number":71,"context_line":"                yield image"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2FoZ4%3D","line":70,"in_reply_to":"AAAAPH%2F%2FqPo%3D","updated":"2013-05-28 22:16:33.000000000","message":"It\u0027s too bad the client resource objects don\u0027t implement __hash__().","commit_id":"dfcd0dd7c4dad64b282843f681213b335ab735f4"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"8889070d86d1d13bd73997c33ea620bd78ae5313","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        for image in rawImageList:"},{"line_number":69,"context_line":"            if image.id in imageIdSet:"},{"line_number":70,"context_line":"                imageIdSet -\u003d set([image.id])"},{"line_number":71,"context_line":"                yield image"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2FqPo%3D","line":70,"in_reply_to":"AAAAPH%2F%2Fqac%3D","updated":"2013-05-28 12:34:16.000000000","message":"Mainly, yielding rather than returning a list. It also uses one set rather than one set + one list.","commit_id":"dfcd0dd7c4dad64b282843f681213b335ab735f4"}],"tests/image/test_glance.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"ea831f316284f5a0a33adf28df307d5785f0ac40","unresolved":false,"context_lines":[{"line_number":82,"context_line":"          u\u0027deleted_at\u0027: None,"},{"line_number":83,"context_line":"          u\u0027min_ram\u0027: 0,"},{"line_number":84,"context_line":"          u\u0027size\u0027: 1024}),"},{"line_number":85,"context_line":"    #Make one duplicate private image to test the iter_images method"},{"line_number":86,"context_line":"    type(\u0027Image\u0027, (object,),"},{"line_number":87,"context_line":"         {u\u0027status\u0027: u\u0027queued\u0027,"},{"line_number":88,"context_line":"          u\u0027name\u0027: \"some name\","}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FtnQ%3D","line":85,"updated":"2013-05-24 17:55:55.000000000","message":"Space after # and ending punctuation as per HACKING.","commit_id":"9007578a9553a8abd83c83ee641fb2a6f2892412"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"ea831f316284f5a0a33adf28df307d5785f0ac40","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        self.stubs.Set(glance._Base, \u0027get_glance_client\u0027,"},{"line_number":134,"context_line":"                       self.fake_get_glance_client)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    #Tests whether the iter_images method returns an unique image list"},{"line_number":137,"context_line":"    def test_iter_images(self):"},{"line_number":138,"context_line":"        images \u003d glance.ImagePollster().iter_images(self.manager.keystone)"},{"line_number":139,"context_line":"        self.assertEqual(len(images), 3)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FtnM%3D","line":136,"updated":"2013-05-24 17:55:55.000000000","message":"Same formatting comment.","commit_id":"9007578a9553a8abd83c83ee641fb2a6f2892412"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"21a7689668577fe68164fda5e285630b24e90c97","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        imageIdSet \u003d set()"},{"line_number":142,"context_line":"        for image in images:"},{"line_number":143,"context_line":"            self.assertNotIn(image.id, imageIdSet)"},{"line_number":144,"context_line":"            imageIdSet.add(image.id)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_glance_image_counter(self):"},{"line_number":147,"context_line":"        counters \u003d list(glance.ImagePollster().get_counters(self.manager))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Frm0%3D","line":144,"updated":"2013-05-27 12:33:07.000000000","message":"You can likely simplify with:\n\nself.assertEqual(len(images), len(set(image.id for image in images)))","commit_id":"eaaf700bcf246a218f755745a3f60707f48cae83"}]}
