)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"97263ac028e758d942be7195bd241c7c852b1d58","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Expose version status in EndpointData"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We collect the status when doing discovery, but it\u0027s not exposed"},{"line_number":10,"context_line":"anywhere to the use when they look at the EndpointData for an endpoint."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Add a function to normalize the statuses and then add normalized status"},{"line_number":13,"context_line":"to the EndpointData object."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"bf659307_220a3dd1","line":10,"range":{"start_line":10,"start_character":16,"end_line":10,"end_character":19},"updated":"2018-04-13 15:23:38.000000000","message":"user","commit_id":"0828a9c5651dba0c3710dc04047395982e72ecf3"}],"keystoneauth1/discover.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"97263ac028e758d942be7195bd241c7c852b1d58","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    :param str raw_status: Status value from a discovery document."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    :returns: A canonicalized version of the status. Valid values"},{"line_number":138,"context_line":"              are CURRENT, SUPPORTED, DEPRECATED and EXPERIMENTAL"},{"line_number":139,"context_line":"    :rtype: str"},{"line_number":140,"context_line":"    \"\"\""},{"line_number":141,"context_line":"    status \u003d raw_status.upper()"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_02d5b91b","line":138,"range":{"start_line":138,"start_character":18,"end_line":138,"end_character":65},"updated":"2018-04-13 15:23:38.000000000","message":"Have we considered an enum for this?","commit_id":"0828a9c5651dba0c3710dc04047395982e72ecf3"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"9ffa35e48de6aa981c441434179e827b1d70eefe","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    :param str raw_status: Status value from a discovery document."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    :returns: A canonicalized version of the status. Valid values"},{"line_number":138,"context_line":"              are CURRENT, SUPPORTED, DEPRECATED and EXPERIMENTAL"},{"line_number":139,"context_line":"    :rtype: str"},{"line_number":140,"context_line":"    \"\"\""},{"line_number":141,"context_line":"    status \u003d raw_status.upper()"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_8278e9c3","line":138,"range":{"start_line":138,"start_character":18,"end_line":138,"end_character":65},"in_reply_to":"bf659307_02d5b91b","updated":"2018-04-13 15:37:06.000000000","message":"Well, it\u0027s normalizing a thing that already has a return interface where people expect strings. So we could do an enum, but then we\u0027d have to transform it to a string later.","commit_id":"0828a9c5651dba0c3710dc04047395982e72ecf3"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3254bdd8672403814f6d72c84bff857342cdba3f","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    :param str raw_status: Status value from a discovery document."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    :returns: A canonicalized version of the status. Valid values"},{"line_number":138,"context_line":"              are CURRENT, SUPPORTED, DEPRECATED and EXPERIMENTAL"},{"line_number":139,"context_line":"    :rtype: str"},{"line_number":140,"context_line":"    \"\"\""},{"line_number":141,"context_line":"    status \u003d raw_status.upper()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_012f603f","line":138,"range":{"start_line":138,"start_character":18,"end_line":138,"end_character":65},"in_reply_to":"bf659307_5dbe32ae","updated":"2018-04-19 16:04:49.000000000","message":"I like the usability of this if we start working `status` into other parts of the code.","commit_id":"0828a9c5651dba0c3710dc04047395982e72ecf3"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"bf538a36ef05db91c3f989e52d83736bd745c041","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    :param str raw_status: Status value from a discovery document."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    :returns: A canonicalized version of the status. Valid values"},{"line_number":138,"context_line":"              are CURRENT, SUPPORTED, DEPRECATED and EXPERIMENTAL"},{"line_number":139,"context_line":"    :rtype: str"},{"line_number":140,"context_line":"    \"\"\""},{"line_number":141,"context_line":"    status \u003d raw_status.upper()"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_5dbe32ae","line":138,"range":{"start_line":138,"start_character":18,"end_line":138,"end_character":65},"in_reply_to":"bf659307_8278e9c3","updated":"2018-04-13 16:00:30.000000000","message":"Perhaps my use of the word \"enum\" was overly ambitious.  I just meant a class like:\n\n class Status(object)\n     CURRENT \u003d \u0027CURRENT\u0027\n     SUPPORTED \u003d \u0027SUPPORTED\u0027\n     DEPRECATED \u003d \u0027DEPRECATED\u0027\n     EXPERIMENTAL \u003d \u0027EXPERIMENTAL\u0027\n     UNKNOWN \u003d \u0027UNKNOWN\u0027\n     KNOWN \u003d (CURRENT, SUPPORTED, DEPRECATED, EXPERIMENTAL)\n     @classmethod\n     def normalize(cls, raw_status):\n         status \u003d raw_status.upper()\n         if status not in cls.KNOWN:\n             status \u003d cls.UNKNOWN\n         return status\n\nAnd then consumers would use e.g. Status.CURRENT instead of the hardcoded string \u0027CURRENT\u0027 (which can be misspelled).","commit_id":"0828a9c5651dba0c3710dc04047395982e72ecf3"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"97263ac028e758d942be7195bd241c7c852b1d58","unresolved":false,"context_lines":[{"line_number":138,"context_line":"              are CURRENT, SUPPORTED, DEPRECATED and EXPERIMENTAL"},{"line_number":139,"context_line":"    :rtype: str"},{"line_number":140,"context_line":"    \"\"\""},{"line_number":141,"context_line":"    status \u003d raw_status.upper()"},{"line_number":142,"context_line":"    if status \u003d\u003d \u0027STABLE\u0027:"},{"line_number":143,"context_line":"        status \u003d \u0027CURRENT\u0027"},{"line_number":144,"context_line":"    return status"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"def normalize_version_number(version):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_22e23dd6","line":144,"range":{"start_line":141,"start_character":0,"end_line":144,"end_character":17},"updated":"2018-04-13 15:23:38.000000000","message":"There doesn\u0027t seem to be anything about this that makes sure the value is in the set listed in the docstring.  This data is coming from a version document over which we have no control, right?  So what do we do if that document contains something totally bogus?  According to this method, just upcase it and use it.  Is that valid?  Raising ValueError doesn\u0027t sound like the right answer, to be sure.  Is there a reasonable default we could assume?  Otherwise the docstring isn\u0027t necessarily correct.","commit_id":"0828a9c5651dba0c3710dc04047395982e72ecf3"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"9ffa35e48de6aa981c441434179e827b1d70eefe","unresolved":false,"context_lines":[{"line_number":138,"context_line":"              are CURRENT, SUPPORTED, DEPRECATED and EXPERIMENTAL"},{"line_number":139,"context_line":"    :rtype: str"},{"line_number":140,"context_line":"    \"\"\""},{"line_number":141,"context_line":"    status \u003d raw_status.upper()"},{"line_number":142,"context_line":"    if status \u003d\u003d \u0027STABLE\u0027:"},{"line_number":143,"context_line":"        status \u003d \u0027CURRENT\u0027"},{"line_number":144,"context_line":"    return status"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"def normalize_version_number(version):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_e246857b","line":144,"range":{"start_line":141,"start_character":0,"end_line":144,"end_character":17},"in_reply_to":"bf659307_22e23dd6","updated":"2018-04-13 15:37:06.000000000","message":"Good point. Maybe we should check against the set and if it\u0027s not in it we should transform it to \"UNKNOWN\" ?","commit_id":"0828a9c5651dba0c3710dc04047395982e72ecf3"}],"keystoneauth1/tests/unit/test_discovery.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"97263ac028e758d942be7195bd241c7c852b1d58","unresolved":false,"context_lines":[{"line_number":536,"context_line":"                            \u0027collection\u0027: None,"},{"line_number":537,"context_line":"                            \u0027version\u0027: (2, 2),"},{"line_number":538,"context_line":"                            \u0027url\u0027: V3_URL,"},{"line_number":539,"context_line":"                            \u0027status\u0027: \u0027CURRENT\u0027,"},{"line_number":540,"context_line":"                            \u0027raw_status\u0027: \u0027CURRENT\u0027,"},{"line_number":541,"context_line":"                        },"},{"line_number":542,"context_line":"                        **versions_out"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_a2916d54","line":539,"updated":"2018-04-13 15:23:38.000000000","message":"I expected to see at least a couple of examples here where actual normalization needed to happen.  So like one where raw_status is lowercase and another where it\u0027s STABLE and gets translated to CURRENT.\n\nOtherwise add a unit test for normalize_status.","commit_id":"0828a9c5651dba0c3710dc04047395982e72ecf3"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"9ffa35e48de6aa981c441434179e827b1d70eefe","unresolved":false,"context_lines":[{"line_number":536,"context_line":"                            \u0027collection\u0027: None,"},{"line_number":537,"context_line":"                            \u0027version\u0027: (2, 2),"},{"line_number":538,"context_line":"                            \u0027url\u0027: V3_URL,"},{"line_number":539,"context_line":"                            \u0027status\u0027: \u0027CURRENT\u0027,"},{"line_number":540,"context_line":"                            \u0027raw_status\u0027: \u0027CURRENT\u0027,"},{"line_number":541,"context_line":"                        },"},{"line_number":542,"context_line":"                        **versions_out"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_7d145644","line":539,"in_reply_to":"bf659307_a2916d54","updated":"2018-04-13 15:37:06.000000000","message":"Good point - I added one - let\u0027s see if we think it\u0027s enough.","commit_id":"0828a9c5651dba0c3710dc04047395982e72ecf3"}]}
