)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"fe24eb088ce4ad350b8903ffdba8d98d7660c72d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"76b593f7_59df86ca","updated":"2023-08-04 11:52:44.000000000","message":"sorry, messed around a bit after long time not touching","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"2a336c8b_de7cfa4c","updated":"2023-08-17 11:00:00.000000000","message":"thanks for review. Addressed now hopefully all points and stripped certain things into separate changes to keep it simplier","commit_id":"f8e22d93da3dd18bbb806ccb57cfbc120be0aeb9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"beb554a2dc9f10f9fd96910b3692f1a752213bf5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"e04bc457_a98b0756","updated":"2023-08-25 09:58:59.000000000","message":"Seeing as you need to fix stuff here anyway...","commit_id":"8d87f688bc98e4c422c66492418cde4e9edf4c01"}],"openstack/resource.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3e7e3417d6c4272e6f0ecd8880244e680e4775fa","unresolved":true,"context_lines":[{"line_number":106,"context_line":"    # mandatory property during update"},{"line_number":107,"context_line":"    on_update_mandatory \u003d False"},{"line_number":108,"context_line":"    # property update is possible"},{"line_number":109,"context_line":"    allow_update \u003d True"},{"line_number":110,"context_line":"    # read only property - usually means it is a value generated by server"},{"line_number":111,"context_line":"    # and can not be change (like ID)"},{"line_number":112,"context_line":"    read_only \u003d False"}],"source_content_type":"text/x-python","patch_set":3,"id":"0b5b47e2_033cb6bd","line":109,"updated":"2023-06-01 16:43:17.000000000","message":"How about `create_only`?","commit_id":"e1ae8c76c5382150f3e56fb454b8b590e89d3b47"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"763cfb3cccf59a7e8a38639596410fb1888d6b45","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    # mandatory property during update"},{"line_number":107,"context_line":"    on_update_mandatory \u003d False"},{"line_number":108,"context_line":"    # property update is possible"},{"line_number":109,"context_line":"    allow_update \u003d True"},{"line_number":110,"context_line":"    # read only property - usually means it is a value generated by server"},{"line_number":111,"context_line":"    # and can not be change (like ID)"},{"line_number":112,"context_line":"    read_only \u003d False"}],"source_content_type":"text/x-python","patch_set":3,"id":"4d5393c8_4a7b21e3","line":109,"in_reply_to":"0b5b47e2_033cb6bd","updated":"2023-06-06 15:32:26.000000000","message":"Done","commit_id":"e1ae8c76c5382150f3e56fb454b8b590e89d3b47"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3e7e3417d6c4272e6f0ecd8880244e680e4775fa","unresolved":true,"context_lines":[{"line_number":112,"context_line":"    read_only \u003d False"},{"line_number":113,"context_line":"    # earliest microversion the property is present"},{"line_number":114,"context_line":"    min_microversion \u003d None"},{"line_number":115,"context_line":"    # highest microversion the property is supported (i.e. deprecated)"},{"line_number":116,"context_line":"    max_microversion \u003d None"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def __init__("}],"source_content_type":"text/x-python","patch_set":3,"id":"2d95eced_5cc4e51c","line":115,"range":{"start_line":115,"start_character":43,"end_line":115,"end_character":52},"updated":"2023-06-01 16:43:17.000000000","message":"present","commit_id":"e1ae8c76c5382150f3e56fb454b8b590e89d3b47"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"763cfb3cccf59a7e8a38639596410fb1888d6b45","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    read_only \u003d False"},{"line_number":113,"context_line":"    # earliest microversion the property is present"},{"line_number":114,"context_line":"    min_microversion \u003d None"},{"line_number":115,"context_line":"    # highest microversion the property is supported (i.e. deprecated)"},{"line_number":116,"context_line":"    max_microversion \u003d None"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def __init__("}],"source_content_type":"text/x-python","patch_set":3,"id":"d10dddb3_58363121","line":115,"range":{"start_line":115,"start_character":43,"end_line":115,"end_character":52},"in_reply_to":"2d95eced_5cc4e51c","updated":"2023-06-06 15:32:26.000000000","message":"Done","commit_id":"e1ae8c76c5382150f3e56fb454b8b590e89d3b47"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3e7e3417d6c4272e6f0ecd8880244e680e4775fa","unresolved":true,"context_lines":[{"line_number":198,"context_line":"            \"on_update_mandatory\","},{"line_number":199,"context_line":"            \"allow_update\","},{"line_number":200,"context_line":"        ]:"},{"line_number":201,"context_line":"            if attr in kwargs:"},{"line_number":202,"context_line":"                setattr(self, attr, kwargs[attr])"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def __get__(self, instance, owner):"}],"source_content_type":"text/x-python","patch_set":3,"id":"2f3b753d_689eacf1","line":201,"updated":"2023-06-01 16:43:17.000000000","message":"Can we make these kwarg-only arguments instead? Avoiding unnecessary use of getattr/setattr is generally a good strategy when it comes to Python code 😅","commit_id":"e1ae8c76c5382150f3e56fb454b8b590e89d3b47"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"763cfb3cccf59a7e8a38639596410fb1888d6b45","unresolved":false,"context_lines":[{"line_number":198,"context_line":"            \"on_update_mandatory\","},{"line_number":199,"context_line":"            \"allow_update\","},{"line_number":200,"context_line":"        ]:"},{"line_number":201,"context_line":"            if attr in kwargs:"},{"line_number":202,"context_line":"                setattr(self, attr, kwargs[attr])"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def __get__(self, instance, owner):"}],"source_content_type":"text/x-python","patch_set":3,"id":"f0a9a9db_12b9b2f6","line":201,"in_reply_to":"2f3b753d_689eacf1","updated":"2023-06-06 15:32:26.000000000","message":"Done","commit_id":"e1ae8c76c5382150f3e56fb454b8b590e89d3b47"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3e7e3417d6c4272e6f0ecd8880244e680e4775fa","unresolved":true,"context_lines":[{"line_number":748,"context_line":"                )"},{"line_number":749,"context_line":"            )"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"    def __setattr__(self, name: str, value):"},{"line_number":752,"context_line":"        real_item \u003d getattr(self.__class__, name, None)"},{"line_number":753,"context_line":"        if isinstance(real_item, Body) or isinstance(real_item, Header):"},{"line_number":754,"context_line":"            if real_item.read_only:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3009de2b_fee01918","line":751,"updated":"2023-06-01 16:43:17.000000000","message":"Can you add a docstring or comment explaining why this is necessary?","commit_id":"e1ae8c76c5382150f3e56fb454b8b590e89d3b47"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"763cfb3cccf59a7e8a38639596410fb1888d6b45","unresolved":false,"context_lines":[{"line_number":748,"context_line":"                )"},{"line_number":749,"context_line":"            )"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"    def __setattr__(self, name: str, value):"},{"line_number":752,"context_line":"        real_item \u003d getattr(self.__class__, name, None)"},{"line_number":753,"context_line":"        if isinstance(real_item, Body) or isinstance(real_item, Header):"},{"line_number":754,"context_line":"            if real_item.read_only:"}],"source_content_type":"text/x-python","patch_set":3,"id":"f8dd466a_7ee9cf3e","line":751,"in_reply_to":"3009de2b_fee01918","updated":"2023-06-06 15:32:26.000000000","message":"Done","commit_id":"e1ae8c76c5382150f3e56fb454b8b590e89d3b47"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3e7e3417d6c4272e6f0ecd8880244e680e4775fa","unresolved":true,"context_lines":[{"line_number":811,"context_line":"        body, header, uri, computed \u003d self._collect_attrs(attrs)"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"        if body and isinstance(body, dict):"},{"line_number":814,"context_line":"            #  Verify we are not going to even try to update read_only"},{"line_number":815,"context_line":"            #  properties"},{"line_number":816,"context_line":"            for attr, new_val in body.items():"},{"line_number":817,"context_line":"                real_item \u003d getattr(self.__class__, attr, None)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f927bc5_3d49c687","line":814,"range":{"start_line":814,"start_character":13,"end_line":814,"end_character":15},"updated":"2023-06-01 16:43:17.000000000","message":"too many spaces?","commit_id":"e1ae8c76c5382150f3e56fb454b8b590e89d3b47"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"763cfb3cccf59a7e8a38639596410fb1888d6b45","unresolved":false,"context_lines":[{"line_number":811,"context_line":"        body, header, uri, computed \u003d self._collect_attrs(attrs)"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"        if body and isinstance(body, dict):"},{"line_number":814,"context_line":"            #  Verify we are not going to even try to update read_only"},{"line_number":815,"context_line":"            #  properties"},{"line_number":816,"context_line":"            for attr, new_val in body.items():"},{"line_number":817,"context_line":"                real_item \u003d getattr(self.__class__, attr, None)"}],"source_content_type":"text/x-python","patch_set":3,"id":"4a88062f_580fb17d","line":814,"range":{"start_line":814,"start_character":13,"end_line":814,"end_character":15},"in_reply_to":"7f927bc5_3d49c687","updated":"2023-06-06 15:32:26.000000000","message":"Done","commit_id":"e1ae8c76c5382150f3e56fb454b8b590e89d3b47"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"02e47608cdb9a555492ad38d84f60758126c14d1","unresolved":true,"context_lines":[{"line_number":101,"context_line":"    # only once when the attribute is retrieved in the code."},{"line_number":102,"context_line":"    already_warned_deprecation \u003d False"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    # mandatory property during creation"},{"line_number":105,"context_line":"    on_create_mandatory \u003d False"},{"line_number":106,"context_line":"    # mandatory property during update"},{"line_number":107,"context_line":"    on_update_mandatory \u003d False"}],"source_content_type":"text/x-python","patch_set":9,"id":"dd8adcd5_b5e12ca3","line":104,"updated":"2023-06-09 17:14:53.000000000","message":"I wonder if these should be exposed or if they should be private? If they should be exposed, you need to use `#:` instead of `#` so Sphinx will pick them up. Otherwise, prefix with `_`","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"72cf8adb76609c03739391665e233ac5d8d8f5e5","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    # only once when the attribute is retrieved in the code."},{"line_number":102,"context_line":"    already_warned_deprecation \u003d False"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    # mandatory property during creation"},{"line_number":105,"context_line":"    on_create_mandatory \u003d False"},{"line_number":106,"context_line":"    # mandatory property during update"},{"line_number":107,"context_line":"    on_update_mandatory \u003d False"}],"source_content_type":"text/x-python","patch_set":9,"id":"c8513152_34291d14","line":104,"in_reply_to":"dd8adcd5_b5e12ca3","updated":"2023-08-11 16:07:48.000000000","message":"Done","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"02e47608cdb9a555492ad38d84f60758126c14d1","unresolved":true,"context_lines":[{"line_number":129,"context_line":"        coerce_to_default\u003dFalse,"},{"line_number":130,"context_line":"        deprecated\u003dFalse,"},{"line_number":131,"context_line":"        deprecation_reason\u003dNone,"},{"line_number":132,"context_line":"        on_create_mandatory\u003dFalse,"},{"line_number":133,"context_line":"        on_update_mandatory\u003dFalse,"},{"line_number":134,"context_line":"        create_only\u003dFalse,"},{"line_number":135,"context_line":"        read_only\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":9,"id":"4dbed617_c884165b","line":132,"updated":"2023-06-09 17:14:53.000000000","message":"These should be kwarg-only arguments. In fact, pretty much all of these except `name` should be but that might break some users.","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"72cf8adb76609c03739391665e233ac5d8d8f5e5","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        coerce_to_default\u003dFalse,"},{"line_number":130,"context_line":"        deprecated\u003dFalse,"},{"line_number":131,"context_line":"        deprecation_reason\u003dNone,"},{"line_number":132,"context_line":"        on_create_mandatory\u003dFalse,"},{"line_number":133,"context_line":"        on_update_mandatory\u003dFalse,"},{"line_number":134,"context_line":"        create_only\u003dFalse,"},{"line_number":135,"context_line":"        read_only\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":9,"id":"f3695f95_dffb2a55","line":132,"in_reply_to":"4dbed617_c884165b","updated":"2023-08-11 16:07:48.000000000","message":"I think you misunderstood me. Comment left on PS12","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"02e47608cdb9a555492ad38d84f60758126c14d1","unresolved":true,"context_lines":[{"line_number":176,"context_line":"            and can not be updated."},{"line_number":177,"context_line":"        :param bool create_only:"},{"line_number":178,"context_line":"            Indicates whether property can be used only in create request"},{"line_number":179,"context_line":"            (update possible)."},{"line_number":180,"context_line":"        :param str min_version:"},{"line_number":181,"context_line":"            When service supports microversions using this attribute will"},{"line_number":182,"context_line":"            verify specified microversion is supported by the server to use"}],"source_content_type":"text/x-python","patch_set":9,"id":"6b53fd33_bbfc7b37","line":179,"updated":"2023-06-09 17:14:53.000000000","message":"nit: These are backwards","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"72cf8adb76609c03739391665e233ac5d8d8f5e5","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            and can not be updated."},{"line_number":177,"context_line":"        :param bool create_only:"},{"line_number":178,"context_line":"            Indicates whether property can be used only in create request"},{"line_number":179,"context_line":"            (update possible)."},{"line_number":180,"context_line":"        :param str min_version:"},{"line_number":181,"context_line":"            When service supports microversions using this attribute will"},{"line_number":182,"context_line":"            verify specified microversion is supported by the server to use"}],"source_content_type":"text/x-python","patch_set":9,"id":"c6886b6d_2cf96144","line":179,"in_reply_to":"6b53fd33_bbfc7b37","updated":"2023-08-11 16:07:48.000000000","message":"Done","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7d7ca6a606ab6295d6e742a825f92be140f4eb5b","unresolved":true,"context_lines":[{"line_number":548,"context_line":"    create_returns_body \u003d None"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    #: Maximum microversion to use for getting/creating/updating the Resource"},{"line_number":551,"context_line":"    _max_microversion \u003d None"},{"line_number":552,"context_line":"    #: API microversion (string or None) this Resource was loaded with"},{"line_number":553,"context_line":"    microversion \u003d None"},{"line_number":554,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"87e50f16_e400b5d1","line":551,"updated":"2023-07-20 11:09:25.000000000","message":"Can we add `min_version` and `max_version` to this also? We should probably deprecate the `_max_microversion` parameter if we do, so we can align with the `Component` attributes.","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":true,"context_lines":[{"line_number":548,"context_line":"    create_returns_body \u003d None"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    #: Maximum microversion to use for getting/creating/updating the Resource"},{"line_number":551,"context_line":"    _max_microversion \u003d None"},{"line_number":552,"context_line":"    #: API microversion (string or None) this Resource was loaded with"},{"line_number":553,"context_line":"    microversion \u003d None"},{"line_number":554,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"c946091f_6947c099","line":551,"in_reply_to":"2e1fd2a7_f00c28a7","updated":"2023-08-17 11:00:00.000000000","message":"done in a separate change (https://review.opendev.org/c/openstack/openstacksdk/+/891661)","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"72cf8adb76609c03739391665e233ac5d8d8f5e5","unresolved":true,"context_lines":[{"line_number":548,"context_line":"    create_returns_body \u003d None"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    #: Maximum microversion to use for getting/creating/updating the Resource"},{"line_number":551,"context_line":"    _max_microversion \u003d None"},{"line_number":552,"context_line":"    #: API microversion (string or None) this Resource was loaded with"},{"line_number":553,"context_line":"    microversion \u003d None"},{"line_number":554,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"2e1fd2a7_f00c28a7","line":551,"in_reply_to":"5ebed006_c966e688","updated":"2023-08-11 16:07:48.000000000","message":"Mostly. I was thinking `min_version` and `max_version` though to handle things like Glance that don\u0027t use microversions.","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"a69d2468e0c5f0445eeaeaa683bc8bf3bc34fdd1","unresolved":true,"context_lines":[{"line_number":548,"context_line":"    create_returns_body \u003d None"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    #: Maximum microversion to use for getting/creating/updating the Resource"},{"line_number":551,"context_line":"    _max_microversion \u003d None"},{"line_number":552,"context_line":"    #: API microversion (string or None) this Resource was loaded with"},{"line_number":553,"context_line":"    microversion \u003d None"},{"line_number":554,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5ebed006_c966e688","line":551,"in_reply_to":"87e50f16_e400b5d1","updated":"2023-08-04 11:20:56.000000000","message":"is this now what you are thinking about?","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"beb554a2dc9f10f9fd96910b3692f1a752213bf5","unresolved":false,"context_lines":[{"line_number":548,"context_line":"    create_returns_body \u003d None"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    #: Maximum microversion to use for getting/creating/updating the Resource"},{"line_number":551,"context_line":"    _max_microversion \u003d None"},{"line_number":552,"context_line":"    #: API microversion (string or None) this Resource was loaded with"},{"line_number":553,"context_line":"    microversion \u003d None"},{"line_number":554,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"512a0a2d_df235ac5","line":551,"in_reply_to":"c946091f_6947c099","updated":"2023-08-25 09:58:59.000000000","message":"Ack","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"72cf8adb76609c03739391665e233ac5d8d8f5e5","unresolved":true,"context_lines":[{"line_number":136,"context_line":"        coerce_to_default\u003dFalse,"},{"line_number":137,"context_line":"        deprecated\u003dFalse,"},{"line_number":138,"context_line":"        deprecation_reason\u003dNone,"},{"line_number":139,"context_line":"        **kwargs,"},{"line_number":140,"context_line":"    ):"},{"line_number":141,"context_line":"        \"\"\"A typed descriptor for a component that makes up a Resource"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9cf303a8_400c55e3","line":139,"updated":"2023-08-11 16:07:48.000000000","message":"Sorry, I said these should be kwarg-only arguments. What I meant it to use the kwarg-only syntax from [PEP-3102](https://peps.python.org/pep-3102/).\n\n```\ndef __init__(\n    self,\n    name,\n    ...\n    deprecation_reason\u003dNone,\n    *,\n    on_update_mandatory\u003dFalse,\n    create_only\u003dFalse,\n    read_only\u003dFalse,\n    min_version\u003dNone,\n    max_version\u003dNone,\n):\n    ...\n```","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        coerce_to_default\u003dFalse,"},{"line_number":137,"context_line":"        deprecated\u003dFalse,"},{"line_number":138,"context_line":"        deprecation_reason\u003dNone,"},{"line_number":139,"context_line":"        **kwargs,"},{"line_number":140,"context_line":"    ):"},{"line_number":141,"context_line":"        \"\"\"A typed descriptor for a component that makes up a Resource"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"dd14a6f4_d61d8322","line":139,"in_reply_to":"9cf303a8_400c55e3","updated":"2023-08-17 11:00:00.000000000","message":"Done","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":166,"context_line":"            warning message to the user."},{"line_number":167,"context_line":"        :param deprecation_reason:"},{"line_number":168,"context_line":"            Custom deprecation message."},{"line_number":169,"context_line":"        :param bool on_create_mandatory:"},{"line_number":170,"context_line":"            Indicates whether the property must be set during the resource"},{"line_number":171,"context_line":"            creation."},{"line_number":172,"context_line":"        :param bool on_update_mandatory:"}],"source_content_type":"text/x-python","patch_set":12,"id":"b7c79e97_f4ff72c5","line":169,"range":{"start_line":169,"start_character":20,"end_line":169,"end_character":39},"updated":"2023-08-11 16:34:44.000000000","message":"nit: This is total bikeshedding, but how about `create_required` or `required_on_create`? mandatory usually implied legal","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":false,"context_lines":[{"line_number":166,"context_line":"            warning message to the user."},{"line_number":167,"context_line":"        :param deprecation_reason:"},{"line_number":168,"context_line":"            Custom deprecation message."},{"line_number":169,"context_line":"        :param bool on_create_mandatory:"},{"line_number":170,"context_line":"            Indicates whether the property must be set during the resource"},{"line_number":171,"context_line":"            creation."},{"line_number":172,"context_line":"        :param bool on_update_mandatory:"}],"source_content_type":"text/x-python","patch_set":12,"id":"80a83536_e1074b37","line":169,"range":{"start_line":169,"start_character":20,"end_line":169,"end_character":39},"in_reply_to":"b7c79e97_f4ff72c5","updated":"2023-08-17 11:00:00.000000000","message":"Done","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":177,"context_line":"            and can not be updated."},{"line_number":178,"context_line":"        :param bool create_only:"},{"line_number":179,"context_line":"            Indicates whether property can be used only in create request"},{"line_number":180,"context_line":"            (update not possible)."},{"line_number":181,"context_line":"        :param str min_version:"},{"line_number":182,"context_line":"            When service supports microversions using this attribute will"},{"line_number":183,"context_line":"            verify specified microversion is supported by the server to use"}],"source_content_type":"text/x-python","patch_set":12,"id":"b375b6b8_4ddf1292","line":180,"updated":"2023-08-11 16:34:44.000000000","message":"nit:\n\n\u003e If true, it is not possible to update the value.","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            and can not be updated."},{"line_number":178,"context_line":"        :param bool create_only:"},{"line_number":179,"context_line":"            Indicates whether property can be used only in create request"},{"line_number":180,"context_line":"            (update not possible)."},{"line_number":181,"context_line":"        :param str min_version:"},{"line_number":182,"context_line":"            When service supports microversions using this attribute will"},{"line_number":183,"context_line":"            verify specified microversion is supported by the server to use"}],"source_content_type":"text/x-python","patch_set":12,"id":"4d3fb401_679e89c0","line":180,"in_reply_to":"b375b6b8_4ddf1292","updated":"2023-08-17 11:00:00.000000000","message":"Done","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":181,"context_line":"        :param str min_version:"},{"line_number":182,"context_line":"            When service supports microversions using this attribute will"},{"line_number":183,"context_line":"            verify specified microversion is supported by the server to use"},{"line_number":184,"context_line":"            this attribute. Without microversion support it requires api"},{"line_number":185,"context_line":"            version to be higer or equal to the specified value for using"},{"line_number":186,"context_line":"            this attribute."},{"line_number":187,"context_line":"        :param str max_version:"}],"source_content_type":"text/x-python","patch_set":12,"id":"de8b8daa_16e614f4","line":184,"range":{"start_line":184,"start_character":69,"end_line":184,"end_character":72},"updated":"2023-08-11 16:34:44.000000000","message":"nit:\n\n\u003e API","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        :param str min_version:"},{"line_number":182,"context_line":"            When service supports microversions using this attribute will"},{"line_number":183,"context_line":"            verify specified microversion is supported by the server to use"},{"line_number":184,"context_line":"            this attribute. Without microversion support it requires api"},{"line_number":185,"context_line":"            version to be higer or equal to the specified value for using"},{"line_number":186,"context_line":"            this attribute."},{"line_number":187,"context_line":"        :param str max_version:"}],"source_content_type":"text/x-python","patch_set":12,"id":"22383022_ffc5963b","line":184,"range":{"start_line":184,"start_character":69,"end_line":184,"end_character":72},"in_reply_to":"de8b8daa_16e614f4","updated":"2023-08-17 11:00:00.000000000","message":"Done","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":182,"context_line":"            When service supports microversions using this attribute will"},{"line_number":183,"context_line":"            verify specified microversion is supported by the server to use"},{"line_number":184,"context_line":"            this attribute. Without microversion support it requires api"},{"line_number":185,"context_line":"            version to be higer or equal to the specified value for using"},{"line_number":186,"context_line":"            this attribute."},{"line_number":187,"context_line":"        :param str max_version:"},{"line_number":188,"context_line":"            This parameter can be used only till the specified (micro)version"}],"source_content_type":"text/x-python","patch_set":12,"id":"ccb0a3bb_5ddea5ee","line":185,"range":{"start_line":185,"start_character":26,"end_line":185,"end_character":31},"updated":"2023-08-11 16:34:44.000000000","message":"nit:\n\n\u003e higher\n\nor, better:\n\n\u003e greater than","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            When service supports microversions using this attribute will"},{"line_number":183,"context_line":"            verify specified microversion is supported by the server to use"},{"line_number":184,"context_line":"            this attribute. Without microversion support it requires api"},{"line_number":185,"context_line":"            version to be higer or equal to the specified value for using"},{"line_number":186,"context_line":"            this attribute."},{"line_number":187,"context_line":"        :param str max_version:"},{"line_number":188,"context_line":"            This parameter can be used only till the specified (micro)version"}],"source_content_type":"text/x-python","patch_set":12,"id":"e6e13f58_805175ad","line":185,"range":{"start_line":185,"start_character":26,"end_line":185,"end_character":31},"in_reply_to":"ccb0a3bb_5ddea5ee","updated":"2023-08-17 11:00:00.000000000","message":"Done","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":185,"context_line":"            version to be higer or equal to the specified value for using"},{"line_number":186,"context_line":"            this attribute."},{"line_number":187,"context_line":"        :param str max_version:"},{"line_number":188,"context_line":"            This parameter can be used only till the specified (micro)version"},{"line_number":189,"context_line":"            (usually a deprecated parameter)."},{"line_number":190,"context_line":"        \"\"\""},{"line_number":191,"context_line":"        self.name \u003d name"}],"source_content_type":"text/x-python","patch_set":12,"id":"4b55d014_a1280a4e","line":188,"range":{"start_line":188,"start_character":44,"end_line":188,"end_character":48},"updated":"2023-08-11 16:34:44.000000000","message":"nit:\n\n\u003e until","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":185,"context_line":"            version to be higer or equal to the specified value for using"},{"line_number":186,"context_line":"            this attribute."},{"line_number":187,"context_line":"        :param str max_version:"},{"line_number":188,"context_line":"            This parameter can be used only till the specified (micro)version"},{"line_number":189,"context_line":"            (usually a deprecated parameter)."},{"line_number":190,"context_line":"        \"\"\""},{"line_number":191,"context_line":"        self.name \u003d name"}],"source_content_type":"text/x-python","patch_set":12,"id":"db0ce422_3b5c8a2b","line":188,"range":{"start_line":188,"start_character":63,"end_line":188,"end_character":77},"updated":"2023-08-11 16:34:44.000000000","message":"nit: expand this to\n\n\u003e version or microversion","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            version to be higer or equal to the specified value for using"},{"line_number":186,"context_line":"            this attribute."},{"line_number":187,"context_line":"        :param str max_version:"},{"line_number":188,"context_line":"            This parameter can be used only till the specified (micro)version"},{"line_number":189,"context_line":"            (usually a deprecated parameter)."},{"line_number":190,"context_line":"        \"\"\""},{"line_number":191,"context_line":"        self.name \u003d name"}],"source_content_type":"text/x-python","patch_set":12,"id":"ec278108_2c4fd5f4","line":188,"range":{"start_line":188,"start_character":44,"end_line":188,"end_character":48},"in_reply_to":"4b55d014_a1280a4e","updated":"2023-08-17 11:00:00.000000000","message":"Done","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            version to be higer or equal to the specified value for using"},{"line_number":186,"context_line":"            this attribute."},{"line_number":187,"context_line":"        :param str max_version:"},{"line_number":188,"context_line":"            This parameter can be used only till the specified (micro)version"},{"line_number":189,"context_line":"            (usually a deprecated parameter)."},{"line_number":190,"context_line":"        \"\"\""},{"line_number":191,"context_line":"        self.name \u003d name"}],"source_content_type":"text/x-python","patch_set":12,"id":"24b3e532_887f3b31","line":188,"range":{"start_line":188,"start_character":63,"end_line":188,"end_character":77},"in_reply_to":"db0ce422_3b5c8a2b","updated":"2023-08-17 11:00:00.000000000","message":"Done","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":186,"context_line":"            this attribute."},{"line_number":187,"context_line":"        :param str max_version:"},{"line_number":188,"context_line":"            This parameter can be used only till the specified (micro)version"},{"line_number":189,"context_line":"            (usually a deprecated parameter)."},{"line_number":190,"context_line":"        \"\"\""},{"line_number":191,"context_line":"        self.name \u003d name"},{"line_number":192,"context_line":"        self.type \u003d type"}],"source_content_type":"text/x-python","patch_set":12,"id":"19bd1d06_5e1b4a94","line":189,"updated":"2023-08-11 16:34:44.000000000","message":"nit:\n\n\u003e This is usually used for parameters that are deprecated.","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            this attribute."},{"line_number":187,"context_line":"        :param str max_version:"},{"line_number":188,"context_line":"            This parameter can be used only till the specified (micro)version"},{"line_number":189,"context_line":"            (usually a deprecated parameter)."},{"line_number":190,"context_line":"        \"\"\""},{"line_number":191,"context_line":"        self.name \u003d name"},{"line_number":192,"context_line":"        self.type \u003d type"}],"source_content_type":"text/x-python","patch_set":12,"id":"8bac0ca9_424e9952","line":189,"in_reply_to":"19bd1d06_5e1b4a94","updated":"2023-08-17 11:00:00.000000000","message":"Done","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":510,"context_line":"    pagination_key \u003d None"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"    #: The ID of this resource."},{"line_number":513,"context_line":"    id \u003d Body(\"id\", read_only\u003dTrue)"},{"line_number":514,"context_line":"    #: The name of this resource."},{"line_number":515,"context_line":"    name \u003d Body(\"name\")"},{"line_number":516,"context_line":"    #: The OpenStack location of this resource."}],"source_content_type":"text/x-python","patch_set":12,"id":"c5efe8bf_9641b9cc","line":513,"updated":"2023-08-11 16:34:44.000000000","message":"aside: I\u0027d like to make `ID` a computed attribute - maybe a property or something - and get rid of all the `alternate_id` stuff. It\u0027s confusing and quite a few resources don\u0027t have an ID attribute","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"beb554a2dc9f10f9fd96910b3692f1a752213bf5","unresolved":false,"context_lines":[{"line_number":510,"context_line":"    pagination_key \u003d None"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"    #: The ID of this resource."},{"line_number":513,"context_line":"    id \u003d Body(\"id\", read_only\u003dTrue)"},{"line_number":514,"context_line":"    #: The name of this resource."},{"line_number":515,"context_line":"    name \u003d Body(\"name\")"},{"line_number":516,"context_line":"    #: The OpenStack location of this resource."}],"source_content_type":"text/x-python","patch_set":12,"id":"de46fd93_aba73116","line":513,"in_reply_to":"69409aab_866c6873","updated":"2023-08-25 09:58:59.000000000","message":"Ack","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":true,"context_lines":[{"line_number":510,"context_line":"    pagination_key \u003d None"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"    #: The ID of this resource."},{"line_number":513,"context_line":"    id \u003d Body(\"id\", read_only\u003dTrue)"},{"line_number":514,"context_line":"    #: The name of this resource."},{"line_number":515,"context_line":"    name \u003d Body(\"name\")"},{"line_number":516,"context_line":"    #: The OpenStack location of this resource."}],"source_content_type":"text/x-python","patch_set":12,"id":"69409aab_866c6873","line":513,"in_reply_to":"c5efe8bf_9641b9cc","updated":"2023-08-17 11:00:00.000000000","message":"let\u0027s maybe try this out in a separate patch. It is going too big otherwise","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":512,"context_line":"    #: The ID of this resource."},{"line_number":513,"context_line":"    id \u003d Body(\"id\", read_only\u003dTrue)"},{"line_number":514,"context_line":"    #: The name of this resource."},{"line_number":515,"context_line":"    name \u003d Body(\"name\")"},{"line_number":516,"context_line":"    #: The OpenStack location of this resource."},{"line_number":517,"context_line":"    location \u003d Computed(\u0027location\u0027)"},{"line_number":518,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ad831a0b_3ec25e21","line":515,"updated":"2023-08-11 16:34:44.000000000","message":"likewise, more than a few resources don\u0027t have a `name` attribute and we shouldn\u0027t be relying on it","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"beb554a2dc9f10f9fd96910b3692f1a752213bf5","unresolved":false,"context_lines":[{"line_number":512,"context_line":"    #: The ID of this resource."},{"line_number":513,"context_line":"    id \u003d Body(\"id\", read_only\u003dTrue)"},{"line_number":514,"context_line":"    #: The name of this resource."},{"line_number":515,"context_line":"    name \u003d Body(\"name\")"},{"line_number":516,"context_line":"    #: The OpenStack location of this resource."},{"line_number":517,"context_line":"    location \u003d Computed(\u0027location\u0027)"},{"line_number":518,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"f8299a1e_a41b32ee","line":515,"in_reply_to":"4c8b5991_af489d06","updated":"2023-08-25 09:58:59.000000000","message":"Ack","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":true,"context_lines":[{"line_number":512,"context_line":"    #: The ID of this resource."},{"line_number":513,"context_line":"    id \u003d Body(\"id\", read_only\u003dTrue)"},{"line_number":514,"context_line":"    #: The name of this resource."},{"line_number":515,"context_line":"    name \u003d Body(\"name\")"},{"line_number":516,"context_line":"    #: The OpenStack location of this resource."},{"line_number":517,"context_line":"    location \u003d Computed(\u0027location\u0027)"},{"line_number":518,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"4c8b5991_af489d06","line":515,"in_reply_to":"ad831a0b_3ec25e21","updated":"2023-08-17 11:00:00.000000000","message":"generally I agree that we should not enforce the presence of name field. Dropping it here will require explicitly adding it to most of the attributes, therefore - let\u0027s do in a separate change","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":601,"context_line":"        self.microversion \u003d attrs.pop(\u0027microversion\u0027, None)"},{"line_number":602,"context_line":"        # During transition period we allow having _max_microversion and"},{"line_number":603,"context_line":"        # max_microversion and provide automatic fallback for not migrated"},{"line_number":604,"context_line":"        # resources"},{"line_number":605,"context_line":"        if self._max_microversion and not self.max_microversion:"},{"line_number":606,"context_line":"            self.max_microversion \u003d self._max_microversion"},{"line_number":607,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bbdbd104_bc9defea","line":604,"updated":"2023-08-11 16:34:44.000000000","message":"Can we add a TODO to add a deprecation warning once we\u0027ve migrated everything in here?","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"83a6d833c2b8e377171d59a5c4b1eb779c30c5a8","unresolved":false,"context_lines":[{"line_number":601,"context_line":"        self.microversion \u003d attrs.pop(\u0027microversion\u0027, None)"},{"line_number":602,"context_line":"        # During transition period we allow having _max_microversion and"},{"line_number":603,"context_line":"        # max_microversion and provide automatic fallback for not migrated"},{"line_number":604,"context_line":"        # resources"},{"line_number":605,"context_line":"        if self._max_microversion and not self.max_microversion:"},{"line_number":606,"context_line":"            self.max_microversion \u003d self._max_microversion"},{"line_number":607,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5eb773ee_53ad5b01","line":604,"in_reply_to":"69c48e14_b31dca7e","updated":"2023-08-25 09:59:41.000000000","message":"Ack","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":true,"context_lines":[{"line_number":601,"context_line":"        self.microversion \u003d attrs.pop(\u0027microversion\u0027, None)"},{"line_number":602,"context_line":"        # During transition period we allow having _max_microversion and"},{"line_number":603,"context_line":"        # max_microversion and provide automatic fallback for not migrated"},{"line_number":604,"context_line":"        # resources"},{"line_number":605,"context_line":"        if self._max_microversion and not self.max_microversion:"},{"line_number":606,"context_line":"            self.max_microversion \u003d self._max_microversion"},{"line_number":607,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"69c48e14_b31dca7e","line":604,"in_reply_to":"bbdbd104_bc9defea","updated":"2023-08-17 11:00:00.000000000","message":"this went into separate change with no deprecation (since property is in reality used in the class method, so no possibility for this at all","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":666,"context_line":"        # subclasses, so check the whole MRO."},{"line_number":667,"context_line":"        # In order to prevent emitting attribute multiple times (due to"},{"line_number":668,"context_line":"        # resource inheritance) put data into the dict and return it."},{"line_number":669,"context_line":"        data \u003d dict()"},{"line_number":670,"context_line":"        for klass in cls.__mro__:"},{"line_number":671,"context_line":"            for attr, component in klass.__dict__.items():"},{"line_number":672,"context_line":"                if isinstance(component, components) and attr not in data:"}],"source_content_type":"text/x-python","patch_set":12,"id":"493baace_995c3fc9","line":669,"updated":"2023-08-11 16:34:44.000000000","message":"nit: Can we use dict literals (`{}`). They\u0027re prettier ❤️","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":false,"context_lines":[{"line_number":666,"context_line":"        # subclasses, so check the whole MRO."},{"line_number":667,"context_line":"        # In order to prevent emitting attribute multiple times (due to"},{"line_number":668,"context_line":"        # resource inheritance) put data into the dict and return it."},{"line_number":669,"context_line":"        data \u003d dict()"},{"line_number":670,"context_line":"        for klass in cls.__mro__:"},{"line_number":671,"context_line":"            for attr, component in klass.__dict__.items():"},{"line_number":672,"context_line":"                if isinstance(component, components) and attr not in data:"}],"source_content_type":"text/x-python","patch_set":12,"id":"56cffcfe_3b37bb06","line":669,"in_reply_to":"493baace_995c3fc9","updated":"2023-08-17 11:00:00.000000000","message":"Done","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":673,"context_line":"                    # Due to the order of classes in the iteration (from"},{"line_number":674,"context_line":"                    # child to parent) we only keep property of a child"},{"line_number":675,"context_line":"                    data[attr] \u003d component"},{"line_number":676,"context_line":"        return data.items()"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"    def __repr__(self):"},{"line_number":679,"context_line":"        pairs \u003d ["}],"source_content_type":"text/x-python","patch_set":12,"id":"7521ca55_e211b72a","line":676,"updated":"2023-08-11 16:34:44.000000000","message":"I\u0027m not entirely sure what\u0027s going on here. Is this a bug you spotted or is it related to the other changes. If the former, can you split out and describe it in the commit message? If the latter, can you describe it in the commit message?","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":true,"context_lines":[{"line_number":673,"context_line":"                    # Due to the order of classes in the iteration (from"},{"line_number":674,"context_line":"                    # child to parent) we only keep property of a child"},{"line_number":675,"context_line":"                    data[attr] \u003d component"},{"line_number":676,"context_line":"        return data.items()"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"    def __repr__(self):"},{"line_number":679,"context_line":"        pairs \u003d ["}],"source_content_type":"text/x-python","patch_set":12,"id":"fc67a225_c9aa9329","line":676,"in_reply_to":"7521ca55_e211b72a","updated":"2023-08-17 11:00:00.000000000","message":"I add a bit more explanation into the comment. This is basically became relevant during the fields validation. But some similar thing is already in place in _get_mapping","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"beb554a2dc9f10f9fd96910b3692f1a752213bf5","unresolved":false,"context_lines":[{"line_number":673,"context_line":"                    # Due to the order of classes in the iteration (from"},{"line_number":674,"context_line":"                    # child to parent) we only keep property of a child"},{"line_number":675,"context_line":"                    data[attr] \u003d component"},{"line_number":676,"context_line":"        return data.items()"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"    def __repr__(self):"},{"line_number":679,"context_line":"        pairs \u003d ["}],"source_content_type":"text/x-python","patch_set":12,"id":"f6ef0dcf_277a7f8c","line":676,"in_reply_to":"fc67a225_c9aa9329","updated":"2023-08-25 09:58:59.000000000","message":"Ack, this works for me","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":1988,"context_line":"        retry_on_conflict\u003dNone,"},{"line_number":1989,"context_line":"    ):"},{"line_number":1990,"context_line":"        session \u003d self._get_session(session)"},{"line_number":1991,"context_line":"        self._validate_attributes(session, \u0027commit\u0027, microversion)"},{"line_number":1992,"context_line":""},{"line_number":1993,"context_line":"        kwargs \u003d {}"},{"line_number":1994,"context_line":"        retriable_status_codes \u003d set(session.retriable_status_codes or ())"}],"source_content_type":"text/x-python","patch_set":12,"id":"feeb2f01_d1a61259","line":1991,"range":{"start_line":1991,"start_character":44,"end_line":1991,"end_character":50},"updated":"2023-08-11 16:34:44.000000000","message":"There are two potential callers for this: `Resource.commit` and `Resource.patch`. If the caller is the latter, this should be be `patch`? Alternatively, should we just use `update` (which isn\u0027t a HTTP method, but neither is `commit`)?","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":1988,"context_line":"        retry_on_conflict\u003dNone,"},{"line_number":1989,"context_line":"    ):"},{"line_number":1990,"context_line":"        session \u003d self._get_session(session)"},{"line_number":1991,"context_line":"        self._validate_attributes(session, \u0027commit\u0027, microversion)"},{"line_number":1992,"context_line":""},{"line_number":1993,"context_line":"        kwargs \u003d {}"},{"line_number":1994,"context_line":"        retriable_status_codes \u003d set(session.retriable_status_codes or ())"}],"source_content_type":"text/x-python","patch_set":12,"id":"74ce784b_586733e1","line":1991,"updated":"2023-08-11 16:34:44.000000000","message":"nit: Can you add a note that `microversion` should have already been set by the callers (I had to check)?","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"beb554a2dc9f10f9fd96910b3692f1a752213bf5","unresolved":false,"context_lines":[{"line_number":1988,"context_line":"        retry_on_conflict\u003dNone,"},{"line_number":1989,"context_line":"    ):"},{"line_number":1990,"context_line":"        session \u003d self._get_session(session)"},{"line_number":1991,"context_line":"        self._validate_attributes(session, \u0027commit\u0027, microversion)"},{"line_number":1992,"context_line":""},{"line_number":1993,"context_line":"        kwargs \u003d {}"},{"line_number":1994,"context_line":"        retriable_status_codes \u003d set(session.retriable_status_codes or ())"}],"source_content_type":"text/x-python","patch_set":12,"id":"e77618a4_83346b87","line":1991,"range":{"start_line":1991,"start_character":44,"end_line":1991,"end_character":50},"in_reply_to":"3cc933ef_e72d9189","updated":"2023-08-25 09:58:59.000000000","message":"Done","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":true,"context_lines":[{"line_number":1988,"context_line":"        retry_on_conflict\u003dNone,"},{"line_number":1989,"context_line":"    ):"},{"line_number":1990,"context_line":"        session \u003d self._get_session(session)"},{"line_number":1991,"context_line":"        self._validate_attributes(session, \u0027commit\u0027, microversion)"},{"line_number":1992,"context_line":""},{"line_number":1993,"context_line":"        kwargs \u003d {}"},{"line_number":1994,"context_line":"        retriable_status_codes \u003d set(session.retriable_status_codes or ())"}],"source_content_type":"text/x-python","patch_set":12,"id":"3cc933ef_e72d9189","line":1991,"range":{"start_line":1991,"start_character":44,"end_line":1991,"end_character":50},"in_reply_to":"feeb2f01_d1a61259","updated":"2023-08-17 11:00:00.000000000","message":"right, \"update\" sounds better","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":2145,"context_line":"        request \u003d self._prepare_request(**kwargs)"},{"line_number":2146,"context_line":"        session \u003d self._get_session(session)"},{"line_number":2147,"context_line":"        if microversion is None:"},{"line_number":2148,"context_line":"            microversion \u003d self._get_microversion(session, action\u003d\u0027delete\u0027)"},{"line_number":2149,"context_line":"        self._validate_attributes(session, \u0027delete\u0027, microversion)"},{"line_number":2150,"context_line":""},{"line_number":2151,"context_line":"        return session.delete("}],"source_content_type":"text/x-python","patch_set":12,"id":"bd6c831a_f1b8eca8","line":2148,"range":{"start_line":2148,"start_character":59,"end_line":2148,"end_character":74},"updated":"2023-08-11 16:34:44.000000000","message":"aside: we should drop this as nothing cares about it in our stock definition and nobody appears to be [overriding it](https://codesearch.opendev.org/?q\u003ddef%20_get_microversion\u0026i\u003dnope\u0026literal\u003dnope\u0026files\u003d\u0026excludeFiles\u003d\u0026repos\u003d)","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"beb554a2dc9f10f9fd96910b3692f1a752213bf5","unresolved":false,"context_lines":[{"line_number":2145,"context_line":"        request \u003d self._prepare_request(**kwargs)"},{"line_number":2146,"context_line":"        session \u003d self._get_session(session)"},{"line_number":2147,"context_line":"        if microversion is None:"},{"line_number":2148,"context_line":"            microversion \u003d self._get_microversion(session, action\u003d\u0027delete\u0027)"},{"line_number":2149,"context_line":"        self._validate_attributes(session, \u0027delete\u0027, microversion)"},{"line_number":2150,"context_line":""},{"line_number":2151,"context_line":"        return session.delete("}],"source_content_type":"text/x-python","patch_set":12,"id":"173c08bb_867c4b14","line":2148,"range":{"start_line":2148,"start_character":59,"end_line":2148,"end_character":74},"in_reply_to":"5848c6f4_516577f1","updated":"2023-08-25 09:58:59.000000000","message":"Ack","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":true,"context_lines":[{"line_number":2145,"context_line":"        request \u003d self._prepare_request(**kwargs)"},{"line_number":2146,"context_line":"        session \u003d self._get_session(session)"},{"line_number":2147,"context_line":"        if microversion is None:"},{"line_number":2148,"context_line":"            microversion \u003d self._get_microversion(session, action\u003d\u0027delete\u0027)"},{"line_number":2149,"context_line":"        self._validate_attributes(session, \u0027delete\u0027, microversion)"},{"line_number":2150,"context_line":""},{"line_number":2151,"context_line":"        return session.delete("}],"source_content_type":"text/x-python","patch_set":12,"id":"5848c6f4_516577f1","line":2148,"range":{"start_line":2148,"start_character":59,"end_line":2148,"end_character":74},"in_reply_to":"bd6c831a_f1b8eca8","updated":"2023-08-17 11:00:00.000000000","message":"technically you are right. For now, however _get_microversion require \"action\" to be set. Looking to the zoo of the OpenStack APIs I think sometime we can face situation where resource was deprecated, but user still uses it and wants to delete the resource","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"beb554a2dc9f10f9fd96910b3692f1a752213bf5","unresolved":true,"context_lines":[{"line_number":818,"context_line":"        :param str picked_microversion: Mircoversion selected for the request"},{"line_number":819,"context_line":"        :raises: ApiVersionConstraintsException, ValidationException"},{"line_number":820,"context_line":"        \"\"\""},{"line_number":821,"context_line":"        # NOTE(gtema) for now only verify Body attributes ignoring Header"},{"line_number":822,"context_line":"        # TODO(gtema) in future we maybe want to allow user skip using"},{"line_number":823,"context_line":"        # unsupported attributes"},{"line_number":824,"context_line":"        # Get list of changed resource attributes"}],"source_content_type":"text/x-python","patch_set":15,"id":"c4af8174_cb510397","line":821,"range":{"start_line":821,"start_character":10,"end_line":821,"end_character":21},"updated":"2023-08-25 09:58:59.000000000","message":"super nit: `NOTE(gtema):` (missing colon - my editor cares...)","commit_id":"8d87f688bc98e4c422c66492418cde4e9edf4c01"}],"openstack/tests/unit/fakes.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        res \u003d get_fake_resource(FakeInherit)"},{"line_number":147,"context_line":"        self.assertIsInstance(res.a, Fake)"},{"line_number":148,"context_line":"        self.assertIsInstance(res.a.a, str)"}],"source_content_type":"text/x-python","patch_set":12,"id":"449c3aea_34e48976","line":148,"updated":"2023-08-11 16:34:44.000000000","message":"rebase mistake? This looks nearly identical to the stuff you added to `openstack.test.fakes`","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        res \u003d get_fake_resource(FakeInherit)"},{"line_number":147,"context_line":"        self.assertIsInstance(res.a, Fake)"},{"line_number":148,"context_line":"        self.assertIsInstance(res.a.a, str)"}],"source_content_type":"text/x-python","patch_set":12,"id":"6ea77f1d_116a5492","line":148,"in_reply_to":"449c3aea_34e48976","updated":"2023-08-17 11:00:00.000000000","message":"right, this is exactly it. Thanks","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"}],"openstack/utils.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"02e47608cdb9a555492ad38d84f60758126c14d1","unresolved":true,"context_lines":[{"line_number":314,"context_line":"            return discover.version_match(ver, endpoint_data.api_version)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    return False"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"def _hashes_up_to_date(md5, sha256, md5_key, sha256_key):"},{"line_number":320,"context_line":"    \u0027\u0027\u0027Compare md5 and sha256 hashes for being up to date"}],"source_content_type":"text/x-python","patch_set":9,"id":"001ea129_e3b0d550","line":317,"updated":"2023-06-09 17:14:53.000000000","message":"Eek, another version check 🙈 Is this necessary? I\u0027m thinking we could do something very similar with the existing `supports_microversion` and `supports_version` methods. The only change I think we\u0027ll need to make is to allow us to disable checking the default adapter version in `supports_microversion` but that should be easily done.","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"5c5dec960c0503ba291f98d29e805fba5e31e22f","unresolved":true,"context_lines":[{"line_number":314,"context_line":"            return discover.version_match(ver, endpoint_data.api_version)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    return False"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"def _hashes_up_to_date(md5, sha256, md5_key, sha256_key):"},{"line_number":320,"context_line":"    \u0027\u0027\u0027Compare md5 and sha256 hashes for being up to date"}],"source_content_type":"text/x-python","patch_set":9,"id":"4c2b26e0_3bdadf13","line":317,"in_reply_to":"001ea129_e3b0d550","updated":"2023-06-09 17:46:14.000000000","message":"this check may obsolete others, cause it supports few more things that other checks do not have in mind (ensure \"chosen\" is not above max_version to support obsoletion). Otherwise this logic would need to go into the resource where the check is invoked. Having it a separate function makes also testing easier.","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            return discover.version_match(ver, endpoint_data.api_version)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    return False"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"def _hashes_up_to_date(md5, sha256, md5_key, sha256_key):"},{"line_number":320,"context_line":"    \u0027\u0027\u0027Compare md5 and sha256 hashes for being up to date"}],"source_content_type":"text/x-python","patch_set":9,"id":"29329498_754411c7","line":317,"in_reply_to":"09cfb088_23f44616","updated":"2023-08-17 11:00:00.000000000","message":"Done","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":314,"context_line":"            return discover.version_match(ver, endpoint_data.api_version)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    return False"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"def _hashes_up_to_date(md5, sha256, md5_key, sha256_key):"},{"line_number":320,"context_line":"    \u0027\u0027\u0027Compare md5 and sha256 hashes for being up to date"}],"source_content_type":"text/x-python","patch_set":9,"id":"09cfb088_23f44616","line":317,"in_reply_to":"4c2b26e0_3bdadf13","updated":"2023-08-11 16:34:44.000000000","message":"Okay, can you add TODOs to deprecate the other methods?","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"def check_version_constraints("},{"line_number":287,"context_line":"    adapter, min_version\u003dNone, max_version\u003dNone, picked_mv\u003dNone"},{"line_number":288,"context_line":"):"},{"line_number":289,"context_line":"    \"\"\"Determine if the given adapter supports given version restrictions"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"27249e58_8ab32b51","line":287,"range":{"start_line":287,"start_character":49,"end_line":287,"end_character":58},"updated":"2023-08-11 16:34:44.000000000","message":"Can we just call this `version` or `current_version`?","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"def check_version_constraints("},{"line_number":287,"context_line":"    adapter, min_version\u003dNone, max_version\u003dNone, picked_mv\u003dNone"},{"line_number":288,"context_line":"):"},{"line_number":289,"context_line":"    \"\"\"Determine if the given adapter supports given version restrictions"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"189168da_a28dbf22","line":287,"range":{"start_line":287,"start_character":49,"end_line":287,"end_character":58},"in_reply_to":"27249e58_8ab32b51","updated":"2023-08-17 11:00:00.000000000","message":"Done","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":293,"context_line":"    For max_version it is checked that it is between min_microversion and"},{"line_number":294,"context_line":"    max_microversion while picked_mv is under the max_version."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    When adapter does not support microversions verify min_version or max_version matches adapter api_version."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    :param adapter: :class:`~keystoneauth1.adapter.Adapter` instance."},{"line_number":299,"context_line":"    :param str min_version: String containing the minimal required"}],"source_content_type":"text/x-python","patch_set":12,"id":"16c09233_ee7da249","line":296,"updated":"2023-08-11 16:34:44.000000000","message":"nit: wrapping","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    For max_version it is checked that it is between min_microversion and"},{"line_number":294,"context_line":"    max_microversion while picked_mv is under the max_version."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    When adapter does not support microversions verify min_version or max_version matches adapter api_version."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    :param adapter: :class:`~keystoneauth1.adapter.Adapter` instance."},{"line_number":299,"context_line":"    :param str min_version: String containing the minimal required"}],"source_content_type":"text/x-python","patch_set":12,"id":"63eae5c8_421e1c2a","line":296,"in_reply_to":"16c09233_ee7da249","updated":"2023-08-17 11:00:00.000000000","message":"Done","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    :param adapter: :class:`~keystoneauth1.adapter.Adapter` instance."},{"line_number":299,"context_line":"    :param str min_version: String containing the minimal required"},{"line_number":300,"context_line":"        (micro)version."},{"line_number":301,"context_line":"    :param str max_version: String containing the maximal allowed"},{"line_number":302,"context_line":"        (micro)version."},{"line_number":303,"context_line":"    :param str picked_mv: String containing currently used microversion."}],"source_content_type":"text/x-python","patch_set":12,"id":"55e5a6e4_92b6d099","line":300,"range":{"start_line":300,"start_character":8,"end_line":300,"end_character":22},"updated":"2023-08-11 16:34:44.000000000","message":"nit:\n\n\u003e version or microversion","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":false,"context_lines":[{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    :param adapter: :class:`~keystoneauth1.adapter.Adapter` instance."},{"line_number":299,"context_line":"    :param str min_version: String containing the minimal required"},{"line_number":300,"context_line":"        (micro)version."},{"line_number":301,"context_line":"    :param str max_version: String containing the maximal allowed"},{"line_number":302,"context_line":"        (micro)version."},{"line_number":303,"context_line":"    :param str picked_mv: String containing currently used microversion."}],"source_content_type":"text/x-python","patch_set":12,"id":"a1dcff7a_516730cc","line":300,"range":{"start_line":300,"start_character":8,"end_line":300,"end_character":22},"in_reply_to":"55e5a6e4_92b6d099","updated":"2023-08-17 11:00:00.000000000","message":"Done","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":299,"context_line":"    :param str min_version: String containing the minimal required"},{"line_number":300,"context_line":"        (micro)version."},{"line_number":301,"context_line":"    :param str max_version: String containing the maximal allowed"},{"line_number":302,"context_line":"        (micro)version."},{"line_number":303,"context_line":"    :param str picked_mv: String containing currently used microversion."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    :returns: True if the service supports given version limitations."}],"source_content_type":"text/x-python","patch_set":12,"id":"193bd25b_96584f91","line":302,"range":{"start_line":302,"start_character":8,"end_line":302,"end_character":22},"updated":"2023-08-11 16:34:44.000000000","message":"nit:\n\n\u003e version or microversion","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":false,"context_lines":[{"line_number":299,"context_line":"    :param str min_version: String containing the minimal required"},{"line_number":300,"context_line":"        (micro)version."},{"line_number":301,"context_line":"    :param str max_version: String containing the maximal allowed"},{"line_number":302,"context_line":"        (micro)version."},{"line_number":303,"context_line":"    :param str picked_mv: String containing currently used microversion."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    :returns: True if the service supports given version limitations."}],"source_content_type":"text/x-python","patch_set":12,"id":"0000bad3_344985a1","line":302,"range":{"start_line":302,"start_character":8,"end_line":302,"end_character":22},"in_reply_to":"193bd25b_96584f91","updated":"2023-08-17 11:00:00.000000000","message":"Done","commit_id":"9414e34942d7c3e60b90f27ba116b273ce33135e"}],"releasenotes/notes/extend-resource-c53f982e28ade7ae.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"02e47608cdb9a555492ad38d84f60758126c14d1","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    Add additional configuration for the resource attributes in order to"},{"line_number":7,"context_line":"    make future code generation easier"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    - read_only - attribute is populated by the server and can not be"},{"line_number":10,"context_line":"      modified"},{"line_number":11,"context_line":"    - on_create_mandatory - attribute must be present in the resource"},{"line_number":12,"context_line":"      creation request"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"99169060_33aa581f","line":9,"range":{"start_line":9,"start_character":6,"end_line":9,"end_character":15},"updated":"2023-06-09 17:14:53.000000000","message":"`read_only`\n\nditto for the other options","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed2178842593b23fba3790c712fe37f8c0a4648c","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    Add additional configuration for the resource attributes in order to"},{"line_number":7,"context_line":"    make future code generation easier"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    - read_only - attribute is populated by the server and can not be"},{"line_number":10,"context_line":"      modified"},{"line_number":11,"context_line":"    - on_create_mandatory - attribute must be present in the resource"},{"line_number":12,"context_line":"      creation request"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"cbad38d5_56e8c7ac","line":9,"range":{"start_line":9,"start_character":6,"end_line":9,"end_character":15},"in_reply_to":"99169060_33aa581f","updated":"2023-08-11 16:34:44.000000000","message":"Sorry, my point was to format these as literals:\n\n```\n- ``read_only`` - attribute ...\n```","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"beb554a2dc9f10f9fd96910b3692f1a752213bf5","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    Add additional configuration for the resource attributes in order to"},{"line_number":7,"context_line":"    make future code generation easier"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    - read_only - attribute is populated by the server and can not be"},{"line_number":10,"context_line":"      modified"},{"line_number":11,"context_line":"    - on_create_mandatory - attribute must be present in the resource"},{"line_number":12,"context_line":"      creation request"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"a6b4e5de_a70c84fd","line":9,"range":{"start_line":9,"start_character":6,"end_line":9,"end_character":15},"in_reply_to":"b4aeb08a_77e2cf26","updated":"2023-08-25 09:58:59.000000000","message":"Done","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4069146d31d784499978ddd73e89df9603663017","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    Add additional configuration for the resource attributes in order to"},{"line_number":7,"context_line":"    make future code generation easier"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    - read_only - attribute is populated by the server and can not be"},{"line_number":10,"context_line":"      modified"},{"line_number":11,"context_line":"    - on_create_mandatory - attribute must be present in the resource"},{"line_number":12,"context_line":"      creation request"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"b4aeb08a_77e2cf26","line":9,"range":{"start_line":9,"start_character":6,"end_line":9,"end_character":15},"in_reply_to":"cbad38d5_56e8c7ac","updated":"2023-08-17 11:00:00.000000000","message":"gotcha","commit_id":"dcdcdffc0ed32c1b709483e46174bd40f7c74c58"}]}
