)]}'
{"glance/api/v2/images.py":[{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"d7af79b879ba257759bc2a4064e8f06e5e66f0db","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return image"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def index(self, req, marker\u003dNone, limit\u003dNone, sort_key\u003d\u0027created_at\u0027,"},{"line_number":69,"context_line":"              sort_dir\u003d\u0027desc\u0027, filters\u003dNone, member_status\u003d\u0027accepted\u0027):"},{"line_number":70,"context_line":"        result \u003d {}"},{"line_number":71,"context_line":"        if filters is None:"},{"line_number":72,"context_line":"            filters \u003d {}"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2BuPk%3D","line":69,"updated":"2013-02-20 18:29:58.000000000","message":"Could this not just be in filters?","commit_id":"e81d70fab4f8d6f4661dbaf53820e5b53afd2bbd"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"45fa8cd7ef08012806b1bf6de0a3ac94646aaacc","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return image"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def index(self, req, marker\u003dNone, limit\u003dNone, sort_key\u003d\u0027created_at\u0027,"},{"line_number":69,"context_line":"              sort_dir\u003d\u0027desc\u0027, filters\u003dNone, member_status\u003d\u0027accepted\u0027):"},{"line_number":70,"context_line":"        result \u003d {}"},{"line_number":71,"context_line":"        if filters is None:"},{"line_number":72,"context_line":"            filters \u003d {}"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2BuI4%3D","line":69,"in_reply_to":"AAAAM3%2F%2BuMg%3D","updated":"2013-02-20 18:53:12.000000000","message":"Not sure I agree since \u0027changes_since\u0027 and the _max and _min filters are not really attributes either. Really I just want to keep the number of arguments to a minimum, but I\u0027ll abstain since it\u0027s not a huge deal. Unless another reviewer cares.","commit_id":"e81d70fab4f8d6f4661dbaf53820e5b53afd2bbd"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"be602efac0942db41d1837bf87d84b087672bdf9","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return image"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def index(self, req, marker\u003dNone, limit\u003dNone, sort_key\u003d\u0027created_at\u0027,"},{"line_number":69,"context_line":"              sort_dir\u003d\u0027desc\u0027, filters\u003dNone, member_status\u003d\u0027accepted\u0027):"},{"line_number":70,"context_line":"        result \u003d {}"},{"line_number":71,"context_line":"        if filters is None:"},{"line_number":72,"context_line":"            filters \u003d {}"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2BuMg%3D","line":69,"in_reply_to":"AAAAM3%2F%2BuPk%3D","updated":"2013-02-20 18:39:50.000000000","message":"Aesthetically I do not like it being grouped with other filters. Because it is not a direct filter on the properties of the image.","commit_id":"e81d70fab4f8d6f4661dbaf53820e5b53afd2bbd"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"d7af79b879ba257759bc2a4064e8f06e5e66f0db","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            images \u003d image_repo.list(marker\u003dmarker, limit\u003dlimit,"},{"line_number":82,"context_line":"                                     sort_key\u003dsort_key, sort_dir\u003dsort_dir,"},{"line_number":83,"context_line":"                                     filters\u003dfilters,"},{"line_number":84,"context_line":"                                     member_status\u003dmember_status)"},{"line_number":85,"context_line":"            if len(images) !\u003d 0 and len(images) \u003d\u003d limit:"},{"line_number":86,"context_line":"                result[\u0027next_marker\u0027] \u003d images[-1].image_id"},{"line_number":87,"context_line":"        except (exception.NotFound, exception.InvalidSortKey,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2BuPE%3D","line":84,"updated":"2013-02-20 18:29:58.000000000","message":"It doesn\u0027t look like glance.db.ImageRepo.list has a kwarg for member_status, how does this work?","commit_id":"e81d70fab4f8d6f4661dbaf53820e5b53afd2bbd"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"34a44a94447fc5f05cd95a92bd473ac3c058c46e","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            images \u003d image_repo.list(marker\u003dmarker, limit\u003dlimit,"},{"line_number":82,"context_line":"                                     sort_key\u003dsort_key, sort_dir\u003dsort_dir,"},{"line_number":83,"context_line":"                                     filters\u003dfilters,"},{"line_number":84,"context_line":"                                     member_status\u003dmember_status)"},{"line_number":85,"context_line":"            if len(images) !\u003d 0 and len(images) \u003d\u003d limit:"},{"line_number":86,"context_line":"                result[\u0027next_marker\u0027] \u003d images[-1].image_id"},{"line_number":87,"context_line":"        except (exception.NotFound, exception.InvalidSortKey,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2BuOY%3D","line":84,"in_reply_to":"AAAAM3%2F%2BuPE%3D","updated":"2013-02-20 18:30:52.000000000","message":"pfft, nvm","commit_id":"e81d70fab4f8d6f4661dbaf53820e5b53afd2bbd"}],"glance/db/simple/api.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"d92ac5aa3eba9f8c54ad45c9a90c43c9fb1fe90f","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    visibility \u003d None"},{"line_number":140,"context_line":"    if \u0027visibility\u0027 in filters:"},{"line_number":141,"context_line":"        visibility \u003d filters.pop(\u0027visibility\u0027)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    for image in images:"},{"line_number":144,"context_line":"        member \u003d image_member_find(context, image_id\u003dimage[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2BuT8%3D","line":141,"updated":"2013-02-20 18:33:38.000000000","message":"Nitpick: this would be neater and more python-y as:\n\n -    visibility \u003d None\n -    if \u0027visibility\u0027 in filters:\n -        visibility \u003d filters.pop(\u0027visibility\u0027)\n +    visibility \u003d  filters.pop(\u0027visibility\u0027, None)","commit_id":"e81d70fab4f8d6f4661dbaf53820e5b53afd2bbd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"d92ac5aa3eba9f8c54ad45c9a90c43c9fb1fe90f","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                                   member\u003dcontext.owner, status\u003dstatus)"},{"line_number":146,"context_line":"        is_member \u003d False"},{"line_number":147,"context_line":"        if len(member) \u003e 0:"},{"line_number":148,"context_line":"            is_member \u003d True"},{"line_number":149,"context_line":"        has_ownership \u003d context.owner and image[\u0027owner\u0027] \u003d\u003d context.owner"},{"line_number":150,"context_line":"        can_see \u003d (image[\u0027is_public\u0027] or has_ownership or context.is_admin or"},{"line_number":151,"context_line":"                   is_member)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2BuTk%3D","line":148,"updated":"2013-02-20 18:33:38.000000000","message":"Neater as:\n\n -    is_member \u003d False\n -    if len(member) \u003e 0:\n -        is_member \u003d True\n +    is_member \u003d len(member) \u003e 0","commit_id":"e81d70fab4f8d6f4661dbaf53820e5b53afd2bbd"}],"glance/db/sqlalchemy/api.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"d92ac5aa3eba9f8c54ad45c9a90c43c9fb1fe90f","unresolved":false,"context_lines":[{"line_number":508,"context_line":"                    models.Image.members.any(member\u003dcontext.owner,"},{"line_number":509,"context_line":"                                             deleted\u003dFalse,"},{"line_number":510,"context_line":"                                             status\u003dmember_status),"},{"line_number":511,"context_line":"                ])"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"        query \u003d query.filter(sa_sql.or_(*visibility_filters))"},{"line_number":514,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2BuRU%3D","line":511,"updated":"2013-02-20 18:33:38.000000000","message":"Neater as:\n\n -            if member_status \u003d\u003d \u0027all\u0027:\n -                visibility_filters.extend([\n -                    models.Image.owner \u003d\u003d context.owner,\n -                    models.Image.members.any(member\u003dcontext.owner,\n -                                             deleted\u003dFalse),\n -                ])\n -            else:\n -                visibility_filters.extend([\n -                    models.Image.owner \u003d\u003d context.owner,\n -                    models.Image.members.any(member\u003dcontext.owner,\n -                                             deleted\u003dFalse,\n -                                             status\u003dmember_status),\n -                ])\n +            status \u003d None if member_status \u003d\u003d \u0027all\u0027 else member_status\n +            visibility_filters.extend([\n +                models.Image.owner \u003d\u003d context.owner,\n +                models.Image.members.any(member\u003dcontext.owner,\n +                                         deleted\u003dFalse,\n +                                         status\u003dstatus),\n +            ])","commit_id":"e81d70fab4f8d6f4661dbaf53820e5b53afd2bbd"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"209fd8e59a07caab6f275f480f40cf58ef01cfd6","unresolved":false,"context_lines":[{"line_number":508,"context_line":"                    models.Image.members.any(member\u003dcontext.owner,"},{"line_number":509,"context_line":"                                             deleted\u003dFalse,"},{"line_number":510,"context_line":"                                             status\u003dmember_status),"},{"line_number":511,"context_line":"                ])"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"        query \u003d query.filter(sa_sql.or_(*visibility_filters))"},{"line_number":514,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2Bt5Y%3D","line":511,"in_reply_to":"AAAAM3%2F%2BuRU%3D","updated":"2013-02-20 20:35:56.000000000","message":"if status\u003dNone then it checks for null values so it wont be the same. BUt thanks for all your other useful comments.","commit_id":"e81d70fab4f8d6f4661dbaf53820e5b53afd2bbd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"d92ac5aa3eba9f8c54ad45c9a90c43c9fb1fe90f","unresolved":false,"context_lines":[{"line_number":525,"context_line":"        else:"},{"line_number":526,"context_line":"            query \u003d query.filter("},{"line_number":527,"context_line":"                        models.Image.members.any(member\u003dcontext.owner,"},{"line_number":528,"context_line":"                                                 deleted\u003dFalse))"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"    showing_deleted \u003d False"},{"line_number":531,"context_line":"    if \u0027changes-since\u0027 in filters:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2BuQs%3D","line":528,"updated":"2013-02-20 18:33:38.000000000","message":"Is this final else clause equivalent to:\n\n   elif visibility \u003d\u003d \u0027shared\u0027:\n\nIf so, may be clearer to make that explicit.\n\nIf not, should we be reporting an \"unsupported\" visibility here, as opposed to falling back to filtering out non-owned or deleted images? (Or has that already been validated earlier in the dispatch path?)","commit_id":"e81d70fab4f8d6f4661dbaf53820e5b53afd2bbd"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"a8a8f367dedec8d1e5646f918ac9452657753eb7","unresolved":false,"context_lines":[{"line_number":513,"context_line":""},{"line_number":514,"context_line":"        query \u003d query.filter(sa_sql.or_(*visibility_filters))"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"    if \u0027visibility\u0027 in filters:"},{"line_number":517,"context_line":"        visibility \u003d filters.pop(\u0027visibility\u0027)"},{"line_number":518,"context_line":"        if visibility \u003d\u003d \u0027public\u0027:"},{"line_number":519,"context_line":"            query \u003d query.filter(models.Image.is_public \u003d\u003d True)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Btsc%3D","line":516,"updated":"2013-02-20 22:17:01.000000000","message":"So this goes along with what I was saying about having \u0027member_status\u0027 in filters. It\u0027s okay if we go with having \u0027member_status\u0027 as a new kwarg as long as we are consistent. Meaning \u0027visibility\u0027 should be one too or both in filters to avoid the parameters growing in number.","commit_id":"ac1c9ace1e57fb2ca76b78f2ba964ff3686449dd"}],"glance/tests/unit/test_db.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"d92ac5aa3eba9f8c54ad45c9a90c43c9fb1fe90f","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                        user\u003dUSER1, tenant\u003dTENANT3)"},{"line_number":151,"context_line":"        self.image_repo \u003d glance.db.ImageRepo(self.context, self.db)"},{"line_number":152,"context_line":"        images \u003d self.image_repo.list(member_status\u003d\u0027all\u0027)"},{"line_number":153,"context_line":"        self.assertEqual(3, len(images))"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def test_list_with_marker(self):"},{"line_number":156,"context_line":"        full_images \u003d self.image_repo.list()"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2BuOU%3D","line":153,"updated":"2013-02-20 18:33:38.000000000","message":"Could just roll the guts of this test case in something like:\n\n +    def _do_test_list_status(self, status, expected):\n +        self.context \u003d glance.context.RequestContext(\n +                        user\u003dUSER1, tenant\u003dTENANT3)\n +        self.image_repo \u003d glance.db.ImageRepo(self.context, self.db)\n +        images \u003d self.image_repo.list(member_status\u003dstatus)\n +        self.assertEqual(expected, len(images))\n +\n +    def test_list_status(self):\n +        self._do_test_list_status(None, 3)\n +\n +    def test_list_status_pending(self):\n +        self._do_test_list_status(\u0027pending\u0027, 2)\n\n... etc.","commit_id":"e81d70fab4f8d6f4661dbaf53820e5b53afd2bbd"}]}
