)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"f80d931f569a2525f32f3c19e7e18ad55918ee93","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"8a2470ff_c9df13f1","updated":"2022-05-07 04:02:53.000000000","message":"This is kinda weirdly limited. Is this because of that call chain thing that we talked about? Or is something different about request headers specifically?","commit_id":"9d63dca8424c665a1df453eaac54065d75aaff90"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"0fe5a8a540e75cb150210b7dfb5e293e7c94050f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"62a77394_7b5aa0b2","updated":"2022-05-09 15:07:27.000000000","message":"I don\u0027t see any issues.","commit_id":"b77737313dc32d4e5f5dd2960fbe5ffac4ae0b54"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"7532f1fd7605159835bc6a577a59ab3f559834cc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"4c5afb06_cbb92a80","updated":"2022-05-09 22:10:12.000000000","message":"recheck\n\ncinder-plugin-ceph-tempest n-cpu failed to talk to the DB server\n","commit_id":"edbaad6868ce04761339f0fa5d7cf05203457d59"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"fdc14e92dc8b7ace9b5f750efbd221d9e0b8030b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"b70d706f_96a43b1b","updated":"2022-05-12 13:44:33.000000000","message":"Hijacking this patch to test swap size change for cinder-plugin-ceph-tempest job.","commit_id":"f23d1b603d89e91266a64dc2e141db7b5d6fad49"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6f0c7116026cec7bb0146632a95a2eb28dcb2738","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"11fe4240_705a7040","updated":"2022-05-12 13:47:19.000000000","message":"It would help if I used the correct patch as a dependency.","commit_id":"b525af353a0c890f8ea81cff049122c9091d3009"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"6497240f53a1b96b4366e7867275111e2608aa7c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"5eba069d_610ceb2a","updated":"2022-05-17 18:08:23.000000000","message":"cinderlib functional tests in cinder-plugin-ceph-tempest are broken","commit_id":"ea2f5b030b9a5bc373fb868be67751e426cfbb09"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2378fe2335c1087457d948cfbf9fc74fa61edc5e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"a18055b4_54deb97c","updated":"2022-05-17 22:33:08.000000000","message":"Looks good to me!","commit_id":"9dde7afad607ab99bd0fb943b0bfcad2c0c08a22"},{"author":{"_account_id":28801,"name":"Cisco Cinder CI","email":"cisco-cinder-ci@cisco.com","username":"cisco-cinder-ci"},"change_message_id":"f0d804217ae4950c276351926b5f0654574a423d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"18dc55e7_bde9ea6f","updated":"2022-05-24 14:32:13.000000000","message":"cisco-cinder-ci","commit_id":"49eb2d4a3997fbfe028bf3ddd0fa33e5aaedacba"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"933299c70e8861ff4b6f7f0bfa1e281e70cd65b6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"9d362634_f444fae2","updated":"2022-06-21 15:59:23.000000000","message":"I looked at differences from patch 5 and they look good:\n1 conditional import\n2 switching context.xxx to string","commit_id":"4c24a3a54c693f2120104abc45df6b5e4622b884"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"42acb794d20f37d03ba0f67e107b1b4addb6e020","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"1953a8dc_e9612415","updated":"2022-06-21 18:14:21.000000000","message":"Revision LGTM.","commit_id":"4c24a3a54c693f2120104abc45df6b5e4622b884"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"b2aa4b03623fbadfd015ac2b5b87a1326f7beb6a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"35cea424_9594678c","updated":"2022-06-21 17:36:16.000000000","message":"Thanks for the update","commit_id":"4c24a3a54c693f2120104abc45df6b5e4622b884"}],"cinder/api/api_utils.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"f80d931f569a2525f32f3c19e7e18ad55918ee93","unresolved":true,"context_lines":[{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def _parse_is_public(is_public) -\u003e Optional[bool]:"},{"line_number":39,"context_line":"    \"\"\"Parse is_public into something usable."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    * True: List public volume types only"}],"source_content_type":"text/x-python","patch_set":2,"id":"77cbda87_08545dde","line":38,"updated":"2022-05-07 04:02:53.000000000","message":"Why is the is_public argument not marked, say Optional[str] or Union(str, None)? It this because doing so would provoke mypy to complain through whole call chain?","commit_id":"9d63dca8424c665a1df453eaac54065d75aaff90"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"7336df92a258cb119aa6ac6f739ab6f2bf9202e2","unresolved":false,"context_lines":[{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def _parse_is_public(is_public) -\u003e Optional[bool]:"},{"line_number":39,"context_line":"    \"\"\"Parse is_public into something usable."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    * True: List public volume types only"}],"source_content_type":"text/x-python","patch_set":2,"id":"ce76ec55_aeb35bf6","line":38,"in_reply_to":"77cbda87_08545dde","updated":"2022-05-09 14:22:46.000000000","message":"Done","commit_id":"9d63dca8424c665a1df453eaac54065d75aaff90"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"af07a9097e1f7e761ce918269245560b79db4b56","unresolved":true,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def remove_invalid_filter_options(context: context.RequestContext,"},{"line_number":68,"context_line":"                                  filters: dict,"},{"line_number":69,"context_line":"                                  allowed_search_options: Iterable) -\u003e None:"},{"line_number":70,"context_line":"    \"\"\"Remove search options that are not valid for non-admin API/context.\"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    if context.is_admin:"}],"source_content_type":"text/x-python","patch_set":3,"id":"52034f10_a3b5416c","line":69,"range":{"start_line":69,"start_character":58,"end_line":69,"end_character":66},"updated":"2022-05-09 15:14:26.000000000","message":"Should this be Iterable[str] ?","commit_id":"b77737313dc32d4e5f5dd2960fbe5ffac4ae0b54"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"fa462f9f797b57f6ee54a4b4b5e951f83764cd67","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def remove_invalid_filter_options(context: context.RequestContext,"},{"line_number":68,"context_line":"                                  filters: dict,"},{"line_number":69,"context_line":"                                  allowed_search_options: Iterable) -\u003e None:"},{"line_number":70,"context_line":"    \"\"\"Remove search options that are not valid for non-admin API/context.\"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    if context.is_admin:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1c85fd28_328a44e4","line":69,"range":{"start_line":69,"start_character":58,"end_line":69,"end_character":66},"in_reply_to":"52034f10_a3b5416c","updated":"2022-05-09 17:22:50.000000000","message":"Done","commit_id":"b77737313dc32d4e5f5dd2960fbe5ffac4ae0b54"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"af07a9097e1f7e761ce918269245560b79db4b56","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"def _keystone_client(context: context.RequestContext,"},{"line_number":166,"context_line":"                     version: tuple[int, int] \u003d (3, 0)) -\u003e client.Client:"},{"line_number":167,"context_line":"    \"\"\"Creates and returns an instance of a generic keystone client."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    :param context: The request context"}],"source_content_type":"text/x-python","patch_set":3,"id":"f3033c9e_231191de","line":166,"range":{"start_line":166,"start_character":30,"end_line":166,"end_character":35},"updated":"2022-05-09 15:14:26.000000000","message":"it\u0027s so nice to be able to use the future annotations that include the tuple...","commit_id":"b77737313dc32d4e5f5dd2960fbe5ffac4ae0b54"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"b3ba73ac5f20410e7515a4927b25562e8b400946","unresolved":false,"context_lines":[{"line_number":25,"context_line":"import webob"},{"line_number":26,"context_line":"from webob import exc"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"if typing.TYPE_CHECKING:"},{"line_number":29,"context_line":"    from cinder import context"},{"line_number":30,"context_line":"from cinder import exception"},{"line_number":31,"context_line":"from cinder.i18n import _"}],"source_content_type":"text/x-python","patch_set":10,"id":"5fbf16c6_a7633ef1","line":28,"updated":"2022-05-18 17:28:30.000000000","message":"FYI, this was required to prevent a circular import problem from cinderlib.","commit_id":"9dde7afad607ab99bd0fb943b0bfcad2c0c08a22"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"76b48c26576c5bec31b8d09fad47cae3e49aa538","unresolved":true,"context_lines":[{"line_number":25,"context_line":"import webob"},{"line_number":26,"context_line":"from webob import exc"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"if typing.TYPE_CHECKING:"},{"line_number":29,"context_line":"    from cinder import context"},{"line_number":30,"context_line":"from cinder import exception"},{"line_number":31,"context_line":"from cinder.i18n import _"}],"source_content_type":"text/x-python","patch_set":12,"id":"d55dd2e3_ae3d56b9","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":24},"updated":"2022-06-21 14:33:10.000000000","message":"nit: We should add a comment saying this was required to prevent a circular import problem from cinderlib.","commit_id":"49eb2d4a3997fbfe028bf3ddd0fa33e5aaedacba"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"b2aa4b03623fbadfd015ac2b5b87a1326f7beb6a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"import webob"},{"line_number":26,"context_line":"from webob import exc"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"if typing.TYPE_CHECKING:"},{"line_number":29,"context_line":"    from cinder import context"},{"line_number":30,"context_line":"from cinder import exception"},{"line_number":31,"context_line":"from cinder.i18n import _"}],"source_content_type":"text/x-python","patch_set":12,"id":"4014e1a8_5414c867","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":24},"in_reply_to":"d55dd2e3_ae3d56b9","updated":"2022-06-21 17:36:16.000000000","message":"Done","commit_id":"49eb2d4a3997fbfe028bf3ddd0fa33e5aaedacba"}],"cinder/api/common.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"f80d931f569a2525f32f3c19e7e18ad55918ee93","unresolved":true,"context_lines":[{"line_number":426,"context_line":"            filters.pop(key)"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"def reject_invalid_filters(ctxt: \u0027context.RequestContext\u0027,"},{"line_number":430,"context_line":"                           filters, resource,"},{"line_number":431,"context_line":"                           enable_like_filter\u003dFalse):"},{"line_number":432,"context_line":"    invalid_filters \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"db939e04_c3ebd668","line":429,"updated":"2022-05-07 04:02:53.000000000","message":"Why was it harmful to keep the name of the parameter?","commit_id":"9d63dca8424c665a1df453eaac54065d75aaff90"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"7336df92a258cb119aa6ac6f739ab6f2bf9202e2","unresolved":false,"context_lines":[{"line_number":426,"context_line":"            filters.pop(key)"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"def reject_invalid_filters(ctxt: \u0027context.RequestContext\u0027,"},{"line_number":430,"context_line":"                           filters, resource,"},{"line_number":431,"context_line":"                           enable_like_filter\u003dFalse):"},{"line_number":432,"context_line":"    invalid_filters \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"079480b3_d5ec6ef8","line":429,"in_reply_to":"db939e04_c3ebd668","updated":"2022-05-09 14:22:46.000000000","message":"I ran into some sort of conflict between the \"context\" arg here and \"from cinder import context\" while working on this, but now I can\u0027t reproduce it, so I\u0027ll revert this part of the change.","commit_id":"9d63dca8424c665a1df453eaac54065d75aaff90"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"664f09117237a8b90e08edfc6eec36f6fdd11bae","unresolved":true,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"METADATA_TYPES \u003d enum.Enum(\u0027METADATA_TYPES\u0027, \u0027user image\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def get_pagination_params(params: dict,"},{"line_number":63,"context_line":"                          max_limit: Optional[int] \u003d None) -\u003e tuple:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3838ea8c_a1be9f29","line":60,"updated":"2022-05-09 14:23:07.000000000","message":"Some of these changes can be moved over to\n    https://review.opendev.org/c/openstack/cinder/+/841125/","commit_id":"b77737313dc32d4e5f5dd2960fbe5ffac4ae0b54"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"5755e4b68d34b05169b516350c13098ccc405545","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"METADATA_TYPES \u003d enum.Enum(\u0027METADATA_TYPES\u0027, \u0027user image\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def get_pagination_params(params: dict,"},{"line_number":63,"context_line":"                          max_limit: Optional[int] \u003d None) -\u003e tuple:"}],"source_content_type":"text/x-python","patch_set":3,"id":"b24be64e_336f2105","line":60,"in_reply_to":"2c8c6f00_0a9b0615","updated":"2022-05-09 17:26:00.000000000","message":"Those changes have been moved to https://review.opendev.org/c/openstack/cinder/+/841125/ .","commit_id":"b77737313dc32d4e5f5dd2960fbe5ffac4ae0b54"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"0fe5a8a540e75cb150210b7dfb5e293e7c94050f","unresolved":true,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"METADATA_TYPES \u003d enum.Enum(\u0027METADATA_TYPES\u0027, \u0027user image\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def get_pagination_params(params: dict,"},{"line_number":63,"context_line":"                          max_limit: Optional[int] \u003d None) -\u003e tuple:"}],"source_content_type":"text/x-python","patch_set":3,"id":"2c8c6f00_0a9b0615","line":60,"in_reply_to":"3838ea8c_a1be9f29","updated":"2022-05-09 15:07:27.000000000","message":"What are the implications for that \"they can be moved\"? Should I not review until they are or review with that in mind?","commit_id":"b77737313dc32d4e5f5dd2960fbe5ffac4ae0b54"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"af07a9097e1f7e761ce918269245560b79db4b56","unresolved":true,"context_lines":[{"line_number":59,"context_line":"METADATA_TYPES \u003d enum.Enum(\u0027METADATA_TYPES\u0027, \u0027user image\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def get_pagination_params(params: dict,"},{"line_number":63,"context_line":"                          max_limit: Optional[int] \u003d None) -\u003e tuple:"},{"line_number":64,"context_line":"    \"\"\"Return marker, limit, offset tuple from request."},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"86455081_38ab2668","line":62,"range":{"start_line":62,"start_character":34,"end_line":62,"end_character":38},"updated":"2022-05-09 15:14:26.000000000","message":"?: Don\u0027t we need to import annotations from future to be able to use dict instead of Dict?","commit_id":"b77737313dc32d4e5f5dd2960fbe5ffac4ae0b54"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"fa462f9f797b57f6ee54a4b4b5e951f83764cd67","unresolved":true,"context_lines":[{"line_number":59,"context_line":"METADATA_TYPES \u003d enum.Enum(\u0027METADATA_TYPES\u0027, \u0027user image\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def get_pagination_params(params: dict,"},{"line_number":63,"context_line":"                          max_limit: Optional[int] \u003d None) -\u003e tuple:"},{"line_number":64,"context_line":"    \"\"\"Return marker, limit, offset tuple from request."},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ec5a31f4_21f8181b","line":62,"range":{"start_line":62,"start_character":34,"end_line":62,"end_character":38},"in_reply_to":"86455081_38ab2668","updated":"2022-05-09 17:22:50.000000000","message":"Yes, this caused the py38 job to fail.","commit_id":"b77737313dc32d4e5f5dd2960fbe5ffac4ae0b54"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c59b4dac755523760761383af199ea97508f4deb","unresolved":false,"context_lines":[{"line_number":59,"context_line":"METADATA_TYPES \u003d enum.Enum(\u0027METADATA_TYPES\u0027, \u0027user image\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def get_pagination_params(params: dict,"},{"line_number":63,"context_line":"                          max_limit: Optional[int] \u003d None) -\u003e tuple:"},{"line_number":64,"context_line":"    \"\"\"Return marker, limit, offset tuple from request."},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f5b5a56_c69301da","line":62,"range":{"start_line":62,"start_character":34,"end_line":62,"end_character":38},"in_reply_to":"ec5a31f4_21f8181b","updated":"2022-06-07 13:42:02.000000000","message":"Done","commit_id":"b77737313dc32d4e5f5dd2960fbe5ffac4ae0b54"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"af07a9097e1f7e761ce918269245560b79db4b56","unresolved":true,"context_lines":[{"line_number":102,"context_line":"    return limit"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"def _get_marker_param(params) -\u003e Optional[str]:"},{"line_number":106,"context_line":"    \"\"\"Extract marker id from request\u0027s dictionary (defaults to None).\"\"\""},{"line_number":107,"context_line":"    return params.pop(\u0027marker\u0027, None)"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"e22b7127_146661ae","line":105,"range":{"start_line":105,"start_character":22,"end_line":105,"end_character":28},"updated":"2022-05-09 15:14:26.000000000","message":"?: Dict[str, typing.Any]","commit_id":"b77737313dc32d4e5f5dd2960fbe5ffac4ae0b54"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"af07a9097e1f7e761ce918269245560b79db4b56","unresolved":true,"context_lines":[{"line_number":107,"context_line":"    return params.pop(\u0027marker\u0027, None)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"def _get_offset_param(params) -\u003e int:"},{"line_number":111,"context_line":"    \"\"\"Extract offset id from request\u0027s dictionary (defaults to 0) or fail.\"\"\""},{"line_number":112,"context_line":"    offset \u003d params.pop(\u0027offset\u0027, 0)"},{"line_number":113,"context_line":"    return api_utils.validate_integer(offset,"}],"source_content_type":"text/x-python","patch_set":3,"id":"97501b5f_608868ac","line":110,"range":{"start_line":110,"start_character":22,"end_line":110,"end_character":28},"updated":"2022-05-09 15:14:26.000000000","message":"ditto","commit_id":"b77737313dc32d4e5f5dd2960fbe5ffac4ae0b54"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"af07a9097e1f7e761ce918269245560b79db4b56","unresolved":true,"context_lines":[{"line_number":263,"context_line":"        prefix \u003d self._update_link_prefix(get_request_url(request),"},{"line_number":264,"context_line":"                                          CONF.public_endpoint)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        assert self._collection_name is not None"},{"line_number":267,"context_line":"        return os.path.join(prefix,"},{"line_number":268,"context_line":"                            self._get_project_id_in_url(request),"},{"line_number":269,"context_line":"                            self._collection_name,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1e8ccf4d_0d878803","line":266,"updated":"2022-05-09 15:14:26.000000000","message":"?: Is this added so that mypy doesn\u0027t complain about the join?","commit_id":"b77737313dc32d4e5f5dd2960fbe5ffac4ae0b54"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"fa462f9f797b57f6ee54a4b4b5e951f83764cd67","unresolved":true,"context_lines":[{"line_number":263,"context_line":"        prefix \u003d self._update_link_prefix(get_request_url(request),"},{"line_number":264,"context_line":"                                          CONF.public_endpoint)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        assert self._collection_name is not None"},{"line_number":267,"context_line":"        return os.path.join(prefix,"},{"line_number":268,"context_line":"                            self._get_project_id_in_url(request),"},{"line_number":269,"context_line":"                            self._collection_name,"}],"source_content_type":"text/x-python","patch_set":3,"id":"234bac4d_c076ad92","line":266,"in_reply_to":"1e8ccf4d_0d878803","updated":"2022-05-09 17:22:50.000000000","message":"Yes, this has to be here to eliminate the case where self._collection_name is None.","commit_id":"b77737313dc32d4e5f5dd2960fbe5ffac4ae0b54"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"0542c7f555b42647c0eadf9150adafffbb918ca1","unresolved":true,"context_lines":[{"line_number":258,"context_line":"        \"\"\"Return an href string pointing to this object.\"\"\""},{"line_number":259,"context_line":"        prefix \u003d self._update_link_prefix(get_request_url(request),"},{"line_number":260,"context_line":"                                          CONF.public_endpoint)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        return os.path.join(prefix,"},{"line_number":263,"context_line":"                            self._get_project_id_in_url(request),"},{"line_number":264,"context_line":"                            self._collection_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"e525a7d1_318b7150","line":261,"updated":"2022-05-09 17:26:31.000000000","message":"Arg, formatting mistake here.","commit_id":"f08ce331da2136675071b5a138b6d138f977c1fe"}]}
