)]}'
{"zun/api/controllers/v1/containers.py":[{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"8443da61b202a65a0204e0095ec94e89c063d427","unresolved":false,"context_lines":[{"line_number":694,"context_line":"                                  \"container:network_detach\")"},{"line_number":695,"context_line":"        context \u003d pecan.request.context"},{"line_number":696,"context_line":"        compute_api \u003d pecan.request.compute_api"},{"line_number":697,"context_line":"        neutron_net \u003d kwargs.get(\u0027network\u0027)"},{"line_number":698,"context_line":"        neutron_api \u003d neutron.NeutronAPI(context)"},{"line_number":699,"context_line":"        neutron_net \u003d neutron_api.get_neutron_network(kwargs.get(\u0027network\u0027))"},{"line_number":700,"context_line":"        compute_api.network_detach(context, container, neutron_net[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f436f4f_35367db6","line":697,"range":{"start_line":697,"start_character":8,"end_line":697,"end_character":43},"updated":"2017-08-20 05:25:25.000000000","message":"please remove this. Not used anywhere.","commit_id":"c99399879053eb1adbe1925ef0a2d9b1a2a25984"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"8899970d970af12dc6edcb546f442bb00dc20654","unresolved":false,"context_lines":[{"line_number":694,"context_line":"                                  \"container:network_detach\")"},{"line_number":695,"context_line":"        context \u003d pecan.request.context"},{"line_number":696,"context_line":"        compute_api \u003d pecan.request.compute_api"},{"line_number":697,"context_line":"        neutron_net \u003d kwargs.get(\u0027network\u0027)"},{"line_number":698,"context_line":"        neutron_api \u003d neutron.NeutronAPI(context)"},{"line_number":699,"context_line":"        neutron_net \u003d neutron_api.get_neutron_network(kwargs.get(\u0027network\u0027))"},{"line_number":700,"context_line":"        compute_api.network_detach(context, container, neutron_net[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f436f4f_d0fcdab6","line":697,"range":{"start_line":697,"start_character":8,"end_line":697,"end_character":43},"in_reply_to":"9f436f4f_35367db6","updated":"2017-08-21 03:23:25.000000000","message":"Done","commit_id":"c99399879053eb1adbe1925ef0a2d9b1a2a25984"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"f54b8615344bc2b7902408cad700d9246438f28e","unresolved":false,"context_lines":[{"line_number":685,"context_line":"                                            kwargs.get(\u0027repository\u0027, None),"},{"line_number":686,"context_line":"                                            kwargs.get(\u0027tag\u0027, None))"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"    @pecan.expose(\u0027json\u0027)"},{"line_number":689,"context_line":"    @exception.wrap_pecan_controller_exception"},{"line_number":690,"context_line":"    @validation.validate_query_param(pecan.request, schema.network_detach)"},{"line_number":691,"context_line":"    def network_detach(self, container_id, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f436f4f_a891ddf3","line":688,"updated":"2017-08-21 15:23:09.000000000","message":"In order to leverage the api micro version, I think you need to put a decorator on top. Like (untested):\n\n  @base.Controller.api_version(\"1.5\")\n  ...","commit_id":"dd0d5ef6fa8c81c45317b2adf6ed6f6ee8401c66"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"b2aa7bf8f2ea910ba11cd4b5402d53e74240284b","unresolved":false,"context_lines":[{"line_number":685,"context_line":"                                            kwargs.get(\u0027repository\u0027, None),"},{"line_number":686,"context_line":"                                            kwargs.get(\u0027tag\u0027, None))"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"    @pecan.expose(\u0027json\u0027)"},{"line_number":689,"context_line":"    @exception.wrap_pecan_controller_exception"},{"line_number":690,"context_line":"    @validation.validate_query_param(pecan.request, schema.network_detach)"},{"line_number":691,"context_line":"    def network_detach(self, container_id, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f436f4f_5d2b3fea","line":688,"in_reply_to":"9f436f4f_a891ddf3","updated":"2017-08-22 07:25:11.000000000","message":"Done","commit_id":"dd0d5ef6fa8c81c45317b2adf6ed6f6ee8401c66"}],"zun/api/rest_api_version_history.rst":[{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"c29b3896cc648fdadbaa595b6df3eddb90a99d0c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"---"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"  Add detach a network from a container api."},{"line_number":66,"context_line":"  Users can use this api to detach a neutron network from a container which"},{"line_number":67,"context_line":"  connected to this network."}],"source_content_type":"text/x-rst","patch_set":11,"id":"7f287b81_2716ba4a","line":67,"range":{"start_line":66,"start_character":70,"end_line":67,"end_character":28},"updated":"2017-08-30 04:58:05.000000000","message":"Which network?\n\nI think this is redundant, can be removed.","commit_id":"2e27312cc533f04dfb3a34e5aa98c44e63648990"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"69604ba6851f84dd78a892a2758fb6884163679d","unresolved":false,"context_lines":[{"line_number":63,"context_line":"---"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"  Add detach a network from a container api."},{"line_number":66,"context_line":"  Users can use this api to detach a neutron network from a container which"},{"line_number":67,"context_line":"  connected to this network."}],"source_content_type":"text/x-rst","patch_set":11,"id":"7f287b81_2aa681ac","line":67,"range":{"start_line":66,"start_character":70,"end_line":67,"end_character":28},"in_reply_to":"7f287b81_2716ba4a","updated":"2017-08-30 06:39:45.000000000","message":"Done","commit_id":"2e27312cc533f04dfb3a34e5aa98c44e63648990"}],"zun/compute/manager.py":[{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"c29b3896cc648fdadbaa595b6df3eddb90a99d0c","unresolved":false,"context_lines":[{"line_number":723,"context_line":"                self._do_container_start(context, created_container)"},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"    def network_detach(self, context, container, network):"},{"line_number":726,"context_line":"        LOG.debug(\u0027Detach container: %(container)s from network: %(network)s\u0027,"},{"line_number":727,"context_line":"                  {\u0027container\u0027: container, \u0027network\u0027: network})"},{"line_number":728,"context_line":"        try:"},{"line_number":729,"context_line":"            self.driver.network_detach(context, container, network)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f287b81_07505e0a","line":726,"range":{"start_line":726,"start_character":19,"end_line":726,"end_character":76},"updated":"2017-08-30 04:58:05.000000000","message":"Isn\u0027t it \"detaching network from container\"?","commit_id":"2e27312cc533f04dfb3a34e5aa98c44e63648990"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"69604ba6851f84dd78a892a2758fb6884163679d","unresolved":false,"context_lines":[{"line_number":723,"context_line":"                self._do_container_start(context, created_container)"},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"    def network_detach(self, context, container, network):"},{"line_number":726,"context_line":"        LOG.debug(\u0027Detach container: %(container)s from network: %(network)s\u0027,"},{"line_number":727,"context_line":"                  {\u0027container\u0027: container, \u0027network\u0027: network})"},{"line_number":728,"context_line":"        try:"},{"line_number":729,"context_line":"            self.driver.network_detach(context, container, network)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f287b81_4aab0d74","line":726,"range":{"start_line":726,"start_character":19,"end_line":726,"end_character":76},"in_reply_to":"7f287b81_07505e0a","updated":"2017-08-30 06:39:45.000000000","message":"Done","commit_id":"2e27312cc533f04dfb3a34e5aa98c44e63648990"}],"zun/container/docker/driver.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ccbf4239723828376fd954b9aa1ad5e02cf7d7f1","unresolved":false,"context_lines":[{"line_number":770,"context_line":"        with docker_utils.docker_client() as docker:"},{"line_number":771,"context_line":"            network_api \u003d zun_network.api(context,"},{"line_number":772,"context_line":"                                          docker_api\u003ddocker)"},{"line_number":773,"context_line":"            network_api.disconnect_container_from_network(container, network)"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"class NovaDockerDriver(DockerDriver):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f436f4f_4090974a","line":773,"range":{"start_line":773,"start_character":69,"end_line":773,"end_character":76},"updated":"2017-08-15 15:43:53.000000000","message":"Hi Shunli,\n\nI think this parameter should be the neutron network uuid, but this method expect the docker network id/name as parameter. I think we need to convert the neutron network identity to docker network identity. For example (untested):\n\n  docker_net \u003d self._get_docker_network_name(context, network)","commit_id":"1967ddc6b4c2b54de867a6ec5c9cb5364b65078a"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"34cace31840863c1aa4246da1330c5ce88bb8427","unresolved":false,"context_lines":[{"line_number":770,"context_line":"        with docker_utils.docker_client() as docker:"},{"line_number":771,"context_line":"            network_api \u003d zun_network.api(context,"},{"line_number":772,"context_line":"                                          docker_api\u003ddocker)"},{"line_number":773,"context_line":"            network_api.disconnect_container_from_network(container, network)"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"class NovaDockerDriver(DockerDriver):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f436f4f_586abf19","line":773,"range":{"start_line":773,"start_character":69,"end_line":773,"end_character":76},"in_reply_to":"9f436f4f_4090974a","updated":"2017-08-16 02:35:05.000000000","message":"ah, you are right, done","commit_id":"1967ddc6b4c2b54de867a6ec5c9cb5364b65078a"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"520b24087fa826bdca4eebf4587eaf5b0a69110c","unresolved":false,"context_lines":[{"line_number":760,"context_line":"            docker_net \u003d self._get_docker_network_name(context, network)"},{"line_number":761,"context_line":"            network_api.disconnect_container_from_network(container,"},{"line_number":762,"context_line":"                                                          docker_net, network)"},{"line_number":763,"context_line":"            container.addresses \u003d None"},{"line_number":764,"context_line":"            container.save(context)"},{"line_number":765,"context_line":""},{"line_number":766,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f436f4f_b5e2a89f","line":763,"range":{"start_line":763,"start_character":22,"end_line":763,"end_character":38},"updated":"2017-08-17 13:59:15.000000000","message":"This doesn\u0027t seem to be correct since the \u0027addresses\u0027 is not necessary None if the container has multiple networks. The container might still have \u0027addresses\u0027 if it still has connected network.","commit_id":"10a1534754c1e8e971fd1e1da25cccdd41bc27df"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"f03b2cf86773e3eeee09c9f433903c1278ac1cf0","unresolved":false,"context_lines":[{"line_number":760,"context_line":"            docker_net \u003d self._get_docker_network_name(context, network)"},{"line_number":761,"context_line":"            network_api.disconnect_container_from_network(container,"},{"line_number":762,"context_line":"                                                          docker_net, network)"},{"line_number":763,"context_line":"            container.addresses \u003d None"},{"line_number":764,"context_line":"            container.save(context)"},{"line_number":765,"context_line":""},{"line_number":766,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f436f4f_e7c0782d","line":763,"range":{"start_line":763,"start_character":22,"end_line":763,"end_character":38},"in_reply_to":"9f436f4f_b5e2a89f","updated":"2017-08-18 01:44:31.000000000","message":"Done","commit_id":"10a1534754c1e8e971fd1e1da25cccdd41bc27df"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"8443da61b202a65a0204e0095ec94e89c063d427","unresolved":false,"context_lines":[{"line_number":761,"context_line":"            network_api.disconnect_container_from_network(container,"},{"line_number":762,"context_line":"                                                          docker_net, network)"},{"line_number":763,"context_line":""},{"line_number":764,"context_line":"            # Only clear network info releated to this network"},{"line_number":765,"context_line":"            # Cannot del container.address directly which will not update"},{"line_number":766,"context_line":"            # changed fields of the container objects as the del operate on"},{"line_number":767,"context_line":"            # the addresses object, only base.getter will called."}],"source_content_type":"text/x-python","patch_set":5,"id":"9f436f4f_7553e5e3","line":764,"range":{"start_line":764,"start_character":38,"end_line":764,"end_character":46},"updated":"2017-08-20 05:25:25.000000000","message":"nit: s/releated/related/","commit_id":"c99399879053eb1adbe1925ef0a2d9b1a2a25984"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"8899970d970af12dc6edcb546f442bb00dc20654","unresolved":false,"context_lines":[{"line_number":761,"context_line":"            network_api.disconnect_container_from_network(container,"},{"line_number":762,"context_line":"                                                          docker_net, network)"},{"line_number":763,"context_line":""},{"line_number":764,"context_line":"            # Only clear network info releated to this network"},{"line_number":765,"context_line":"            # Cannot del container.address directly which will not update"},{"line_number":766,"context_line":"            # changed fields of the container objects as the del operate on"},{"line_number":767,"context_line":"            # the addresses object, only base.getter will called."}],"source_content_type":"text/x-python","patch_set":5,"id":"9f436f4f_502a2a2c","line":764,"range":{"start_line":764,"start_character":38,"end_line":764,"end_character":46},"in_reply_to":"9f436f4f_7553e5e3","updated":"2017-08-21 03:23:25.000000000","message":"Done","commit_id":"c99399879053eb1adbe1925ef0a2d9b1a2a25984"}],"zun/tests/unit/api/controllers/v1/test_containers.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"abd1767c154029042a688765d88af0a036929131","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                  \u0027\"command\": \"env\", \"memory\": \"512\",\u0027"},{"line_number":72,"context_line":"                  \u0027\"environment\": {\"key1\": \"val1\", \"key2\": \"val2\"},\u0027"},{"line_number":73,"context_line":"                  \u0027\"runtime\": \"runc\"}\u0027)"},{"line_number":74,"context_line":"        api_version \u003d {\"OpenStack-API-Version\": \"container 1.5\"}"},{"line_number":75,"context_line":"        response \u003d self.app.post(\u0027/v1/containers?run\u003dtrue\u0027,"},{"line_number":76,"context_line":"                                 params\u003dparams,"},{"line_number":77,"context_line":"                                 content_type\u003d\u0027application/json\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f287b81_7f7fbbaa","line":74,"range":{"start_line":74,"start_character":49,"end_line":74,"end_character":62},"updated":"2017-08-29 18:42:10.000000000","message":"I think this should use CURRENT_VERSION as well.","commit_id":"6ed8c5f29e812827edb0d9ed0852152de20eab25"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"516821ddb2dc478174dd066e73e412e50faad357","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                  \u0027\"command\": \"env\", \"memory\": \"512\",\u0027"},{"line_number":72,"context_line":"                  \u0027\"environment\": {\"key1\": \"val1\", \"key2\": \"val2\"},\u0027"},{"line_number":73,"context_line":"                  \u0027\"runtime\": \"runc\"}\u0027)"},{"line_number":74,"context_line":"        api_version \u003d {\"OpenStack-API-Version\": \"container 1.5\"}"},{"line_number":75,"context_line":"        response \u003d self.app.post(\u0027/v1/containers?run\u003dtrue\u0027,"},{"line_number":76,"context_line":"                                 params\u003dparams,"},{"line_number":77,"context_line":"                                 content_type\u003d\u0027application/json\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f287b81_6cbf0cd1","line":74,"range":{"start_line":74,"start_character":49,"end_line":74,"end_character":62},"in_reply_to":"7f287b81_7f7fbbaa","updated":"2017-08-30 01:18:09.000000000","message":"Done","commit_id":"6ed8c5f29e812827edb0d9ed0852152de20eab25"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"abd1767c154029042a688765d88af0a036929131","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                                    \"Invalid param runtime\"):"},{"line_number":92,"context_line":"            self.app.post(\u0027/v1/containers?run\u003dtrue\u0027,"},{"line_number":93,"context_line":"                          params\u003dparams, content_type\u003d\u0027application/json\u0027,"},{"line_number":94,"context_line":"                          headers\u003dapi_version)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def test_run_container_runtime_wrong_value(self):"},{"line_number":97,"context_line":"        params \u003d (\u0027{\"name\": \"MyDocker\", \"image\": \"ubuntu\",\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f287b81_3f1db373","line":94,"range":{"start_line":94,"start_character":26,"end_line":94,"end_character":33},"updated":"2017-08-29 18:42:10.000000000","message":"Since this test case response 406 error, we need to set another header: headers[\u0027Accept\u0027] \u003d \u0027application/json\u0027. Otherwise, the output won\u0027t be properly rendered.","commit_id":"6ed8c5f29e812827edb0d9ed0852152de20eab25"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"516821ddb2dc478174dd066e73e412e50faad357","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                                    \"Invalid param runtime\"):"},{"line_number":92,"context_line":"            self.app.post(\u0027/v1/containers?run\u003dtrue\u0027,"},{"line_number":93,"context_line":"                          params\u003dparams, content_type\u003d\u0027application/json\u0027,"},{"line_number":94,"context_line":"                          headers\u003dapi_version)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def test_run_container_runtime_wrong_value(self):"},{"line_number":97,"context_line":"        params \u003d (\u0027{\"name\": \"MyDocker\", \"image\": \"ubuntu\",\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f287b81_ecdd3ce0","line":94,"range":{"start_line":94,"start_character":26,"end_line":94,"end_character":33},"in_reply_to":"7f287b81_3f1db373","updated":"2017-08-30 01:18:09.000000000","message":"Done","commit_id":"6ed8c5f29e812827edb0d9ed0852152de20eab25"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"abd1767c154029042a688765d88af0a036929131","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                  \u0027\"command\": \"env\", \"memory\": \"512\",\u0027"},{"line_number":99,"context_line":"                  \u0027\"environment\": {\"key1\": \"val1\", \"key2\": \"val2\"},\u0027"},{"line_number":100,"context_line":"                  \u0027\"runtime\": \"wrong_value\"}\u0027)"},{"line_number":101,"context_line":"        api_version \u003d {\"OpenStack-API-Version\": \"container 1.4\"}"},{"line_number":102,"context_line":"        with self.assertRaisesRegex(AppError,"},{"line_number":103,"context_line":"                                    \"Invalid input for field\"):"},{"line_number":104,"context_line":"            self.app.post(\u0027/v1/containers?run\u003dtrue\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f287b81_1f20b7ab","line":101,"range":{"start_line":101,"start_character":49,"end_line":101,"end_character":62},"updated":"2017-08-29 18:42:10.000000000","message":"I think this should use CURRENT_VERSION as well.","commit_id":"6ed8c5f29e812827edb0d9ed0852152de20eab25"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"516821ddb2dc478174dd066e73e412e50faad357","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                  \u0027\"command\": \"env\", \"memory\": \"512\",\u0027"},{"line_number":99,"context_line":"                  \u0027\"environment\": {\"key1\": \"val1\", \"key2\": \"val2\"},\u0027"},{"line_number":100,"context_line":"                  \u0027\"runtime\": \"wrong_value\"}\u0027)"},{"line_number":101,"context_line":"        api_version \u003d {\"OpenStack-API-Version\": \"container 1.4\"}"},{"line_number":102,"context_line":"        with self.assertRaisesRegex(AppError,"},{"line_number":103,"context_line":"                                    \"Invalid input for field\"):"},{"line_number":104,"context_line":"            self.app.post(\u0027/v1/containers?run\u003dtrue\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f287b81_acc85473","line":101,"range":{"start_line":101,"start_character":49,"end_line":101,"end_character":62},"in_reply_to":"7f287b81_1f20b7ab","updated":"2017-08-30 01:18:09.000000000","message":"Done","commit_id":"6ed8c5f29e812827edb0d9ed0852152de20eab25"}]}
