)]}'
{"cyborg/api/config.py":[{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"b97ce3e91f27132e3e3c6a1e6015c0a2951a3108","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \u0027root\u0027: \u0027cyborg.api.controllers.root.RootController\u0027,"},{"line_number":27,"context_line":"    \u0027modules\u0027: [\u0027cyborg.api\u0027],"},{"line_number":28,"context_line":"    \u0027static_root\u0027: \u0027%(confdir)s/public\u0027,"},{"line_number":29,"context_line":"    \u0027debug\u0027: True,"},{"line_number":30,"context_line":"    \u0027acl_public_routes\u0027: ["},{"line_number":31,"context_line":"        \u0027/\u0027,"},{"line_number":32,"context_line":"        \u0027/v2\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_6b3cc72e","line":29,"range":{"start_line":29,"start_character":13,"end_line":29,"end_character":17},"updated":"2019-08-01 16:22:34.000000000","message":"why change debug to True?","commit_id":"b9cfe45c6f6d1718a6411009e2b48bf7a0fd4b77"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"24ad8dcb9fce5c503d60a31311f9f99d775efbc1","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \u0027root\u0027: \u0027cyborg.api.controllers.root.RootController\u0027,"},{"line_number":27,"context_line":"    \u0027modules\u0027: [\u0027cyborg.api\u0027],"},{"line_number":28,"context_line":"    \u0027static_root\u0027: \u0027%(confdir)s/public\u0027,"},{"line_number":29,"context_line":"    \u0027debug\u0027: True,"},{"line_number":30,"context_line":"    \u0027acl_public_routes\u0027: ["},{"line_number":31,"context_line":"        \u0027/\u0027,"},{"line_number":32,"context_line":"        \u0027/v2\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_328f0276","line":29,"range":{"start_line":29,"start_character":13,"end_line":29,"end_character":17},"in_reply_to":"7faddb67_6b3cc72e","updated":"2019-08-05 06:11:37.000000000","message":"Done","commit_id":"b9cfe45c6f6d1718a6411009e2b48bf7a0fd4b77"}],"cyborg/api/controllers/base.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"5eeae51ceb8243c441597a66ee4c482cb87d7213","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import inspect"},{"line_number":19,"context_line":"import pecan"},{"line_number":20,"context_line":"from pecan import rest"},{"line_number":21,"context_line":"import wsme"},{"line_number":22,"context_line":"from wsme import types as wtypes"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"API_V1 \u003d \u0027v1\u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"5faad753_f8cfd054","line":21,"updated":"2019-09-06 13:37:32.000000000","message":"I recognize that this line is from 2 years ago, but please keep in mind that wsme hasn\u0027t had active maintainers for at least 4 years and is strongly discouraged","commit_id":"df2201e76e892c035cfa032275e5a634a43a0c99"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"cf8e035048680ab2e32218030f1486bfae21eb79","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import inspect"},{"line_number":19,"context_line":"import pecan"},{"line_number":20,"context_line":"from pecan import rest"},{"line_number":21,"context_line":"import wsme"},{"line_number":22,"context_line":"from wsme import types as wtypes"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"API_V1 \u003d \u0027v1\u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"5faad753_af7d796f","line":21,"in_reply_to":"5faad753_f8cfd054","updated":"2019-09-07 23:40:39.000000000","message":"I am using wsme to create HTTP responses like [1]. What is the alternative?\n\n[1] https://review.opendev.org/#/c/670467/27/cyborg/api/controllers/v2/device_profiles.py@118","commit_id":"df2201e76e892c035cfa032275e5a634a43a0c99"}],"cyborg/api/controllers/link.py":[{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"b97ce3e91f27132e3e3c6a1e6015c0a2951a3108","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    # TODO Return version etc. similar to other projects."},{"line_number":27,"context_line":"    template \u003d \u0027%(url)s/accelerator/%(res)s\u0027 \\"},{"line_number":28,"context_line":"        if bookmark else \u0027%(url)s/accelerator/v2/%(res)s\u0027"},{"line_number":29,"context_line":"    template +\u003d \u0027%(args)s\u0027 if resource_args.startswith(\u0027?\u0027) else \u0027/%(args)s\u0027"},{"line_number":30,"context_line":"    return template % {\u0027url\u0027: base_url, \u0027res\u0027: resource, \u0027args\u0027: resource_args}"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_6b53676c","line":28,"range":{"start_line":28,"start_character":46,"end_line":28,"end_character":48},"updated":"2019-08-01 16:22:34.000000000","message":"\"v2\" is hardcode here. \nI see, you set a VERSION2 as \"v2\" in the RootController.","commit_id":"b9cfe45c6f6d1718a6411009e2b48bf7a0fd4b77"},{"author":{"_account_id":14107,"name":"zhurong","email":"aaronzhu1121@gmail.com","username":"zhurong"},"change_message_id":"9b8a57ff42fcde190155c6dc917a37dbaa0e0b27","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @staticmethod"},{"line_number":53,"context_line":"    def make_link_dict(resource, resource_args, rel\u003d\u0027self\u0027):"},{"line_number":54,"context_line":"        href \u003d build_url(resource, resource_args)"},{"line_number":55,"context_line":"        link \u003d {\"href\": href, \"rel\": rel}"},{"line_number":56,"context_line":"        return link"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_c8e82f17","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":12},"updated":"2019-09-05 11:54:21.000000000","message":"test this, there will be a more extra \u0027/\u0027 in the end.\n{\"id\": \"v2.0\", \"links\": [{\"href\": \"http://172.16.1.233/accelerator/v2//\", \"rel\": \"self\"}], \"max_version\": \"2.0\", \"min_version\": \"2.0\", \"status\": \"CURRENT\"}","commit_id":"130c53502f262a81073fab8a77cd0109da4f9f49"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"110fe5a67b9139dd4c47f99a204f53d2d19daaaa","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @staticmethod"},{"line_number":53,"context_line":"    def make_link_dict(resource, resource_args, rel\u003d\u0027self\u0027):"},{"line_number":54,"context_line":"        href \u003d build_url(resource, resource_args)"},{"line_number":55,"context_line":"        link \u003d {\"href\": href, \"rel\": rel}"},{"line_number":56,"context_line":"        return link"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_b1b0bedd","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":12},"in_reply_to":"7faddb67_c8e82f17","updated":"2019-09-05 14:08:55.000000000","message":"Done","commit_id":"130c53502f262a81073fab8a77cd0109da4f9f49"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"5eeae51ceb8243c441597a66ee4c482cb87d7213","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    # TODO(Sundar) Return version etc. similar to other projects."},{"line_number":27,"context_line":"    template \u003d \u0027%(url)s/accelerator/%(res)s\u0027 \\"},{"line_number":28,"context_line":"        if bookmark else \u0027%(url)s/accelerator/\u0027 + base.API_V2 + \u0027/%(res)s\u0027"},{"line_number":29,"context_line":"    if resource_args:"},{"line_number":30,"context_line":"        template +\u003d (\u0027%(args)s\u0027 if resource_args.startswith(\u0027?\u0027)"},{"line_number":31,"context_line":"                     else \u0027/%(args)s\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5faad753_b84718bd","line":28,"updated":"2019-09-06 13:37:32.000000000","message":"Just out of curiosity when is bookmark true, and what difference does it make?","commit_id":"df2201e76e892c035cfa032275e5a634a43a0c99"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"cf8e035048680ab2e32218030f1486bfae21eb79","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    # TODO(Sundar) Return version etc. similar to other projects."},{"line_number":27,"context_line":"    template \u003d \u0027%(url)s/accelerator/%(res)s\u0027 \\"},{"line_number":28,"context_line":"        if bookmark else \u0027%(url)s/accelerator/\u0027 + base.API_V2 + \u0027/%(res)s\u0027"},{"line_number":29,"context_line":"    if resource_args:"},{"line_number":30,"context_line":"        template +\u003d (\u0027%(args)s\u0027 if resource_args.startswith(\u0027?\u0027)"},{"line_number":31,"context_line":"                     else \u0027/%(args)s\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5faad753_8f667ded","line":28,"in_reply_to":"5faad753_b84718bd","updated":"2019-09-07 23:40:39.000000000","message":"This was used in v1 API of Cyborg, apparently motivated by the output of compute API [1]. Specifically, the usages are here [2] [3]. I don\u0027t think the version discovery doc [4] requires it, so I haven\u0027t added it to v2 API.\n\n[1] https://docs.openstack.org/api-ref/compute/?expanded\u003dlist-servers-detail\n[2] https://opendev.org/openstack/cyborg/src/branch/master/cyborg/api/controllers/v1/deployables.py#L77\n[3] https://opendev.org/openstack/cyborg/src/branch/master/cyborg/api/controllers/v1/__init__.py#L45\n[4] https://docs.openstack.org/api-guide/compute/microversions.html","commit_id":"df2201e76e892c035cfa032275e5a634a43a0c99"}],"cyborg/api/controllers/root.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"5eeae51ceb8243c441597a66ee4c482cb87d7213","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class RootController(rest.RestController):"},{"line_number":47,"context_line":"    _versions \u003d [base.API_V1, base.API_V2]"},{"line_number":48,"context_line":"    \"\"\"All supported API versions\"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    _default_version \u003d base.API_V2"}],"source_content_type":"text/x-python","patch_set":22,"id":"5faad753_d88e94cf","line":47,"updated":"2019-09-06 13:37:32.000000000","message":"It\u0027s a long time since I did anything with pecan, but isn\u0027t this listing the supported versions (including v1), but then below you are removing v1 as an option?\n\n[later] Ah, perhaps things have merged and v2 is supporting v1 in some sense?","commit_id":"df2201e76e892c035cfa032275e5a634a43a0c99"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"cf8e035048680ab2e32218030f1486bfae21eb79","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class RootController(rest.RestController):"},{"line_number":47,"context_line":"    _versions \u003d [base.API_V1, base.API_V2]"},{"line_number":48,"context_line":"    \"\"\"All supported API versions\"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    _default_version \u003d base.API_V2"}],"source_content_type":"text/x-python","patch_set":22,"id":"5faad753_0f892d74","line":47,"in_reply_to":"5faad753_d88e94cf","updated":"2019-09-07 23:40:39.000000000","message":"Honestly, I haven\u0027t checked v1 API yet. The v1 API deprecated but still supported in Train. We need to figure out how to enable v1 and v2 together, given that we do only v2 API in devstack (patch P9).","commit_id":"df2201e76e892c035cfa032275e5a634a43a0c99"}],"cyborg/api/controllers/types.py":[{"author":{"_account_id":14107,"name":"zhurong","email":"aaronzhu1121@gmail.com","username":"zhurong"},"change_message_id":"9b8a57ff42fcde190155c6dc917a37dbaa0e0b27","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    name \u003d \u0027filtertype\u0027"},{"line_number":31,"context_line":"    basetype \u003d wtypes.text"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    _supported_fields \u003d wtypes.Enum(wtypes.text, \u0027parent_uuid\u0027, \u0027root_uuid\u0027,"},{"line_number":34,"context_line":"                                    \u0027vendor\u0027, \u0027host\u0027, \u0027board\u0027, \u0027availability\u0027,"},{"line_number":35,"context_line":"                                    \u0027assignable\u0027, \u0027interface_type\u0027,"},{"line_number":36,"context_line":"                                    \u0027instance_uuid\u0027, \u0027limit\u0027, \u0027marker\u0027,"},{"line_number":37,"context_line":"                                    \u0027sort_key\u0027, \u0027sort_dir\u0027)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_e84f2b67","line":35,"range":{"start_line":33,"start_character":50,"end_line":35,"end_character":65},"updated":"2019-09-05 11:54:21.000000000","message":"maybe I am wrong, please correct me, according to the new deployable object[0], this has changed to parent_id/root_id and etc, why you changed back here?\n[0]:https://github.com/openstack/cyborg/blob/master/cyborg/objects/deployable.py#L39-L49","commit_id":"130c53502f262a81073fab8a77cd0109da4f9f49"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"110fe5a67b9139dd4c47f99a204f53d2d19daaaa","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    name \u003d \u0027filtertype\u0027"},{"line_number":31,"context_line":"    basetype \u003d wtypes.text"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    _supported_fields \u003d wtypes.Enum(wtypes.text, \u0027parent_uuid\u0027, \u0027root_uuid\u0027,"},{"line_number":34,"context_line":"                                    \u0027vendor\u0027, \u0027host\u0027, \u0027board\u0027, \u0027availability\u0027,"},{"line_number":35,"context_line":"                                    \u0027assignable\u0027, \u0027interface_type\u0027,"},{"line_number":36,"context_line":"                                    \u0027instance_uuid\u0027, \u0027limit\u0027, \u0027marker\u0027,"},{"line_number":37,"context_line":"                                    \u0027sort_key\u0027, \u0027sort_dir\u0027)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_d1053a7b","line":35,"range":{"start_line":33,"start_character":50,"end_line":35,"end_character":65},"in_reply_to":"7faddb67_e84f2b67","updated":"2019-09-05 14:08:55.000000000","message":"You are right. However, these fields are used for v1 API too. Though v1 is deprecated in Train, we still support it for this release. So we need to think about how to make v1 and v2 coexist. I\u0027ll mark it as TODO for now. I also added a Storyboard item: https://storyboard.openstack.org/#!/story/2006497","commit_id":"130c53502f262a81073fab8a77cd0109da4f9f49"}],"cyborg/api/controllers/utils.py":[{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"b97ce3e91f27132e3e3c6a1e6015c0a2951a3108","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2019 Intel, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_6b8607bc","line":1,"range":{"start_line":1,"start_character":17,"end_line":1,"end_character":28},"updated":"2019-08-01 16:22:34.000000000","message":"The author of this file is zhuli from Huawei. \n\nYou just rename it. Do not need to change the Copyright.","commit_id":"b9cfe45c6f6d1718a6411009e2b48bf7a0fd4b77"},{"author":{"_account_id":14107,"name":"zhurong","email":"aaronzhu1121@gmail.com","username":"zhurong"},"change_message_id":"b3bf90f57431b14ae562cc46fe64694252f6b34d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2019 Intel, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_e00fb4dd","line":1,"range":{"start_line":1,"start_character":15,"end_line":1,"end_character":28},"updated":"2019-08-29 03:31:04.000000000","message":"Actually I think this is not the good way to change this, If we all something in this file, we should add another company copyright instead of replace the original company copyright.","commit_id":"3f088c37222ceabb82636e06c37b7c8523777ace"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fc3f863f583d35dc9d62dfbeca9449ca9a7246ee","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2019 Intel, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_b52f8387","line":1,"range":{"start_line":1,"start_character":15,"end_line":1,"end_character":28},"in_reply_to":"7faddb67_e00fb4dd","updated":"2019-09-03 05:39:25.000000000","message":"Done","commit_id":"3f088c37222ceabb82636e06c37b7c8523777ace"}],"cyborg/api/controllers/v2/api_version_request.py":[{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"589ac6a443a30041ae11e7143ebc9a8ffef93925","unresolved":false,"context_lines":[{"line_number":43,"context_line":"# minimum version of the API supported."},{"line_number":44,"context_line":"# Note(cyeoh): This only applies for the v2.1 API once microversions"},{"line_number":45,"context_line":"# support is fully merged. It does not affect the V2 API."},{"line_number":46,"context_line":"_MIN_API_VERSION \u003d \"2.0\""},{"line_number":47,"context_line":"_MAX_API_VERSION \u003d \"2.0\""},{"line_number":48,"context_line":"DEFAULT_API_VERSION \u003d _MIN_API_VERSION"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_a1167748","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":24},"updated":"2019-07-31 13:46:12.000000000","message":"we will not support V1 API anymore?","commit_id":"b9cfe45c6f6d1718a6411009e2b48bf7a0fd4b77"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"4ff70ffca0a20e9232d244f4e2358c5e26f44adc","unresolved":false,"context_lines":[{"line_number":43,"context_line":"# minimum version of the API supported."},{"line_number":44,"context_line":"# Note(cyeoh): This only applies for the v2.1 API once microversions"},{"line_number":45,"context_line":"# support is fully merged. It does not affect the V2 API."},{"line_number":46,"context_line":"_MIN_API_VERSION \u003d \"2.0\""},{"line_number":47,"context_line":"_MAX_API_VERSION \u003d \"2.0\""},{"line_number":48,"context_line":"DEFAULT_API_VERSION \u003d _MIN_API_VERSION"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_a6e730ac","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":24},"in_reply_to":"7faddb67_12a0c6f3","updated":"2019-08-05 08:59:02.000000000","message":"But the re regular below support from version 1.*","commit_id":"b9cfe45c6f6d1718a6411009e2b48bf7a0fd4b77"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"24ad8dcb9fce5c503d60a31311f9f99d775efbc1","unresolved":false,"context_lines":[{"line_number":43,"context_line":"# minimum version of the API supported."},{"line_number":44,"context_line":"# Note(cyeoh): This only applies for the v2.1 API once microversions"},{"line_number":45,"context_line":"# support is fully merged. It does not affect the V2 API."},{"line_number":46,"context_line":"_MIN_API_VERSION \u003d \"2.0\""},{"line_number":47,"context_line":"_MAX_API_VERSION \u003d \"2.0\""},{"line_number":48,"context_line":"DEFAULT_API_VERSION \u003d _MIN_API_VERSION"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_12a0c6f3","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":24},"in_reply_to":"7faddb67_a1167748","updated":"2019-08-05 06:11:37.000000000","message":"This is patterned after [1].\n\nThe MIN and MAX versions refer to the versions from which microversioning is supported. The smallest Cyborg version that supports microversions is 2.0.\n\n[1] https://github.com/openstack/nova/blob/master/nova/api/openstack/api_version_request.py","commit_id":"b9cfe45c6f6d1718a6411009e2b48bf7a0fd4b77"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"c6a542eb8c911060cc5acc2257b172ab929c724a","unresolved":false,"context_lines":[{"line_number":43,"context_line":"# minimum version of the API supported."},{"line_number":44,"context_line":"# Note(cyeoh): This only applies for the v2.1 API once microversions"},{"line_number":45,"context_line":"# support is fully merged. It does not affect the V2 API."},{"line_number":46,"context_line":"_MIN_API_VERSION \u003d \"2.0\""},{"line_number":47,"context_line":"_MAX_API_VERSION \u003d \"2.0\""},{"line_number":48,"context_line":"DEFAULT_API_VERSION \u003d _MIN_API_VERSION"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_ebede524","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":24},"in_reply_to":"7faddb67_a6e730ac","updated":"2019-08-05 20:48:47.000000000","message":"I\u0027ll follow up on this ans get back.","commit_id":"b9cfe45c6f6d1718a6411009e2b48bf7a0fd4b77"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"589ac6a443a30041ae11e7143ebc9a8ffef93925","unresolved":false,"context_lines":[{"line_number":45,"context_line":"# support is fully merged. It does not affect the V2 API."},{"line_number":46,"context_line":"_MIN_API_VERSION \u003d \"2.0\""},{"line_number":47,"context_line":"_MAX_API_VERSION \u003d \"2.0\""},{"line_number":48,"context_line":"DEFAULT_API_VERSION \u003d _MIN_API_VERSION"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"# NOTE(Sundar): min and max versions declared as functions so we can"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_011f4b5b","line":48,"range":{"start_line":48,"start_character":22,"end_line":48,"end_character":38},"updated":"2019-07-31 13:46:12.000000000","message":"IMO, there should be _MAX_API_VERSION.","commit_id":"b9cfe45c6f6d1718a6411009e2b48bf7a0fd4b77"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"24ad8dcb9fce5c503d60a31311f9f99d775efbc1","unresolved":false,"context_lines":[{"line_number":45,"context_line":"# support is fully merged. It does not affect the V2 API."},{"line_number":46,"context_line":"_MIN_API_VERSION \u003d \"2.0\""},{"line_number":47,"context_line":"_MAX_API_VERSION \u003d \"2.0\""},{"line_number":48,"context_line":"DEFAULT_API_VERSION \u003d _MIN_API_VERSION"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"# NOTE(Sundar): min and max versions declared as functions so we can"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_b2a212fb","line":48,"range":{"start_line":48,"start_character":22,"end_line":48,"end_character":38},"in_reply_to":"7faddb67_011f4b5b","updated":"2019-08-05 06:11:37.000000000","message":"Please see [1].","commit_id":"b9cfe45c6f6d1718a6411009e2b48bf7a0fd4b77"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"b97ce3e91f27132e3e3c6a1e6015c0a2951a3108","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        :param version_string: String representation of APIVersionRequest."},{"line_number":90,"context_line":"            Correct format is \u0027X.Y\u0027, where \u0027X\u0027 and \u0027Y\u0027 are int values."},{"line_number":91,"context_line":"            None value should be used to create Null APIVersionRequest,"},{"line_number":92,"context_line":"            which is equal to 0.0"},{"line_number":93,"context_line":"        \"\"\""},{"line_number":94,"context_line":"        self.ver_major \u003d 0"},{"line_number":95,"context_line":"        self.ver_minor \u003d 0"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_2b01ef06","line":92,"range":{"start_line":92,"start_character":30,"end_line":92,"end_character":33},"updated":"2019-08-01 16:22:34.000000000","message":"so the api version supported from 0.0?","commit_id":"b9cfe45c6f6d1718a6411009e2b48bf7a0fd4b77"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"24ad8dcb9fce5c503d60a31311f9f99d775efbc1","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        :param version_string: String representation of APIVersionRequest."},{"line_number":90,"context_line":"            Correct format is \u0027X.Y\u0027, where \u0027X\u0027 and \u0027Y\u0027 are int values."},{"line_number":91,"context_line":"            None value should be used to create Null APIVersionRequest,"},{"line_number":92,"context_line":"            which is equal to 0.0"},{"line_number":93,"context_line":"        \"\"\""},{"line_number":94,"context_line":"        self.ver_major \u003d 0"},{"line_number":95,"context_line":"        self.ver_minor \u003d 0"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_d2a54e04","line":92,"range":{"start_line":92,"start_character":30,"end_line":92,"end_character":33},"in_reply_to":"7faddb67_2b01ef06","updated":"2019-08-05 06:11:37.000000000","message":"The value None is interpreted as 0.0, but that doesn\u0027t mean there is an API version 0.0.","commit_id":"b9cfe45c6f6d1718a6411009e2b48bf7a0fd4b77"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"b97ce3e91f27132e3e3c6a1e6015c0a2951a3108","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.ver_minor \u003d 0"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        if version_string is not None:"},{"line_number":98,"context_line":"            match \u003d re.match(r\"^([1-9]\\d*)\\.([1-9]\\d*|0)$\","},{"line_number":99,"context_line":"                             version_string)"},{"line_number":100,"context_line":"            if match:"},{"line_number":101,"context_line":"                self.ver_major \u003d int(match.group(1))"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_6e3e15b9","line":98,"range":{"start_line":98,"start_character":33,"end_line":98,"end_character":41},"updated":"2019-08-01 16:22:34.000000000","message":"this re does not support 0.* (such as 0.0).","commit_id":"b9cfe45c6f6d1718a6411009e2b48bf7a0fd4b77"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"24ad8dcb9fce5c503d60a31311f9f99d775efbc1","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.ver_minor \u003d 0"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        if version_string is not None:"},{"line_number":98,"context_line":"            match \u003d re.match(r\"^([1-9]\\d*)\\.([1-9]\\d*|0)$\","},{"line_number":99,"context_line":"                             version_string)"},{"line_number":100,"context_line":"            if match:"},{"line_number":101,"context_line":"                self.ver_major \u003d int(match.group(1))"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_72b01a44","line":98,"range":{"start_line":98,"start_character":33,"end_line":98,"end_character":41},"in_reply_to":"7faddb67_6e3e15b9","updated":"2019-08-05 06:11:37.000000000","message":"If the version_string is None, it is interpreted as 0.0. But this if check is for \"not None\". If a version_string is provided and is not None, it must be a valid version.\n\nThis is patterned after [1] above.","commit_id":"b9cfe45c6f6d1718a6411009e2b48bf7a0fd4b77"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"5eeae51ceb8243c441597a66ee4c482cb87d7213","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"5faad753_d35f570c","updated":"2019-09-06 13:37:32.000000000","message":"In case you weren\u0027t aware, there\u0027s a library for some of this: https://pypi.org/project/microversion_parse/ which includes some utility routines, a Version class, and WSGI middleware for managing processing requests and responses.","commit_id":"df2201e76e892c035cfa032275e5a634a43a0c99"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"cf8e035048680ab2e32218030f1486bfae21eb79","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"5faad753_ac8267c7","in_reply_to":"5faad753_d35f570c","updated":"2019-09-07 23:40:39.000000000","message":"Thanks for the pointer.","commit_id":"df2201e76e892c035cfa032275e5a634a43a0c99"}]}
