)]}'
{"keystoneauth1/discover.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"ae023a0bbcea7d8f12dc064071640f5ce9a4d5fb","unresolved":false,"context_lines":[{"line_number":563,"context_line":"          :version string: The normalized version of the endpoint."},{"line_number":564,"context_line":"          :url str: The url for the endpoint."},{"line_number":565,"context_line":"          :collection: The URL for the discovery document.  May be None."},{"line_number":566,"context_line":"          :min_microversion: The minimum microversion supported by the"},{"line_number":567,"context_line":"                             endpoint.  May be None."},{"line_number":568,"context_line":"          :max_microversion: The maximum microversion supported by the"},{"line_number":569,"context_line":"                             endpoint.  May be None."},{"line_number":570,"context_line":"          :status str: A canonicalized version of the status. Valid values"},{"line_number":571,"context_line":"                       are CURRENT, SUPPORTED, DEPRECATED and EXPERIMENTAL"},{"line_number":572,"context_line":"          :raw_status str: The status as provided by the server"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_c081a74c","line":569,"range":{"start_line":566,"start_character":10,"end_line":569,"end_character":52},"updated":"2018-04-06 14:09:02.000000000","message":"Maybe these should indicate that they\u0027re strings","commit_id":"33092d8e569acb26b710f1f2dd413a72b166d1a4"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"177d8d31e1b38103b3c0f8f8cd68ecd33b482d60","unresolved":false,"context_lines":[{"line_number":563,"context_line":"          :version string: The normalized version of the endpoint."},{"line_number":564,"context_line":"          :url str: The url for the endpoint."},{"line_number":565,"context_line":"          :collection: The URL for the discovery document.  May be None."},{"line_number":566,"context_line":"          :min_microversion: The minimum microversion supported by the"},{"line_number":567,"context_line":"                             endpoint.  May be None."},{"line_number":568,"context_line":"          :max_microversion: The maximum microversion supported by the"},{"line_number":569,"context_line":"                             endpoint.  May be None."},{"line_number":570,"context_line":"          :status str: A canonicalized version of the status. Valid values"},{"line_number":571,"context_line":"                       are CURRENT, SUPPORTED, DEPRECATED and EXPERIMENTAL"},{"line_number":572,"context_line":"          :raw_status str: The status as provided by the server"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_b5db8c7b","line":569,"range":{"start_line":566,"start_character":10,"end_line":569,"end_character":52},"in_reply_to":"bf659307_c081a74c","updated":"2018-04-13 13:24:27.000000000","message":"++","commit_id":"33092d8e569acb26b710f1f2dd413a72b166d1a4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e51d462611df78430683de4f6f3bd96742cc1ae7","unresolved":false,"context_lines":[{"line_number":910,"context_line":"                  Each data element in the returned list is a dictionary"},{"line_number":911,"context_line":"                  consisting of:"},{"line_number":912,"context_line":""},{"line_number":913,"context_line":"          :version string: The normalized version of the endpoint."},{"line_number":914,"context_line":"          :url str: The url for the endpoint."},{"line_number":915,"context_line":"          :collection: The URL for the discovery document.  May be None."},{"line_number":916,"context_line":"          :min_microversion: The minimum microversion supported by the"},{"line_number":917,"context_line":"                             endpoint.  May be None."},{"line_number":918,"context_line":"          :max_microversion: The maximum microversion supported by the"},{"line_number":919,"context_line":"                             endpoint.  May be None."},{"line_number":920,"context_line":"          :status str: A canonicalized version of the status. Valid values"},{"line_number":921,"context_line":"                       are CURRENT, SUPPORTED, DEPRECATED and EXPERIMENTAL"},{"line_number":922,"context_line":"          :raw_status str: The status as provided by the server"},{"line_number":923,"context_line":"        :rtype: list(dict)"},{"line_number":924,"context_line":"        \"\"\""},{"line_number":925,"context_line":"        versions \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f6a8fd7_c89a7212","line":922,"range":{"start_line":913,"start_character":10,"end_line":922,"end_character":63},"updated":"2018-04-25 15:20:21.000000000","message":"I see this duplicated in several places, which was already mentioned by Colleen.\n\nDo we expect this information to change or be modified? Even if there is a small chance that it may, I wouldn\u0027t be opposed to pull this information into a class where we can handle those changes as methods and attributes.\n\nI could see something updating this and part of the doc strings getting missed in the update. Instead we could do:\n\n  :returns: A list of $VersionObjectName objects\n\nThen at least we\u0027re giving people one place to go look, instead of opening ourselves up to inconsistencies via duplication.\n\nIf this is going to be used in report, dict methods, we can supply a to_dict() method, or even subclass dict() if that makes sense.","commit_id":"444489aff0f6b8242fbf54b23d53aa412c3f6146"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"d53286f27b754da95599755b69a053dc66b9800d","unresolved":false,"context_lines":[{"line_number":910,"context_line":"                  Each data element in the returned list is a dictionary"},{"line_number":911,"context_line":"                  consisting of:"},{"line_number":912,"context_line":""},{"line_number":913,"context_line":"          :version string: The normalized version of the endpoint."},{"line_number":914,"context_line":"          :url str: The url for the endpoint."},{"line_number":915,"context_line":"          :collection: The URL for the discovery document.  May be None."},{"line_number":916,"context_line":"          :min_microversion: The minimum microversion supported by the"},{"line_number":917,"context_line":"                             endpoint.  May be None."},{"line_number":918,"context_line":"          :max_microversion: The maximum microversion supported by the"},{"line_number":919,"context_line":"                             endpoint.  May be None."},{"line_number":920,"context_line":"          :status str: A canonicalized version of the status. Valid values"},{"line_number":921,"context_line":"                       are CURRENT, SUPPORTED, DEPRECATED and EXPERIMENTAL"},{"line_number":922,"context_line":"          :raw_status str: The status as provided by the server"},{"line_number":923,"context_line":"        :rtype: list(dict)"},{"line_number":924,"context_line":"        \"\"\""},{"line_number":925,"context_line":"        versions \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f6a8fd7_bdf17997","line":922,"range":{"start_line":913,"start_character":10,"end_line":922,"end_character":63},"in_reply_to":"9f6a8fd7_c89a7212","updated":"2018-04-27 19:10:32.000000000","message":"Yeah - this is a place where javascript really kicks the pants off of python.\n\nWe can make a class out of these that subclasses dict...\n\nand done in a followup.","commit_id":"444489aff0f6b8242fbf54b23d53aa412c3f6146"}],"keystoneauth1/identity/base.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"ae023a0bbcea7d8f12dc064071640f5ce9a4d5fb","unresolved":false,"context_lines":[{"line_number":528,"context_line":"            version data dictionaries. Each version data dictionary consists"},{"line_number":529,"context_line":"            of:"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"          :version string: The normalized version of the endpoint."},{"line_number":532,"context_line":"          :url str: The url for the endpoint."},{"line_number":533,"context_line":"          :collection: The URL for the discovery document.  May be None."},{"line_number":534,"context_line":"          :min_microversion: The minimum microversion supported by the"},{"line_number":535,"context_line":"                             endpoint.  May be None."},{"line_number":536,"context_line":"          :max_microversion: The maximum microversion supported by the"},{"line_number":537,"context_line":"                             endpoint.  May be None."},{"line_number":538,"context_line":"          :status str: A canonicalized version of the status. Valid values"},{"line_number":539,"context_line":"                       are CURRENT, SUPPORTED, DEPRECATED and EXPERIMENTAL"},{"line_number":540,"context_line":"          :raw_status str: The status as provided by the server"},{"line_number":541,"context_line":"        \"\"\""},{"line_number":542,"context_line":"        catalog \u003d self.get_access(session).service_catalog"},{"line_number":543,"context_line":"        version_data \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_6049bb30","line":540,"range":{"start_line":531,"start_character":0,"end_line":540,"end_character":63},"updated":"2018-04-06 14:09:02.000000000","message":"Starting to think maybe this could be DRY\u0027d up by making this dict a class","commit_id":"33092d8e569acb26b710f1f2dd413a72b166d1a4"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"177d8d31e1b38103b3c0f8f8cd68ecd33b482d60","unresolved":false,"context_lines":[{"line_number":528,"context_line":"            version data dictionaries. Each version data dictionary consists"},{"line_number":529,"context_line":"            of:"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"          :version string: The normalized version of the endpoint."},{"line_number":532,"context_line":"          :url str: The url for the endpoint."},{"line_number":533,"context_line":"          :collection: The URL for the discovery document.  May be None."},{"line_number":534,"context_line":"          :min_microversion: The minimum microversion supported by the"},{"line_number":535,"context_line":"                             endpoint.  May be None."},{"line_number":536,"context_line":"          :max_microversion: The maximum microversion supported by the"},{"line_number":537,"context_line":"                             endpoint.  May be None."},{"line_number":538,"context_line":"          :status str: A canonicalized version of the status. Valid values"},{"line_number":539,"context_line":"                       are CURRENT, SUPPORTED, DEPRECATED and EXPERIMENTAL"},{"line_number":540,"context_line":"          :raw_status str: The status as provided by the server"},{"line_number":541,"context_line":"        \"\"\""},{"line_number":542,"context_line":"        catalog \u003d self.get_access(session).service_catalog"},{"line_number":543,"context_line":"        version_data \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_979cac0e","line":540,"range":{"start_line":531,"start_character":0,"end_line":540,"end_character":63},"in_reply_to":"bf659307_6049bb30","updated":"2018-04-13 13:24:27.000000000","message":"I thought about that - but I think the most common use of this is going to be in generating reports - and possibly in cloud operators generating cache documents, all of which eventually want to be json or dicts - so if we made this a class we\u0027d need to make it a have a good toDict() as well.\n\nI could go either way?","commit_id":"33092d8e569acb26b710f1f2dd413a72b166d1a4"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"ae023a0bbcea7d8f12dc064071640f5ce9a4d5fb","unresolved":false,"context_lines":[{"line_number":552,"context_line":"                    session\u003dsession,"},{"line_number":553,"context_line":"                    project_id\u003dself.get_project_id(session),"},{"line_number":554,"context_line":"                )"},{"line_number":555,"context_line":"                regions \u003d version_data.setdefault(service.region_name, {})"},{"line_number":556,"context_line":"                interfaces \u003d regions.setdefault(service.interface, {})"},{"line_number":557,"context_line":"                interfaces[service_type] \u003d versions"},{"line_number":558,"context_line":"        return version_data"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_80e2cf00","line":555,"range":{"start_line":555,"start_character":16,"end_line":555,"end_character":74},"updated":"2018-04-06 14:09:02.000000000","message":"This is a little confusing. In addition to setting regions to {} if there\u0027s no matching region, it also sets the region_name in version_data to {} which is a little weird since region names are usually strings. Is that what you are wanting to do to version_data?","commit_id":"33092d8e569acb26b710f1f2dd413a72b166d1a4"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"177d8d31e1b38103b3c0f8f8cd68ecd33b482d60","unresolved":false,"context_lines":[{"line_number":552,"context_line":"                    session\u003dsession,"},{"line_number":553,"context_line":"                    project_id\u003dself.get_project_id(session),"},{"line_number":554,"context_line":"                )"},{"line_number":555,"context_line":"                regions \u003d version_data.setdefault(service.region_name, {})"},{"line_number":556,"context_line":"                interfaces \u003d regions.setdefault(service.interface, {})"},{"line_number":557,"context_line":"                interfaces[service_type] \u003d versions"},{"line_number":558,"context_line":"        return version_data"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_b7353047","line":555,"range":{"start_line":555,"start_character":16,"end_line":555,"end_character":74},"in_reply_to":"bf659307_80e2cf00","updated":"2018-04-13 13:24:27.000000000","message":"It\u0027s setting the value of version_data[region_name] to {}. It\u0027s more like:\n\n  if service.region_name not in version_data:\n    version_data[service.region_name] \u003d {}\n  regions \u003d version_data[service.region_name]\n\n  if service.interface not in regions:\n    regions[service.interface] \u003d {}\n  interfaces \u003d regions[service.interface]\n\n  interfaces[service_type] \u003d versions\n\nPerhaps it would be better to write it more like that so it\u0027s clearer, rather than using the return value of setdefault.","commit_id":"33092d8e569acb26b710f1f2dd413a72b166d1a4"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"ae023a0bbcea7d8f12dc064071640f5ce9a4d5fb","unresolved":false,"context_lines":[{"line_number":554,"context_line":"                )"},{"line_number":555,"context_line":"                regions \u003d version_data.setdefault(service.region_name, {})"},{"line_number":556,"context_line":"                interfaces \u003d regions.setdefault(service.interface, {})"},{"line_number":557,"context_line":"                interfaces[service_type] \u003d versions"},{"line_number":558,"context_line":"        return version_data"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"    def get_user_id(self, session, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_60a1bb95","line":557,"range":{"start_line":557,"start_character":16,"end_line":557,"end_character":26},"updated":"2018-04-06 14:09:02.000000000","message":"Is this getting used somewhere?","commit_id":"33092d8e569acb26b710f1f2dd413a72b166d1a4"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"177d8d31e1b38103b3c0f8f8cd68ecd33b482d60","unresolved":false,"context_lines":[{"line_number":554,"context_line":"                )"},{"line_number":555,"context_line":"                regions \u003d version_data.setdefault(service.region_name, {})"},{"line_number":556,"context_line":"                interfaces \u003d regions.setdefault(service.interface, {})"},{"line_number":557,"context_line":"                interfaces[service_type] \u003d versions"},{"line_number":558,"context_line":"        return version_data"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"    def get_user_id(self, session, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_d77a24ef","line":557,"range":{"start_line":557,"start_character":16,"end_line":557,"end_character":26},"in_reply_to":"bf659307_60a1bb95","updated":"2018-04-13 13:24:27.000000000","message":"interfaces is just an alias for regions[service.interface], so this is being used to set regions[service.interface] \u003d versions. This:\n\n  version_data[service.region_name][service.interface][service_type] \u003d versions\n\nis what\u0027s actually happening here.","commit_id":"33092d8e569acb26b710f1f2dd413a72b166d1a4"}],"keystoneauth1/session.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e51d462611df78430683de4f6f3bd96742cc1ae7","unresolved":false,"context_lines":[{"line_number":1183,"context_line":"        \"\"\""},{"line_number":1184,"context_line":"        auth \u003d self._auth_required(auth, \u0027get project_id\u0027)"},{"line_number":1185,"context_line":"        return auth.get_project_id(self)"},{"line_number":1186,"context_line":""},{"line_number":1187,"context_line":"REQUESTS_VERSION \u003d tuple(int(v) for v in requests.__version__.split(\u0027.\u0027))"},{"line_number":1188,"context_line":""},{"line_number":1189,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9f6a8fd7_a82dbefe","line":1186,"updated":"2018-04-25 15:20:21.000000000","message":"Unrelated whitespace change?","commit_id":"444489aff0f6b8242fbf54b23d53aa412c3f6146"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8f193b6902653f05312e9850f8fadebeec15d95c","unresolved":false,"context_lines":[{"line_number":1183,"context_line":"        \"\"\""},{"line_number":1184,"context_line":"        auth \u003d self._auth_required(auth, \u0027get project_id\u0027)"},{"line_number":1185,"context_line":"        return auth.get_project_id(self)"},{"line_number":1186,"context_line":""},{"line_number":1187,"context_line":"REQUESTS_VERSION \u003d tuple(int(v) for v in requests.__version__.split(\u0027.\u0027))"},{"line_number":1188,"context_line":""},{"line_number":1189,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_e99dcf66","line":1186,"in_reply_to":"9f6a8fd7_8d7c5121","updated":"2018-05-03 17:43:02.000000000","message":"I\u0027d prefer it be reverted, but that\u0027s also nit picky since this doesn\u0027t violate pep8 in anyway.","commit_id":"444489aff0f6b8242fbf54b23d53aa412c3f6146"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"d53286f27b754da95599755b69a053dc66b9800d","unresolved":false,"context_lines":[{"line_number":1183,"context_line":"        \"\"\""},{"line_number":1184,"context_line":"        auth \u003d self._auth_required(auth, \u0027get project_id\u0027)"},{"line_number":1185,"context_line":"        return auth.get_project_id(self)"},{"line_number":1186,"context_line":""},{"line_number":1187,"context_line":"REQUESTS_VERSION \u003d tuple(int(v) for v in requests.__version__.split(\u0027.\u0027))"},{"line_number":1188,"context_line":""},{"line_number":1189,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9f6a8fd7_8d7c5121","line":1186,"in_reply_to":"9f6a8fd7_a82dbefe","updated":"2018-04-27 19:10:32.000000000","message":"Yah. I can fix or leave - depending on preference.","commit_id":"444489aff0f6b8242fbf54b23d53aa412c3f6146"}],"requirements.txt":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"5849e264b86125f9c80415b4db604f86d5e395e3","unresolved":false,"context_lines":[{"line_number":16,"context_line":"requests\u003e\u003d2.14.2 # Apache-2.0"},{"line_number":17,"context_line":"six\u003e\u003d1.10.0 # MIT"},{"line_number":18,"context_line":"stevedore\u003e\u003d1.20.0 # Apache-2.0"},{"line_number":19,"context_line":"os-service-types\u003e\u003d1.2.0  # Apache-2.0"}],"source_content_type":"text/plain","patch_set":2,"id":"bf659307_8acc3062","line":19,"updated":"2018-04-06 12:25:43.000000000","message":"Hmmm we have so few dependencies on purpose, I\u0027m a little worried about adding this one.","commit_id":"33092d8e569acb26b710f1f2dd413a72b166d1a4"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8c075de0e397cf7d7b7b18bf400c8eca6b4a7586","unresolved":false,"context_lines":[{"line_number":16,"context_line":"requests\u003e\u003d2.14.2 # Apache-2.0"},{"line_number":17,"context_line":"six\u003e\u003d1.10.0 # MIT"},{"line_number":18,"context_line":"stevedore\u003e\u003d1.20.0 # Apache-2.0"},{"line_number":19,"context_line":"os-service-types\u003e\u003d1.2.0  # Apache-2.0"}],"source_content_type":"text/plain","patch_set":2,"id":"bf659307_05501132","line":19,"in_reply_to":"bf659307_8acc3062","updated":"2018-04-06 13:37:48.000000000","message":"We actually created the library because originally there was concerns about syncing the json data into keystoneauth. (see https://review.openstack.org/#/c/462218/ comment #1 from morgan) We also keep zero deps in os-service-types (other than pbr) so that it doesn\u0027t increase the dependency load on keystoneauth.","commit_id":"33092d8e569acb26b710f1f2dd413a72b166d1a4"}]}
