)]}'
{"nova/objects/fields.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6fc5fb2b03c3d513b9f739d35de13ab22dc3fdcf","unresolved":false,"context_lines":[{"line_number":736,"context_line":"            raise ValueError(_(\u0027Value must match %s\u0027) % obj.PATTERN)"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"    def get_schema(self):"},{"line_number":739,"context_line":"        if type(self.PATTERN) \u003d\u003d str:"},{"line_number":740,"context_line":"            return {\u0027type\u0027: [\u0027string\u0027], \u0027pattern\u0027: self.PATTERN}"},{"line_number":741,"context_line":"        else:"},{"line_number":742,"context_line":"            return super(AddressBase, self).get_schema()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_6c819f8f","line":739,"updated":"2016-11-07 11:37:27.000000000","message":"Why do we need this if? As I see the pattern is a string in every descendant class.","commit_id":"6c11ca9d2f2508744a3ae4382cb3bb4f0072abd6"},{"author":{"_account_id":20411,"name":"Julian","email":"julian.sy@att.com","username":"syjulian"},"change_message_id":"d4302bac733b431ebb1493c1c75df0f26cfe3cb3","unresolved":false,"context_lines":[{"line_number":736,"context_line":"            raise ValueError(_(\u0027Value must match %s\u0027) % obj.PATTERN)"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"    def get_schema(self):"},{"line_number":739,"context_line":"        if type(self.PATTERN) \u003d\u003d str:"},{"line_number":740,"context_line":"            return {\u0027type\u0027: [\u0027string\u0027], \u0027pattern\u0027: self.PATTERN}"},{"line_number":741,"context_line":"        else:"},{"line_number":742,"context_line":"            return super(AddressBase, self).get_schema()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_abc1ca82","line":739,"in_reply_to":"9a629dbe_6c819f8f","updated":"2016-11-08 13:18:52.000000000","message":"I put this just in case a new subclass is made with a non-string pattern. I can take it out if that\u0027s not necessary. What do you think?","commit_id":"6c11ca9d2f2508744a3ae4382cb3bb4f0072abd6"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ddf6e9331e09b0946f928354307114ccea1daa52","unresolved":false,"context_lines":[{"line_number":736,"context_line":"            raise ValueError(_(\u0027Value must match %s\u0027) % obj.PATTERN)"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"    def get_schema(self):"},{"line_number":739,"context_line":"        if type(self.PATTERN) \u003d\u003d str:"},{"line_number":740,"context_line":"            return {\u0027type\u0027: [\u0027string\u0027], \u0027pattern\u0027: self.PATTERN}"},{"line_number":741,"context_line":"        else:"},{"line_number":742,"context_line":"            return super(AddressBase, self).get_schema()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_d0149445","line":739,"in_reply_to":"9a629dbe_abc1ca82","updated":"2016-11-09 10:19:27.000000000","message":"I think it is better to let the code fail when somebody introduce a non string pattern. If it that is a valid case then the check can be added when the non string pattern is introduced.","commit_id":"6c11ca9d2f2508744a3ae4382cb3bb4f0072abd6"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"02e6ca41bb0025c69c3bc532ece7d489364b579d","unresolved":false,"context_lines":[{"line_number":733,"context_line":"class AddressBase(FieldType):"},{"line_number":734,"context_line":"    @staticmethod"},{"line_number":735,"context_line":"    def coerce(obj, attr, value):"},{"line_number":736,"context_line":"        if re.match(obj.PATTERN, str(value)):"},{"line_number":737,"context_line":"            return str(value)"},{"line_number":738,"context_line":"        else:"},{"line_number":739,"context_line":"            raise ValueError(_(\u0027Value must match %s\u0027) % obj.PATTERN)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_0c76a4d6","line":736,"updated":"2016-12-06 12:21:09.000000000","message":"unrelated to this patch, but all the PATTERNs in this code are wrong I think.\n\nre.match(FOO) is equal to re.search(\"^%s\" % FOO). But that means that if FOO does not include the end token \u0027$\u0027 it is only seeing if the string *starts* with the listed pattern. \n\nThat means that we\u0027ve got issues where these aren\u0027t really validating the attr.","commit_id":"3921224b5e13d9393425b864d53ef942a7fc8959"}]}
