)]}'
{"oslo_versionedobjects/fields.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"eef652ab129043ef0d8c9ebb2748216ea4601588","unresolved":false,"context_lines":[{"line_number":359,"context_line":""},{"line_number":360,"context_line":"class MACAddress(FieldType):"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    _PATTERN \u003d r\u0027[0-9a-f]{2}(:[0-9a-f]{2}){5}$\u0027"},{"line_number":363,"context_line":"    _REGEX \u003d re.compile(_PATTERN)"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_8af070ca","line":362,"updated":"2016-07-22 02:40:28.000000000","message":"Did u want to have a \u0027^\u0027 here?","commit_id":"fb928d74e8cc2d1643146168571a06de520371a9"},{"author":{"_account_id":20411,"name":"Julian","email":"julian.sy@att.com","username":"syjulian"},"change_message_id":"f467ff0f7387f7312b1056f78e4726241113f297","unresolved":false,"context_lines":[{"line_number":359,"context_line":""},{"line_number":360,"context_line":"class MACAddress(FieldType):"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    _PATTERN \u003d r\u0027[0-9a-f]{2}(:[0-9a-f]{2}){5}$\u0027"},{"line_number":363,"context_line":"    _REGEX \u003d re.compile(_PATTERN)"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_ca5836fd","line":362,"in_reply_to":"dada55a8_8af070ca","updated":"2016-07-25 17:34:33.000000000","message":"yes. will add","commit_id":"fb928d74e8cc2d1643146168571a06de520371a9"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"eef652ab129043ef0d8c9ebb2748216ea4601588","unresolved":false,"context_lines":[{"line_number":534,"context_line":""},{"line_number":535,"context_line":"class IPV6Network(IPNetwork):"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    _PATTERN \u003d (r\u0027^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-\u0027"},{"line_number":538,"context_line":"                r\u0027f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d\u0027"},{"line_number":539,"context_line":"                r\u0027)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}\u0027"},{"line_number":540,"context_line":"                r\u0027:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_aad8d453","line":537,"updated":"2016-07-22 02:40:28.000000000","message":"Woah.","commit_id":"fb928d74e8cc2d1643146168571a06de520371a9"},{"author":{"_account_id":20411,"name":"Julian","email":"julian.sy@att.com","username":"syjulian"},"change_message_id":"f467ff0f7387f7312b1056f78e4726241113f297","unresolved":false,"context_lines":[{"line_number":534,"context_line":""},{"line_number":535,"context_line":"class IPV6Network(IPNetwork):"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    _PATTERN \u003d (r\u0027^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-\u0027"},{"line_number":538,"context_line":"                r\u0027f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d\u0027"},{"line_number":539,"context_line":"                r\u0027)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}\u0027"},{"line_number":540,"context_line":"                r\u0027:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_8a5e3ee7","line":537,"in_reply_to":"dada55a8_aad8d453","updated":"2016-07-25 17:34:33.000000000","message":"not really sure how to hide this monstrosity. It looks like regex patterns for IPV6 are typically this gigantic. I\u0027ll take any suggestion :)","commit_id":"fb928d74e8cc2d1643146168571a06de520371a9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"56d18dad4cfa8d561ea45149df4306a5abfcb84e","unresolved":false,"context_lines":[{"line_number":551,"context_line":"                r\u0027[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4})\u0027"},{"line_number":552,"context_line":"                r\u0027{1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]\u0027"},{"line_number":553,"context_line":"                r\u0027?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\\/(d|d\u0027"},{"line_number":554,"context_line":"                r\u0027d|1[0-1]d|12[0-8]))$\u0027)"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"    @staticmethod"},{"line_number":557,"context_line":"    def coerce(obj, attr, value):"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_7b8582cd","line":554,"updated":"2016-07-26 08:10:46.000000000","message":"One way to make it more readable is to factor out duplications and add some explanations via named variables. The idea is demonstrated here: https://gist.github.com/syzdek/6086792 (I didn\u0027t checked the validity of the regex)","commit_id":"c234537e91b2af893b2a4cc680b27a87144bdbf7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b2a7d88cc5c2a4c58a7b3e64d0941c55bdcc9759","unresolved":false,"context_lines":[{"line_number":548,"context_line":"    def _create_pattern(self):"},{"line_number":549,"context_line":"        return ("},{"line_number":550,"context_line":"            r\u0027^\u0027"},{"line_number":551,"context_line":"            r\u0027([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|\u0027"},{"line_number":552,"context_line":"            # 1:2:3:4:5:6:7:8"},{"line_number":553,"context_line":"            r\u0027([0-9a-fA-F]{1,4}:){1,7}:|\u0027"},{"line_number":554,"context_line":"            # 1:: 1:2:3:4:5:6:7::"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_d60a4a78","line":551,"range":{"start_line":551,"start_character":14,"end_line":551,"end_character":33},"updated":"2016-07-27 07:40:56.000000000","message":"this seems like a common piece of the pattern below. Can we factor somehow out this duplication to a variable?","commit_id":"b3c48ebedd4f382dd4cf4664e29bac5ed79c1d06"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b2a7d88cc5c2a4c58a7b3e64d0941c55bdcc9759","unresolved":false,"context_lines":[{"line_number":552,"context_line":"            # 1:2:3:4:5:6:7:8"},{"line_number":553,"context_line":"            r\u0027([0-9a-fA-F]{1,4}:){1,7}:|\u0027"},{"line_number":554,"context_line":"            # 1:: 1:2:3:4:5:6:7::"},{"line_number":555,"context_line":"            r\u0027([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|\u0027"},{"line_number":556,"context_line":"            # 1::8 1:2:3:4:5:6::8 1:2:3:4:5:6::8"},{"line_number":557,"context_line":"            r\u0027([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|\u0027"},{"line_number":558,"context_line":"            # 1::7:8 1:2:3:4:5::7:8 1:2:3:4:5::8"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_b684f6d2","line":555,"range":{"start_line":555,"start_character":39,"end_line":555,"end_character":55},"updated":"2016-07-27 07:40:56.000000000","message":"This also seems a common piece of the pattern","commit_id":"b3c48ebedd4f382dd4cf4664e29bac5ed79c1d06"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0064ab55eca988c1af930f502b176631dfb98e38","unresolved":false,"context_lines":[{"line_number":581,"context_line":"            # 2001:db8:3:4::192.0.2.33 64:ff9b::192.0.2.33"},{"line_number":582,"context_line":"            \u0027(\\/(d|dd|1[0-1]d|12[0-8]))$\u0027"},{"line_number":583,"context_line":"            # /128"},{"line_number":584,"context_line":"            )"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    def get_schema(self):"},{"line_number":587,"context_line":"        return {\u0027type\u0027: [\u0027string\u0027], \u0027pattern\u0027: self._PATTERN}"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_aa97a238","line":584,"updated":"2016-08-10 13:52:27.000000000","message":"Generally, try to put the comment line that refers to something directly *above*, not below, that line. Please change the above comment lines to be above the regex segment to which they refer.\n\nAlso, if you got the above from a website or code base elsewhere, please provide a link to that in a comment above the regex just for the reader\u0027s benefit.","commit_id":"f0a13ed72ad9e58069523c7e3289c6137e1ce6c2"},{"author":{"_account_id":20411,"name":"Julian","email":"julian.sy@att.com","username":"syjulian"},"change_message_id":"ee666aa50b3e1e6cf32adf9cd11a50e0e7192942","unresolved":false,"context_lines":[{"line_number":581,"context_line":"            # 2001:db8:3:4::192.0.2.33 64:ff9b::192.0.2.33"},{"line_number":582,"context_line":"            \u0027(\\/(d|dd|1[0-1]d|12[0-8]))$\u0027"},{"line_number":583,"context_line":"            # /128"},{"line_number":584,"context_line":"            )"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    def get_schema(self):"},{"line_number":587,"context_line":"        return {\u0027type\u0027: [\u0027string\u0027], \u0027pattern\u0027: self._PATTERN}"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_2d5615ce","line":584,"in_reply_to":"9ad45d7e_aa97a238","updated":"2016-08-10 21:41:29.000000000","message":"done","commit_id":"f0a13ed72ad9e58069523c7e3289c6137e1ce6c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0064ab55eca988c1af930f502b176631dfb98e38","unresolved":false,"context_lines":[{"line_number":707,"context_line":"            \u0027,\u0027.join([self._element_type.stringify(x) for x in value]))"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"    def get_schema(self):"},{"line_number":710,"context_line":"        return {\u0027type\u0027: [\u0027array\u0027], \u0027items\u0027: self._element_type.get_schema()}"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"class Object(FieldType):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_8a9c5e5e","line":710,"updated":"2016-08-10 13:52:27.000000000","message":"You should also add \u0027uniqueItems\u0027: True\n\nhttps://spacetelescope.github.io/understanding-json-schema/reference/array.html#uniqueness","commit_id":"f0a13ed72ad9e58069523c7e3289c6137e1ce6c2"},{"author":{"_account_id":20411,"name":"Julian","email":"julian.sy@att.com","username":"syjulian"},"change_message_id":"ee666aa50b3e1e6cf32adf9cd11a50e0e7192942","unresolved":false,"context_lines":[{"line_number":707,"context_line":"            \u0027,\u0027.join([self._element_type.stringify(x) for x in value]))"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"    def get_schema(self):"},{"line_number":710,"context_line":"        return {\u0027type\u0027: [\u0027array\u0027], \u0027items\u0027: self._element_type.get_schema()}"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"class Object(FieldType):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_ad6a057f","line":710,"in_reply_to":"9ad45d7e_8a9c5e5e","updated":"2016-08-10 21:41:29.000000000","message":"done","commit_id":"f0a13ed72ad9e58069523c7e3289c6137e1ce6c2"}],"oslo_versionedobjects/tests/test_fields.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"56d18dad4cfa8d561ea45149df4306a5abfcb84e","unresolved":false,"context_lines":[{"line_number":1082,"context_line":"            r\u0027[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4})\u0027"},{"line_number":1083,"context_line":"            r\u0027{1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]\u0027"},{"line_number":1084,"context_line":"            r\u0027?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\\/(d|d\u0027"},{"line_number":1085,"context_line":"            r\u0027d|1[0-1]d|12[0-8]))$\u0027)"},{"line_number":1086,"context_line":"        self.assertEqual({\u0027type\u0027: [\u0027string\u0027],"},{"line_number":1087,"context_line":"                          \u0027pattern\u0027: pattern,"},{"line_number":1088,"context_line":"                          \u0027readonly\u0027: False},"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_5bc87e22","line":1085,"updated":"2016-07-26 08:10:46.000000000","message":"I\u0027m wondering that we might not want to duplicate that.\nAlso I feel we need some test to show that this regex describes what we think it describes.","commit_id":"c234537e91b2af893b2a4cc680b27a87144bdbf7"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0064ab55eca988c1af930f502b176631dfb98e38","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        self.assertEqual([\u0027string\u0027], schema[\u0027type\u0027])"},{"line_number":223,"context_line":"        self.assertEqual(False, schema[\u0027readonly\u0027])"},{"line_number":224,"context_line":"        pattern \u003d schema[\u0027pattern\u0027]"},{"line_number":225,"context_line":"        valid_values \u003d [\u0027c6:df:11:a5:c8:5d\u0027, \u002701:23:45:67:89:ab\u0027]"},{"line_number":226,"context_line":"        invalid_values \u003d [\u0027c6:df:11:a5:c8\u0027, \u0027C6:DF:11:A5:C8:5D\u0027, \u0027foo\u0027, \u00271\u0027]"},{"line_number":227,"context_line":"        for val in valid_values:"},{"line_number":228,"context_line":"            self.assertRegex(val, pattern)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_eaa51aa2","line":225,"updated":"2016-08-10 13:52:27.000000000","message":"Here and for all these added tests, please simply refer to the self.coerce_good_values and self.coerce_bad_values collections instead of repeating some portion of those values in the get_schema() tests.","commit_id":"f0a13ed72ad9e58069523c7e3289c6137e1ce6c2"},{"author":{"_account_id":20411,"name":"Julian","email":"julian.sy@att.com","username":"syjulian"},"change_message_id":"ee666aa50b3e1e6cf32adf9cd11a50e0e7192942","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        self.assertEqual([\u0027string\u0027], schema[\u0027type\u0027])"},{"line_number":223,"context_line":"        self.assertEqual(False, schema[\u0027readonly\u0027])"},{"line_number":224,"context_line":"        pattern \u003d schema[\u0027pattern\u0027]"},{"line_number":225,"context_line":"        valid_values \u003d [\u0027c6:df:11:a5:c8:5d\u0027, \u002701:23:45:67:89:ab\u0027]"},{"line_number":226,"context_line":"        invalid_values \u003d [\u0027c6:df:11:a5:c8\u0027, \u0027C6:DF:11:A5:C8:5D\u0027, \u0027foo\u0027, \u00271\u0027]"},{"line_number":227,"context_line":"        for val in valid_values:"},{"line_number":228,"context_line":"            self.assertRegex(val, pattern)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_0d123109","line":225,"in_reply_to":"9ad45d7e_eaa51aa2","updated":"2016-08-10 21:41:29.000000000","message":"done","commit_id":"f0a13ed72ad9e58069523c7e3289c6137e1ce6c2"}]}
