)]}'
{"zun/api/controllers/v1/containers.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"a7390c0272469f6fc6f393d71177377468b3b445","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        policy.enforce(context, \"container:create\","},{"line_number":290,"context_line":"                       action\u003d\"container:create\")"},{"line_number":291,"context_line":"        container_dict \u003d Container(**container_dict).as_dict()"},{"line_number":292,"context_line":"        pecan.request.rpcapi.image_search(context, container_dict[\u0027image\u0027])"},{"line_number":293,"context_line":"        container_dict[\u0027project_id\u0027] \u003d context.project_id"},{"line_number":294,"context_line":"        container_dict[\u0027user_id\u0027] \u003d context.user_id"},{"line_number":295,"context_line":"        name \u003d container_dict.get(\u0027name\u0027) or \\"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_8289d277","line":292,"range":{"start_line":292,"start_character":29,"end_line":292,"end_character":41},"updated":"2016-11-09 23:15:00.000000000","message":"nit: better to add a comment on top to explain the intent is to fail earlier if the image name is wrong.","commit_id":"a5a8c95ca97ff5cefed621b7bf47b04de82cdfe7"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"fe98b2f1e7bf5024faba6e701c977bb879b30129","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        policy.enforce(context, \"container:create\","},{"line_number":290,"context_line":"                       action\u003d\"container:create\")"},{"line_number":291,"context_line":"        container_dict \u003d Container(**container_dict).as_dict()"},{"line_number":292,"context_line":"        pecan.request.rpcapi.image_search(context, container_dict[\u0027image\u0027])"},{"line_number":293,"context_line":"        container_dict[\u0027project_id\u0027] \u003d context.project_id"},{"line_number":294,"context_line":"        container_dict[\u0027user_id\u0027] \u003d context.user_id"},{"line_number":295,"context_line":"        name \u003d container_dict.get(\u0027name\u0027) or \\"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_2415369b","line":292,"range":{"start_line":292,"start_character":29,"end_line":292,"end_character":41},"in_reply_to":"9a629dbe_8289d277","updated":"2016-11-11 07:19:41.000000000","message":"Done","commit_id":"a5a8c95ca97ff5cefed621b7bf47b04de82cdfe7"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"b1d7e03891c80570e9124809b300fce69d6b3cc7","unresolved":false,"context_lines":[{"line_number":318,"context_line":"                                                   container_dict[\u0027image\u0027],"},{"line_number":319,"context_line":"                                                   exact_match\u003dTrue)"},{"line_number":320,"context_line":"        if not images:"},{"line_number":321,"context_line":"            raise exception.ImageNotFound(container_dict[\u0027image\u0027])"},{"line_number":322,"context_line":"        container_dict[\u0027project_id\u0027] \u003d context.project_id"},{"line_number":323,"context_line":"        container_dict[\u0027user_id\u0027] \u003d context.user_id"},{"line_number":324,"context_line":"        name \u003d container_dict.get(\u0027name\u0027) or \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"da4df55a_7f2072f8","line":321,"updated":"2016-12-22 04:05:57.000000000","message":"It would be good if can eliminate this exception raising from here, doing it in image_search would be good itself. Thoughts?","commit_id":"9d1190aeb28e41a05a9c69436aa3ae9afa21e12e"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"806a9d75f98b36f1847371df57e177f126d9acdc","unresolved":false,"context_lines":[{"line_number":318,"context_line":"                                                   container_dict[\u0027image\u0027],"},{"line_number":319,"context_line":"                                                   exact_match\u003dTrue)"},{"line_number":320,"context_line":"        if not images:"},{"line_number":321,"context_line":"            raise exception.ImageNotFound(container_dict[\u0027image\u0027])"},{"line_number":322,"context_line":"        container_dict[\u0027project_id\u0027] \u003d context.project_id"},{"line_number":323,"context_line":"        container_dict[\u0027user_id\u0027] \u003d context.user_id"},{"line_number":324,"context_line":"        name \u003d container_dict.get(\u0027name\u0027) or \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"da4df55a_7fe1e8fd","line":321,"in_reply_to":"da4df55a_02c7af45","updated":"2016-12-26 04:55:23.000000000","message":"True, My bad, how can i miss that :(","commit_id":"9d1190aeb28e41a05a9c69436aa3ae9afa21e12e"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"4d37d38d1f9f864b9d7a83b93a7128bb31949a3a","unresolved":false,"context_lines":[{"line_number":318,"context_line":"                                                   container_dict[\u0027image\u0027],"},{"line_number":319,"context_line":"                                                   exact_match\u003dTrue)"},{"line_number":320,"context_line":"        if not images:"},{"line_number":321,"context_line":"            raise exception.ImageNotFound(container_dict[\u0027image\u0027])"},{"line_number":322,"context_line":"        container_dict[\u0027project_id\u0027] \u003d context.project_id"},{"line_number":323,"context_line":"        container_dict[\u0027user_id\u0027] \u003d context.user_id"},{"line_number":324,"context_line":"        name \u003d container_dict.get(\u0027name\u0027) or \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"da4df55a_02c7af45","line":321,"in_reply_to":"da4df55a_31c1672f","updated":"2016-12-24 15:12:33.000000000","message":"It seems not. Line #36 was called by image_pull, not image_search. Line #45 is the one called by image_search.","commit_id":"9d1190aeb28e41a05a9c69436aa3ae9afa21e12e"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"8428422f917e4f6020f046e43775e8aad374a867","unresolved":false,"context_lines":[{"line_number":318,"context_line":"                                                   container_dict[\u0027image\u0027],"},{"line_number":319,"context_line":"                                                   exact_match\u003dTrue)"},{"line_number":320,"context_line":"        if not images:"},{"line_number":321,"context_line":"            raise exception.ImageNotFound(container_dict[\u0027image\u0027])"},{"line_number":322,"context_line":"        container_dict[\u0027project_id\u0027] \u003d context.project_id"},{"line_number":323,"context_line":"        container_dict[\u0027user_id\u0027] \u003d context.user_id"},{"line_number":324,"context_line":"        name \u003d container_dict.get(\u0027name\u0027) or \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"da4df55a_98e6d9b2","line":321,"in_reply_to":"da4df55a_5d42a33f","updated":"2016-12-23 04:52:01.000000000","message":"@Pradeep Yes we can do but here we need to update the code of ImageNotFound exception to 400.","commit_id":"9d1190aeb28e41a05a9c69436aa3ae9afa21e12e"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"34e35b55453aca5602cc3feabb3f1f27cc449f17","unresolved":false,"context_lines":[{"line_number":318,"context_line":"                                                   container_dict[\u0027image\u0027],"},{"line_number":319,"context_line":"                                                   exact_match\u003dTrue)"},{"line_number":320,"context_line":"        if not images:"},{"line_number":321,"context_line":"            raise exception.ImageNotFound(container_dict[\u0027image\u0027])"},{"line_number":322,"context_line":"        container_dict[\u0027project_id\u0027] \u003d context.project_id"},{"line_number":323,"context_line":"        container_dict[\u0027user_id\u0027] \u003d context.user_id"},{"line_number":324,"context_line":"        name \u003d container_dict.get(\u0027name\u0027) or \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"da4df55a_ae5b3786","line":321,"in_reply_to":"da4df55a_5d42a33f","updated":"2016-12-23 20:53:27.000000000","message":"It seems glance driver didn\u0027t raise any ImageNotFound exception on \u0027image_search\u0027.","commit_id":"9d1190aeb28e41a05a9c69436aa3ae9afa21e12e"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"34e35b55453aca5602cc3feabb3f1f27cc449f17","unresolved":false,"context_lines":[{"line_number":318,"context_line":"                                                   container_dict[\u0027image\u0027],"},{"line_number":319,"context_line":"                                                   exact_match\u003dTrue)"},{"line_number":320,"context_line":"        if not images:"},{"line_number":321,"context_line":"            raise exception.ImageNotFound(container_dict[\u0027image\u0027])"},{"line_number":322,"context_line":"        container_dict[\u0027project_id\u0027] \u003d context.project_id"},{"line_number":323,"context_line":"        container_dict[\u0027user_id\u0027] \u003d context.user_id"},{"line_number":324,"context_line":"        name \u003d container_dict.get(\u0027name\u0027) or \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"da4df55a_0e6a831a","line":321,"in_reply_to":"da4df55a_7f2072f8","updated":"2016-12-23 20:53:27.000000000","message":"Oh, I see what you mean. You proposed to raise an ImageNotFound exception inside the \u0027image_search\u0027 method. This will work as well. The current approach is to \u0027image_search\u0027 return an empty list if there is no image found. We check if the returned list is empty here and raise an ImageNotFound exception. Both approaches have pros and cons. We could discus it further later if you like.","commit_id":"9d1190aeb28e41a05a9c69436aa3ae9afa21e12e"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"3a91972ded6327661ccc448e3fe807822cedaae7","unresolved":false,"context_lines":[{"line_number":318,"context_line":"                                                   container_dict[\u0027image\u0027],"},{"line_number":319,"context_line":"                                                   exact_match\u003dTrue)"},{"line_number":320,"context_line":"        if not images:"},{"line_number":321,"context_line":"            raise exception.ImageNotFound(container_dict[\u0027image\u0027])"},{"line_number":322,"context_line":"        container_dict[\u0027project_id\u0027] \u003d context.project_id"},{"line_number":323,"context_line":"        container_dict[\u0027user_id\u0027] \u003d context.user_id"},{"line_number":324,"context_line":"        name \u003d container_dict.get(\u0027name\u0027) or \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"da4df55a_aa7c3173","line":321,"in_reply_to":"da4df55a_7f2072f8","updated":"2016-12-22 19:05:15.000000000","message":"This patch is for raising an exception in an early stage (see Madhuri\u0027s comments above), so we cannot remove the exception here.","commit_id":"9d1190aeb28e41a05a9c69436aa3ae9afa21e12e"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"34e35b55453aca5602cc3feabb3f1f27cc449f17","unresolved":false,"context_lines":[{"line_number":318,"context_line":"                                                   container_dict[\u0027image\u0027],"},{"line_number":319,"context_line":"                                                   exact_match\u003dTrue)"},{"line_number":320,"context_line":"        if not images:"},{"line_number":321,"context_line":"            raise exception.ImageNotFound(container_dict[\u0027image\u0027])"},{"line_number":322,"context_line":"        container_dict[\u0027project_id\u0027] \u003d context.project_id"},{"line_number":323,"context_line":"        container_dict[\u0027user_id\u0027] \u003d context.user_id"},{"line_number":324,"context_line":"        name \u003d container_dict.get(\u0027name\u0027) or \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"da4df55a_0e51a362","line":321,"in_reply_to":"da4df55a_98e6d9b2","updated":"2016-12-23 20:53:27.000000000","message":"Will change the code to 400 here.","commit_id":"9d1190aeb28e41a05a9c69436aa3ae9afa21e12e"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"d2151e1417df0cbd430e9c8f7078acb794b99dcd","unresolved":false,"context_lines":[{"line_number":318,"context_line":"                                                   container_dict[\u0027image\u0027],"},{"line_number":319,"context_line":"                                                   exact_match\u003dTrue)"},{"line_number":320,"context_line":"        if not images:"},{"line_number":321,"context_line":"            raise exception.ImageNotFound(container_dict[\u0027image\u0027])"},{"line_number":322,"context_line":"        container_dict[\u0027project_id\u0027] \u003d context.project_id"},{"line_number":323,"context_line":"        container_dict[\u0027user_id\u0027] \u003d context.user_id"},{"line_number":324,"context_line":"        name \u003d container_dict.get(\u0027name\u0027) or \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"da4df55a_5d42a33f","line":321,"in_reply_to":"da4df55a_aa7c3173","updated":"2016-12-23 03:49:02.000000000","message":"We are raising ImageNotFound in glance driver but not in docker driver, i was just saying that can we raise this exception in image_search method itself. But I am OK with it, lets merge this patch first, and we can refine that later.","commit_id":"9d1190aeb28e41a05a9c69436aa3ae9afa21e12e"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"31e5acd59928a291e89c4a545990d78a2277dedc","unresolved":false,"context_lines":[{"line_number":318,"context_line":"                                                   container_dict[\u0027image\u0027],"},{"line_number":319,"context_line":"                                                   exact_match\u003dTrue)"},{"line_number":320,"context_line":"        if not images:"},{"line_number":321,"context_line":"            raise exception.ImageNotFound(container_dict[\u0027image\u0027])"},{"line_number":322,"context_line":"        container_dict[\u0027project_id\u0027] \u003d context.project_id"},{"line_number":323,"context_line":"        container_dict[\u0027user_id\u0027] \u003d context.user_id"},{"line_number":324,"context_line":"        name \u003d container_dict.get(\u0027name\u0027) or \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"da4df55a_31c1672f","line":321,"in_reply_to":"da4df55a_ae5b3786","updated":"2016-12-24 05:39:29.000000000","message":"I think we are raising it here,(https://review.openstack.org/#/c/395552/10/zun/image/glance/utils.py Line #36)","commit_id":"9d1190aeb28e41a05a9c69436aa3ae9afa21e12e"}],"zun/api/controllers/v1/images.py":[{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"3c56a4dccb28c200a4f974c4b66fbbdd77d80070","unresolved":false,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    @pecan.expose(\u0027json\u0027)"},{"line_number":196,"context_line":"    @exception.wrap_pecan_controller_exception"},{"line_number":197,"context_line":"    def search(self, image):"},{"line_number":198,"context_line":"        context \u003d pecan.request.context"},{"line_number":199,"context_line":"        policy.enforce(context, \"image:search\","},{"line_number":200,"context_line":"                       action\u003d\"image:search\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_531c6077","line":197,"updated":"2016-11-14 14:46:08.000000000","message":"What my personal opinion is, search should search an string or text in repository and list all such images which matches the given string.","commit_id":"865fa8443ce89ddf139e82367a1d8f923065da6c"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"63e6b59d81caaf383283621e55327f1f00cde966","unresolved":false,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    @pecan.expose(\u0027json\u0027)"},{"line_number":196,"context_line":"    @exception.wrap_pecan_controller_exception"},{"line_number":197,"context_line":"    def search(self, image):"},{"line_number":198,"context_line":"        context \u003d pecan.request.context"},{"line_number":199,"context_line":"        policy.enforce(context, \"image:search\","},{"line_number":200,"context_line":"                       action\u003d\"image:search\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a77a97e_10a4bc55","line":197,"in_reply_to":"9a629dbe_531c6077","updated":"2016-11-14 21:07:02.000000000","message":"@Madhuri,\n\nTo address @Pradeep\u0027s comment, one way is to add an option (like --exact) to search. Then, you can use the \"--exact\" option to search the image before creating the container. If \"--exact\" option is not specified, it search all images which matches the given string.","commit_id":"865fa8443ce89ddf139e82367a1d8f923065da6c"}],"zun/compute/manager.py":[{"author":{"_account_id":12407,"name":"Shubham Kumar Sharma","email":"shubham.git@gmail.com","username":"shubham.git"},"change_message_id":"545f5e45f358c3292d081a2cc5ca98b49043f8d8","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        container.save()"},{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            image \u003d image_driver.pull_image(context, container.image)"},{"line_number":73,"context_line":"        except exception.ImageNotFound as e:"},{"line_number":74,"context_line":"            LOG.error(six.text_type(e))"},{"line_number":75,"context_line":"            self._fail_container(container, six.text_type(e))"},{"line_number":76,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_1b72847b","line":73,"updated":"2016-11-10 05:42:39.000000000","message":"I am not sure but since we now check image existence in search_image() before calling _do_container_create() . So ,will we ever get ImageNotFound exception here? \n\nA rare scenario, I can think of is: zun create was executed and image was found . But after returning to the user, someone deleted the image and it was not found while pulling.","commit_id":"a5a8c95ca97ff5cefed621b7bf47b04de82cdfe7"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"fe98b2f1e7bf5024faba6e701c977bb879b30129","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        container.save()"},{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            image \u003d image_driver.pull_image(context, container.image)"},{"line_number":73,"context_line":"        except exception.ImageNotFound as e:"},{"line_number":74,"context_line":"            LOG.error(six.text_type(e))"},{"line_number":75,"context_line":"            self._fail_container(container, six.text_type(e))"},{"line_number":76,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_640bae7d","line":73,"in_reply_to":"9a629dbe_1b72847b","updated":"2016-11-11 07:19:41.000000000","message":"Yes it could be a case so better to leave this as it is.","commit_id":"a5a8c95ca97ff5cefed621b7bf47b04de82cdfe7"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"a7390c0272469f6fc6f393d71177377468b3b445","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        except exception.ImageNotFound as e:"},{"line_number":74,"context_line":"            LOG.error(six.text_type(e))"},{"line_number":75,"context_line":"            self._fail_container(container, six.text_type(e))"},{"line_number":76,"context_line":"            raise"},{"line_number":77,"context_line":"        except exception.DockerError as e:"},{"line_number":78,"context_line":"            LOG.error(_LE(\"Error occured while calling docker image API: %s\"),"},{"line_number":79,"context_line":"                      six.text_type(e))"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_c2cd8ab8","line":76,"range":{"start_line":76,"start_character":12,"end_line":76,"end_character":17},"updated":"2016-11-09 23:15:00.000000000","message":"@Madhuri,\n\nThis method is executed in a thread. I am not sure what is the outcome for uncaught exception in a thread...","commit_id":"a5a8c95ca97ff5cefed621b7bf47b04de82cdfe7"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"98c07a155e06ff152e856bedbdf521b24e2bff1e","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        except exception.ImageNotFound as e:"},{"line_number":75,"context_line":"            LOG.error(six.text_type(e))"},{"line_number":76,"context_line":"            self._fail_container(container, six.text_type(e))"},{"line_number":77,"context_line":"            raise"},{"line_number":78,"context_line":"        except exception.DockerError as e:"},{"line_number":79,"context_line":"            LOG.error(_LE(\"Error occured while calling docker image API: %s\"),"},{"line_number":80,"context_line":"                      six.text_type(e))"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_a9bd5f04","line":77,"updated":"2016-11-14 09:45:50.000000000","message":"could you please tell the reason for raising the exception, i think function is executed in thread, i m not sure how its going to behave.","commit_id":"c6d56bbc59e931f5ec83de3de86258c58ad58e12"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"ef7e7d36deb362c82ebb0c62f69e2fefaadf8296","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        except exception.ImageNotFound as e:"},{"line_number":75,"context_line":"            LOG.error(six.text_type(e))"},{"line_number":76,"context_line":"            self._fail_container(container, six.text_type(e))"},{"line_number":77,"context_line":"            raise"},{"line_number":78,"context_line":"        except exception.DockerError as e:"},{"line_number":79,"context_line":"            LOG.error(_LE(\"Error occured while calling docker image API: %s\"),"},{"line_number":80,"context_line":"                      six.text_type(e))"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_88cdec88","line":77,"in_reply_to":"9a629dbe_a9bd5f04","updated":"2016-11-14 12:32:56.000000000","message":"Done","commit_id":"c6d56bbc59e931f5ec83de3de86258c58ad58e12"}],"zun/image/docker/driver.py":[{"author":{"_account_id":12407,"name":"Shubham Kumar Sharma","email":"shubham.git@gmail.com","username":"shubham.git"},"change_message_id":"545f5e45f358c3292d081a2cc5ca98b49043f8d8","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def search_image(self, context, image_name):"},{"line_number":68,"context_line":"        with docker_utils.docker_client() as docker:"},{"line_number":69,"context_line":"            repo, tag \u003d docker_utils.parse_docker_image(image_name)"},{"line_number":70,"context_line":"            try:"},{"line_number":71,"context_line":"                images \u003d docker.search(repo)"},{"line_number":72,"context_line":"                for image in images:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_9b2db497","line":69,"updated":"2016-11-10 05:42:39.000000000","message":"You will need to rebase as per : https://review.openstack.org/395740","commit_id":"a5a8c95ca97ff5cefed621b7bf47b04de82cdfe7"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"a7390c0272469f6fc6f393d71177377468b3b445","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        with docker_utils.docker_client() as docker:"},{"line_number":69,"context_line":"            repo, tag \u003d docker_utils.parse_docker_image(image_name)"},{"line_number":70,"context_line":"            try:"},{"line_number":71,"context_line":"                images \u003d docker.search(repo)"},{"line_number":72,"context_line":"                for image in images:"},{"line_number":73,"context_line":"                    if image[\u0027name\u0027] \u003d\u003d repo:"},{"line_number":74,"context_line":"                        return image"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_42ffbaa9","line":71,"range":{"start_line":71,"start_character":39,"end_line":71,"end_character":43},"updated":"2016-11-09 23:15:00.000000000","message":"@Madhuri,\n\nIs it correct to drop the tag in a search. For example, if the image is \"ubuntu:14.99\", it seems the search will go thought even if the tag is incorrect.....","commit_id":"a5a8c95ca97ff5cefed621b7bf47b04de82cdfe7"},{"author":{"_account_id":12407,"name":"Shubham Kumar Sharma","email":"shubham.git@gmail.com","username":"shubham.git"},"change_message_id":"545f5e45f358c3292d081a2cc5ca98b49043f8d8","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        with docker_utils.docker_client() as docker:"},{"line_number":69,"context_line":"            repo, tag \u003d docker_utils.parse_docker_image(image_name)"},{"line_number":70,"context_line":"            try:"},{"line_number":71,"context_line":"                images \u003d docker.search(repo)"},{"line_number":72,"context_line":"                for image in images:"},{"line_number":73,"context_line":"                    if image[\u0027name\u0027] \u003d\u003d repo:"},{"line_number":74,"context_line":"                        return image"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_5b307ce8","line":71,"range":{"start_line":71,"start_character":39,"end_line":71,"end_character":43},"in_reply_to":"9a629dbe_42ffbaa9","updated":"2016-11-10 05:42:39.000000000","message":"+1","commit_id":"a5a8c95ca97ff5cefed621b7bf47b04de82cdfe7"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"fe98b2f1e7bf5024faba6e701c977bb879b30129","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        with docker_utils.docker_client() as docker:"},{"line_number":69,"context_line":"            repo, tag \u003d docker_utils.parse_docker_image(image_name)"},{"line_number":70,"context_line":"            try:"},{"line_number":71,"context_line":"                images \u003d docker.search(repo)"},{"line_number":72,"context_line":"                for image in images:"},{"line_number":73,"context_line":"                    if image[\u0027name\u0027] \u003d\u003d repo:"},{"line_number":74,"context_line":"                        return image"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_87f524ee","line":71,"range":{"start_line":71,"start_character":39,"end_line":71,"end_character":43},"in_reply_to":"9a629dbe_5b307ce8","updated":"2016-11-11 07:19:41.000000000","message":"@Hongbin, currently `docker search` is not so advance to search with tag option, also there are many improvements that needs to be done to it. That\u0027s why I have dropped the tag field.\nI have logged an issue in docker for this https://github.com/docker/docker/issues/28232\n\nI will keep track of this change and update zun code accordingly.","commit_id":"a5a8c95ca97ff5cefed621b7bf47b04de82cdfe7"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"98c07a155e06ff152e856bedbdf521b24e2bff1e","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                images \u003d docker.search(repo)"},{"line_number":71,"context_line":"                for image in images:"},{"line_number":72,"context_line":"                    if image[\u0027name\u0027] \u003d\u003d repo:"},{"line_number":73,"context_line":"                        image_info \u003d image"},{"line_number":74,"context_line":"            except errors.APIError as api_error:"},{"line_number":75,"context_line":"                raise exception.ZunException(str(api_error))"},{"line_number":76,"context_line":"            except Exception as e:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_6f12675a","line":73,"updated":"2016-11-14 09:45:50.000000000","message":"i think a break is required here if the image is found, am i right?","commit_id":"c6d56bbc59e931f5ec83de3de86258c58ad58e12"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"ef7e7d36deb362c82ebb0c62f69e2fefaadf8296","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                images \u003d docker.search(repo)"},{"line_number":71,"context_line":"                for image in images:"},{"line_number":72,"context_line":"                    if image[\u0027name\u0027] \u003d\u003d repo:"},{"line_number":73,"context_line":"                        image_info \u003d image"},{"line_number":74,"context_line":"            except errors.APIError as api_error:"},{"line_number":75,"context_line":"                raise exception.ZunException(str(api_error))"},{"line_number":76,"context_line":"            except Exception as e:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_e8c4a860","line":73,"in_reply_to":"9a629dbe_6f12675a","updated":"2016-11-14 12:32:56.000000000","message":"Done","commit_id":"c6d56bbc59e931f5ec83de3de86258c58ad58e12"}],"zun/image/driver.py":[{"author":{"_account_id":12407,"name":"Shubham Kumar Sharma","email":"shubham.git@gmail.com","username":"shubham.git"},"change_message_id":"545f5e45f358c3292d081a2cc5ca98b49043f8d8","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"def search_image(context, image_name):"},{"line_number":125,"context_line":"    image \u003d search_image_on_host(context, image_name)"},{"line_number":126,"context_line":"    if image:"},{"line_number":127,"context_line":"        LOG.debug(\u0027Found image %s locally.\u0027 % image_name)"},{"line_number":128,"context_line":"        return image"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_db7f2c64","line":125,"updated":"2016-11-10 05:42:39.000000000","message":"This will fail if user runs following command : zun create hello-world:latest\nIt will fail for glance driver specifically as glance can\u0027t use filter hello-world:latest.\n\nCan we pass repo name and tag name separately and then for glance, tag can be ignored and for docker driver, repo:tag can be taken into account. \n\nThis will also address @hongbin concern at https://review.openstack.org/#/c/395552/1/zun/image/docker/driver.py@71","commit_id":"a5a8c95ca97ff5cefed621b7bf47b04de82cdfe7"},{"author":{"_account_id":12407,"name":"Shubham Kumar Sharma","email":"shubham.git@gmail.com","username":"shubham.git"},"change_message_id":"545f5e45f358c3292d081a2cc5ca98b49043f8d8","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"def search_image(context, image_name):"},{"line_number":125,"context_line":"    image \u003d search_image_on_host(context, image_name)"},{"line_number":126,"context_line":"    if image:"},{"line_number":127,"context_line":"        LOG.debug(\u0027Found image %s locally.\u0027 % image_name)"},{"line_number":128,"context_line":"        return image"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_7bd2a05d","line":125,"range":{"start_line":125,"start_character":4,"end_line":125,"end_character":9},"updated":"2016-11-10 05:42:39.000000000","message":"nit: Better to rename image as image_dict as image is confusing.","commit_id":"a5a8c95ca97ff5cefed621b7bf47b04de82cdfe7"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"fe98b2f1e7bf5024faba6e701c977bb879b30129","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"def search_image(context, image_name):"},{"line_number":125,"context_line":"    image \u003d search_image_on_host(context, image_name)"},{"line_number":126,"context_line":"    if image:"},{"line_number":127,"context_line":"        LOG.debug(\u0027Found image %s locally.\u0027 % image_name)"},{"line_number":128,"context_line":"        return image"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_27853859","line":125,"in_reply_to":"9a629dbe_db7f2c64","updated":"2016-11-11 07:19:41.000000000","message":"Done","commit_id":"a5a8c95ca97ff5cefed621b7bf47b04de82cdfe7"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"b1d7e03891c80570e9124809b300fce69d6b3cc7","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            image_driver \u003d load_image_driver(driver)"},{"line_number":85,"context_line":"            imgs \u003d image_driver.search_image(context, repo, tag,"},{"line_number":86,"context_line":"                                             exact_match\u003dexact_match)"},{"line_number":87,"context_line":"            images.extend(imgs)"},{"line_number":88,"context_line":"        except Exception as e:"},{"line_number":89,"context_line":"            LOG.exception(_LE(\u0027Unknown exception occured while searching\u0027"},{"line_number":90,"context_line":"                              \u0027 image : %s\u0027), str(e))"}],"source_content_type":"text/x-python","patch_set":10,"id":"da4df55a_7f4eb2c2","line":87,"updated":"2016-12-22 04:05:57.000000000","message":"If same image exists t many place, how user would know which image exists at which repository?","commit_id":"9d1190aeb28e41a05a9c69436aa3ae9afa21e12e"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"3a91972ded6327661ccc448e3fe807822cedaae7","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            image_driver \u003d load_image_driver(driver)"},{"line_number":85,"context_line":"            imgs \u003d image_driver.search_image(context, repo, tag,"},{"line_number":86,"context_line":"                                             exact_match\u003dexact_match)"},{"line_number":87,"context_line":"            images.extend(imgs)"},{"line_number":88,"context_line":"        except Exception as e:"},{"line_number":89,"context_line":"            LOG.exception(_LE(\u0027Unknown exception occured while searching\u0027"},{"line_number":90,"context_line":"                              \u0027 image : %s\u0027), str(e))"}],"source_content_type":"text/x-python","patch_set":10,"id":"da4df55a_ea963993","line":87,"in_reply_to":"da4df55a_7f4eb2c2","updated":"2016-12-22 19:05:15.000000000","message":"Good point. Will use a dict to hash repository to a list of images instead.","commit_id":"9d1190aeb28e41a05a9c69436aa3ae9afa21e12e"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"8428422f917e4f6020f046e43775e8aad374a867","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            image_driver \u003d load_image_driver(driver)"},{"line_number":85,"context_line":"            imgs \u003d image_driver.search_image(context, repo, tag,"},{"line_number":86,"context_line":"                                             exact_match\u003dexact_match)"},{"line_number":87,"context_line":"            images.extend(imgs)"},{"line_number":88,"context_line":"        except Exception as e:"},{"line_number":89,"context_line":"            LOG.exception(_LE(\u0027Unknown exception occured while searching\u0027"},{"line_number":90,"context_line":"                              \u0027 image : %s\u0027), str(e))"}],"source_content_type":"text/x-python","patch_set":10,"id":"da4df55a_d87941fe","line":87,"in_reply_to":"da4df55a_7f4eb2c2","updated":"2016-12-23 04:52:01.000000000","message":"wouldn\u0027t it depend on the image_driver_list provided? For ex:\n1. when image_driver is Docker/Glance, image will be searched only in Docker or Glance and return result.\n2. when image_driver is [\u0027docker\u0027, \u0027glance\u0027], first we will search in docker and if found we are returning.\n\nSo do you think we should return the search in both the driver or above implementation #2 is ok?","commit_id":"9d1190aeb28e41a05a9c69436aa3ae9afa21e12e"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"b393168e6796340b1b9e5268bce407a3db4f9187","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            image_driver \u003d load_image_driver(driver)"},{"line_number":85,"context_line":"            imgs \u003d image_driver.search_image(context, repo, tag,"},{"line_number":86,"context_line":"                                             exact_match\u003dexact_match)"},{"line_number":87,"context_line":"            images.extend(imgs)"},{"line_number":88,"context_line":"        except Exception as e:"},{"line_number":89,"context_line":"            LOG.exception(_LE(\u0027Unknown exception occured while searching\u0027"},{"line_number":90,"context_line":"                              \u0027 image : %s\u0027), str(e))"}],"source_content_type":"text/x-python","patch_set":10,"id":"da4df55a_3964f3e2","line":87,"in_reply_to":"da4df55a_d87941fe","updated":"2016-12-23 21:14:19.000000000","message":"OK, in the case #2, there are several options:\n\n1. Return a list of images searched in the first repo (i.e. \u0027docker\u0027)\n2. Search the first repo (i.e. \u0027docker\u0027), if the returned list is not empty, return it. Otherwise, search the second repo (i.e. glance).\n3. Search both repos (i.e. \u0027docker\u0027 and \u0027glance) and return a consolidated list.\n\nFrankly, I don\u0027t think any option above is prefect. Perhaps, a better solution is to remove the support of multiple drivers. Then, case #1 is the only possibility. For example:\n\n* Change \u0027image_driver_list\u0027 to \u0027image_dirver\u0027. Make it either \u0027docker\u0027 or \u0027glance\u0027. This config specify the default image driver.\n* In search API, add another flag (i.e. --image-service \u003cdocker/glance\u003e) to support non-default image driver.\n\nFor example:\n\n$ zun create --image cirros # this search \u0027docker\u0027\n$ zun create --image cirros --image-service glance # this search \u0027glance\u0027\n\nThoughts?","commit_id":"9d1190aeb28e41a05a9c69436aa3ae9afa21e12e"}],"zun/image/glance/driver.py":[{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"b1d7e03891c80570e9124809b300fce69d6b3cc7","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    def search_image(self, context, repo, tag, exact_match):"},{"line_number":96,"context_line":"        # TODO(mkrai): glance driver does not handle tags"},{"line_number":97,"context_line":"        #       once metadata is stored in db then handle tags"},{"line_number":98,"context_line":"        LOG.debug(\u0027Searching image in glance %s\u0027 % repo)"},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            # TODO(hongbin): find image by both repo and tag"},{"line_number":101,"context_line":"            images \u003d utils.find_images(context, repo, exact_match)"}],"source_content_type":"text/x-python","patch_set":10,"id":"da4df55a_1feda68b","line":98,"updated":"2016-12-22 04:05:57.000000000","message":"It would be good to rephrase it as\n\u0027Searching image %s in glance\u0027 % repo","commit_id":"9d1190aeb28e41a05a9c69436aa3ae9afa21e12e"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"3a91972ded6327661ccc448e3fe807822cedaae7","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    def search_image(self, context, repo, tag, exact_match):"},{"line_number":96,"context_line":"        # TODO(mkrai): glance driver does not handle tags"},{"line_number":97,"context_line":"        #       once metadata is stored in db then handle tags"},{"line_number":98,"context_line":"        LOG.debug(\u0027Searching image in glance %s\u0027 % repo)"},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            # TODO(hongbin): find image by both repo and tag"},{"line_number":101,"context_line":"            images \u003d utils.find_images(context, repo, exact_match)"}],"source_content_type":"text/x-python","patch_set":10,"id":"da4df55a_ca46d522","line":98,"in_reply_to":"da4df55a_1feda68b","updated":"2016-12-22 19:05:15.000000000","message":"Will do it.","commit_id":"9d1190aeb28e41a05a9c69436aa3ae9afa21e12e"}],"zun/tests/unit/api/controllers/v1/test_containers.py":[{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"98c07a155e06ff152e856bedbdf521b24e2bff1e","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                          params\u003dparams,"},{"line_number":54,"context_line":"                          content_type\u003d\u0027application/json\u0027)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        self.assertFalse(mock_container_create.called)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @patch(\u0027zun.compute.api.API.container_create\u0027)"},{"line_number":59,"context_line":"    @patch(\u0027zun.compute.api.API.image_search\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_8fc09b7e","line":56,"updated":"2016-11-14 09:45:50.000000000","message":"Can we check 404, in status-code?","commit_id":"c6d56bbc59e931f5ec83de3de86258c58ad58e12"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"ef7e7d36deb362c82ebb0c62f69e2fefaadf8296","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                          params\u003dparams,"},{"line_number":54,"context_line":"                          content_type\u003d\u0027application/json\u0027)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        self.assertFalse(mock_container_create.called)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @patch(\u0027zun.compute.api.API.container_create\u0027)"},{"line_number":59,"context_line":"    @patch(\u0027zun.compute.api.API.image_search\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_88940c45","line":56,"in_reply_to":"9a629dbe_8fc09b7e","updated":"2016-11-14 12:32:56.000000000","message":"Done","commit_id":"c6d56bbc59e931f5ec83de3de86258c58ad58e12"}],"zun/tests/unit/api/controllers/v1/test_images.py":[{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"98c07a155e06ff152e856bedbdf521b24e2bff1e","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    @patch(\u0027zun.compute.api.API.image_search\u0027)"},{"line_number":157,"context_line":"    def test_search_image(self, mock_image_search):"},{"line_number":158,"context_line":"        mock_image_search.return_value \u003d {\u0027name\u0027: \u0027redis\u0027, \u0027stars\u0027: 2000}"},{"line_number":159,"context_line":"        response \u003d self.app.get(\u0027/v1/images/redis/search/\u0027)"},{"line_number":160,"context_line":"        self.assertEqual(200, response.status_int)"},{"line_number":161,"context_line":"        mock_image_search.assert_called_once_with("},{"line_number":162,"context_line":"            mock.ANY, \u0027redis\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_4f2a032e","line":159,"updated":"2016-11-14 09:45:50.000000000","message":"I think its better to have name in query, like \n/v1/images/search?name\u003dxyz, that suits better. i am saying this because search should not be restricted with image name only, it can be searched with any matching string? what do you think?","commit_id":"c6d56bbc59e931f5ec83de3de86258c58ad58e12"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"3d17461346f082dfa54f3614242f96a1bb947bbb","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    @patch(\u0027zun.compute.api.API.image_search\u0027)"},{"line_number":157,"context_line":"    def test_search_image(self, mock_image_search):"},{"line_number":158,"context_line":"        mock_image_search.return_value \u003d {\u0027name\u0027: \u0027redis\u0027, \u0027stars\u0027: 2000}"},{"line_number":159,"context_line":"        response \u003d self.app.get(\u0027/v1/images/redis/search/\u0027)"},{"line_number":160,"context_line":"        self.assertEqual(200, response.status_int)"},{"line_number":161,"context_line":"        mock_image_search.assert_called_once_with("},{"line_number":162,"context_line":"            mock.ANY, \u0027redis\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_a8c63047","line":159,"in_reply_to":"9a629dbe_4f2a032e","updated":"2016-11-14 12:34:16.000000000","message":"The current API will work for any input, name, uuid.","commit_id":"c6d56bbc59e931f5ec83de3de86258c58ad58e12"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"969dda5695eb5e462cfbf2cadecfb4dfd091714c","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    @patch(\u0027zun.compute.api.API.image_search\u0027)"},{"line_number":157,"context_line":"    def test_search_image(self, mock_image_search):"},{"line_number":158,"context_line":"        mock_image_search.return_value \u003d {\u0027name\u0027: \u0027redis\u0027, \u0027stars\u0027: 2000}"},{"line_number":159,"context_line":"        response \u003d self.app.get(\u0027/v1/images/redis/search/\u0027)"},{"line_number":160,"context_line":"        self.assertEqual(200, response.status_int)"},{"line_number":161,"context_line":"        mock_image_search.assert_called_once_with("},{"line_number":162,"context_line":"            mock.ANY, \u0027redis\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_b6712a7a","line":159,"in_reply_to":"9a629dbe_a8c63047","updated":"2016-11-14 14:41:57.000000000","message":"I think if you call it search, then there would be many matching results based on the search string provided, and for that query parameter is most suitable. What do you think?","commit_id":"c6d56bbc59e931f5ec83de3de86258c58ad58e12"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"98c07a155e06ff152e856bedbdf521b24e2bff1e","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    @patch(\u0027zun.compute.api.API.image_search\u0027)"},{"line_number":173,"context_line":"    def test_search_image_not_found(self, mock_image_search):"},{"line_number":174,"context_line":"        mock_image_search.side_effect \u003d exception.ImageNotFound"},{"line_number":175,"context_line":"        self.assertRaises(AppError, self.app.get, \u0027/v1/images/redis/search/\u0027)"},{"line_number":176,"context_line":"        mock_image_search.assert_called_once_with("},{"line_number":177,"context_line":"            mock.ANY, \u0027redis\u0027)"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_afc39f37","line":175,"updated":"2016-11-14 09:45:50.000000000","message":"please assert here for 404 too","commit_id":"c6d56bbc59e931f5ec83de3de86258c58ad58e12"}]}
