)]}'
{"ironicclient/client.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3cc7080956f9a4604903a0fa6f5e92c81348aa84","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    :param os_key: path to key file"},{"line_number":60,"context_line":"    :param key_file: path to key file, deprecated in favour of os_key"},{"line_number":61,"context_line":"    :param os_ironic_api_version: ironic API version to use, use \"latest\""},{"line_number":62,"context_line":"        to cause auto-negotiation to default to the maxiximum available"},{"line_number":63,"context_line":"        version."},{"line_number":64,"context_line":"    :param max_retries: Maximum number of retries in case of conflict error"},{"line_number":65,"context_line":"    :param retry_interval: Amount of time (in seconds) between retries in case"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_85e46b0e","line":62,"updated":"2018-01-18 09:45:53.000000000","message":"typo in maximum\n\nalso, while this is helpful, I don\u0027t think we should recommend anyone use it (or use it in nova ourselves) without a max_version. Otherwise, as I mentioned in the API-SIG spec, we\u0027re giving them an implicit promise that we\u0027ll never break them.","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ab132530e9c51888e3bb72725446fccfbb6f9cc8","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    :param os_key: path to key file"},{"line_number":60,"context_line":"    :param key_file: path to key file, deprecated in favour of os_key"},{"line_number":61,"context_line":"    :param os_ironic_api_version: ironic API version to use, use \"latest\""},{"line_number":62,"context_line":"        to cause auto-negotiation to default to the maxiximum available"},{"line_number":63,"context_line":"        version."},{"line_number":64,"context_line":"    :param max_retries: Maximum number of retries in case of conflict error"},{"line_number":65,"context_line":"    :param retry_interval: Amount of time (in seconds) between retries in case"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_0016fb49","line":62,"in_reply_to":"7f96bb07_85e46b0e","updated":"2018-01-18 17:23:42.000000000","message":"I have an objection to hiding a behavior, but since this is all incremental, I\u0027m okay with hiding it for now.","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1d1d438a8cd6444f4d0e63b8867360c6a43c0593","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    :param cert_file: path to cert file, deprecated in favour of os_cert"},{"line_number":59,"context_line":"    :param os_key: path to key file"},{"line_number":60,"context_line":"    :param key_file: path to key file, deprecated in favour of os_key"},{"line_number":61,"context_line":"    :param os_ironic_api_version: ironic API version to use"},{"line_number":62,"context_line":"    :param max_retries: Maximum number of retries in case of conflict error"},{"line_number":63,"context_line":"    :param retry_interval: Amount of time (in seconds) between retries in case"},{"line_number":64,"context_line":"        of conflict error"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_8f18da84","line":61,"updated":"2018-01-19 16:45:49.000000000","message":"I did not really mean to remove the explanation from here, it was more about getting max_version/min_version ASAP :)","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"35ff5071460d849cff246d163edcfe6cf61cfac9","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    :param cert_file: path to cert file, deprecated in favour of os_cert"},{"line_number":59,"context_line":"    :param os_key: path to key file"},{"line_number":60,"context_line":"    :param key_file: path to key file, deprecated in favour of os_key"},{"line_number":61,"context_line":"    :param os_ironic_api_version: ironic API version to use"},{"line_number":62,"context_line":"    :param max_retries: Maximum number of retries in case of conflict error"},{"line_number":63,"context_line":"    :param retry_interval: Amount of time (in seconds) between retries in case"},{"line_number":64,"context_line":"        of conflict error"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_a1db621f","line":61,"in_reply_to":"7f96bb07_8f18da84","updated":"2018-01-19 22:22:14.000000000","message":"soooooon! I just don\u0027t have the spoons to do it immediately :)","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"}],"ironicclient/common/http.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c4e84c53191b8a12f0aef31198da83be52291981","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        # support the version requested but the requested operation may not"},{"line_number":129,"context_line":"        # be supported by the requested version."},{"line_number":130,"context_line":"        if (self.api_version_select_state \u003d\u003d \u0027user\u0027 and"},{"line_number":131,"context_line":"                not self.os_ironic_api_version \u003d\u003d \u0027latest\u0027):"},{"line_number":132,"context_line":"            raise exc.UnsupportedVersion(textwrap.fill("},{"line_number":133,"context_line":"                _(\"Requested API version %(req)s is not supported by the \""},{"line_number":134,"context_line":"                  \"server or the requested operation is not supported by the \""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_35467123","line":131,"range":{"start_line":131,"start_character":47,"end_line":131,"end_character":49},"updated":"2018-01-04 14:44:30.000000000","message":"nit: use !\u003d instead of \u0027not \u003d\u003d\u0027","commit_id":"758bc263168821db08beedf78081cf4879ba94d2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"2176da7b61cbf4cdb44ab3e90b1b5ed7f64e63f6","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        # support the version requested but the requested operation may not"},{"line_number":129,"context_line":"        # be supported by the requested version."},{"line_number":130,"context_line":"        if (self.api_version_select_state \u003d\u003d \u0027user\u0027 and"},{"line_number":131,"context_line":"                not self.os_ironic_api_version \u003d\u003d \u0027latest\u0027):"},{"line_number":132,"context_line":"            raise exc.UnsupportedVersion(textwrap.fill("},{"line_number":133,"context_line":"                _(\"Requested API version %(req)s is not supported by the \""},{"line_number":134,"context_line":"                  \"server or the requested operation is not supported by the \""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_1a501b32","line":131,"range":{"start_line":131,"start_character":47,"end_line":131,"end_character":49},"in_reply_to":"9f91af0f_35467123","updated":"2018-01-05 18:53:50.000000000","message":"Done","commit_id":"758bc263168821db08beedf78081cf4879ba94d2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c4e84c53191b8a12f0aef31198da83be52291981","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                   \u0027min\u0027: min_ver, \u0027max\u0027: max_ver}))"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        if self.os_ironic_api_version \u003d\u003d \u0027latest\u0027:"},{"line_number":148,"context_line":"            negotiated_ver \u003d max_ver"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            negotiated_ver \u003d str(min(StrictVersion(self.os_ironic_api_version),"},{"line_number":151,"context_line":"                                     StrictVersion(max_ver)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_b56361b1","line":148,"range":{"start_line":148,"start_character":12,"end_line":148,"end_character":36},"updated":"2018-01-04 14:44:30.000000000","message":"so.. I wonder if we should do the same trick as with CLI and have a maximum cap here in client code. Otherwise we may potentially negotiate a version that our Python client is not capable of working with. Maybe we need \u0027latest\u0027 and \u0027yes-really-the-very-latest\u0027 :)","commit_id":"758bc263168821db08beedf78081cf4879ba94d2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"2176da7b61cbf4cdb44ab3e90b1b5ed7f64e63f6","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                   \u0027min\u0027: min_ver, \u0027max\u0027: max_ver}))"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        if self.os_ironic_api_version \u003d\u003d \u0027latest\u0027:"},{"line_number":148,"context_line":"            negotiated_ver \u003d max_ver"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            negotiated_ver \u003d str(min(StrictVersion(self.os_ironic_api_version),"},{"line_number":151,"context_line":"                                     StrictVersion(max_ver)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_4e17c8ee","line":148,"range":{"start_line":148,"start_character":12,"end_line":148,"end_character":36},"in_reply_to":"9f91af0f_4b781f29","updated":"2018-01-05 18:53:50.000000000","message":"I\u0027m adding on to the docstring, which is where python api users will find out about the option. With the follow-up patch, I\u0027ll update it to have explicit use recommendation.","commit_id":"758bc263168821db08beedf78081cf4879ba94d2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3646a0ec1a966712c3cdc0e55b8cd3ba4bb80a55","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                   \u0027min\u0027: min_ver, \u0027max\u0027: max_ver}))"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        if self.os_ironic_api_version \u003d\u003d \u0027latest\u0027:"},{"line_number":148,"context_line":"            negotiated_ver \u003d max_ver"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            negotiated_ver \u003d str(min(StrictVersion(self.os_ironic_api_version),"},{"line_number":151,"context_line":"                                     StrictVersion(max_ver)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_ab24950e","line":148,"range":{"start_line":148,"start_character":12,"end_line":148,"end_character":36},"in_reply_to":"9f91af0f_4e17c8ee","updated":"2018-01-11 19:26:53.000000000","message":"Added a latest_known version, and pinning that as the absolute supported maximum. It may impact... a number of tests... I haven\u0027t run unit tests yet *blink*","commit_id":"758bc263168821db08beedf78081cf4879ba94d2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"de713bcec04b11dba3c781810f6c9f23ebe35041","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                   \u0027min\u0027: min_ver, \u0027max\u0027: max_ver}))"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        if self.os_ironic_api_version \u003d\u003d \u0027latest\u0027:"},{"line_number":148,"context_line":"            negotiated_ver \u003d max_ver"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            negotiated_ver \u003d str(min(StrictVersion(self.os_ironic_api_version),"},{"line_number":151,"context_line":"                                     StrictVersion(max_ver)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_4b781f29","line":148,"range":{"start_line":148,"start_character":12,"end_line":148,"end_character":36},"in_reply_to":"9f91af0f_b56361b1","updated":"2018-01-05 15:00:20.000000000","message":"I don\u0027t think we should, because latest does imply the latest API version. Putting a constraint in that we need to occasionally move not only adds more work for us, but potentially introduces risk in that we could forget to move that pin, and then we could have frustrated users, and have to release a patched version. Or something suddenly breaks for someone when they upgrade the library because a new field (I mean, this shouldn\u0027t happen with a python client... but yeah.)\n\nI guess from a standpoint of if we negotiate a version that we don\u0027t actually support, then we have a very big problem, and perhaps we should be testing that in CI. If it is the caller of the APIs that encounters that, they need the faster feedback loop, at least that is my perception based upon my experience. I could see it being different for others.","commit_id":"758bc263168821db08beedf78081cf4879ba94d2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c4e84c53191b8a12f0aef31198da83be52291981","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        kwargs[\u0027headers\u0027].setdefault(\u0027User-Agent\u0027, USER_AGENT)"},{"line_number":331,"context_line":"        if self.os_ironic_api_version:"},{"line_number":332,"context_line":"            kwargs[\u0027headers\u0027].setdefault(\u0027X-OpenStack-Ironic-API-Version\u0027,"},{"line_number":333,"context_line":"                                         self.os_ironic_api_version)"},{"line_number":334,"context_line":"        if self.auth_token:"},{"line_number":335,"context_line":"            kwargs[\u0027headers\u0027].setdefault(\u0027X-Auth-Token\u0027, self.auth_token)"},{"line_number":336,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_f5680988","line":333,"range":{"start_line":333,"start_character":41,"end_line":333,"end_character":67},"updated":"2018-01-04 14:44:30.000000000","message":"should it be negotiated_ver now? otherwise it seems unused","commit_id":"758bc263168821db08beedf78081cf4879ba94d2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"de713bcec04b11dba3c781810f6c9f23ebe35041","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        kwargs[\u0027headers\u0027].setdefault(\u0027User-Agent\u0027, USER_AGENT)"},{"line_number":331,"context_line":"        if self.os_ironic_api_version:"},{"line_number":332,"context_line":"            kwargs[\u0027headers\u0027].setdefault(\u0027X-OpenStack-Ironic-API-Version\u0027,"},{"line_number":333,"context_line":"                                         self.os_ironic_api_version)"},{"line_number":334,"context_line":"        if self.auth_token:"},{"line_number":335,"context_line":"            kwargs[\u0027headers\u0027].setdefault(\u0027X-Auth-Token\u0027, self.auth_token)"},{"line_number":336,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_2bbcbbb9","line":333,"range":{"start_line":333,"start_character":41,"end_line":333,"end_character":67},"in_reply_to":"9f91af0f_f5680988","updated":"2018-01-05 15:00:20.000000000","message":"I don\u0027t think so, because the method call on 326 actually asserts a new os_ironic_api_version.","commit_id":"758bc263168821db08beedf78081cf4879ba94d2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c4e84c53191b8a12f0aef31198da83be52291981","unresolved":false,"context_lines":[{"line_number":548,"context_line":""},{"line_number":549,"context_line":"        if getattr(self, \u0027os_ironic_api_version\u0027, None):"},{"line_number":550,"context_line":"            kwargs[\u0027headers\u0027].setdefault(\u0027X-OpenStack-Ironic-API-Version\u0027,"},{"line_number":551,"context_line":"                                         self.os_ironic_api_version)"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"        endpoint_filter \u003d kwargs.setdefault(\u0027endpoint_filter\u0027, {})"},{"line_number":554,"context_line":"        endpoint_filter.setdefault(\u0027interface\u0027, self.interface)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_952e5d41","line":551,"range":{"start_line":551,"start_character":41,"end_line":551,"end_character":67},"updated":"2018-01-04 14:44:30.000000000","message":"ditto","commit_id":"758bc263168821db08beedf78081cf4879ba94d2"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"abdb0d1fb1862e651c51e0c42a78c4a7eed121b5","unresolved":false,"context_lines":[{"line_number":329,"context_line":"        kwargs[\u0027headers\u0027] \u003d copy.deepcopy(kwargs.get(\u0027headers\u0027, {}))"},{"line_number":330,"context_line":"        kwargs[\u0027headers\u0027].setdefault(\u0027User-Agent\u0027, USER_AGENT)"},{"line_number":331,"context_line":"        # NOTE(TheJulia): self.os_ironic_api_version is reset above in the"},{"line_number":332,"context_line":"        # self.negotiate_version call if negotiation occurs."},{"line_number":333,"context_line":"        if self.os_ironic_api_version:"},{"line_number":334,"context_line":"            kwargs[\u0027headers\u0027].setdefault(\u0027X-OpenStack-Ironic-API-Version\u0027,"},{"line_number":335,"context_line":"                                         self.os_ironic_api_version)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_521ef60c","line":332,"updated":"2018-01-11 07:01:22.000000000","message":"IMHO, I prefer putting this note at line 326 to show the effect of negotiate_version().","commit_id":"c6f44a849106e6220750a143c78eca0c500acae3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3646a0ec1a966712c3cdc0e55b8cd3ba4bb80a55","unresolved":false,"context_lines":[{"line_number":329,"context_line":"        kwargs[\u0027headers\u0027] \u003d copy.deepcopy(kwargs.get(\u0027headers\u0027, {}))"},{"line_number":330,"context_line":"        kwargs[\u0027headers\u0027].setdefault(\u0027User-Agent\u0027, USER_AGENT)"},{"line_number":331,"context_line":"        # NOTE(TheJulia): self.os_ironic_api_version is reset above in the"},{"line_number":332,"context_line":"        # self.negotiate_version call if negotiation occurs."},{"line_number":333,"context_line":"        if self.os_ironic_api_version:"},{"line_number":334,"context_line":"            kwargs[\u0027headers\u0027].setdefault(\u0027X-OpenStack-Ironic-API-Version\u0027,"},{"line_number":335,"context_line":"                                         self.os_ironic_api_version)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_abcd755e","line":332,"in_reply_to":"7f96bb07_28e2cbd6","updated":"2018-01-11 19:26:53.000000000","message":"Done","commit_id":"c6f44a849106e6220750a143c78eca0c500acae3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"af1af77bb2f0ddb38c1360730146f5079d857ab1","unresolved":false,"context_lines":[{"line_number":329,"context_line":"        kwargs[\u0027headers\u0027] \u003d copy.deepcopy(kwargs.get(\u0027headers\u0027, {}))"},{"line_number":330,"context_line":"        kwargs[\u0027headers\u0027].setdefault(\u0027User-Agent\u0027, USER_AGENT)"},{"line_number":331,"context_line":"        # NOTE(TheJulia): self.os_ironic_api_version is reset above in the"},{"line_number":332,"context_line":"        # self.negotiate_version call if negotiation occurs."},{"line_number":333,"context_line":"        if self.os_ironic_api_version:"},{"line_number":334,"context_line":"            kwargs[\u0027headers\u0027].setdefault(\u0027X-OpenStack-Ironic-API-Version\u0027,"},{"line_number":335,"context_line":"                                         self.os_ironic_api_version)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_28e2cbd6","line":332,"in_reply_to":"7f96bb07_521ef60c","updated":"2018-01-11 18:23:50.000000000","message":"good point!","commit_id":"c6f44a849106e6220750a143c78eca0c500acae3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3cc7080956f9a4604903a0fa6f5e92c81348aa84","unresolved":false,"context_lines":[{"line_number":44,"context_line":"#             http://specs.openstack.org/openstack/ironic-specs/specs/kilo/api-microversions.html # noqa"},{"line_number":45,"context_line":"#             for full details."},{"line_number":46,"context_line":"DEFAULT_VER \u003d \u00271.9\u0027"},{"line_number":47,"context_line":"LAST_KNOWN_API_VERSION \u003d 35"},{"line_number":48,"context_line":"LATEST_VERSION \u003d \u00271.{}\u0027.format(LAST_KNOWN_API_VERSION)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_05d93b55","line":47,"updated":"2018-01-18 09:45:53.000000000","message":"Should we use this constant in the OSC client as well? I think the two should be in sync.","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ab132530e9c51888e3bb72725446fccfbb6f9cc8","unresolved":false,"context_lines":[{"line_number":44,"context_line":"#             http://specs.openstack.org/openstack/ironic-specs/specs/kilo/api-microversions.html # noqa"},{"line_number":45,"context_line":"#             for full details."},{"line_number":46,"context_line":"DEFAULT_VER \u003d \u00271.9\u0027"},{"line_number":47,"context_line":"LAST_KNOWN_API_VERSION \u003d 35"},{"line_number":48,"context_line":"LATEST_VERSION \u003d \u00271.{}\u0027.format(LAST_KNOWN_API_VERSION)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_606edfc9","line":47,"in_reply_to":"7f96bb07_05d93b55","updated":"2018-01-18 17:23:42.000000000","message":"I kind of feel like they need to independently increment, because we would presumably land a patch that is purely python api only behavior.\n\nThen again... the promise for OSC is \"latest-available\"... :\\","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3cc7080956f9a4604903a0fa6f5e92c81348aa84","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        if (self.os_ironic_api_version and"},{"line_number":339,"context_line":"                self.api_version_select_state \u003d\u003d \u0027user\u0027 and"},{"line_number":340,"context_line":"                self.os_ironic_api_version \u003d\u003d \u0027latest\u0027):"},{"line_number":341,"context_line":"            negotiated_ver \u003d self.negotiate_version(self.session, None)"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        # Copy the kwargs so we can reuse the original in case of redirects"},{"line_number":344,"context_line":"        kwargs[\u0027headers\u0027] \u003d copy.deepcopy(kwargs.get(\u0027headers\u0027, {}))"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_a5dba74c","line":341,"updated":"2018-01-18 09:45:53.000000000","message":"All the same comments as below apply here","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3cc7080956f9a4604903a0fa6f5e92c81348aa84","unresolved":false,"context_lines":[{"line_number":551,"context_line":"        # NOTE(TheJulia): self.os_ironic_api_version is reset in"},{"line_number":552,"context_line":"        # the self.negotiate_version() call if negotiation occurs."},{"line_number":553,"context_line":"        if (self.os_ironic_api_version and"},{"line_number":554,"context_line":"                self.api_version_select_state \u003d\u003d \u0027user\u0027 and"},{"line_number":555,"context_line":"                self.os_ironic_api_version \u003d\u003d \u0027latest\u0027):"},{"line_number":556,"context_line":"            negotiated_ver \u003d self.negotiate_version(self.session, None)"},{"line_number":557,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_c5def33c","line":554,"updated":"2018-01-18 09:45:53.000000000","message":"I wonder if this check is redundant. Is it possible to end up with api_version_select_state !\u003d \u0027user\u0027 and version \u0027latest\u0027?","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"35ff5071460d849cff246d163edcfe6cf61cfac9","unresolved":false,"context_lines":[{"line_number":551,"context_line":"        # NOTE(TheJulia): self.os_ironic_api_version is reset in"},{"line_number":552,"context_line":"        # the self.negotiate_version() call if negotiation occurs."},{"line_number":553,"context_line":"        if (self.os_ironic_api_version and"},{"line_number":554,"context_line":"                self.api_version_select_state \u003d\u003d \u0027user\u0027 and"},{"line_number":555,"context_line":"                self.os_ironic_api_version \u003d\u003d \u0027latest\u0027):"},{"line_number":556,"context_line":"            negotiated_ver \u003d self.negotiate_version(self.session, None)"},{"line_number":557,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_be0087ac","line":554,"in_reply_to":"7f96bb07_80a68b0e","updated":"2018-01-19 22:22:14.000000000","message":"Oh, it is not redundant as it as absolutely possible, since a caller by defualt has select_state set to \"user\" by defining a version. This forces the negotiation to occur, otherwise actual version negotiation fails.","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ab132530e9c51888e3bb72725446fccfbb6f9cc8","unresolved":false,"context_lines":[{"line_number":551,"context_line":"        # NOTE(TheJulia): self.os_ironic_api_version is reset in"},{"line_number":552,"context_line":"        # the self.negotiate_version() call if negotiation occurs."},{"line_number":553,"context_line":"        if (self.os_ironic_api_version and"},{"line_number":554,"context_line":"                self.api_version_select_state \u003d\u003d \u0027user\u0027 and"},{"line_number":555,"context_line":"                self.os_ironic_api_version \u003d\u003d \u0027latest\u0027):"},{"line_number":556,"context_line":"            negotiated_ver \u003d self.negotiate_version(self.session, None)"},{"line_number":557,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_80a68b0e","line":554,"in_reply_to":"7f96bb07_c5def33c","updated":"2018-01-18 17:23:42.000000000","message":"It is possible, however it is not yet negotiated. We need to be able to independently convey such status to the caller as the negotiation does not and likely should not take place at instantiation.","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3cc7080956f9a4604903a0fa6f5e92c81348aa84","unresolved":false,"context_lines":[{"line_number":553,"context_line":"        if (self.os_ironic_api_version and"},{"line_number":554,"context_line":"                self.api_version_select_state \u003d\u003d \u0027user\u0027 and"},{"line_number":555,"context_line":"                self.os_ironic_api_version \u003d\u003d \u0027latest\u0027):"},{"line_number":556,"context_line":"            negotiated_ver \u003d self.negotiate_version(self.session, None)"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"        kwargs.setdefault(\u0027user_agent\u0027, USER_AGENT)"},{"line_number":559,"context_line":"        kwargs.setdefault(\u0027auth\u0027, self.auth)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_65e91fe4","line":556,"updated":"2018-01-18 09:45:53.000000000","message":"this negotiated_ver value set here is never used (overwritten on line 578 before the only use place)","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ab132530e9c51888e3bb72725446fccfbb6f9cc8","unresolved":false,"context_lines":[{"line_number":553,"context_line":"        if (self.os_ironic_api_version and"},{"line_number":554,"context_line":"                self.api_version_select_state \u003d\u003d \u0027user\u0027 and"},{"line_number":555,"context_line":"                self.os_ironic_api_version \u003d\u003d \u0027latest\u0027):"},{"line_number":556,"context_line":"            negotiated_ver \u003d self.negotiate_version(self.session, None)"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"        kwargs.setdefault(\u0027user_agent\u0027, USER_AGENT)"},{"line_number":559,"context_line":"        kwargs.setdefault(\u0027auth\u0027, self.auth)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_c089f374","line":556,"in_reply_to":"7f96bb07_65e91fe4","updated":"2018-01-18 17:23:42.000000000","message":"Good point, we don\u0027t need it.","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5236ad51494444b9917a075868c38b4bd757e907","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            min_ver, max_ver \u003d self._parse_version_headers(resp)"},{"line_number":127,"context_line":"        # Reset the maximum version that we permit"},{"line_number":128,"context_line":"        if StrictVersion(max_ver) \u003e StrictVersion(LATEST_VERSION):"},{"line_number":129,"context_line":"            LOG.debug(\"Remote API version %(max_ver)s is greater than the \""},{"line_number":130,"context_line":"                      \"version supported by ironicclient. Maximum available \""},{"line_number":131,"context_line":"                      \"version is %(client_ver)s\","},{"line_number":132,"context_line":"                      {\u0027max_ver\u0027: max_ver,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_d5f377e6","line":129,"updated":"2018-01-23 20:22:32.000000000","message":"maybe s/Remote/Remote server\u0027s Bare Metal/ ? (something to make it more obvious that it is the API version supported by the server)","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"312fa4344dec72446facf0c59a35664a2c04ad8a","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            min_ver, max_ver \u003d self._parse_version_headers(resp)"},{"line_number":127,"context_line":"        # Reset the maximum version that we permit"},{"line_number":128,"context_line":"        if StrictVersion(max_ver) \u003e StrictVersion(LATEST_VERSION):"},{"line_number":129,"context_line":"            LOG.debug(\"Remote API version %(max_ver)s is greater than the \""},{"line_number":130,"context_line":"                      \"version supported by ironicclient. Maximum available \""},{"line_number":131,"context_line":"                      \"version is %(client_ver)s\","},{"line_number":132,"context_line":"                      {\u0027max_ver\u0027: max_ver,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f93b717_1d2173a0","line":129,"in_reply_to":"7f96bb07_b8fc8672","updated":"2018-01-24 15:54:37.000000000","message":"Well, I think it makes it easier to understand, to use the term \u0027server\u0027. \u0027Remote\u0027 isn\u0027t a thing.","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5d788a176f201367851707f450b03e531dc9c725","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            min_ver, max_ver \u003d self._parse_version_headers(resp)"},{"line_number":127,"context_line":"        # Reset the maximum version that we permit"},{"line_number":128,"context_line":"        if StrictVersion(max_ver) \u003e StrictVersion(LATEST_VERSION):"},{"line_number":129,"context_line":"            LOG.debug(\"Remote API version %(max_ver)s is greater than the \""},{"line_number":130,"context_line":"                      \"version supported by ironicclient. Maximum available \""},{"line_number":131,"context_line":"                      \"version is %(client_ver)s\","},{"line_number":132,"context_line":"                      {\u0027max_ver\u0027: max_ver,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_b8fc8672","line":129,"in_reply_to":"7f96bb07_d5f377e6","updated":"2018-01-24 14:21:55.000000000","message":"I disagree, we don\u0027t need to name the API that python-ironicclient is speaking to since it is a given.","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5236ad51494444b9917a075868c38b4bd757e907","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        # Reset the maximum version that we permit"},{"line_number":128,"context_line":"        if StrictVersion(max_ver) \u003e StrictVersion(LATEST_VERSION):"},{"line_number":129,"context_line":"            LOG.debug(\"Remote API version %(max_ver)s is greater than the \""},{"line_number":130,"context_line":"                      \"version supported by ironicclient. Maximum available \""},{"line_number":131,"context_line":"                      \"version is %(client_ver)s\","},{"line_number":132,"context_line":"                      {\u0027max_ver\u0027: max_ver,"},{"line_number":133,"context_line":"                       \u0027client_ver\u0027: LATEST_VERSION})"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_b5e6eb15","line":130,"updated":"2018-01-23 20:22:32.000000000","message":"maybe s/the version/version %(client_ver)s/","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"312fa4344dec72446facf0c59a35664a2c04ad8a","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        # Reset the maximum version that we permit"},{"line_number":128,"context_line":"        if StrictVersion(max_ver) \u003e StrictVersion(LATEST_VERSION):"},{"line_number":129,"context_line":"            LOG.debug(\"Remote API version %(max_ver)s is greater than the \""},{"line_number":130,"context_line":"                      \"version supported by ironicclient. Maximum available \""},{"line_number":131,"context_line":"                      \"version is %(client_ver)s\","},{"line_number":132,"context_line":"                      {\u0027max_ver\u0027: max_ver,"},{"line_number":133,"context_line":"                       \u0027client_ver\u0027: LATEST_VERSION})"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f93b717_1dcbb3a5","line":130,"in_reply_to":"7f96bb07_783fde24","updated":"2018-01-24 15:54:37.000000000","message":"Off the top of my head, what I\"d want to see and grok easily is \u0027The maximum versions supported are X for the server, Y for this client. Therefore, this client will use Z as the maximum supported version.\u0027","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5d788a176f201367851707f450b03e531dc9c725","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        # Reset the maximum version that we permit"},{"line_number":128,"context_line":"        if StrictVersion(max_ver) \u003e StrictVersion(LATEST_VERSION):"},{"line_number":129,"context_line":"            LOG.debug(\"Remote API version %(max_ver)s is greater than the \""},{"line_number":130,"context_line":"                      \"version supported by ironicclient. Maximum available \""},{"line_number":131,"context_line":"                      \"version is %(client_ver)s\","},{"line_number":132,"context_line":"                      {\u0027max_ver\u0027: max_ver,"},{"line_number":133,"context_line":"                       \u0027client_ver\u0027: LATEST_VERSION})"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_783fde24","line":130,"in_reply_to":"7f96bb07_b5e6eb15","updated":"2018-01-24 14:21:55.000000000","message":"I don\u0027t see how this ultimately really differs from what is achieved by 131, although there should likely be a period on the end of the string.","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"}],"ironicclient/osc/plugin.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5236ad51494444b9917a075868c38b4bd757e907","unresolved":false,"context_lines":[{"line_number":28,"context_line":"API_VERSION_OPTION \u003d \u0027os_baremetal_api_version\u0027"},{"line_number":29,"context_line":"API_NAME \u003d \u0027baremetal\u0027"},{"line_number":30,"context_line":"# NOTE(TheJulia) Latest known version tracking has been moved"},{"line_number":31,"context_line":"# to the ironicclient/common/http.py file as the OSC committment"},{"line_number":32,"context_line":"# is latest known, and we should only store it in one location."},{"line_number":33,"context_line":"LAST_KNOWN_API_VERSION \u003d http.LAST_KNOWN_API_VERSION"},{"line_number":34,"context_line":"LATEST_VERSION \u003d http.LATEST_VERSION"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_b5402b37","line":31,"updated":"2018-01-23 20:22:32.000000000","message":"nit s/committment/commitment/\n\nI don\u0027t even think a note is needed; it is clear from the code, where the values are located :)","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"}],"ironicclient/v1/client.py":[{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"abdb0d1fb1862e651c51e0c42a78c4a7eed121b5","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self, endpoint\u003dNone, *args, **kwargs):"},{"line_number":41,"context_line":"        \"\"\"Initialize a new client for the Ironic v1 API.\"\"\""},{"line_number":42,"context_line":"        host, netport \u003d http.get_server(endpoint)"},{"line_number":43,"context_line":"        allow_downgrade \u003d kwargs.pop(\u0027allow_api_version_downgrade\u0027, False)"},{"line_number":44,"context_line":"        if kwargs.get(\u0027os_ironic_api_version\u0027):"},{"line_number":45,"context_line":"            if allow_downgrade:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_afd27333","line":42,"updated":"2018-01-11 07:01:22.000000000","message":"This doesn\u0027t seem necessary.","commit_id":"c6f44a849106e6220750a143c78eca0c500acae3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"af1af77bb2f0ddb38c1360730146f5079d857ab1","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self, endpoint\u003dNone, *args, **kwargs):"},{"line_number":41,"context_line":"        \"\"\"Initialize a new client for the Ironic v1 API.\"\"\""},{"line_number":42,"context_line":"        host, netport \u003d http.get_server(endpoint)"},{"line_number":43,"context_line":"        allow_downgrade \u003d kwargs.pop(\u0027allow_api_version_downgrade\u0027, False)"},{"line_number":44,"context_line":"        if kwargs.get(\u0027os_ironic_api_version\u0027):"},{"line_number":45,"context_line":"            if allow_downgrade:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_c8b1e7e3","line":42,"in_reply_to":"7f96bb07_afd27333","updated":"2018-01-11 18:23:50.000000000","message":"It is not, it was a hold-over from a prior attempt that I missed. Thanks!","commit_id":"c6f44a849106e6220750a143c78eca0c500acae3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3646a0ec1a966712c3cdc0e55b8cd3ba4bb80a55","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self, endpoint\u003dNone, *args, **kwargs):"},{"line_number":41,"context_line":"        \"\"\"Initialize a new client for the Ironic v1 API.\"\"\""},{"line_number":42,"context_line":"        host, netport \u003d http.get_server(endpoint)"},{"line_number":43,"context_line":"        allow_downgrade \u003d kwargs.pop(\u0027allow_api_version_downgrade\u0027, False)"},{"line_number":44,"context_line":"        if kwargs.get(\u0027os_ironic_api_version\u0027):"},{"line_number":45,"context_line":"            if allow_downgrade:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_eb04dd7d","line":42,"in_reply_to":"7f96bb07_c8b1e7e3","updated":"2018-01-11 19:26:53.000000000","message":"Done","commit_id":"c6f44a849106e6220750a143c78eca0c500acae3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3cc7080956f9a4604903a0fa6f5e92c81348aa84","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            # against our maximum suported version, so the client fails"},{"line_number":46,"context_line":"            # immediately upon an unsupported version being provided."},{"line_number":47,"context_line":"            # This logic should also likely live in common/http.py"},{"line_number":48,"context_line":"            if allow_downgrade:"},{"line_number":49,"context_line":"                # NOTE(dtantsur): here we allow the HTTP client to negotiate a"},{"line_number":50,"context_line":"                # lower version if the requested is too high"},{"line_number":51,"context_line":"                kwargs[\u0027api_version_select_state\u0027] \u003d \"default\""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_e5be8fd3","line":48,"updated":"2018-01-18 09:45:53.000000000","message":"I think we should raise a ValueError on allow_downgrade\u003dTrue and os_ironic_api_version\u003d\u0027latest\u0027.\n\nOr even: we don\u0027t need allow_downgrade any more, we can just use this new \"latest\" in the OSC client. We can remove it or at least deprecate (dunno if it\u0027s exposed to users).","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ab132530e9c51888e3bb72725446fccfbb6f9cc8","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            # against our maximum suported version, so the client fails"},{"line_number":46,"context_line":"            # immediately upon an unsupported version being provided."},{"line_number":47,"context_line":"            # This logic should also likely live in common/http.py"},{"line_number":48,"context_line":"            if allow_downgrade:"},{"line_number":49,"context_line":"                # NOTE(dtantsur): here we allow the HTTP client to negotiate a"},{"line_number":50,"context_line":"                # lower version if the requested is too high"},{"line_number":51,"context_line":"                kwargs[\u0027api_version_select_state\u0027] \u003d \"default\""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_c06573b6","line":48,"in_reply_to":"7f96bb07_e5be8fd3","updated":"2018-01-18 17:23:42.000000000","message":"I don\u0027t think it is exposed, it was a surprise for me to find, but all of these things move quite independently at times. I think allow_downgrade\u003dtrue and version\u003d\u0027latest\u0027 is still valid... I think. I need to ponder that a little more :\\","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3cc7080956f9a4604903a0fa6f5e92c81348aa84","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        self.driver \u003d driver.DriverManager(self.http_client)"},{"line_number":82,"context_line":"        self.portgroup \u003d portgroup.PortgroupManager(self.http_client)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def current_api_version(self):"},{"line_number":85,"context_line":"        \"\"\"Return the current API version in use."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        This returns the version of the REST API that the API client"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_05c29b59","line":84,"updated":"2018-01-18 09:45:53.000000000","message":"This should be a @property, I think","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3cc7080956f9a4604903a0fa6f5e92c81348aa84","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \"\"\""},{"line_number":91,"context_line":"        return self.http_client.os_ironic_api_version"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def is_api_version_negotiated(self):"},{"line_number":94,"context_line":"        \"\"\"Returns True if microversion negotiation has occured.\"\"\""},{"line_number":95,"context_line":"        return self.http_client.api_version_select_state \u003d\u003d \u0027negotiated\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_a5b407f3","line":93,"updated":"2018-01-18 09:45:53.000000000","message":"this as well","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3cc7080956f9a4604903a0fa6f5e92c81348aa84","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def is_api_version_negotiated(self):"},{"line_number":94,"context_line":"        \"\"\"Returns True if microversion negotiation has occured.\"\"\""},{"line_number":95,"context_line":"        return self.http_client.api_version_select_state \u003d\u003d \u0027negotiated\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_c5b7d3f4","line":95,"updated":"2018-01-18 09:45:53.000000000","message":"We need a call to trigger API negotiation, I think. Maybe simply:\n\n def negotiate_api_version(self):\n     self.http_client.json_request(\u0027GET\u0027, \u0027/\u0027)\n     return self.http_client.os_ironic_api_version","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ab132530e9c51888e3bb72725446fccfbb6f9cc8","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def is_api_version_negotiated(self):"},{"line_number":94,"context_line":"        \"\"\"Returns True if microversion negotiation has occured.\"\"\""},{"line_number":95,"context_line":"        return self.http_client.api_version_select_state \u003d\u003d \u0027negotiated\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_e06bcf81","line":95,"in_reply_to":"7f96bb07_c5b7d3f4","updated":"2018-01-18 17:23:42.000000000","message":"That makes sense in addition to the others, I\u0027ll add","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"35ff5071460d849cff246d163edcfe6cf61cfac9","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def is_api_version_negotiated(self):"},{"line_number":94,"context_line":"        \"\"\"Returns True if microversion negotiation has occured.\"\"\""},{"line_number":95,"context_line":"        return self.http_client.api_version_select_state \u003d\u003d \u0027negotiated\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_be7e47ac","line":95,"in_reply_to":"7f96bb07_e06bcf81","updated":"2018-01-19 22:22:14.000000000","message":"Actually, we don\u0027t even need to do that, we just need to wrap http_client\u0027s own negotiate_version call. It also returns the version, so we should be covered there.","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5236ad51494444b9917a075868c38b4bd757e907","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    :param string endpoint: A user-supplied endpoint URL for the ironic"},{"line_number":34,"context_line":"                            service."},{"line_number":35,"context_line":"    :param function token: Provides token for authentication."},{"line_number":36,"context_line":"    :param integer timeout: Allows customization of the timeout for client"},{"line_number":37,"context_line":"                            http requests. (optional)"},{"line_number":38,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_15bb1f72","line":35,"updated":"2018-01-23 20:22:32.000000000","message":"anyone know what this is for?","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5d788a176f201367851707f450b03e531dc9c725","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    :param string endpoint: A user-supplied endpoint URL for the ironic"},{"line_number":34,"context_line":"                            service."},{"line_number":35,"context_line":"    :param function token: Provides token for authentication."},{"line_number":36,"context_line":"    :param integer timeout: Allows customization of the timeout for client"},{"line_number":37,"context_line":"                            http requests. (optional)"},{"line_number":38,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_381e36bb","line":35,"in_reply_to":"7f96bb07_15bb1f72","updated":"2018-01-24 14:21:55.000000000","message":"Yes, you can invoke the client with an explicit token.","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5236ad51494444b9917a075868c38b4bd757e907","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    :param string endpoint: A user-supplied endpoint URL for the ironic"},{"line_number":34,"context_line":"                            service."},{"line_number":35,"context_line":"    :param function token: Provides token for authentication."},{"line_number":36,"context_line":"    :param integer timeout: Allows customization of the timeout for client"},{"line_number":37,"context_line":"                            http requests. (optional)"},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_3563bb1c","line":36,"updated":"2018-01-23 20:22:32.000000000","message":"this too. i don\u0027t see it anywhere.","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5d788a176f201367851707f450b03e531dc9c725","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    :param string endpoint: A user-supplied endpoint URL for the ironic"},{"line_number":34,"context_line":"                            service."},{"line_number":35,"context_line":"    :param function token: Provides token for authentication."},{"line_number":36,"context_line":"    :param integer timeout: Allows customization of the timeout for client"},{"line_number":37,"context_line":"                            http requests. (optional)"},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_38739618","line":36,"in_reply_to":"7f96bb07_3563bb1c","updated":"2018-01-24 14:21:55.000000000","message":"I appreciate the concern, however this is unrelated to what the patch is attempting to achieve. It should be passed through to the http client as an argument which would be sent to init. endpoint is the only explicitly required argument, so the rest are arguments or kw arguments, and they are all passed.","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"312fa4344dec72446facf0c59a35664a2c04ad8a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    :param string endpoint: A user-supplied endpoint URL for the ironic"},{"line_number":34,"context_line":"                            service."},{"line_number":35,"context_line":"    :param function token: Provides token for authentication."},{"line_number":36,"context_line":"    :param integer timeout: Allows customization of the timeout for client"},{"line_number":37,"context_line":"                            http requests. (optional)"},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f93b717_7d6437ba","line":36,"in_reply_to":"7f96bb07_38739618","updated":"2018-01-24 15:54:37.000000000","message":"ok, then I think allow_api_version_downgrade and \u0027os_ironic_api_version\u0027 ought to be documented here too.","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5236ad51494444b9917a075868c38b4bd757e907","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self, endpoint\u003dNone, *args, **kwargs):"},{"line_number":41,"context_line":"        \"\"\"Initialize a new client for the Ironic v1 API.\"\"\""},{"line_number":42,"context_line":"        allow_downgrade \u003d kwargs.pop(\u0027allow_api_version_downgrade\u0027, False)"},{"line_number":43,"context_line":"        if kwargs.get(\u0027os_ironic_api_version\u0027):"},{"line_number":44,"context_line":"            # TODO(TheJulia): We should sanity check os_ironic_api_version"},{"line_number":45,"context_line":"            # against our maximum suported version, so the client fails"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_b55fcb3f","line":42,"updated":"2018-01-23 20:22:32.000000000","message":"shouldn\u0027t we document the kw args? How does someone know what they are, unless they read this code?","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5d788a176f201367851707f450b03e531dc9c725","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self, endpoint\u003dNone, *args, **kwargs):"},{"line_number":41,"context_line":"        \"\"\"Initialize a new client for the Ironic v1 API.\"\"\""},{"line_number":42,"context_line":"        allow_downgrade \u003d kwargs.pop(\u0027allow_api_version_downgrade\u0027, False)"},{"line_number":43,"context_line":"        if kwargs.get(\u0027os_ironic_api_version\u0027):"},{"line_number":44,"context_line":"            # TODO(TheJulia): We should sanity check os_ironic_api_version"},{"line_number":45,"context_line":"            # against our maximum suported version, so the client fails"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_d86e32ff","line":42,"in_reply_to":"7f96bb07_b55fcb3f","updated":"2018-01-24 14:21:55.000000000","message":"With its use, likely not explicitly since they very likely don\u0027t need this functionality.","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5236ad51494444b9917a075868c38b4bd757e907","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            if allow_downgrade:"},{"line_number":49,"context_line":"                if kwargs[\u0027os_ironic_api_version\u0027] \u003d\u003d \u0027latest\u0027:"},{"line_number":50,"context_line":"                    raise ValueError("},{"line_number":51,"context_line":"                        \"Invalid configuration defined. \""},{"line_number":52,"context_line":"                        \"The os_ironic_api_versioncan not be set \""},{"line_number":53,"context_line":"                        \"to \u0027latest\u0027 while allow_api_version_downgrade \""},{"line_number":54,"context_line":"                        \"is set.\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_d58377a8","line":51,"updated":"2018-01-23 20:22:32.000000000","message":"the values are being passed in kwargs, so maybe s/configuration defined/keyword arguments/\n\nInvalid keyword arguments specified. \u0027os_ironic_api_version\u0027 cannot be set to \u0027latest\u0027 if \u0027allow_api_version_downgrade\u0027 is set.","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"312fa4344dec72446facf0c59a35664a2c04ad8a","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            if allow_downgrade:"},{"line_number":49,"context_line":"                if kwargs[\u0027os_ironic_api_version\u0027] \u003d\u003d \u0027latest\u0027:"},{"line_number":50,"context_line":"                    raise ValueError("},{"line_number":51,"context_line":"                        \"Invalid configuration defined. \""},{"line_number":52,"context_line":"                        \"The os_ironic_api_versioncan not be set \""},{"line_number":53,"context_line":"                        \"to \u0027latest\u0027 while allow_api_version_downgrade \""},{"line_number":54,"context_line":"                        \"is set.\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f93b717_3d046f7b","line":51,"in_reply_to":"7f96bb07_78891ec8","updated":"2018-01-24 15:54:37.000000000","message":"Huh? Maybe I\u0027m missing something. Aren\u0027t they making a python call? Isn\u0027t this the usage [1], eg:\n\n\u003e\u003e\u003e from ironicclient import client\n\u003e\u003e\u003e\n\u003e\u003e\u003e kwargs \u003d {\u0027os_auth_token\u0027: \u00273bcc3d3a03f44e3d8377f9247b0ad155\u0027,\n\u003e\u003e\u003e           \u0027ironic_url\u0027: \u0027http://ironic.example.org:6385/\u0027,\n\u003e\u003e\u003e           \u0027os_ironic_api_version\u0027: \u0027latest\u0027}\n\u003e\u003e\u003e ironic \u003d client.get_client(1, **kwargs)\n\n[1] https://docs.openstack.org/python-ironicclient/latest/api_v1.html#usage","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5d788a176f201367851707f450b03e531dc9c725","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            if allow_downgrade:"},{"line_number":49,"context_line":"                if kwargs[\u0027os_ironic_api_version\u0027] \u003d\u003d \u0027latest\u0027:"},{"line_number":50,"context_line":"                    raise ValueError("},{"line_number":51,"context_line":"                        \"Invalid configuration defined. \""},{"line_number":52,"context_line":"                        \"The os_ironic_api_versioncan not be set \""},{"line_number":53,"context_line":"                        \"to \u0027latest\u0027 while allow_api_version_downgrade \""},{"line_number":54,"context_line":"                        \"is set.\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_78891ec8","line":51,"in_reply_to":"7f96bb07_d58377a8","updated":"2018-01-24 14:21:55.000000000","message":"The error is likely to be raised all the way to a user ,and we treat the arguments provided in in many cases as configuration... We\u0027re not giving users the right perspective if we are talking about kw arguments and they are non-technical, don\u0027t know the underlying mechanics of the library, and then get something about kw arguments being wrong when they supplied configuration.","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1d1d438a8cd6444f4d0e63b8867360c6a43c0593","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                if kwargs[\u0027os_ironic_api_version\u0027] \u003d\u003d \u0027latest\u0027:"},{"line_number":50,"context_line":"                    raise ValueError("},{"line_number":51,"context_line":"                        \"Invalid configuration defined. \""},{"line_number":52,"context_line":"                        \"The os_ironic_api_versioncan not be set \""},{"line_number":53,"context_line":"                        \"to \u0027latest\u0027 while allow_api_version_downgrade \""},{"line_number":54,"context_line":"                        \"is set.\")"},{"line_number":55,"context_line":"                # NOTE(dtantsur): here we allow the HTTP client to negotiate a"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_af1d9674","line":52,"updated":"2018-01-19 16:45:49.000000000","message":"nit: missing space before \"can\"","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5236ad51494444b9917a075868c38b4bd757e907","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def current_api_version(self):"},{"line_number":92,"context_line":"        \"\"\"Return the current API version in use."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        This returns the version of the REST API that the API client"},{"line_number":95,"context_line":"        is presently set to request. This value may change as a result"},{"line_number":96,"context_line":"        of API version negotiation."},{"line_number":97,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_f0080129","line":94,"updated":"2018-01-23 20:22:32.000000000","message":"s/REST/Bare Metal/\n\n(dmitry seems to like Bare Metal)\n\nMaybe \u0027Returns the Bare Metal API version that this client will use in its requests. This value may change...\u0027","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5236ad51494444b9917a075868c38b4bd757e907","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @property"},{"line_number":101,"context_line":"    def is_api_version_negotiated(self):"},{"line_number":102,"context_line":"        \"\"\"Returns True if microversion negotiation has occured.\"\"\""},{"line_number":103,"context_line":"        return self.http_client.api_version_select_state \u003d\u003d \u0027negotiated\u0027"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def negotiate_api_version(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_10256dab","line":102,"updated":"2018-01-23 20:22:32.000000000","message":"nit s/occured/occurred/","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5236ad51494444b9917a075868c38b4bd757e907","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    @property"},{"line_number":101,"context_line":"    def is_api_version_negotiated(self):"},{"line_number":102,"context_line":"        \"\"\"Returns True if microversion negotiation has occured.\"\"\""},{"line_number":103,"context_line":"        return self.http_client.api_version_select_state \u003d\u003d \u0027negotiated\u0027"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def negotiate_api_version(self):"},{"line_number":106,"context_line":"        \"\"\"Triggers negotiation with the remote API endpoint."}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_b0403937","line":103,"updated":"2018-01-23 20:22:32.000000000","message":"is it True if negotiation occurred and the result is diff from the user\u0027s specified version, or is it True if negotiation happened, regardless of the outcome?","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5236ad51494444b9917a075868c38b4bd757e907","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        return self.http_client.api_version_select_state \u003d\u003d \u0027negotiated\u0027"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def negotiate_api_version(self):"},{"line_number":106,"context_line":"        \"\"\"Triggers negotiation with the remote API endpoint."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        :returns: the negotiated API version."},{"line_number":109,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_d03b85c5","line":106,"updated":"2018-01-23 20:22:32.000000000","message":"s/remote/remote Bare Metal API/ ?\n\nIt isn\u0027t just \u0027Triggers\u0027. \u0027Triggers\u0027 makes me think that this starts off some process. This \u0027Returns the maximum Bare Metal API version that is supported by the remote Bare Metal API service and this client. It does this by asking the server for its minimum and maximum supported versions and ... \u0027\n\nI wonder whether we even need to mention \u0027negotiate\u0027 in any of this. (Is there a negotiation?)","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"}],"releasenotes/notes/allow-api-user-to-use-latest-6b80e9f584eaaa4e.yaml":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3cc7080956f9a4604903a0fa6f5e92c81348aa84","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Allows a python API user to pass ``latest`` to the client creation request"},{"line_number":5,"context_line":"    for the ``os_ironic_api_version`` parameter. The version utilized for REST"},{"line_number":6,"context_line":"    API requests will, as a result, be the latest visible version."},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    Adds base client methods to provide insight to a python API user of what"},{"line_number":9,"context_line":"    the current REST API version that will be utilized, and if API version"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"7f96bb07_25ef97e9","line":6,"updated":"2018-01-18 09:45:53.000000000","message":"What do you mean by \"visible\" here? I\u0027d expand it to \"the highest version understood by both ironicclient and the server\"","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ab132530e9c51888e3bb72725446fccfbb6f9cc8","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Allows a python API user to pass ``latest`` to the client creation request"},{"line_number":5,"context_line":"    for the ``os_ironic_api_version`` parameter. The version utilized for REST"},{"line_number":6,"context_line":"    API requests will, as a result, be the latest visible version."},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    Adds base client methods to provide insight to a python API user of what"},{"line_number":9,"context_line":"    the current REST API version that will be utilized, and if API version"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"7f96bb07_00fcbbb2","line":6,"in_reply_to":"7f96bb07_25ef97e9","updated":"2018-01-18 17:23:42.000000000","message":"That works","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3cc7080956f9a4604903a0fa6f5e92c81348aa84","unresolved":false,"context_lines":[{"line_number":13,"context_line":"other:"},{"line_number":14,"context_line":"  - |"},{"line_number":15,"context_line":"    The maximum supported version supported for negotiation is now defined"},{"line_number":16,"context_line":"    in the common/http.py. Any new feature added to the API client library"},{"line_number":17,"context_line":"    must increment the version, as is presently performed when ``ironic``"},{"line_number":18,"context_line":"    CLI or ``openstack baremetal`` commands are updated."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"7f96bb07_45eae3d7","line":16,"updated":"2018-01-18 09:45:53.000000000","message":"nit `` around common/http.py","commit_id":"954d1568aa3e291b1ab22b0ccec5c619ce1c9f7d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5236ad51494444b9917a075868c38b4bd757e907","unresolved":false,"context_lines":[{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    Adds base client properties to provide insight to a python API user of"},{"line_number":10,"context_line":"    what the current REST API version that will be utilized, and if API"},{"line_number":11,"context_line":"    version negotiation has occured."},{"line_number":12,"context_line":"    These new properties are ``client.current_api_version`` and"},{"line_number":13,"context_line":"    ``client.is_api_version_negotiated`` respectively."},{"line_number":14,"context_line":"  - |"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"7f96bb07_50d69529","line":11,"updated":"2018-01-23 20:22:32.000000000","message":"nit s/occured/occurred/","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5236ad51494444b9917a075868c38b4bd757e907","unresolved":false,"context_lines":[{"line_number":19,"context_line":"  - |"},{"line_number":20,"context_line":"    The maximum supported version supported for negotiation is now defined"},{"line_number":21,"context_line":"    in the ``common/http.py`` file. Any new feature added to the API client"},{"line_number":22,"context_line":"    library must increment this version."},{"line_number":23,"context_line":"  - |"},{"line_number":24,"context_line":"    The maximum known version supported by the ``OpenStackClient`` plugin is"},{"line_number":25,"context_line":"    now defined by the maximum supported version for API negotiation as"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"7f96bb07_d0e145fe","line":22,"updated":"2018-01-23 20:22:32.000000000","message":"this is a developer thing. I don\u0027t think we should mention it here.","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"312fa4344dec72446facf0c59a35664a2c04ad8a","unresolved":false,"context_lines":[{"line_number":19,"context_line":"  - |"},{"line_number":20,"context_line":"    The maximum supported version supported for negotiation is now defined"},{"line_number":21,"context_line":"    in the ``common/http.py`` file. Any new feature added to the API client"},{"line_number":22,"context_line":"    library must increment this version."},{"line_number":23,"context_line":"  - |"},{"line_number":24,"context_line":"    The maximum known version supported by the ``OpenStackClient`` plugin is"},{"line_number":25,"context_line":"    now defined by the maximum supported version for API negotiation as"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"5f93b717_ddb0eb8e","line":22,"in_reply_to":"7f96bb07_5801c205","updated":"2018-01-24 15:54:37.000000000","message":"We do? I looked, and we\u0027ve never used \u0027other\u0027 in this package, so I\u0027m not sure where developer things have been mentioned before.\n\nI\u0027m not convinced (and think this may set a bad precedent) about this, but I don\u0027t really care that much about it.","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5d788a176f201367851707f450b03e531dc9c725","unresolved":false,"context_lines":[{"line_number":19,"context_line":"  - |"},{"line_number":20,"context_line":"    The maximum supported version supported for negotiation is now defined"},{"line_number":21,"context_line":"    in the ``common/http.py`` file. Any new feature added to the API client"},{"line_number":22,"context_line":"    library must increment this version."},{"line_number":23,"context_line":"  - |"},{"line_number":24,"context_line":"    The maximum known version supported by the ``OpenStackClient`` plugin is"},{"line_number":25,"context_line":"    now defined by the maximum supported version for API negotiation as"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"7f96bb07_5801c205","line":22,"in_reply_to":"7f96bb07_d0e145fe","updated":"2018-01-24 14:21:55.000000000","message":"Which is why I put it in other... We mention developer things all the time, and this is ultimately a three part library...","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5236ad51494444b9917a075868c38b4bd757e907","unresolved":false,"context_lines":[{"line_number":23,"context_line":"  - |"},{"line_number":24,"context_line":"    The maximum known version supported by the ``OpenStackClient`` plugin is"},{"line_number":25,"context_line":"    now defined by the maximum supported version for API negotiation as"},{"line_number":26,"context_line":"    defined in the ``common/http.py`` file."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"7f96bb07_30bc29db","line":26,"updated":"2018-01-23 20:22:32.000000000","message":"ditto","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5d788a176f201367851707f450b03e531dc9c725","unresolved":false,"context_lines":[{"line_number":23,"context_line":"  - |"},{"line_number":24,"context_line":"    The maximum known version supported by the ``OpenStackClient`` plugin is"},{"line_number":25,"context_line":"    now defined by the maximum supported version for API negotiation as"},{"line_number":26,"context_line":"    defined in the ``common/http.py`` file."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"7f96bb07_8b105250","line":26,"in_reply_to":"7f96bb07_30bc29db","updated":"2018-01-24 14:21:55.000000000","message":"Same reply.","commit_id":"5b01c8f2badb3c4affa4bbb08dd143dbd94f89d4"}]}
