)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"8ee2b5893044836a98e664371b2d10a8935d253d","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Fix some api calls based on the placement api ref."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"TODO:"},{"line_number":15,"context_line":"- Check if all the methods are in place with this patch, and if all"},{"line_number":16,"context_line":"calls are really needed."},{"line_number":17,"context_line":"- Check the placement api version that is necessary."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"df7087c5_cbe83e7d","line":15,"updated":"2018-03-15 14:47:43.000000000","message":"Does this mean the patch is still a work in progress?","commit_id":"9d302c2ae88cc2e1c930114f5f1fb39513cd573f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bb81f8e09d9a701f28687792b7cf952754186794","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add placement calls for bandwith resource provider"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add placement that are necessary to report the necessary resource"},{"line_number":10,"context_line":"providers, traits, resource classes and inventories for bandwidth"},{"line_number":11,"context_line":"allocation in placement."},{"line_number":12,"context_line":"Fix some api calls based on the placement api ref."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"df7087c5_98681522","line":9,"range":{"start_line":9,"start_character":4,"end_line":9,"end_character":13},"updated":"2018-03-19 14:40:28.000000000","message":"placement calls?","commit_id":"f350b4ae65da6182844b0887b2d0912a87dc5c22"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"37051c76f20ef2b81254bb9088ae8c4c69207263","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add placement calls for bandwith resource provider"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add placement that are necessary to report the necessary resource"},{"line_number":10,"context_line":"providers, traits, resource classes and inventories for bandwidth"},{"line_number":11,"context_line":"allocation in placement."},{"line_number":12,"context_line":"Fix some api calls based on the placement api ref."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"df7087c5_416eea96","line":9,"range":{"start_line":9,"start_character":4,"end_line":9,"end_character":13},"in_reply_to":"df7087c5_98681522","updated":"2018-03-20 13:27:50.000000000","message":"Done","commit_id":"f350b4ae65da6182844b0887b2d0912a87dc5c22"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bb81f8e09d9a701f28687792b7cf952754186794","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Add placement that are necessary to report the necessary resource"},{"line_number":10,"context_line":"providers, traits, resource classes and inventories for bandwidth"},{"line_number":11,"context_line":"allocation in placement."},{"line_number":12,"context_line":"Fix some api calls based on the placement api ref."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"TODO:"},{"line_number":15,"context_line":"- Check if all the methods are in place with this patch, and if all"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"df7087c5_d8bbed6f","line":12,"updated":"2018-03-19 14:40:28.000000000","message":"maybe You could split this patch and propose those \"fix some api calls\" into separate patch","commit_id":"f350b4ae65da6182844b0887b2d0912a87dc5c22"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"37051c76f20ef2b81254bb9088ae8c4c69207263","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Add placement that are necessary to report the necessary resource"},{"line_number":10,"context_line":"providers, traits, resource classes and inventories for bandwidth"},{"line_number":11,"context_line":"allocation in placement."},{"line_number":12,"context_line":"Fix some api calls based on the placement api ref."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"TODO:"},{"line_number":15,"context_line":"- Check if all the methods are in place with this patch, and if all"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"df7087c5_e1013eb1","line":12,"in_reply_to":"df7087c5_d8bbed6f","updated":"2018-03-20 13:27:50.000000000","message":"I split the \"fix\" part to another patch on which this one is depend.","commit_id":"f350b4ae65da6182844b0887b2d0912a87dc5c22"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bb81f8e09d9a701f28687792b7cf952754186794","unresolved":false,"context_lines":[{"line_number":14,"context_line":"TODO:"},{"line_number":15,"context_line":"- Check if all the methods are in place with this patch, and if all"},{"line_number":16,"context_line":"calls are really needed."},{"line_number":17,"context_line":"- Check the placement api version that is necessary."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Related-Bug: #1578989"},{"line_number":20,"context_line":"Change-Id: Ie3a14e5461d2d14ee77e1bd101943b7c28cf86f1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"df7087c5_9851f565","line":17,"updated":"2018-03-19 14:40:28.000000000","message":"those todos should be done in this patch or in some new one?","commit_id":"f350b4ae65da6182844b0887b2d0912a87dc5c22"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"37051c76f20ef2b81254bb9088ae8c4c69207263","unresolved":false,"context_lines":[{"line_number":14,"context_line":"TODO:"},{"line_number":15,"context_line":"- Check if all the methods are in place with this patch, and if all"},{"line_number":16,"context_line":"calls are really needed."},{"line_number":17,"context_line":"- Check the placement api version that is necessary."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Related-Bug: #1578989"},{"line_number":20,"context_line":"Change-Id: Ie3a14e5461d2d14ee77e1bd101943b7c28cf86f1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"df7087c5_e11a9e15","line":17,"in_reply_to":"df7087c5_9851f565","updated":"2018-03-20 13:27:50.000000000","message":"I removed the todos but I will check with gibi if the calls in the client are enough now for the bandwidth, and if the current placement api version is ok or not.","commit_id":"f350b4ae65da6182844b0887b2d0912a87dc5c22"}],"neutron_lib/clients/placement.py":[{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"5d993d614268b489d36c4f7212608ed2ba31964d","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                resource_provider\u003dresource_provider_uuid)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    @_check_placement_api_available"},{"line_number":220,"context_line":"    def update_resource_provider_inventory("},{"line_number":221,"context_line":"            self, resource_provider_uuid, resource_class, inventory):"},{"line_number":222,"context_line":"        \"\"\"Update resource provider inventory."},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_f706851c","line":220,"range":{"start_line":220,"start_character":8,"end_line":220,"end_character":42},"updated":"2018-03-29 16:03:40.000000000","message":"Should we have a \u0027resource_provider_generation\u0027 parameter in here as line #398","commit_id":"7924d0910ba5152a32fd6c8fe15cd18191c44cb0"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"4502d2b83daf0b699e2be3051effc8242a0f98cb","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                resource_provider\u003dresource_provider_uuid)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    @_check_placement_api_available"},{"line_number":220,"context_line":"    def update_resource_provider_inventory("},{"line_number":221,"context_line":"            self, resource_provider_uuid, resource_class, inventory):"},{"line_number":222,"context_line":"        \"\"\"Update resource provider inventory."},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_84443c1d","line":220,"range":{"start_line":220,"start_character":8,"end_line":220,"end_character":42},"in_reply_to":"bf659307_f706851c","updated":"2018-04-05 12:34:14.000000000","message":"I moved this method to the parent patch (https://review.openstack.org/554532) as I realized that there was an update_inventory method in placement client and  I renamed that one to update_resource_provider_inventory. So I added generation parameter in that patch.","commit_id":"7924d0910ba5152a32fd6c8fe15cd18191c44cb0"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"5d993d614268b489d36c4f7212608ed2ba31964d","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            if (e.details and \"No resource provider with uuid\" in e.details):"},{"line_number":239,"context_line":"                raise n_exc.PlacementResourceProviderNotFound("},{"line_number":240,"context_line":"                    resource_provider\u003dresource_provider_uuid)"},{"line_number":241,"context_line":"            else:"},{"line_number":242,"context_line":"                raise n_exc.PlacementResourceClassNotFound("},{"line_number":243,"context_line":"                    resource_class\u003dresource_class)"},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_44c9c123","line":241,"range":{"start_line":241,"start_character":12,"end_line":241,"end_character":16},"updated":"2018-03-29 16:03:40.000000000","message":"Need to check e.details in here as well?","commit_id":"7924d0910ba5152a32fd6c8fe15cd18191c44cb0"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"4502d2b83daf0b699e2be3051effc8242a0f98cb","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            if (e.details and \"No resource provider with uuid\" in e.details):"},{"line_number":239,"context_line":"                raise n_exc.PlacementResourceProviderNotFound("},{"line_number":240,"context_line":"                    resource_provider\u003dresource_provider_uuid)"},{"line_number":241,"context_line":"            else:"},{"line_number":242,"context_line":"                raise n_exc.PlacementResourceClassNotFound("},{"line_number":243,"context_line":"                    resource_class\u003dresource_class)"},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_e452d8de","line":241,"range":{"start_line":241,"start_character":12,"end_line":241,"end_character":16},"in_reply_to":"bf659307_44c9c123","updated":"2018-04-05 12:34:14.000000000","message":"Actually by my test there is no details property.","commit_id":"7924d0910ba5152a32fd6c8fe15cd18191c44cb0"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"5d993d614268b489d36c4f7212608ed2ba31964d","unresolved":false,"context_lines":[{"line_number":377,"context_line":"        \"\"\""},{"line_number":378,"context_line":"        url \u003d \u0027/traits/%s\u0027 % (name)"},{"line_number":379,"context_line":"        try:"},{"line_number":380,"context_line":"            return self._get("},{"line_number":381,"context_line":"                url, headers\u003d{API_VERSION_REQUEST_HEADER:"},{"line_number":382,"context_line":"                              self._openstack_api_version}).json()"},{"line_number":383,"context_line":"        except ks_exc.NotFound:"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_a4df7dd4","line":380,"range":{"start_line":380,"start_character":12,"end_line":380,"end_character":18},"updated":"2018-03-29 16:03:40.000000000","message":"According to the placement api-ref (https://developer.openstack.org/api-ref/placement/#show-traits), it seems there is nothing to return in here.","commit_id":"7924d0910ba5152a32fd6c8fe15cd18191c44cb0"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"4502d2b83daf0b699e2be3051effc8242a0f98cb","unresolved":false,"context_lines":[{"line_number":377,"context_line":"        \"\"\""},{"line_number":378,"context_line":"        url \u003d \u0027/traits/%s\u0027 % (name)"},{"line_number":379,"context_line":"        try:"},{"line_number":380,"context_line":"            return self._get("},{"line_number":381,"context_line":"                url, headers\u003d{API_VERSION_REQUEST_HEADER:"},{"line_number":382,"context_line":"                              self._openstack_api_version}).json()"},{"line_number":383,"context_line":"        except ks_exc.NotFound:"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_c46314b1","line":380,"range":{"start_line":380,"start_character":12,"end_line":380,"end_character":18},"in_reply_to":"bf659307_a4df7dd4","updated":"2018-04-05 12:34:14.000000000","message":"Good catch, thanks.","commit_id":"7924d0910ba5152a32fd6c8fe15cd18191c44cb0"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"5d993d614268b489d36c4f7212608ed2ba31964d","unresolved":false,"context_lines":[{"line_number":397,"context_line":"    @_check_placement_api_available"},{"line_number":398,"context_line":"    def update_resource_provider_traits("},{"line_number":399,"context_line":"            self, resource_provider_uuid, traits,"},{"line_number":400,"context_line":"            resource_provider_generation\u003d0):"},{"line_number":401,"context_line":"        \"\"\"Update resource provider traits"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        :param resource_provider_uuid: UUID of the resource provider for which"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_37395da3","line":400,"range":{"start_line":400,"start_character":41,"end_line":400,"end_character":42},"updated":"2018-03-29 16:03:40.000000000","message":"I don\u0027t feel we should provide a default value for generation. \u00270\u0027 is not a good default though.","commit_id":"7924d0910ba5152a32fd6c8fe15cd18191c44cb0"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"4502d2b83daf0b699e2be3051effc8242a0f98cb","unresolved":false,"context_lines":[{"line_number":397,"context_line":"    @_check_placement_api_available"},{"line_number":398,"context_line":"    def update_resource_provider_traits("},{"line_number":399,"context_line":"            self, resource_provider_uuid, traits,"},{"line_number":400,"context_line":"            resource_provider_generation\u003d0):"},{"line_number":401,"context_line":"        \"\"\"Update resource provider traits"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        :param resource_provider_uuid: UUID of the resource provider for which"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_2472107e","line":400,"range":{"start_line":400,"start_character":41,"end_line":400,"end_character":42},"in_reply_to":"bf659307_37395da3","updated":"2018-04-05 12:34:14.000000000","message":"Done","commit_id":"7924d0910ba5152a32fd6c8fe15cd18191c44cb0"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"1be01189fc48339df5f81d9f8677a56368238c6a","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        \"\"\"List all traits.\"\"\""},{"line_number":373,"context_line":"        url \u003d \u0027/traits\u0027"},{"line_number":374,"context_line":"        return self._get(url, headers\u003d{API_VERSION_REQUEST_HEADER:"},{"line_number":375,"context_line":"                                       self._openstack_api_version},"},{"line_number":376,"context_line":"                         ).json()"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    @_check_placement_api_available"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_3bef6d88","line":375,"range":{"start_line":375,"start_character":44,"end_line":375,"end_character":66},"updated":"2018-04-06 21:27:27.000000000","message":"It looks this is duplicated in several places. Could we place the logic to the _get() method? In particular, the _get() method can check if the caller provide an API version and populate the header with default api version or the custom api version provided by caller.","commit_id":"687f0085b3f20838214bdb75314c66905d4a8276"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"3198c808b24335b57238b50d137e36b69e3b2e7a","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        \"\"\"List all traits.\"\"\""},{"line_number":373,"context_line":"        url \u003d \u0027/traits\u0027"},{"line_number":374,"context_line":"        return self._get(url, headers\u003d{API_VERSION_REQUEST_HEADER:"},{"line_number":375,"context_line":"                                       self._openstack_api_version},"},{"line_number":376,"context_line":"                         ).json()"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    @_check_placement_api_available"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_cb9bb9c6","line":375,"range":{"start_line":375,"start_character":44,"end_line":375,"end_character":66},"in_reply_to":"bf659307_0eff9101","updated":"2018-04-10 22:41:48.000000000","message":"Thanks for addressing it. I don\u0027t have strong opinion about whether to separate the patches.","commit_id":"687f0085b3f20838214bdb75314c66905d4a8276"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"cfab0c02031b303d1db26de00859e263dea54169","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        \"\"\"List all traits.\"\"\""},{"line_number":373,"context_line":"        url \u003d \u0027/traits\u0027"},{"line_number":374,"context_line":"        return self._get(url, headers\u003d{API_VERSION_REQUEST_HEADER:"},{"line_number":375,"context_line":"                                       self._openstack_api_version},"},{"line_number":376,"context_line":"                         ).json()"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    @_check_placement_api_available"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_0eff9101","line":375,"range":{"start_line":375,"start_character":44,"end_line":375,"end_character":66},"in_reply_to":"bf659307_3bef6d88","updated":"2018-04-10 11:24:05.000000000","message":"I added a headers check to _post, _get, and _put methods, please check if this is how you like it.\nPlease notice that I had to change the tests as well, and change methods that were not touched originally by this patch.\nPerhaps would be better to separate this into 2 patches:\n1.) to move the header stuff to _get, _post and _put methods, as a small refactoring change.\n2.) on top of the previous patch add the new methods for bandwidth aware scheduling.","commit_id":"687f0085b3f20838214bdb75314c66905d4a8276"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"1be01189fc48339df5f81d9f8677a56368238c6a","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        url \u003d \u0027/traits/%s\u0027 % (name)"},{"line_number":400,"context_line":"        return self._put("},{"line_number":401,"context_line":"            url, None, headers\u003d{API_VERSION_REQUEST_HEADER:"},{"line_number":402,"context_line":"                                self._openstack_api_version})"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    @_check_placement_api_available"},{"line_number":405,"context_line":"    def update_resource_provider_traits("}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_bb87fdb6","line":402,"range":{"start_line":402,"start_character":37,"end_line":402,"end_character":59},"updated":"2018-04-06 21:27:27.000000000","message":"Ditto. Can we move the header population inside the _put() method? If this is possible, we don\u0027t need to specify the api version in every calls.","commit_id":"687f0085b3f20838214bdb75314c66905d4a8276"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"cfab0c02031b303d1db26de00859e263dea54169","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        url \u003d \u0027/traits/%s\u0027 % (name)"},{"line_number":400,"context_line":"        return self._put("},{"line_number":401,"context_line":"            url, None, headers\u003d{API_VERSION_REQUEST_HEADER:"},{"line_number":402,"context_line":"                                self._openstack_api_version})"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    @_check_placement_api_available"},{"line_number":405,"context_line":"    def update_resource_provider_traits("}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_ee0b3d21","line":402,"range":{"start_line":402,"start_character":37,"end_line":402,"end_character":59},"in_reply_to":"bf659307_bb87fdb6","updated":"2018-04-10 11:24:05.000000000","message":"Done.\nSee my comment above.","commit_id":"687f0085b3f20838214bdb75314c66905d4a8276"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cd488191f96bb17a0be27d891c4bc1b870300607","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    def _get(self, url, **kwargs):"},{"line_number":96,"context_line":"        if \u0027headers\u0027 not in kwargs:"},{"line_number":97,"context_line":"            kwargs[\u0027headers\u0027] \u003d {API_VERSION_REQUEST_HEADER:"},{"line_number":98,"context_line":"                                 self._openstack_api_version}"},{"line_number":99,"context_line":"        return self._client.get(url, endpoint_filter\u003dself._ks_filter,"},{"line_number":100,"context_line":"                                **kwargs)"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_e5f0216a","line":98,"updated":"2018-04-11 07:39:17.000000000","message":"I assume that this header is required always, right?\nIf so I would propose something like:\n\n    headers \u003d kwargs.get(\"headers\", {})\n    if API_VERSION_REQUEST_HEADER not in headers:\n        headers[API_VERSION_REQUEST_HEADER] \u003d self._openstack_api_version\n\nThanks that it should add such required header even if in kwargs there will be already other headers passed. What You think about that?","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d6f6cf79d0695df4197ac4bf43713022ecfb858b","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    def _get(self, url, **kwargs):"},{"line_number":96,"context_line":"        if \u0027headers\u0027 not in kwargs:"},{"line_number":97,"context_line":"            kwargs[\u0027headers\u0027] \u003d {API_VERSION_REQUEST_HEADER:"},{"line_number":98,"context_line":"                                 self._openstack_api_version}"},{"line_number":99,"context_line":"        return self._client.get(url, endpoint_filter\u003dself._ks_filter,"},{"line_number":100,"context_line":"                                **kwargs)"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_ba41c2a8","line":98,"in_reply_to":"bf659307_e5f0216a","updated":"2018-04-12 08:58:08.000000000","message":"+1","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    def _get(self, url, **kwargs):"},{"line_number":96,"context_line":"        if \u0027headers\u0027 not in kwargs:"},{"line_number":97,"context_line":"            kwargs[\u0027headers\u0027] \u003d {API_VERSION_REQUEST_HEADER:"},{"line_number":98,"context_line":"                                 self._openstack_api_version}"},{"line_number":99,"context_line":"        return self._client.get(url, endpoint_filter\u003dself._ks_filter,"},{"line_number":100,"context_line":"                                **kwargs)"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_3f4d76c3","line":98,"in_reply_to":"bf659307_e5f0216a","updated":"2018-04-13 15:05:08.000000000","message":"\u003e I assume that this header is required always, right?\n \u003e If so I would propose something like:\n \u003e \n \u003e headers \u003d kwargs.get(\"headers\", {})\n \u003e if API_VERSION_REQUEST_HEADER not in headers:\n \u003e headers[API_VERSION_REQUEST_HEADER] \u003d self._openstack_api_version\n \u003e \n \u003e Thanks that it should add such required header even if in kwargs\n \u003e there will be already other headers passed. What You think about\n \u003e that?\n\nTo be sure that I do not overwrite the existing header it is more difficult, I will check if there is some simpler way for this.","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d6f6cf79d0695df4197ac4bf43713022ecfb858b","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        return self._client.put(url, json\u003ddata,"},{"line_number":114,"context_line":"                                endpoint_filter\u003dself._ks_filter, **kwargs)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def _delete(self, url, **kwargs):"},{"line_number":117,"context_line":"        return self._client.delete(url, endpoint_filter\u003dself._ks_filter,"},{"line_number":118,"context_line":"                                   **kwargs)"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_baec62bb","line":116,"updated":"2018-04-12 08:58:08.000000000","message":"It\u0027d be more consistent to send the same header in delete too.","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        return self._client.put(url, json\u003ddata,"},{"line_number":114,"context_line":"                                endpoint_filter\u003dself._ks_filter, **kwargs)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def _delete(self, url, **kwargs):"},{"line_number":117,"context_line":"        return self._client.delete(url, endpoint_filter\u003dself._ks_filter,"},{"line_number":118,"context_line":"                                   **kwargs)"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_1f67524f","line":116,"in_reply_to":"bf659307_baec62bb","updated":"2018-04-13 15:05:08.000000000","message":"Done","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d6f6cf79d0695df4197ac4bf43713022ecfb858b","unresolved":false,"context_lines":[{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    @_check_placement_api_available"},{"line_number":240,"context_line":"    def delete_resource_provider_inventories(self, resource_provider_uuid):"},{"line_number":241,"context_line":"        \"\"\"Delete all inventory for a resource provider."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        :param resource_provider_uuid: UUID of the resource provider."},{"line_number":244,"context_line":"        :raises PlacementResourceProviderNotFound: If the resource provider"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_faae5a2c","line":241,"range":{"start_line":241,"start_character":11,"end_line":241,"end_character":56},"updated":"2018-04-12 08:58:08.000000000","message":"nit: Delete inventories of all resource classes for a resource provider.","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    @_check_placement_api_available"},{"line_number":240,"context_line":"    def delete_resource_provider_inventories(self, resource_provider_uuid):"},{"line_number":241,"context_line":"        \"\"\"Delete all inventory for a resource provider."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        :param resource_provider_uuid: UUID of the resource provider."},{"line_number":244,"context_line":"        :raises PlacementResourceProviderNotFound: If the resource provider"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_bfb50680","line":241,"range":{"start_line":241,"start_character":11,"end_line":241,"end_character":56},"in_reply_to":"bf659307_faae5a2c","updated":"2018-04-13 15:05:08.000000000","message":"to be on the safe side I copied here the text from the api ref.","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d6f6cf79d0695df4197ac4bf43713022ecfb858b","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    @_check_placement_api_available"},{"line_number":259,"context_line":"    def delete_resource_provider_inventory(self, resource_provider_uuid,"},{"line_number":260,"context_line":"                                           resource_class):"},{"line_number":261,"context_line":"        \"\"\"Delete resource provider inventory"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        :param resource_provider_uuid: UUID of the resource provider."},{"line_number":264,"context_line":"        :param resource_class: The name of the resource class"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_da76f6d8","line":261,"range":{"start_line":261,"start_character":11,"end_line":261,"end_character":45},"updated":"2018-04-12 08:58:08.000000000","message":"nit: Delete inventory of the given resource class for a resource provider.","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    @_check_placement_api_available"},{"line_number":259,"context_line":"    def delete_resource_provider_inventory(self, resource_provider_uuid,"},{"line_number":260,"context_line":"                                           resource_class):"},{"line_number":261,"context_line":"        \"\"\"Delete resource provider inventory"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        :param resource_provider_uuid: UUID of the resource provider."},{"line_number":264,"context_line":"        :param resource_class: The name of the resource class"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_bfce662a","line":261,"range":{"start_line":261,"start_character":11,"end_line":261,"end_character":45},"in_reply_to":"bf659307_da76f6d8","updated":"2018-04-13 15:05:08.000000000","message":"Done","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d6f6cf79d0695df4197ac4bf43713022ecfb858b","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            if \"No resource provider with uuid\" in e.details:"},{"line_number":272,"context_line":"                raise n_exc.PlacementResourceProviderNotFound("},{"line_number":273,"context_line":"                    resource_provider\u003dresource_provider_uuid)"},{"line_number":274,"context_line":"            elif _(\"No inventory of class\") in e.details:"},{"line_number":275,"context_line":"                raise n_exc.PlacementResourceClassNotFound("},{"line_number":276,"context_line":"                    resource_provider\u003dresource_provider_uuid,"},{"line_number":277,"context_line":"                    resource_class\u003dresource_class)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_fa0ada23","line":274,"range":{"start_line":274,"start_character":17,"end_line":274,"end_character":19},"updated":"2018-04-12 08:58:08.000000000","message":"I\u0027d suggest being consistent in using localizations or not. I guess not using them would be better, because I don\u0027t see how we\u0027ll have access to keystoneauth\u0027s translations database here.","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            if \"No resource provider with uuid\" in e.details:"},{"line_number":272,"context_line":"                raise n_exc.PlacementResourceProviderNotFound("},{"line_number":273,"context_line":"                    resource_provider\u003dresource_provider_uuid)"},{"line_number":274,"context_line":"            elif _(\"No inventory of class\") in e.details:"},{"line_number":275,"context_line":"                raise n_exc.PlacementResourceClassNotFound("},{"line_number":276,"context_line":"                    resource_provider\u003dresource_provider_uuid,"},{"line_number":277,"context_line":"                    resource_class\u003dresource_class)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_dfd1dacd","line":274,"range":{"start_line":274,"start_character":17,"end_line":274,"end_character":19},"in_reply_to":"bf659307_fa0ada23","updated":"2018-04-13 15:05:08.000000000","message":"Good catch","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d6f6cf79d0695df4197ac4bf43713022ecfb858b","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                raise n_exc.PlacementResourceProviderNotFound("},{"line_number":273,"context_line":"                    resource_provider\u003dresource_provider_uuid)"},{"line_number":274,"context_line":"            elif _(\"No inventory of class\") in e.details:"},{"line_number":275,"context_line":"                raise n_exc.PlacementResourceClassNotFound("},{"line_number":276,"context_line":"                    resource_provider\u003dresource_provider_uuid,"},{"line_number":277,"context_line":"                    resource_class\u003dresource_class)"},{"line_number":278,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_156c3fce","line":275,"range":{"start_line":275,"start_character":37,"end_line":275,"end_character":58},"updated":"2018-04-12 08:58:08.000000000","message":"I think this should be ResourceInventoryNotFound, otherwise it may conflict with exception types raised when operating on resource classes themselves.","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                raise n_exc.PlacementResourceProviderNotFound("},{"line_number":273,"context_line":"                    resource_provider\u003dresource_provider_uuid)"},{"line_number":274,"context_line":"            elif _(\"No inventory of class\") in e.details:"},{"line_number":275,"context_line":"                raise n_exc.PlacementResourceClassNotFound("},{"line_number":276,"context_line":"                    resource_provider\u003dresource_provider_uuid,"},{"line_number":277,"context_line":"                    resource_class\u003dresource_class)"},{"line_number":278,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_fff13e6c","line":275,"range":{"start_line":275,"start_character":37,"end_line":275,"end_character":58},"in_reply_to":"bf659307_156c3fce","updated":"2018-04-13 15:05:08.000000000","message":"Done","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cd488191f96bb17a0be27d891c4bc1b870300607","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        :param name: name of the trait to check."},{"line_number":381,"context_line":"        :raises PlacementTraitNotFound: If the trait name not found."},{"line_number":382,"context_line":"        \"\"\""},{"line_number":383,"context_line":"        url \u003d \u0027/traits/%s\u0027 % (name)"},{"line_number":384,"context_line":"        try:"},{"line_number":385,"context_line":"            self._get(url).json()"},{"line_number":386,"context_line":"        except ks_exc.NotFound:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_c8cdf4b7","line":383,"range":{"start_line":383,"start_character":29,"end_line":383,"end_character":30},"updated":"2018-04-11 07:39:17.000000000","message":"nit: those brackets aren\u0027t necessary probably","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        :param name: name of the trait to check."},{"line_number":381,"context_line":"        :raises PlacementTraitNotFound: If the trait name not found."},{"line_number":382,"context_line":"        \"\"\""},{"line_number":383,"context_line":"        url \u003d \u0027/traits/%s\u0027 % (name)"},{"line_number":384,"context_line":"        try:"},{"line_number":385,"context_line":"            self._get(url).json()"},{"line_number":386,"context_line":"        except ks_exc.NotFound:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_bfe746ac","line":383,"range":{"start_line":383,"start_character":29,"end_line":383,"end_character":30},"in_reply_to":"bf659307_c8cdf4b7","updated":"2018-04-13 15:05:08.000000000","message":"Done","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d6f6cf79d0695df4197ac4bf43713022ecfb858b","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        \"\"\""},{"line_number":383,"context_line":"        url \u003d \u0027/traits/%s\u0027 % (name)"},{"line_number":384,"context_line":"        try:"},{"line_number":385,"context_line":"            self._get(url).json()"},{"line_number":386,"context_line":"        except ks_exc.NotFound:"},{"line_number":387,"context_line":"            raise n_exc.PlacementTraitNotFound(trait\u003dname)"},{"line_number":388,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_55e95717","line":385,"range":{"start_line":385,"start_character":12,"end_line":385,"end_character":33},"updated":"2018-04-12 08:58:08.000000000","message":"either: return self._get(url).json()\nor: self._get(url)\n\nProbably returning is more future-proof (if a field gets added to traits).","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        \"\"\""},{"line_number":383,"context_line":"        url \u003d \u0027/traits/%s\u0027 % (name)"},{"line_number":384,"context_line":"        try:"},{"line_number":385,"context_line":"            self._get(url).json()"},{"line_number":386,"context_line":"        except ks_exc.NotFound:"},{"line_number":387,"context_line":"            raise n_exc.PlacementTraitNotFound(trait\u003dname)"},{"line_number":388,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_dfea3a72","line":385,"range":{"start_line":385,"start_character":12,"end_line":385,"end_character":33},"in_reply_to":"bf659307_55e95717","updated":"2018-04-13 15:05:08.000000000","message":"Done","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d6f6cf79d0695df4197ac4bf43713022ecfb858b","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            raise n_exc.PlacementTraitNotFound(trait\u003dname)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    @_check_placement_api_available"},{"line_number":390,"context_line":"    def create_trait(self, name):"},{"line_number":391,"context_line":"        \"\"\"Insert a single custom trait."},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        :param name: name of the trait to create."}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_d5c5678f","line":390,"range":{"start_line":390,"start_character":8,"end_line":390,"end_character":14},"updated":"2018-04-12 08:58:08.000000000","message":"The method verb is inconsistent with the HTTP verb PUT. \u0027update\u0027 or \u0027ensure\u0027 would be better.","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            raise n_exc.PlacementTraitNotFound(trait\u003dname)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    @_check_placement_api_available"},{"line_number":390,"context_line":"    def create_trait(self, name):"},{"line_number":391,"context_line":"        \"\"\"Insert a single custom trait."},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        :param name: name of the trait to create."}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_9f004236","line":390,"range":{"start_line":390,"start_character":8,"end_line":390,"end_character":14},"in_reply_to":"bf659307_d5c5678f","updated":"2018-04-13 15:05:08.000000000","message":"Good catch, thanks","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d6f6cf79d0695df4197ac4bf43713022ecfb858b","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        }"},{"line_number":417,"context_line":"        try:"},{"line_number":418,"context_line":"            return self._put(url, body).json()"},{"line_number":419,"context_line":"        except ks_exc.NotFound:"},{"line_number":420,"context_line":"            raise n_exc.PlacementResourceProviderNotFound("},{"line_number":421,"context_line":"                resource_provider\u003dresource_provider_uuid)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    @_check_placement_api_available"},{"line_number":424,"context_line":"    def list_resource_provider_traits(self, resource_provider_uuid):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_f5ae6b2c","line":421,"range":{"start_line":419,"start_character":0,"end_line":421,"end_character":57},"updated":"2018-04-12 08:58:08.000000000","message":"Are you sure there\u0027s not another case for a trait not being found?","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        }"},{"line_number":417,"context_line":"        try:"},{"line_number":418,"context_line":"            return self._put(url, body).json()"},{"line_number":419,"context_line":"        except ks_exc.NotFound:"},{"line_number":420,"context_line":"            raise n_exc.PlacementResourceProviderNotFound("},{"line_number":421,"context_line":"                resource_provider\u003dresource_provider_uuid)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    @_check_placement_api_available"},{"line_number":424,"context_line":"    def list_resource_provider_traits(self, resource_provider_uuid):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_dfb8fa75","line":421,"range":{"start_line":419,"start_character":0,"end_line":421,"end_character":57},"in_reply_to":"bf659307_f5ae6b2c","updated":"2018-04-13 15:05:08.000000000","message":"You are right, I added the missing one.","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d6f6cf79d0695df4197ac4bf43713022ecfb858b","unresolved":false,"context_lines":[{"line_number":437,"context_line":"                resource_provider\u003dresource_provider_uuid)"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    @_check_placement_api_available"},{"line_number":440,"context_line":"    def delete_trait(self, name):"},{"line_number":441,"context_line":"        \"\"\"Delete the specified trait."},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        :param name: the name of the trait to be deleted."}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_f50aeb23","line":440,"range":{"start_line":440,"start_character":8,"end_line":440,"end_character":20},"updated":"2018-04-12 08:58:08.000000000","message":"Why isn\u0027t this next to \u0027def create_trait\u0027?","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":437,"context_line":"                resource_provider\u003dresource_provider_uuid)"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    @_check_placement_api_available"},{"line_number":440,"context_line":"    def delete_trait(self, name):"},{"line_number":441,"context_line":"        \"\"\"Delete the specified trait."},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        :param name: the name of the trait to be deleted."}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_df9f9aff","line":440,"range":{"start_line":440,"start_character":8,"end_line":440,"end_character":20},"in_reply_to":"bf659307_f50aeb23","updated":"2018-04-13 15:05:08.000000000","message":"Done","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d6f6cf79d0695df4197ac4bf43713022ecfb858b","unresolved":false,"context_lines":[{"line_number":477,"context_line":"        url \u003d \u0027/resource_classes/%s\u0027 % (name)"},{"line_number":478,"context_line":"        try:"},{"line_number":479,"context_line":"            return self._get(url).json()"},{"line_number":480,"context_line":"        except ks_exc.NotFound as e:"},{"line_number":481,"context_line":"            LOG.debug(e.details)"},{"line_number":482,"context_line":"            raise n_exc.PlacementResourceClassNotFound(resource_class\u003dname)"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    @_check_placement_api_available"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_d069f5bd","line":481,"range":{"start_line":480,"start_character":30,"end_line":481,"end_character":32},"updated":"2018-04-12 08:58:08.000000000","message":"This seems left here accidentally.","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":477,"context_line":"        url \u003d \u0027/resource_classes/%s\u0027 % (name)"},{"line_number":478,"context_line":"        try:"},{"line_number":479,"context_line":"            return self._get(url).json()"},{"line_number":480,"context_line":"        except ks_exc.NotFound as e:"},{"line_number":481,"context_line":"            LOG.debug(e.details)"},{"line_number":482,"context_line":"            raise n_exc.PlacementResourceClassNotFound(resource_class\u003dname)"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    @_check_placement_api_available"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_7f8a0ebf","line":481,"range":{"start_line":480,"start_character":30,"end_line":481,"end_character":32},"in_reply_to":"bf659307_d069f5bd","updated":"2018-04-13 15:05:08.000000000","message":"Done","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d6f6cf79d0695df4197ac4bf43713022ecfb858b","unresolved":false,"context_lines":[{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    @_check_placement_api_available"},{"line_number":485,"context_line":"    def create_resource_class(self, name):"},{"line_number":486,"context_line":"        \"\"\"Create resource class"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        :param name: the name of the resource class"},{"line_number":489,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_70a029f5","line":486,"range":{"start_line":486,"start_character":11,"end_line":486,"end_character":32},"updated":"2018-04-12 08:58:08.000000000","message":"Create a custom resource class. (Non-custom will be rejected.)","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    @_check_placement_api_available"},{"line_number":485,"context_line":"    def create_resource_class(self, name):"},{"line_number":486,"context_line":"        \"\"\"Create resource class"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        :param name: the name of the resource class"},{"line_number":489,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_9f85a2af","line":486,"range":{"start_line":486,"start_character":11,"end_line":486,"end_character":32},"in_reply_to":"bf659307_70a029f5","updated":"2018-04-13 15:05:08.000000000","message":"Done","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d6f6cf79d0695df4197ac4bf43713022ecfb858b","unresolved":false,"context_lines":[{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    @_check_placement_api_available"},{"line_number":495,"context_line":"    def update_resource_class(self, name):"},{"line_number":496,"context_line":"        \"\"\"Create or validate the existence of the resource class."},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        :param name: the name of the resource class to be updated or validated"},{"line_number":499,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_90bb7d0d","line":496,"range":{"start_line":496,"start_character":44,"end_line":496,"end_character":65},"updated":"2018-04-12 08:58:08.000000000","message":"of a custom resource class","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    @_check_placement_api_available"},{"line_number":495,"context_line":"    def update_resource_class(self, name):"},{"line_number":496,"context_line":"        \"\"\"Create or validate the existence of the resource class."},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        :param name: the name of the resource class to be updated or validated"},{"line_number":499,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_3f9016ed","line":496,"range":{"start_line":496,"start_character":44,"end_line":496,"end_character":65},"in_reply_to":"bf659307_90bb7d0d","updated":"2018-04-13 15:05:08.000000000","message":"Done","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cd488191f96bb17a0be27d891c4bc1b870300607","unresolved":false,"context_lines":[{"line_number":498,"context_line":"        :param name: the name of the resource class to be updated or validated"},{"line_number":499,"context_line":"        \"\"\""},{"line_number":500,"context_line":"        url \u003d \u0027/resource_classes/%s\u0027 % name"},{"line_number":501,"context_line":"        self._put(url)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    @_check_placement_api_available"},{"line_number":504,"context_line":"    def delete_resource_class(self, name):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_e8bc78dd","line":501,"updated":"2018-04-11 07:39:17.000000000","message":"can\u0027t it raise not found exception like below in delete_resource_class() method?","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bad44e1cfcb7825051e96546a0cc7b670e03b973","unresolved":false,"context_lines":[{"line_number":498,"context_line":"        :param name: the name of the resource class to be updated or validated"},{"line_number":499,"context_line":"        \"\"\""},{"line_number":500,"context_line":"        url \u003d \u0027/resource_classes/%s\u0027 % name"},{"line_number":501,"context_line":"        self._put(url)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    @_check_placement_api_available"},{"line_number":504,"context_line":"    def delete_resource_class(self, name):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_f60cd943","line":501,"in_reply_to":"bf659307_70d7c94c","updated":"2018-04-16 08:02:30.000000000","message":"indeed, thx :)","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d6f6cf79d0695df4197ac4bf43713022ecfb858b","unresolved":false,"context_lines":[{"line_number":498,"context_line":"        :param name: the name of the resource class to be updated or validated"},{"line_number":499,"context_line":"        \"\"\""},{"line_number":500,"context_line":"        url \u003d \u0027/resource_classes/%s\u0027 % name"},{"line_number":501,"context_line":"        self._put(url)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    @_check_placement_api_available"},{"line_number":504,"context_line":"    def delete_resource_class(self, name):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_70d7c94c","line":501,"in_reply_to":"bf659307_e8bc78dd","updated":"2018-04-12 08:58:08.000000000","message":"I think PUT /resource_classes/foo works like create-or-update, so if it\u0027s not found then it\u0027ll be created.\n\nhttps://developer.openstack.org/api-ref/placement/#update-resource-class","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d6f6cf79d0695df4197ac4bf43713022ecfb858b","unresolved":false,"context_lines":[{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    @_check_placement_api_available"},{"line_number":504,"context_line":"    def delete_resource_class(self, name):"},{"line_number":505,"context_line":"        \"\"\"Delete resource class."},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        :param name: The name of the resource class to be deleted."},{"line_number":508,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_b0b80111","line":505,"range":{"start_line":505,"start_character":18,"end_line":505,"end_character":32},"updated":"2018-04-12 08:58:08.000000000","message":"a custom resource class","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    @_check_placement_api_available"},{"line_number":504,"context_line":"    def delete_resource_class(self, name):"},{"line_number":505,"context_line":"        \"\"\"Delete resource class."},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        :param name: The name of the resource class to be deleted."},{"line_number":508,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_ffbffe5d","line":505,"range":{"start_line":505,"start_character":18,"end_line":505,"end_character":32},"in_reply_to":"bf659307_b0b80111","updated":"2018-04-13 15:05:08.000000000","message":"Done","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d6f6cf79d0695df4197ac4bf43713022ecfb858b","unresolved":false,"context_lines":[{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        :param name: The name of the resource class to be deleted."},{"line_number":508,"context_line":"        \"\"\""},{"line_number":509,"context_line":"        url \u003d \u0027resource_classes/%s\u0027 % (name)"},{"line_number":510,"context_line":"        try:"},{"line_number":511,"context_line":"            self._delete(url)"},{"line_number":512,"context_line":"        except ks_exc.NotFound:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_703ca992","line":509,"range":{"start_line":509,"start_character":14,"end_line":509,"end_character":16},"updated":"2018-04-12 08:58:08.000000000","message":"Leading slash is missing.","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        :param name: The name of the resource class to be deleted."},{"line_number":508,"context_line":"        \"\"\""},{"line_number":509,"context_line":"        url \u003d \u0027resource_classes/%s\u0027 % (name)"},{"line_number":510,"context_line":"        try:"},{"line_number":511,"context_line":"            self._delete(url)"},{"line_number":512,"context_line":"        except ks_exc.NotFound:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_1fc3d2ee","line":509,"range":{"start_line":509,"start_character":14,"end_line":509,"end_character":16},"in_reply_to":"bf659307_703ca992","updated":"2018-04-13 15:05:08.000000000","message":"Done","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bad44e1cfcb7825051e96546a0cc7b670e03b973","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def _get(self, url, **kwargs):"},{"line_number":98,"context_line":"        headers \u003d kwargs.get(\u0027headers\u0027, {})"},{"line_number":99,"context_line":"        if API_VERSION_REQUEST_HEADER not in headers:"},{"line_number":100,"context_line":"            if \u0027headers\u0027 not in kwargs:"},{"line_number":101,"context_line":"                kwargs[\u0027headers\u0027] \u003d self._api_version_header"},{"line_number":102,"context_line":"            else:"},{"line_number":103,"context_line":"                kwargs[\u0027headers\u0027].update(self._api_version_header)"},{"line_number":104,"context_line":"        return self._client.get(url, endpoint_filter\u003dself._ks_filter,"},{"line_number":105,"context_line":"                                **kwargs)"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9f6a8fd7_592616ba","line":103,"range":{"start_line":99,"start_character":0,"end_line":103,"end_character":66},"updated":"2018-04-16 08:02:30.000000000","message":"I know that I\u0027m nit picker and sorry for that but this few lines are repeated in exactly same way in 4 places. Maybe You can move it to some separate method and reuse in few places?","commit_id":"a830010699ed29713061ff9ed42b244fc6b2b6a3"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"c6902c29829953f39c9f21fd321c8cd29cc96837","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def _get(self, url, **kwargs):"},{"line_number":98,"context_line":"        headers \u003d kwargs.get(\u0027headers\u0027, {})"},{"line_number":99,"context_line":"        if API_VERSION_REQUEST_HEADER not in headers:"},{"line_number":100,"context_line":"            if \u0027headers\u0027 not in kwargs:"},{"line_number":101,"context_line":"                kwargs[\u0027headers\u0027] \u003d self._api_version_header"},{"line_number":102,"context_line":"            else:"},{"line_number":103,"context_line":"                kwargs[\u0027headers\u0027].update(self._api_version_header)"},{"line_number":104,"context_line":"        return self._client.get(url, endpoint_filter\u003dself._ks_filter,"},{"line_number":105,"context_line":"                                **kwargs)"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9f6a8fd7_d53ff022","line":103,"range":{"start_line":99,"start_character":0,"end_line":103,"end_character":66},"in_reply_to":"9f6a8fd7_592616ba","updated":"2018-04-19 07:54:03.000000000","message":"Valid problem, I moved to a new method.","commit_id":"a830010699ed29713061ff9ed42b244fc6b2b6a3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bad44e1cfcb7825051e96546a0cc7b670e03b973","unresolved":false,"context_lines":[{"line_number":405,"context_line":"        \"\"\""},{"line_number":406,"context_line":"        url \u003d \u0027/traits/%s\u0027 % name"},{"line_number":407,"context_line":"        try:"},{"line_number":408,"context_line":"            return self._get(url).json()"},{"line_number":409,"context_line":"        except ks_exc.NotFound:"},{"line_number":410,"context_line":"            raise n_exc.PlacementTraitNotFound(trait\u003dname)"},{"line_number":411,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9f6a8fd7_f9960a95","line":408,"updated":"2018-04-16 08:02:30.000000000","message":"As I found in https://developer.openstack.org/api-ref/placement/#traits it looks that this method don\u0027t returns any body so what \"json\" You are excepting here? Shouldn\u0027t You only check http return code?","commit_id":"a830010699ed29713061ff9ed42b244fc6b2b6a3"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"c6902c29829953f39c9f21fd321c8cd29cc96837","unresolved":false,"context_lines":[{"line_number":405,"context_line":"        \"\"\""},{"line_number":406,"context_line":"        url \u003d \u0027/traits/%s\u0027 % name"},{"line_number":407,"context_line":"        try:"},{"line_number":408,"context_line":"            return self._get(url).json()"},{"line_number":409,"context_line":"        except ks_exc.NotFound:"},{"line_number":410,"context_line":"            raise n_exc.PlacementTraitNotFound(trait\u003dname)"},{"line_number":411,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9f6a8fd7_d06a9eb1","line":408,"in_reply_to":"9f6a8fd7_f9960a95","updated":"2018-04-19 07:54:03.000000000","message":"Good catch. Placement API always can surprise me.","commit_id":"a830010699ed29713061ff9ed42b244fc6b2b6a3"}],"neutron_lib/tests/unit/clients/test_placement.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cd488191f96bb17a0be27d891c4bc1b870300607","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            config, self.openstack_api_version)"},{"line_number":49,"context_line":"        self.placement_fixture \u003d self.useFixture("},{"line_number":50,"context_line":"            fixture.PlacementAPIClientFixture(self.placement_api_client))"},{"line_number":51,"context_line":"        self.headers \u003d {\u0027OpenStack-API-Version\u0027: self.openstack_api_version}"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def test_create_resource_provider(self):"},{"line_number":54,"context_line":"        self.placement_api_client.create_resource_provider("}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_289b5073","line":51,"updated":"2018-04-11 07:39:17.000000000","message":"I think that now this can be removed as I it\u0027s probably not used anywhere","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            config, self.openstack_api_version)"},{"line_number":49,"context_line":"        self.placement_fixture \u003d self.useFixture("},{"line_number":50,"context_line":"            fixture.PlacementAPIClientFixture(self.placement_api_client))"},{"line_number":51,"context_line":"        self.headers \u003d {\u0027OpenStack-API-Version\u0027: self.openstack_api_version}"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def test_create_resource_provider(self):"},{"line_number":54,"context_line":"        self.placement_api_client.create_resource_provider("}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_7fb3ee98","line":51,"in_reply_to":"bf659307_289b5073","updated":"2018-04-13 15:05:08.000000000","message":"Done","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d6f6cf79d0695df4197ac4bf43713022ecfb858b","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            \u0027/resource_providers/%s/traits\u0027 % RESOURCE_PROVIDER_UUID)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def test_list_resource_provider_traits_no_rp(self):"},{"line_number":284,"context_line":"        self.placement_fixture.mock_get.side_effect \u003d ks_exc.NotFound()"},{"line_number":285,"context_line":"        self.assertRaises("},{"line_number":286,"context_line":"            n_exc.PlacementResourceProviderNotFound,"},{"line_number":287,"context_line":"            self.placement_api_client.list_resource_provider_traits,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_70c10954","line":284,"range":{"start_line":284,"start_character":69,"end_line":284,"end_character":71},"updated":"2018-04-12 08:58:08.000000000","message":"At some places you pass the exception class, other places one instance. Maybe it could be consistent.","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"927021d0793035b62d5748b78df65c8b79c7b4ae","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            \u0027/resource_providers/%s/traits\u0027 % RESOURCE_PROVIDER_UUID)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def test_list_resource_provider_traits_no_rp(self):"},{"line_number":284,"context_line":"        self.placement_fixture.mock_get.side_effect \u003d ks_exc.NotFound()"},{"line_number":285,"context_line":"        self.assertRaises("},{"line_number":286,"context_line":"            n_exc.PlacementResourceProviderNotFound,"},{"line_number":287,"context_line":"            self.placement_api_client.list_resource_provider_traits,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_9fae022c","line":284,"range":{"start_line":284,"start_character":69,"end_line":284,"end_character":71},"in_reply_to":"bf659307_70c10954","updated":"2018-04-13 15:05:08.000000000","message":"Done","commit_id":"39bc1a82c8ca6711b5d43e9485c417d0a5ee6b17"}]}
