)]}'
{"openstack/nfv_orchestration/v1/_proxy.py":[{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8599e38790899fff4146e943f966e0af3cfea78f","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        # legacy version v1.0. It expects endpoint without version i.e."},{"line_number":26,"context_line":"        # http://host-ip:9890/ and the URL will be formed using the base_path"},{"line_number":27,"context_line":"        # set in the resource for e.g. http://host-ip:9890/vnfpkgm/v1."},{"line_number":28,"context_line":"        self.endpoint_override \u003d self.get_endpoint().strip(\u0027v1.0\u0027)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def list_vnf_packages(self, **query):"},{"line_number":31,"context_line":"        \"\"\"Return a generator of vnf packages"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_b7005202","line":28,"range":{"start_line":28,"start_character":8,"end_line":28,"end_character":66},"updated":"2019-08-10 13:09:07.000000000","message":"Let\u0027s find another way to do this. This would break the user\u0027s ability to specify an endpoint_override in their config, which should really only be used for a user to fix a broken catalog.","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"0bf9931f49e715ab6ecf33216e057cb7d6b908c6","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        # legacy version v1.0. It expects endpoint without version i.e."},{"line_number":26,"context_line":"        # http://host-ip:9890/ and the URL will be formed using the base_path"},{"line_number":27,"context_line":"        # set in the resource for e.g. http://host-ip:9890/vnfpkgm/v1."},{"line_number":28,"context_line":"        self.endpoint_override \u003d self.get_endpoint().strip(\u0027v1.0\u0027)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def list_vnf_packages(self, **query):"},{"line_number":31,"context_line":"        \"\"\"Return a generator of vnf packages"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_f632130f","line":28,"range":{"start_line":28,"start_character":8,"end_line":28,"end_character":66},"in_reply_to":"7faddb67_b7005202","updated":"2019-08-14 16:04:11.000000000","message":"I know this is a hack. We are implementing ETSI specs [1] which supports many interfaces which would need new endpoints but it\u0027s not possible to add so many endpoints for service \u0027nfv-orchestration\u0027 hence we want to specify the full qualified URLs for managing vnf packages. One way to do it was to override endpoint_override attribute.\n\nWe are looking for another work around.\n[1]https://blueprints.launchpad.net/openstack/?searchtext\u003dtosca-csar-mgmt-driver","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"}],"openstack/tests/functional/nfv_orchestration/v1/test_vnf_package.py":[{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8599e38790899fff4146e943f966e0af3cfea78f","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        sot \u003d self.conn.nfv_orchestration.create_vnf_package(**attrs)"},{"line_number":32,"context_line":"        self.vnf_package \u003d sot"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def tearDown(self):"},{"line_number":35,"context_line":"        self.conn.nfv_orchestration.delete_vnf_package(self.vnf_package.id,"},{"line_number":36,"context_line":"                                                       ignore_missing\u003dFalse)"},{"line_number":37,"context_line":"        super(TestVnfPackage, self).tearDown()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_3791c29b","line":34,"updated":"2019-08-10 13:09:07.000000000","message":"Instead of tearDown, try using self.addCleanup in setUp.\n\n  self.addCleanup(\n    self.conn.nfv_orchestration.delete_vnf_package,\n    self.vnf_package.id,\n    ignore_missing\u003dFalse)\n\naddCleanup is more resilient.","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"0bf9931f49e715ab6ecf33216e057cb7d6b908c6","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        sot \u003d self.conn.nfv_orchestration.create_vnf_package(**attrs)"},{"line_number":32,"context_line":"        self.vnf_package \u003d sot"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def tearDown(self):"},{"line_number":35,"context_line":"        self.conn.nfv_orchestration.delete_vnf_package(self.vnf_package.id,"},{"line_number":36,"context_line":"                                                       ignore_missing\u003dFalse)"},{"line_number":37,"context_line":"        super(TestVnfPackage, self).tearDown()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_29a5de47","line":34,"in_reply_to":"7faddb67_3791c29b","updated":"2019-08-14 16:04:11.000000000","message":"Done","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8599e38790899fff4146e943f966e0af3cfea78f","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def test_list(self):"},{"line_number":51,"context_line":"        # Creating one new vnf package so that minimum two vnf packages will be"},{"line_number":52,"context_line":"        # listed."},{"line_number":53,"context_line":"        sot \u003d self.conn.nfv_orchestration.create_vnf_package()"},{"line_number":54,"context_line":"        vnf_package_list \u003d \\"},{"line_number":55,"context_line":"            [o.id for o in self.conn.nfv_orchestration.list_vnf_packages()]"},{"line_number":56,"context_line":"        # Checking both vnf packages are available in vnf_package_list."}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_57f1de00","line":53,"updated":"2019-08-10 13:09:07.000000000","message":"Then here you can add another addCleanup call. That way if something in list_vnf_packages throws an exception, you won\u0027t leak a vnf_package.","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"0bf9931f49e715ab6ecf33216e057cb7d6b908c6","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def test_list(self):"},{"line_number":51,"context_line":"        # Creating one new vnf package so that minimum two vnf packages will be"},{"line_number":52,"context_line":"        # listed."},{"line_number":53,"context_line":"        sot \u003d self.conn.nfv_orchestration.create_vnf_package()"},{"line_number":54,"context_line":"        vnf_package_list \u003d \\"},{"line_number":55,"context_line":"            [o.id for o in self.conn.nfv_orchestration.list_vnf_packages()]"},{"line_number":56,"context_line":"        # Checking both vnf packages are available in vnf_package_list."}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_39c2db54","line":53,"in_reply_to":"7faddb67_57f1de00","updated":"2019-08-14 16:04:11.000000000","message":"Done","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8599e38790899fff4146e943f966e0af3cfea78f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                          self.conn.nfv_orchestration.find_vnf_package,"},{"line_number":69,"context_line":"                          sot.id, ignore_missing\u003dFalse)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _wait_for_vnf_package_to_delete(self, vnf_package_obj):"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        def wait_for_vnf_package_delete(vnf_package_obj):"},{"line_number":74,"context_line":"            # After vnf package is deleted find_vnf_package() will return None."}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_97d0b655","line":71,"updated":"2019-08-10 13:09:07.000000000","message":"This is a thing a user needs to do, not just a test. Look through the code for \"wait_for_delete\". If you implement that for vnf_package, then the user is happier and the test can just use it.\n\nYou\u0027ll find that uses utils.iterate_timeout - so there\u0027s no need to pull in oslo.service.","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"0bf9931f49e715ab6ecf33216e057cb7d6b908c6","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                          self.conn.nfv_orchestration.find_vnf_package,"},{"line_number":69,"context_line":"                          sot.id, ignore_missing\u003dFalse)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _wait_for_vnf_package_to_delete(self, vnf_package_obj):"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        def wait_for_vnf_package_delete(vnf_package_obj):"},{"line_number":74,"context_line":"            # After vnf package is deleted find_vnf_package() will return None."}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_e4004b03","line":71,"in_reply_to":"7faddb67_97d0b655","updated":"2019-08-14 16:04:11.000000000","message":"In case if we use wait_for_delete method. it will throw attribute error \n\nAttributeError: \u0027VnfPackage\u0027 object has no attribute \u0027status\u0027 \n\nHere, we are implementing ETSI specs. according to that \u0027status\u0027 field is not available in vnfpackage obj.","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8599e38790899fff4146e943f966e0af3cfea78f","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    def test_upload_vnf_package_from_file(self):"},{"line_number":91,"context_line":"        # Checking onboarding_status before upload"},{"line_number":92,"context_line":"        self.assertEqual(\u0027CREATED\u0027, self.vnf_package.onboarding_state)"},{"line_number":93,"context_line":"        file_data \u003d open(\u0027./openstack/tests/unit/nfv_orchestration/v1/\u0027"},{"line_number":94,"context_line":"                         \u0027fake_data/sample_vnf_package.zip\u0027, \u0027rb\u0027)"},{"line_number":95,"context_line":"        attrs \u003d {\u0027upload-method\u0027: \"direct-file\"}"},{"line_number":96,"context_line":"        self.conn.nfv_orchestration.upload_vnf_package(self.vnf_package,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_f7b80a12","line":93,"updated":"2019-08-10 13:09:07.000000000","message":"As mentioned before - we should create this zip file on the fly from the expanded files in the filesystem rather than an opaque artifact - and we should write the functional test job to do $something to ensure we can use the cirros image that\u0027s already on test nodes, but if that *doesn\u0027t* happen and someone is running things directly it should download from the cirros url.","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"0bf9931f49e715ab6ecf33216e057cb7d6b908c6","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    def test_upload_vnf_package_from_file(self):"},{"line_number":91,"context_line":"        # Checking onboarding_status before upload"},{"line_number":92,"context_line":"        self.assertEqual(\u0027CREATED\u0027, self.vnf_package.onboarding_state)"},{"line_number":93,"context_line":"        file_data \u003d open(\u0027./openstack/tests/unit/nfv_orchestration/v1/\u0027"},{"line_number":94,"context_line":"                         \u0027fake_data/sample_vnf_package.zip\u0027, \u0027rb\u0027)"},{"line_number":95,"context_line":"        attrs \u003d {\u0027upload-method\u0027: \"direct-file\"}"},{"line_number":96,"context_line":"        self.conn.nfv_orchestration.upload_vnf_package(self.vnf_package,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_fffc5540","line":93,"in_reply_to":"7faddb67_f7b80a12","updated":"2019-08-14 16:04:11.000000000","message":"Done","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8599e38790899fff4146e943f966e0af3cfea78f","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        # Checking onboarding_status after upload"},{"line_number":102,"context_line":"        self.assertEqual(\u0027ONBOARDED\u0027, vnf_package.onboarding_state)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def _wait_until_vnf_package_is_onboarded(self):"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        def wait_for_onboarding_state_change():"},{"line_number":107,"context_line":"            vnf_package \u003d self.conn.nfv_orchestration.find_vnf_package("}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_d7bdce02","line":104,"updated":"2019-08-10 13:09:07.000000000","message":"Similarly - there should probably be a method on the resource called \"wait_for_onboarded\" as well as one on the proxy. You can look at wait_for_reservation in openstack/baremetal/v1/node.py for an example.","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"0bf9931f49e715ab6ecf33216e057cb7d6b908c6","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        # Checking onboarding_status after upload"},{"line_number":102,"context_line":"        self.assertEqual(\u0027ONBOARDED\u0027, vnf_package.onboarding_state)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def _wait_until_vnf_package_is_onboarded(self):"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        def wait_for_onboarding_state_change():"},{"line_number":107,"context_line":"            vnf_package \u003d self.conn.nfv_orchestration.find_vnf_package("}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_1fb6118c","line":104,"in_reply_to":"7faddb67_d7bdce02","updated":"2019-08-14 16:04:11.000000000","message":"Done","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"}],"openstack/tests/unit/nfv_orchestration/v1/fake_data/sample_vnf_package.zip":[{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8599e38790899fff4146e943f966e0af3cfea78f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7faddb67_770ada20","updated":"2019-08-10 13:09:07.000000000","message":"I\u0027d really prefer we don\u0027t check in opaque binary files, it\u0027s not an awesome use of git.\n\nI think we should expand this into a subdirectory, and then have the test zip it. Also - we should make the tests download the cirros image, because it doesn\u0027t belong in the git repo - but that should also be configurable to look for an existing cirros image on the filesystem, because devstack will already have a cirros image on the filesystem we can use.\n\nTHAT SAID - this is for unittests - this doesn\u0027t need to be a valid zip file. We should be able to have the unit test create a temp file with a .zip extension, write a few bytes to it, and pass that file to the upload command. For *functional* tests, we should do the above that I mentioned, becuase I can imagine the tacker service probably wants a real zip file uploaded.","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"0bf9931f49e715ab6ecf33216e057cb7d6b908c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7faddb67_99a66fc0","in_reply_to":"7faddb67_770ada20","updated":"2019-08-14 16:04:11.000000000","message":"Done","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"}],"openstack/tests/unit/nfv_orchestration/v1/test_vnf_package.py":[{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8599e38790899fff4146e943f966e0af3cfea78f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import ddt"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystoneauth1 import adapter"},{"line_number":19,"context_line":"import mock"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_d71aae6d","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":10},"updated":"2019-08-10 13:09:07.000000000","message":"I\u0027m torn on this. I like how ddt is doing what it\u0027s doing - but we\u0027re also already using testscenarios for a similar purpose. If we\u0027re going to adopt ddt, then I think we should adopt ddt and not have both in the codebase.\n\nLet\u0027s see what some of the other cores think.","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"0bf9931f49e715ab6ecf33216e057cb7d6b908c6","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import ddt"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystoneauth1 import adapter"},{"line_number":19,"context_line":"import mock"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_39973b48","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":10},"in_reply_to":"7faddb67_d71aae6d","updated":"2019-08-14 16:04:11.000000000","message":"Done","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8599e38790899fff4146e943f966e0af3cfea78f","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import ddt"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystoneauth1 import adapter"},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":"import requests"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from openstack.tests.unit import base"},{"line_number":23,"context_line":"from openstack.tests.unit.nfv_orchestration.v1 import uuidsentinel"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_5720fe9b","line":20,"range":{"start_line":18,"start_character":0,"end_line":20,"end_character":15},"updated":"2019-08-10 13:09:07.000000000","message":"We have an infrastructure already set up for using requests_mock to mock out http interactions and then verify that they work. Search the code for self.register_uris for examples of this (there is some other code in sdk doing other things, so sorry if you followed any patterns there - those all eventually want to be converted. So let\u0027s not add new code that doesn\u0027t use the requests_mock infrastructure. What you\u0027re doing here should be generally easy to convert.","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"0bf9931f49e715ab6ecf33216e057cb7d6b908c6","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import ddt"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystoneauth1 import adapter"},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":"import requests"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from openstack.tests.unit import base"},{"line_number":23,"context_line":"from openstack.tests.unit.nfv_orchestration.v1 import uuidsentinel"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_f98e832c","line":20,"range":{"start_line":18,"start_character":0,"end_line":20,"end_character":15},"in_reply_to":"7faddb67_5720fe9b","updated":"2019-08-14 16:04:11.000000000","message":"Done","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8599e38790899fff4146e943f966e0af3cfea78f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"BASE_PATH \u003d vnf_package.VnfPackage().base_path"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class FakeResponse(object):"},{"line_number":73,"context_line":"    def __init__(self, response, status_code\u003d200, headers\u003dNone, reason\u003dNone):"},{"line_number":74,"context_line":"        self.body \u003d response"},{"line_number":75,"context_line":"        self.content \u003d response"},{"line_number":76,"context_line":"        self.text \u003d response"},{"line_number":77,"context_line":"        self.status_code \u003d status_code"},{"line_number":78,"context_line":"        headers \u003d headers if headers else {\u0027content-type\u0027: \u0027application/json\u0027}"},{"line_number":79,"context_line":"        self.headers \u003d requests.structures.CaseInsensitiveDict(headers)"},{"line_number":80,"context_line":"        if reason:"},{"line_number":81,"context_line":"            self.reason \u003d reason"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def json(self):"},{"line_number":84,"context_line":"        return self.body"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"@ddt.ddt"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_7723baa8","line":84,"range":{"start_line":72,"start_character":0,"end_line":84,"end_character":24},"updated":"2019-08-10 13:09:07.000000000","message":"can go away with r_m","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"0bf9931f49e715ab6ecf33216e057cb7d6b908c6","unresolved":false,"context_lines":[{"line_number":69,"context_line":"BASE_PATH \u003d vnf_package.VnfPackage().base_path"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class FakeResponse(object):"},{"line_number":73,"context_line":"    def __init__(self, response, status_code\u003d200, headers\u003dNone, reason\u003dNone):"},{"line_number":74,"context_line":"        self.body \u003d response"},{"line_number":75,"context_line":"        self.content \u003d response"},{"line_number":76,"context_line":"        self.text \u003d response"},{"line_number":77,"context_line":"        self.status_code \u003d status_code"},{"line_number":78,"context_line":"        headers \u003d headers if headers else {\u0027content-type\u0027: \u0027application/json\u0027}"},{"line_number":79,"context_line":"        self.headers \u003d requests.structures.CaseInsensitiveDict(headers)"},{"line_number":80,"context_line":"        if reason:"},{"line_number":81,"context_line":"            self.reason \u003d reason"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def json(self):"},{"line_number":84,"context_line":"        return self.body"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"@ddt.ddt"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_997f4f16","line":84,"range":{"start_line":72,"start_character":0,"end_line":84,"end_character":24},"in_reply_to":"7faddb67_7723baa8","updated":"2019-08-14 16:04:11.000000000","message":"Done","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8599e38790899fff4146e943f966e0af3cfea78f","unresolved":false,"context_lines":[{"line_number":87,"context_line":"@ddt.ddt"},{"line_number":88,"context_line":"class TestVnfPackage(base.TestCase):"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def setUp(self):"},{"line_number":91,"context_line":"        super(TestVnfPackage, self).setUp()"},{"line_number":92,"context_line":"        self.resp \u003d mock.Mock()"},{"line_number":93,"context_line":"        self.resp.body \u003d None"},{"line_number":94,"context_line":"        self.resp.json \u003d mock.Mock(return_value\u003dself.resp.body)"},{"line_number":95,"context_line":"        self.sess \u003d mock.Mock(spec\u003dadapter.Adapter)"},{"line_number":96,"context_line":"        self.sess.post \u003d mock.Mock(return_value\u003dself.resp)"},{"line_number":97,"context_line":"        self.sess.put \u003d mock.Mock(return_value\u003dFakeResponse({}))"},{"line_number":98,"context_line":"        self.sess.delete \u003d mock.Mock(return_value\u003dFakeResponse({}))"},{"line_number":99,"context_line":"        self.sess.get \u003d mock.Mock(return_value\u003dFakeResponse({}))"},{"line_number":100,"context_line":"        self.sess.log \u003d _log.setup_logging(\u0027openstack\u0027)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def test_basic(self):"},{"line_number":103,"context_line":"        sot \u003d vnf_package.VnfPackage()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_173a86cc","line":100,"range":{"start_line":90,"start_character":0,"end_line":100,"end_character":55},"updated":"2019-08-10 13:09:07.000000000","message":"can go away with r_m","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"0bf9931f49e715ab6ecf33216e057cb7d6b908c6","unresolved":false,"context_lines":[{"line_number":87,"context_line":"@ddt.ddt"},{"line_number":88,"context_line":"class TestVnfPackage(base.TestCase):"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def setUp(self):"},{"line_number":91,"context_line":"        super(TestVnfPackage, self).setUp()"},{"line_number":92,"context_line":"        self.resp \u003d mock.Mock()"},{"line_number":93,"context_line":"        self.resp.body \u003d None"},{"line_number":94,"context_line":"        self.resp.json \u003d mock.Mock(return_value\u003dself.resp.body)"},{"line_number":95,"context_line":"        self.sess \u003d mock.Mock(spec\u003dadapter.Adapter)"},{"line_number":96,"context_line":"        self.sess.post \u003d mock.Mock(return_value\u003dself.resp)"},{"line_number":97,"context_line":"        self.sess.put \u003d mock.Mock(return_value\u003dFakeResponse({}))"},{"line_number":98,"context_line":"        self.sess.delete \u003d mock.Mock(return_value\u003dFakeResponse({}))"},{"line_number":99,"context_line":"        self.sess.get \u003d mock.Mock(return_value\u003dFakeResponse({}))"},{"line_number":100,"context_line":"        self.sess.log \u003d _log.setup_logging(\u0027openstack\u0027)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def test_basic(self):"},{"line_number":103,"context_line":"        sot \u003d vnf_package.VnfPackage()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_b9848b0c","line":100,"range":{"start_line":90,"start_character":0,"end_line":100,"end_character":55},"in_reply_to":"7faddb67_173a86cc","updated":"2019-08-14 16:04:11.000000000","message":"Done","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8599e38790899fff4146e943f966e0af3cfea78f","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        sess \u003d mock.Mock()"},{"line_number":173,"context_line":"        sot \u003d vnf_package.VnfPackage(**VNF_PACKAGE)"},{"line_number":174,"context_line":"        res \u003d sot.create(sess)"},{"line_number":175,"context_line":"        mock_create.assert_called_once_with(sess, prepend_key\u003dFalse,"},{"line_number":176,"context_line":"                                            base_path\u003dNone)"},{"line_number":177,"context_line":"        self.assertEqual(mock_create.return_value, res)"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_d7338ef5","line":175,"updated":"2019-08-10 13:09:07.000000000","message":"This would be better with a register_uris and a self.assert_calls() after. That way we can show that all of the right REST calls are made in the right order.","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"0bf9931f49e715ab6ecf33216e057cb7d6b908c6","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        sess \u003d mock.Mock()"},{"line_number":173,"context_line":"        sot \u003d vnf_package.VnfPackage(**VNF_PACKAGE)"},{"line_number":174,"context_line":"        res \u003d sot.create(sess)"},{"line_number":175,"context_line":"        mock_create.assert_called_once_with(sess, prepend_key\u003dFalse,"},{"line_number":176,"context_line":"                                            base_path\u003dNone)"},{"line_number":177,"context_line":"        self.assertEqual(mock_create.return_value, res)"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_597d571a","line":175,"in_reply_to":"7faddb67_d7338ef5","updated":"2019-08-14 16:04:11.000000000","message":"Done","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8599e38790899fff4146e943f966e0af3cfea78f","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        sot \u003d vnf_package.VnfPackage(**VNF_PACKAGE)"},{"line_number":200,"context_line":"        attrs \u003d {\u0027upload-method\u0027: \"direct-file\","},{"line_number":201,"context_line":"                 \u0027path\u0027: \u0027./openstack/tests/unit/nfv_orchestration/\u0027"},{"line_number":202,"context_line":"                 \u0027v1/fake_data/sample_vnf_package.zip\u0027,"},{"line_number":203,"context_line":"                 }"},{"line_number":204,"context_line":"        file_path \u003d (\u0027./openstack/tests/unit/nfv_orchestration/v1/fake_data\u0027"},{"line_number":205,"context_line":"                     \u0027/sample_vnf_package.zip\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_373a22c4","line":202,"updated":"2019-08-10 13:09:07.000000000","message":"As mentioned elsewhere, we don\u0027t need to use a real zipfile for the unittest - that\u0027ll just read things into ram and then discard them. Any file with a few bytes will do for this test. See self.imagefile in openstack/tests/unit/cloud/test_image.py for an example of this.","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"0bf9931f49e715ab6ecf33216e057cb7d6b908c6","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        sot \u003d vnf_package.VnfPackage(**VNF_PACKAGE)"},{"line_number":200,"context_line":"        attrs \u003d {\u0027upload-method\u0027: \"direct-file\","},{"line_number":201,"context_line":"                 \u0027path\u0027: \u0027./openstack/tests/unit/nfv_orchestration/\u0027"},{"line_number":202,"context_line":"                 \u0027v1/fake_data/sample_vnf_package.zip\u0027,"},{"line_number":203,"context_line":"                 }"},{"line_number":204,"context_line":"        file_path \u003d (\u0027./openstack/tests/unit/nfv_orchestration/v1/fake_data\u0027"},{"line_number":205,"context_line":"                     \u0027/sample_vnf_package.zip\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_39709b40","line":202,"in_reply_to":"7faddb67_373a22c4","updated":"2019-08-14 16:04:11.000000000","message":"Done","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"}],"openstack/tests/unit/nfv_orchestration/v1/uuidsentinel.py":[{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8599e38790899fff4146e943f966e0af3cfea78f","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class UUIDSentinels(object):"},{"line_number":20,"context_line":"    def __init__(self):"},{"line_number":21,"context_line":"        from oslo_utils import uuidutils"},{"line_number":22,"context_line":"        self._uuid_module \u003d uuidutils"},{"line_number":23,"context_line":"        self._sentinels \u003d {}"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_b777f29f","line":21,"range":{"start_line":21,"start_character":8,"end_line":21,"end_character":40},"updated":"2019-08-10 13:09:07.000000000","message":"We don\u0027t need to add oslo_utils, even as a test-only library, just to generate a uuid.\n\n  import uuid\n\n  self._sentinels[name] \u003d uuid.uuid4().hex","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"0bf9931f49e715ab6ecf33216e057cb7d6b908c6","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class UUIDSentinels(object):"},{"line_number":20,"context_line":"    def __init__(self):"},{"line_number":21,"context_line":"        from oslo_utils import uuidutils"},{"line_number":22,"context_line":"        self._uuid_module \u003d uuidutils"},{"line_number":23,"context_line":"        self._sentinels \u003d {}"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_4ffcb3b4","line":21,"range":{"start_line":21,"start_character":8,"end_line":21,"end_character":40},"in_reply_to":"7faddb67_b777f29f","updated":"2019-08-14 16:04:11.000000000","message":"Done","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8599e38790899fff4146e943f966e0af3cfea78f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        return self._sentinels[name]"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"sys.modules[__name__] \u003d UUIDSentinels()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_376302e0","line":33,"range":{"start_line":33,"start_character":0,"end_line":33,"end_character":21},"updated":"2019-08-10 13:09:07.000000000","message":"This is clever, but let\u0027s not inject things into sys.modules. It has the potential to be confusing when reading the code elsewhere.\n\nhow about:\n\n  sentinel \u003d UUIDSentinels()\n\nand then in test_vnf_package.py, just:\n\nFAKE_VNF_PACKAGE_ID \u003d uuidsentinel.sentinel.vnf_package_id","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"0bf9931f49e715ab6ecf33216e057cb7d6b908c6","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        return self._sentinels[name]"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"sys.modules[__name__] \u003d UUIDSentinels()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_2f0137b0","line":33,"range":{"start_line":33,"start_character":0,"end_line":33,"end_character":21},"in_reply_to":"7faddb67_376302e0","updated":"2019-08-14 16:04:11.000000000","message":"Done","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"}],"requirements.txt":[{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8599e38790899fff4146e943f966e0af3cfea78f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"futures\u003e\u003d3.0.0;python_version\u003d\u003d\u00272.7\u0027 or python_version\u003d\u003d\u00272.6\u0027 # BSD"},{"line_number":18,"context_line":"iso8601\u003e\u003d0.1.11 # MIT"},{"line_number":19,"context_line":"netifaces\u003e\u003d0.10.4 # MIT"},{"line_number":20,"context_line":"oslo.service!\u003d1.28.1,\u003e\u003d1.24.0 # Apache-2.0"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"dogpile.cache\u003e\u003d0.6.2 # BSD"},{"line_number":23,"context_line":"cryptography\u003e\u003d2.1 # BSD/Apache-2.0"}],"source_content_type":"text/plain","patch_set":3,"id":"7faddb67_f4000805","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":42},"updated":"2019-08-10 13:09:07.000000000","message":"Please no oslo libraries added to the requirements. But looking at the patch, it doesn\u0027t look like this is used anywhere but tests, so it should be fine in test-requirements.\n\nAlso - we already have code that loops waiting for things, so I don\u0027t think we need to pull in oslo.service for that.","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"0bf9931f49e715ab6ecf33216e057cb7d6b908c6","unresolved":false,"context_lines":[{"line_number":17,"context_line":"futures\u003e\u003d3.0.0;python_version\u003d\u003d\u00272.7\u0027 or python_version\u003d\u003d\u00272.6\u0027 # BSD"},{"line_number":18,"context_line":"iso8601\u003e\u003d0.1.11 # MIT"},{"line_number":19,"context_line":"netifaces\u003e\u003d0.10.4 # MIT"},{"line_number":20,"context_line":"oslo.service!\u003d1.28.1,\u003e\u003d1.24.0 # Apache-2.0"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"dogpile.cache\u003e\u003d0.6.2 # BSD"},{"line_number":23,"context_line":"cryptography\u003e\u003d2.1 # BSD/Apache-2.0"}],"source_content_type":"text/plain","patch_set":3,"id":"7faddb67_39a5fb9f","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":42},"in_reply_to":"7faddb67_f4000805","updated":"2019-08-14 16:04:11.000000000","message":"Done","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"}],"test-requirements.txt":[{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8599e38790899fff4146e943f966e0af3cfea78f","unresolved":false,"context_lines":[{"line_number":12,"context_line":"prometheus-client\u003e\u003d0.4.2 # Apache-2.0"},{"line_number":13,"context_line":"python-subunit\u003e\u003d1.0.0 # Apache-2.0/BSD"},{"line_number":14,"context_line":"oslo.config\u003e\u003d6.1.0 # Apache-2.0"},{"line_number":15,"context_line":"oslo.utils\u003e\u003d3.33.0 # Apache-2.0"},{"line_number":16,"context_line":"oslotest\u003e\u003d3.2.0 # Apache-2.0"},{"line_number":17,"context_line":"requests-mock\u003e\u003d1.2.0 # Apache-2.0"},{"line_number":18,"context_line":"statsd\u003e\u003d3.3.0"}],"source_content_type":"text/plain","patch_set":3,"id":"7faddb67_d7614ed5","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":31},"updated":"2019-08-10 13:09:07.000000000","message":"As mentioned elsewhere, let\u0027s not add this.","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"0bf9931f49e715ab6ecf33216e057cb7d6b908c6","unresolved":false,"context_lines":[{"line_number":12,"context_line":"prometheus-client\u003e\u003d0.4.2 # Apache-2.0"},{"line_number":13,"context_line":"python-subunit\u003e\u003d1.0.0 # Apache-2.0/BSD"},{"line_number":14,"context_line":"oslo.config\u003e\u003d6.1.0 # Apache-2.0"},{"line_number":15,"context_line":"oslo.utils\u003e\u003d3.33.0 # Apache-2.0"},{"line_number":16,"context_line":"oslotest\u003e\u003d3.2.0 # Apache-2.0"},{"line_number":17,"context_line":"requests-mock\u003e\u003d1.2.0 # Apache-2.0"},{"line_number":18,"context_line":"statsd\u003e\u003d3.3.0"}],"source_content_type":"text/plain","patch_set":3,"id":"7faddb67_79c85354","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":31},"in_reply_to":"7faddb67_d7614ed5","updated":"2019-08-14 16:04:11.000000000","message":"Done","commit_id":"c3ece3a4af9acfa92d9fe0259ef6513ae552e4cd"}]}
