)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"ef11abed5b6389512cb575546c9d94792f10bd03","unresolved":true,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2021-02-17 14:39:22 -0600"},{"line_number":4,"context_line":"Commit:     James Palmer \u003cjpalmer7698@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-02-24 09:44:30 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP Add support for Resource Filters"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Introduct the resource_filters resource, its attributes,"},{"line_number":10,"context_line":"and API Calls for interacting with resource_filters."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9af8e807_378e4981","line":7,"range":{"start_line":6,"start_character":0,"end_line":7,"end_character":4},"updated":"2021-02-25 16:49:54.000000000","message":"Before we merge this patch, you will want to remove this :)","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":33036,"name":"James Palmer","display_name":"James Palmer","email":"jpalmer7698@gmail.com","username":"twilit_dragon","status":"🏠"},"change_message_id":"76dfe39efbd2eabd50e9897788cddd9dfe11cbbc","unresolved":false,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2021-02-17 14:39:22 -0600"},{"line_number":4,"context_line":"Commit:     James Palmer \u003cjpalmer7698@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-02-24 09:44:30 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP Add support for Resource Filters"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Introduct the resource_filters resource, its attributes,"},{"line_number":10,"context_line":"and API Calls for interacting with resource_filters."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"12809d67_c2a5cc12","line":7,"range":{"start_line":6,"start_character":0,"end_line":7,"end_character":4},"in_reply_to":"9af8e807_378e4981","updated":"2021-02-27 23:24:23.000000000","message":"Done","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"2ff32694769e4d95b5576240b9f2986ad07819f9","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support for Resource Filters"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Introduct the resource_filters resource, its attributes,"},{"line_number":10,"context_line":"and API Calls for interacting with resource_filters."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Task: 41813 Story: 2008619"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"ae012093_aa4eeee7","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":9},"updated":"2021-03-21 08:14:12.000000000","message":"s/Introduct/ Introduce?","commit_id":"66bb2146b9f0544980796c09236543b04685c68f"}],"openstack/block_storage/v3/_proxy.py":[{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"022f959234ed4aa11816ad04b1b536595c01e4ec","unresolved":true,"context_lines":[{"line_number":539,"context_line":"        return resource.wait_for_delete(self, res, interval, wait)"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    def resource_filters(self, **query):"},{"line_number":542,"context_line":"        \"\"\"Retrieve a generator of resource fitlers"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"        :returns: A generator of resource filters."},{"line_number":545,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"dc527bf4_1d2d6845","line":542,"updated":"2021-03-04 11:56:28.000000000","message":"\"fitlers\"","commit_id":"bf9e3dca91fc1e04e5db4a7d75614ba3de5547a5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6f59ae288bc67d46216c5fda9d8ac9c6836cbfae","unresolved":false,"context_lines":[{"line_number":543,"context_line":""},{"line_number":544,"context_line":"        :returns: A generator of resource filters."},{"line_number":545,"context_line":"        \"\"\""},{"line_number":546,"context_line":"        return self._list(_resource_filter.ResourceFilter, **query)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    def _get_cleanup_dependencies(self):"},{"line_number":549,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":8,"id":"f3ed6786_ccbdb8dd","line":546,"updated":"2021-03-23 15:04:00.000000000","message":"This looks good. Comparing the output from cinderclient (openstackclient doesn\u0027t support this yet) to openstacksdk with this patch. First, cinderclient:\n\n  $ cinder --os-volume-api-version 3.33 list-filters\n  +----------------+---------------------------------------------------------------------------------------------------------------+\n  | Resource       | Filters                                                                                                       |\n  +----------------+---------------------------------------------------------------------------------------------------------------+\n  | attachment     | volume_id, status, instance_id, attach_status                                                                 |\n  | backup         | name, status, volume_id                                                                                       |\n  | group          | name                                                                                                          |\n  | group_snapshot | name, status, group_id                                                                                        |\n  | message        | resource_uuid, resource_type, event_id, request_id, message_level                                             |\n  | pool           | name, volume_type                                                                                             |\n  | snapshot       | name, status, volume_id, metadata, availability_zone                                                          |\n  | volume         | name, status, metadata, bootable, migration_status, availability_zone, group_id, size, created_at, updated_at |\n  | volume_type    | is_public                                                                                                     |\n  +----------------+---------------------------------------------------------------------------------------------------------------+\n\nThen this patch:\n\n  \u003e\u003e\u003e import openstack\n  \u003e\u003e\u003e import pprint\n  \u003e\u003e\u003e openstack.enable_logging(debug\u003dFalse)\n  \u003e\u003e\u003e conn \u003d openstack.connect()\n  \u003e\u003e\u003e for resource_filter in conn.block_storage.resource_filters():\n  \u003e\u003e\u003e     pprint.pprint(resource_filter.to_dict())\n  \u003e\u003e\u003e     break  # we only need one to prove it\u0027s working\n  {\u0027filters\u0027: [\u0027name\u0027,\n               \u0027status\u0027,\n               \u0027metadata\u0027,\n               \u0027bootable\u0027,\n               \u0027migration_status\u0027,\n               \u0027availability_zone\u0027,\n               \u0027group_id\u0027,\n               \u0027size\u0027,\n               \u0027created_at\u0027,\n               \u0027updated_at\u0027],\n   \u0027id\u0027: None,\n   \u0027location\u0027: {\u0027cloud\u0027: \u0027envvars\u0027,\n                \u0027project\u0027: {\u0027domain_id\u0027: \u0027default\u0027,\n                            \u0027domain_name\u0027: None,\n                            \u0027id\u0027: \u0027742ec5fd9b97453ba33643d8306e8a7b\u0027,\n                            \u0027name\u0027: \u0027demo\u0027},\n                \u0027region_name\u0027: \u0027RegionOne\u0027,\n                \u0027zone\u0027: None},\n   \u0027name\u0027: None,\n   \u0027resource\u0027: \u0027volume\u0027}\n\nThe only unusual thing is the presence of \u0027name\u0027 and \u0027id\u0027 fields, but these are added as part of \u0027openstack.resource.Resource\u0027 and there doesn\u0027t seem the be any way to avoid them right now.","commit_id":"66bb2146b9f0544980796c09236543b04685c68f"}],"openstack/block_storage/v3/resource_filter.py":[{"author":{"_account_id":33036,"name":"James Palmer","display_name":"James Palmer","email":"jpalmer7698@gmail.com","username":"twilit_dragon","status":"🏠"},"change_message_id":"76dfe39efbd2eabd50e9897788cddd9dfe11cbbc","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from openstack import resource"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class ResourceFilter(resource.Resource):"},{"line_number":17,"context_line":"    \"\"\"Resource Filter\"\"\""},{"line_number":18,"context_line":"    resource_key \u003d \"resource_filter\""},{"line_number":19,"context_line":"    resources_key \u003d \"resource_filters\""}],"source_content_type":"text/x-python","patch_set":3,"id":"8b04d435_3f096818","line":16,"in_reply_to":"09b506e2_59dd146d","updated":"2021-02-27 23:24:23.000000000","message":"Done","commit_id":"c550392d8233da2a83e365d1284f22a4f5d3c09b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6e9cf17035d5f2cac19df2d3fc6936bb6800458c","unresolved":true,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from openstack import resource"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class ResourceFilter(resource.Resource):"},{"line_number":17,"context_line":"    \"\"\"Resource Filter\"\"\""},{"line_number":18,"context_line":"    resource_key \u003d \"resource_filter\""},{"line_number":19,"context_line":"    resources_key \u003d \"resource_filters\""}],"source_content_type":"text/x-python","patch_set":3,"id":"09b506e2_59dd146d","line":16,"in_reply_to":"28bf0e83_4ea2c109","updated":"2021-02-23 19:47:55.000000000","message":"\u003e pep8: E302 expected 2 blank lines, found 1\n\nPlease fix.","commit_id":"c550392d8233da2a83e365d1284f22a4f5d3c09b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6e9cf17035d5f2cac19df2d3fc6936bb6800458c","unresolved":true,"context_lines":[{"line_number":20,"context_line":"    base_path \u003d \"/resource_filters\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    _query_mapping \u003d resource.QueryParameters("},{"line_number":23,"context_line":"            \u0027project_id\u0027, \u0027resource\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    # Capabilities"},{"line_number":26,"context_line":"    allow_fetch \u003d True"}],"source_content_type":"text/x-python","patch_set":3,"id":"4b4efc71_9977458a","line":23,"in_reply_to":"2ce57cd7_b416115a","updated":"2021-02-23 19:47:55.000000000","message":"\u003e pep8: E126 continuation line over-indented for hanging indent\n\nPlease fix.","commit_id":"c550392d8233da2a83e365d1284f22a4f5d3c09b"},{"author":{"_account_id":33036,"name":"James Palmer","display_name":"James Palmer","email":"jpalmer7698@gmail.com","username":"twilit_dragon","status":"🏠"},"change_message_id":"76dfe39efbd2eabd50e9897788cddd9dfe11cbbc","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    base_path \u003d \"/resource_filters\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    _query_mapping \u003d resource.QueryParameters("},{"line_number":23,"context_line":"            \u0027project_id\u0027, \u0027resource\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    # Capabilities"},{"line_number":26,"context_line":"    allow_fetch \u003d True"}],"source_content_type":"text/x-python","patch_set":3,"id":"62f36808_176faaca","line":23,"in_reply_to":"4b4efc71_9977458a","updated":"2021-02-27 23:24:23.000000000","message":"Done","commit_id":"c550392d8233da2a83e365d1284f22a4f5d3c09b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6e9cf17035d5f2cac19df2d3fc6936bb6800458c","unresolved":true,"context_lines":[{"line_number":23,"context_line":"            \u0027project_id\u0027, \u0027resource\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    # Capabilities"},{"line_number":26,"context_line":"    allow_fetch \u003d True"},{"line_number":27,"context_line":"    allow_create \u003d False"},{"line_number":28,"context_line":"    allow_delete \u003d False"},{"line_number":29,"context_line":"    allow_commit \u003d False"}],"source_content_type":"text/x-python","patch_set":3,"id":"832a1bca_ac180681","line":26,"updated":"2021-02-23 19:47:55.000000000","message":"Are you sure about this? I only see the ability to list resource filters. I don\u0027t see any way to get detail for an individual filter, i.e. \u0027/v3/{project_id}/resource_filters/{resource_type}\u0027.","commit_id":"c550392d8233da2a83e365d1284f22a4f5d3c09b"},{"author":{"_account_id":33036,"name":"James Palmer","display_name":"James Palmer","email":"jpalmer7698@gmail.com","username":"twilit_dragon","status":"🏠"},"change_message_id":"76dfe39efbd2eabd50e9897788cddd9dfe11cbbc","unresolved":false,"context_lines":[{"line_number":23,"context_line":"            \u0027project_id\u0027, \u0027resource\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    # Capabilities"},{"line_number":26,"context_line":"    allow_fetch \u003d True"},{"line_number":27,"context_line":"    allow_create \u003d False"},{"line_number":28,"context_line":"    allow_delete \u003d False"},{"line_number":29,"context_line":"    allow_commit \u003d False"}],"source_content_type":"text/x-python","patch_set":3,"id":"ab902aeb_3ad18692","line":26,"in_reply_to":"832a1bca_ac180681","updated":"2021-02-27 23:24:23.000000000","message":"Done","commit_id":"c550392d8233da2a83e365d1284f22a4f5d3c09b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6e9cf17035d5f2cac19df2d3fc6936bb6800458c","unresolved":true,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    #: Properties"},{"line_number":33,"context_line":"    #: A collection of resource filters."},{"line_number":34,"context_line":"    resource_filters \u003d resource.Body(\"resource_filters\", type\u003dlist)"},{"line_number":35,"context_line":"    #: The resource filter array."},{"line_number":36,"context_line":"    filters \u003d resource.Body(\u0027filters\u0027, type\u003dlist)"},{"line_number":37,"context_line":"    #: Resource which the filters will be applied to."}],"source_content_type":"text/x-python","patch_set":3,"id":"964a11b3_1f343aa8","line":34,"updated":"2021-02-23 19:47:55.000000000","message":"This shouldn\u0027t be specified. The responses are of format:\n\n  {\n      \"resource_filters\": [\n          {\n              \"resource\": \"resource_1\",\n              \"filters\": [\"filter1\", \"filter2\", \"filter3\"]\n          }\n      ]\n  }\n\nYou\u0027ll note you have configured \u0027resources_key\u0027 above. That means openstacksdk will automatically unpack this for you, essentially doing something like:\n\n  resource \u003d resource[$resources_key]\n\nSo drop this line. It\u0027s not necessary","commit_id":"c550392d8233da2a83e365d1284f22a4f5d3c09b"},{"author":{"_account_id":33036,"name":"James Palmer","display_name":"James Palmer","email":"jpalmer7698@gmail.com","username":"twilit_dragon","status":"🏠"},"change_message_id":"76dfe39efbd2eabd50e9897788cddd9dfe11cbbc","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    #: Properties"},{"line_number":33,"context_line":"    #: A collection of resource filters."},{"line_number":34,"context_line":"    resource_filters \u003d resource.Body(\"resource_filters\", type\u003dlist)"},{"line_number":35,"context_line":"    #: The resource filter array."},{"line_number":36,"context_line":"    filters \u003d resource.Body(\u0027filters\u0027, type\u003dlist)"},{"line_number":37,"context_line":"    #: Resource which the filters will be applied to."}],"source_content_type":"text/x-python","patch_set":3,"id":"80e5fe42_9a988c58","line":34,"in_reply_to":"964a11b3_1f343aa8","updated":"2021-02-27 23:24:23.000000000","message":"Done","commit_id":"c550392d8233da2a83e365d1284f22a4f5d3c09b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6e9cf17035d5f2cac19df2d3fc6936bb6800458c","unresolved":true,"context_lines":[{"line_number":33,"context_line":"    #: A collection of resource filters."},{"line_number":34,"context_line":"    resource_filters \u003d resource.Body(\"resource_filters\", type\u003dlist)"},{"line_number":35,"context_line":"    #: The resource filter array."},{"line_number":36,"context_line":"    filters \u003d resource.Body(\u0027filters\u0027, type\u003dlist)"},{"line_number":37,"context_line":"    #: Resource which the filters will be applied to."},{"line_number":38,"context_line":"    resource \u003d resource.Body(\u0027resource\u0027, type\u003dstr)"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"c88393c9_03ad0105","line":36,"updated":"2021-02-23 19:47:55.000000000","message":"[Thinking out loud] We specify \u0027list_type\u003dstr\u0027 here to be totally unambiguous. We don\u0027t do that elsewhere though so it\u0027s probably not necessary","commit_id":"c550392d8233da2a83e365d1284f22a4f5d3c09b"},{"author":{"_account_id":33036,"name":"James Palmer","display_name":"James Palmer","email":"jpalmer7698@gmail.com","username":"twilit_dragon","status":"🏠"},"change_message_id":"76dfe39efbd2eabd50e9897788cddd9dfe11cbbc","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    #: A collection of resource filters."},{"line_number":34,"context_line":"    resource_filters \u003d resource.Body(\"resource_filters\", type\u003dlist)"},{"line_number":35,"context_line":"    #: The resource filter array."},{"line_number":36,"context_line":"    filters \u003d resource.Body(\u0027filters\u0027, type\u003dlist)"},{"line_number":37,"context_line":"    #: Resource which the filters will be applied to."},{"line_number":38,"context_line":"    resource \u003d resource.Body(\u0027resource\u0027, type\u003dstr)"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"025b0af9_9def9016","line":36,"in_reply_to":"c88393c9_03ad0105","updated":"2021-02-27 23:24:23.000000000","message":"Ack","commit_id":"c550392d8233da2a83e365d1284f22a4f5d3c09b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6e9cf17035d5f2cac19df2d3fc6936bb6800458c","unresolved":true,"context_lines":[{"line_number":36,"context_line":"    filters \u003d resource.Body(\u0027filters\u0027, type\u003dlist)"},{"line_number":37,"context_line":"    #: Resource which the filters will be applied to."},{"line_number":38,"context_line":"    resource \u003d resource.Body(\u0027resource\u0027, type\u003dstr)"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da8ca4d0_5df85a4c","line":39,"in_reply_to":"c0ee85de_e1ed2670","updated":"2021-02-23 19:47:55.000000000","message":"\u003e pep8: W391 blank line at end of file\n\nPlease fix.","commit_id":"c550392d8233da2a83e365d1284f22a4f5d3c09b"},{"author":{"_account_id":33036,"name":"James Palmer","display_name":"James Palmer","email":"jpalmer7698@gmail.com","username":"twilit_dragon","status":"🏠"},"change_message_id":"76dfe39efbd2eabd50e9897788cddd9dfe11cbbc","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    filters \u003d resource.Body(\u0027filters\u0027, type\u003dlist)"},{"line_number":37,"context_line":"    #: Resource which the filters will be applied to."},{"line_number":38,"context_line":"    resource \u003d resource.Body(\u0027resource\u0027, type\u003dstr)"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"0a337dbb_b20dc4be","line":39,"in_reply_to":"da8ca4d0_5df85a4c","updated":"2021-02-27 23:24:23.000000000","message":"Done","commit_id":"c550392d8233da2a83e365d1284f22a4f5d3c09b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f0a5a1f47daf9ef34efd79e031ca6c680a32e53","unresolved":true,"context_lines":[{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from openstack import resource"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9992887e_092047a0","line":13,"updated":"2021-02-25 15:07:31.000000000","message":"nit: extra newline","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":33036,"name":"James Palmer","display_name":"James Palmer","email":"jpalmer7698@gmail.com","username":"twilit_dragon","status":"🏠"},"change_message_id":"76dfe39efbd2eabd50e9897788cddd9dfe11cbbc","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from openstack import resource"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"a4f98cf1_f9a15d74","line":13,"in_reply_to":"9992887e_092047a0","updated":"2021-02-27 23:24:23.000000000","message":"Done","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f0a5a1f47daf9ef34efd79e031ca6c680a32e53","unresolved":true,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class ResourceFilter(resource.Resource):"},{"line_number":18,"context_line":"    \"\"\"Resource Filter\"\"\""},{"line_number":19,"context_line":"    resource_key \u003d \"resource_filter\""},{"line_number":20,"context_line":"    resources_key \u003d \"resource_filters\""},{"line_number":21,"context_line":"    base_path \u003d \"/resource_filters\""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1d630b8c_43ca5bf9","line":19,"updated":"2021-02-25 15:07:31.000000000","message":"\u0027allow_detail\u0027 is False. Is this still needed?","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":33036,"name":"James Palmer","display_name":"James Palmer","email":"jpalmer7698@gmail.com","username":"twilit_dragon","status":"🏠"},"change_message_id":"76dfe39efbd2eabd50e9897788cddd9dfe11cbbc","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class ResourceFilter(resource.Resource):"},{"line_number":18,"context_line":"    \"\"\"Resource Filter\"\"\""},{"line_number":19,"context_line":"    resource_key \u003d \"resource_filter\""},{"line_number":20,"context_line":"    resources_key \u003d \"resource_filters\""},{"line_number":21,"context_line":"    base_path \u003d \"/resource_filters\""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ffdab5ee_8dd5bb61","line":19,"in_reply_to":"1d630b8c_43ca5bf9","updated":"2021-02-27 23:24:23.000000000","message":"Done","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f0a5a1f47daf9ef34efd79e031ca6c680a32e53","unresolved":true,"context_lines":[{"line_number":20,"context_line":"    resources_key \u003d \"resource_filters\""},{"line_number":21,"context_line":"    base_path \u003d \"/resource_filters\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    _query_mapping \u003d resource.QueryParameters(\u0027project_id\u0027, \u0027resource\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    # Capabilities"},{"line_number":26,"context_line":"    allow_list \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"5853b4d9_bacfdcc3","line":23,"range":{"start_line":23,"start_character":46,"end_line":23,"end_character":58},"updated":"2021-02-25 15:07:31.000000000","message":"I don\u0027t know if this is actually needed. I don\u0027t see it in specified in e.g. \u0027openstack/block_storage/v3/type.py\u0027 or \u0027openstack/block_storage/v3/stats.py\u0027 but it is specified in \u0027openstack/block_storage/v3/snapshot.py\u0027. They all use \u0027/v3/{projectID}/resource\u0027-style URLs so one of these is wrong. Will ask gtema","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":33036,"name":"James Palmer","display_name":"James Palmer","email":"jpalmer7698@gmail.com","username":"twilit_dragon","status":"🏠"},"change_message_id":"76dfe39efbd2eabd50e9897788cddd9dfe11cbbc","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    resources_key \u003d \"resource_filters\""},{"line_number":21,"context_line":"    base_path \u003d \"/resource_filters\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    _query_mapping \u003d resource.QueryParameters(\u0027project_id\u0027, \u0027resource\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    # Capabilities"},{"line_number":26,"context_line":"    allow_list \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"224afa18_eeab6038","line":23,"range":{"start_line":23,"start_character":46,"end_line":23,"end_character":58},"in_reply_to":"3243add6_4eec1ccf","updated":"2021-02-27 23:24:23.000000000","message":"Done","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d5f9a30ca99126c212f632c3b09ceda1957b77a8","unresolved":true,"context_lines":[{"line_number":20,"context_line":"    resources_key \u003d \"resource_filters\""},{"line_number":21,"context_line":"    base_path \u003d \"/resource_filters\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    _query_mapping \u003d resource.QueryParameters(\u0027project_id\u0027, \u0027resource\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    # Capabilities"},{"line_number":26,"context_line":"    allow_list \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"3243add6_4eec1ccf","line":23,"range":{"start_line":23,"start_character":46,"end_line":23,"end_character":58},"in_reply_to":"345d81fb_aab05cd2","updated":"2021-02-25 15:28:40.000000000","message":"Cool. \u0027openstack/block_storage/v3/snapshot.py\u0027 isn\u0027t wrong either. It exposes a \u0027project_id\u0027 querystring parameter which is distinct from the path parameter (very confusing)","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"687bbaa3184199c892ba895154b5b37fe8a9e771","unresolved":true,"context_lines":[{"line_number":20,"context_line":"    resources_key \u003d \"resource_filters\""},{"line_number":21,"context_line":"    base_path \u003d \"/resource_filters\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    _query_mapping \u003d resource.QueryParameters(\u0027project_id\u0027, \u0027resource\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    # Capabilities"},{"line_number":26,"context_line":"    allow_list \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"345d81fb_aab05cd2","line":23,"range":{"start_line":23,"start_character":46,"end_line":23,"end_character":58},"in_reply_to":"5853b4d9_bacfdcc3","updated":"2021-02-25 15:13:09.000000000","message":"is not required. According to api-ref it is of type \"in path\". Here we only have ones from \"query\"","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"139059039a3ce73b71179d69439f4bd9f251841c","unresolved":true,"context_lines":[{"line_number":21,"context_line":"    base_path \u003d \"/resource_filters\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    _query_mapping \u003d resource.QueryParameters(\u0027project_id\u0027, \u0027resource\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    # Capabilities"},{"line_number":26,"context_line":"    allow_list \u003d True"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"cacf88a9_fb4f8d44","line":24,"updated":"2021-02-25 16:04:55.000000000","message":"We actually also should start defining _max_microversion here (like in https://opendev.org/openstack/openstacksdk/src/branch/master/openstack/compute/v2/flavor.py#L36) since support for this resource was added only with 3.33.","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":33036,"name":"James Palmer","display_name":"James Palmer","email":"jpalmer7698@gmail.com","username":"twilit_dragon","status":"🏠"},"change_message_id":"76dfe39efbd2eabd50e9897788cddd9dfe11cbbc","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    base_path \u003d \"/resource_filters\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    _query_mapping \u003d resource.QueryParameters(\u0027project_id\u0027, \u0027resource\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    # Capabilities"},{"line_number":26,"context_line":"    allow_list \u003d True"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"981c7ed9_2d1651ed","line":24,"in_reply_to":"cacf88a9_fb4f8d44","updated":"2021-02-27 23:24:23.000000000","message":"Ack","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f0a5a1f47daf9ef34efd79e031ca6c680a32e53","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    _query_mapping \u003d resource.QueryParameters(\u0027project_id\u0027, \u0027resource\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    # Capabilities"},{"line_number":26,"context_line":"    allow_list \u003d True"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    #: Properties"}],"source_content_type":"text/x-python","patch_set":4,"id":"f8082569_255fe341","line":25,"updated":"2021-02-25 15:07:31.000000000","message":"nit: I think we typically state the \u0027False\u0027 values here too like you did in PS3. Even though it\u0027s duplication it makes things a little more grokable. Another one to ask gtema","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d5f9a30ca99126c212f632c3b09ceda1957b77a8","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    _query_mapping \u003d resource.QueryParameters(\u0027project_id\u0027, \u0027resource\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    # Capabilities"},{"line_number":26,"context_line":"    allow_list \u003d True"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    #: Properties"}],"source_content_type":"text/x-python","patch_set":4,"id":"29301428_a93b942a","line":25,"in_reply_to":"33866651_edc98662","updated":"2021-02-25 15:28:40.000000000","message":"Ah, ignore me so 😄","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"687bbaa3184199c892ba895154b5b37fe8a9e771","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    _query_mapping \u003d resource.QueryParameters(\u0027project_id\u0027, \u0027resource\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    # Capabilities"},{"line_number":26,"context_line":"    allow_list \u003d True"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    #: Properties"}],"source_content_type":"text/x-python","patch_set":4,"id":"33866651_edc98662","line":25,"in_reply_to":"f8082569_255fe341","updated":"2021-02-25 15:13:09.000000000","message":"The common practice through the code is not to define missing capabilities (they default to False in the parent resource)","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f0a5a1f47daf9ef34efd79e031ca6c680a32e53","unresolved":true,"context_lines":[{"line_number":26,"context_line":"    allow_list \u003d True"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    #: Properties"},{"line_number":29,"context_line":"    #: The resource filter list."},{"line_number":30,"context_line":"    filters \u003d resource.Body(\u0027filters\u0027, type\u003dlist)"},{"line_number":31,"context_line":"    #: Resource which the filters will be applied to."},{"line_number":32,"context_line":"    resource \u003d resource.Body(\u0027resource\u0027, type\u003dstr)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dd84bc61_fab0a266","line":29,"updated":"2021-02-25 15:07:31.000000000","message":"nit: The actual API ref isn\u0027t that helpful here, but could we say something like\n\n  The list of filters that are applicable to the specified resource.\n\n(fwiw [1] is the spec that added this API and it explains the rationale for same. There are docs for it at [2])\n\n[1] https://blueprints.launchpad.net/cinder/+spec/generalized-filtering-for-cinder-list-resource\n[2] https://docs.openstack.org/cinder/rocky/admin/generalized_filters.html","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":33036,"name":"James Palmer","display_name":"James Palmer","email":"jpalmer7698@gmail.com","username":"twilit_dragon","status":"🏠"},"change_message_id":"76dfe39efbd2eabd50e9897788cddd9dfe11cbbc","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    allow_list \u003d True"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    #: Properties"},{"line_number":29,"context_line":"    #: The resource filter list."},{"line_number":30,"context_line":"    filters \u003d resource.Body(\u0027filters\u0027, type\u003dlist)"},{"line_number":31,"context_line":"    #: Resource which the filters will be applied to."},{"line_number":32,"context_line":"    resource \u003d resource.Body(\u0027resource\u0027, type\u003dstr)"}],"source_content_type":"text/x-python","patch_set":4,"id":"b4392126_31575c32","line":29,"in_reply_to":"dd84bc61_fab0a266","updated":"2021-02-27 23:24:23.000000000","message":"Done","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f0a5a1f47daf9ef34efd79e031ca6c680a32e53","unresolved":true,"context_lines":[{"line_number":28,"context_line":"    #: Properties"},{"line_number":29,"context_line":"    #: The resource filter list."},{"line_number":30,"context_line":"    filters \u003d resource.Body(\u0027filters\u0027, type\u003dlist)"},{"line_number":31,"context_line":"    #: Resource which the filters will be applied to."},{"line_number":32,"context_line":"    resource \u003d resource.Body(\u0027resource\u0027, type\u003dstr)"}],"source_content_type":"text/x-python","patch_set":4,"id":"c37f2403_e4d78b30","line":31,"range":{"start_line":31,"start_character":16,"end_line":31,"end_character":21},"updated":"2021-02-25 15:07:31.000000000","message":"that?","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":33036,"name":"James Palmer","display_name":"James Palmer","email":"jpalmer7698@gmail.com","username":"twilit_dragon","status":"🏠"},"change_message_id":"76dfe39efbd2eabd50e9897788cddd9dfe11cbbc","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    #: Properties"},{"line_number":29,"context_line":"    #: The resource filter list."},{"line_number":30,"context_line":"    filters \u003d resource.Body(\u0027filters\u0027, type\u003dlist)"},{"line_number":31,"context_line":"    #: Resource which the filters will be applied to."},{"line_number":32,"context_line":"    resource \u003d resource.Body(\u0027resource\u0027, type\u003dstr)"}],"source_content_type":"text/x-python","patch_set":4,"id":"31f36793_1ff3d0a5","line":31,"range":{"start_line":31,"start_character":16,"end_line":31,"end_character":21},"in_reply_to":"c37f2403_e4d78b30","updated":"2021-02-27 23:24:23.000000000","message":"Done","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"}],"openstack/tests/unit/block_storage/v3/test_resource_filter.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6e9cf17035d5f2cac19df2d3fc6936bb6800458c","unresolved":true,"context_lines":[{"line_number":9,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":10,"context_line":"# under the License."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"from openstack.block_storage.v3 import resource_filter as rf"},{"line_number":13,"context_line":"from openstack.tests.unit import base"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"RESOURCE_FILTER \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"acee67d8_5448816e","line":12,"updated":"2021-02-23 19:47:55.000000000","message":"nit: personally, I\u0027d just use the actual name rather than the shortened alias. It\u0027s less confusing below IMO","commit_id":"c550392d8233da2a83e365d1284f22a4f5d3c09b"},{"author":{"_account_id":33036,"name":"James Palmer","display_name":"James Palmer","email":"jpalmer7698@gmail.com","username":"twilit_dragon","status":"🏠"},"change_message_id":"76dfe39efbd2eabd50e9897788cddd9dfe11cbbc","unresolved":false,"context_lines":[{"line_number":9,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":10,"context_line":"# under the License."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"from openstack.block_storage.v3 import resource_filter as rf"},{"line_number":13,"context_line":"from openstack.tests.unit import base"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"RESOURCE_FILTER \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"99cb255d_6cee99c2","line":12,"in_reply_to":"acee67d8_5448816e","updated":"2021-02-27 23:24:23.000000000","message":"Done","commit_id":"c550392d8233da2a83e365d1284f22a4f5d3c09b"},{"author":{"_account_id":33036,"name":"James Palmer","display_name":"James Palmer","email":"jpalmer7698@gmail.com","username":"twilit_dragon","status":"🏠"},"change_message_id":"76dfe39efbd2eabd50e9897788cddd9dfe11cbbc","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from openstack.tests.unit import base"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"RESOURCE_FILTER \u003d {"},{"line_number":16,"context_line":"        \u0027filters\u0027: ["},{"line_number":17,"context_line":"            \u0027name\u0027,"},{"line_number":18,"context_line":"            \u0027status\u0027,"},{"line_number":19,"context_line":"            \u0027image_metadata\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3d3943b8_69665830","line":16,"in_reply_to":"8b5e0627_47a9006e","updated":"2021-02-27 23:24:23.000000000","message":"Done","commit_id":"c550392d8233da2a83e365d1284f22a4f5d3c09b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6e9cf17035d5f2cac19df2d3fc6936bb6800458c","unresolved":true,"context_lines":[{"line_number":13,"context_line":"from openstack.tests.unit import base"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"RESOURCE_FILTER \u003d {"},{"line_number":16,"context_line":"        \u0027filters\u0027: ["},{"line_number":17,"context_line":"            \u0027name\u0027,"},{"line_number":18,"context_line":"            \u0027status\u0027,"},{"line_number":19,"context_line":"            \u0027image_metadata\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"8b5e0627_47a9006e","line":16,"in_reply_to":"fa3cbc94_59db0d49","updated":"2021-02-23 19:47:55.000000000","message":"\u003e pep8: E126 continuation line over-indented for hanging indent\n\nYou might want to set up your editor to do this for you.","commit_id":"c550392d8233da2a83e365d1284f22a4f5d3c09b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f0a5a1f47daf9ef34efd79e031ca6c680a32e53","unresolved":true,"context_lines":[{"line_number":16,"context_line":"    \u0027filters\u0027: ["},{"line_number":17,"context_line":"        \u0027name\u0027, \u0027status\u0027, \u0027image_metadata\u0027,"},{"line_number":18,"context_line":"        \u0027bootable\u0027, \u0027migration_status\u0027"},{"line_number":19,"context_line":"    ],"},{"line_number":20,"context_line":"    \u0027resource\u0027: \u0027volume\u0027"},{"line_number":21,"context_line":"}"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"8ec54149_bdf5cda0","line":19,"updated":"2021-02-25 15:07:31.000000000","message":"style nit: these could all fit on one line, right? It\u0027s a bit weird splitting it arbitrarily like this. I\u0027d either put them all on one line or put everything on its own line as you had done in PS3 (patchset)","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":33036,"name":"James Palmer","display_name":"James Palmer","email":"jpalmer7698@gmail.com","username":"twilit_dragon","status":"🏠"},"change_message_id":"76dfe39efbd2eabd50e9897788cddd9dfe11cbbc","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    \u0027filters\u0027: ["},{"line_number":17,"context_line":"        \u0027name\u0027, \u0027status\u0027, \u0027image_metadata\u0027,"},{"line_number":18,"context_line":"        \u0027bootable\u0027, \u0027migration_status\u0027"},{"line_number":19,"context_line":"    ],"},{"line_number":20,"context_line":"    \u0027resource\u0027: \u0027volume\u0027"},{"line_number":21,"context_line":"}"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5105d1bc_a3dae3a7","line":19,"in_reply_to":"8ec54149_bdf5cda0","updated":"2021-02-27 23:24:23.000000000","message":"Done","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f0a5a1f47daf9ef34efd79e031ca6c680a32e53","unresolved":true,"context_lines":[{"line_number":24,"context_line":"class TestResourceFilter(base.TestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_basic(self):"},{"line_number":27,"context_line":"        resource_filter_resource \u003d resource_filter.ResourceFilter()"},{"line_number":28,"context_line":"        self.assertEqual(\u0027resource_filter\u0027,"},{"line_number":29,"context_line":"                         resource_filter_resource.resource_key)"},{"line_number":30,"context_line":"        self.assertEqual(\u0027resource_filters\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"4b426a46_003a8bc4","line":27,"range":{"start_line":27,"start_character":8,"end_line":27,"end_character":32},"updated":"2021-02-25 15:07:31.000000000","message":"Maybe we have a pattern of doing this elsewhere, and even if we don\u0027t there\u0027s no need to change this, but you _could_ just say \u0027resource\u0027? It\u0027s pretty unambiguous, given the context","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":33036,"name":"James Palmer","display_name":"James Palmer","email":"jpalmer7698@gmail.com","username":"twilit_dragon","status":"🏠"},"change_message_id":"76dfe39efbd2eabd50e9897788cddd9dfe11cbbc","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class TestResourceFilter(base.TestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_basic(self):"},{"line_number":27,"context_line":"        resource_filter_resource \u003d resource_filter.ResourceFilter()"},{"line_number":28,"context_line":"        self.assertEqual(\u0027resource_filter\u0027,"},{"line_number":29,"context_line":"                         resource_filter_resource.resource_key)"},{"line_number":30,"context_line":"        self.assertEqual(\u0027resource_filters\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"a7133660_176c7559","line":27,"range":{"start_line":27,"start_character":8,"end_line":27,"end_character":32},"in_reply_to":"4b426a46_003a8bc4","updated":"2021-02-27 23:24:23.000000000","message":"Done","commit_id":"fb669c7010f342e9918aecf24237fd9e5e567877"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"022f959234ed4aa11816ad04b1b536595c01e4ec","unresolved":true,"context_lines":[{"line_number":36,"context_line":"        self.assertFalse(resource.allow_fetch)"},{"line_number":37,"context_line":"        self.assertFalse(resource.allow_commit)"},{"line_number":38,"context_line":"        self.assertFalse(resource.allow_delete)"},{"line_number":39,"context_line":"        self.assertTrue(resource.allow_list)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def test_make_resource_filter(self):"},{"line_number":42,"context_line":"        resource \u003d resource_filter.ResourceFilter("}],"source_content_type":"text/x-python","patch_set":7,"id":"35762aaf_f15273d0","line":39,"updated":"2021-03-04 11:56:28.000000000","message":"Please also add verification of the query parameters","commit_id":"bf9e3dca91fc1e04e5db4a7d75614ba3de5547a5"}]}
