33 @classmethod |
33 @classmethod |
34 def deserialize(cls, text): |
34 def deserialize(cls, text): |
35 try: |
35 try: |
36 return cls(l.split(' ', 1) for l in text.splitlines()).validate() |
36 return cls(l.split(' ', 1) for l in text.splitlines()).validate() |
37 except ValueError: # l.split returns 1 item instead of 2 |
37 except ValueError: # l.split returns 1 item instead of 2 |
38 raise InvalidPointer( |
38 raise InvalidPointer(_('cannot parse git-lfs text: %s') |
39 _('cannot parse git-lfs text: %s') % stringutil.pprint( |
39 % stringutil.pprint(text)) |
40 text, bprefix=False)) |
|
41 |
40 |
42 def serialize(self): |
41 def serialize(self): |
43 sortkeyfunc = lambda x: (x[0] != 'version', x) |
42 sortkeyfunc = lambda x: (x[0] != 'version', x) |
44 items = sorted(self.validate().iteritems(), key=sortkeyfunc) |
43 items = sorted(self.validate().iteritems(), key=sortkeyfunc) |
45 return ''.join('%s %s\n' % (k, v) for k, v in items) |
44 return ''.join('%s %s\n' % (k, v) for k, v in items) |
64 """raise InvalidPointer on error. return self if there is no error""" |
63 """raise InvalidPointer on error. return self if there is no error""" |
65 requiredcount = 0 |
64 requiredcount = 0 |
66 for k, v in self.iteritems(): |
65 for k, v in self.iteritems(): |
67 if k in self._requiredre: |
66 if k in self._requiredre: |
68 if not self._requiredre[k].match(v): |
67 if not self._requiredre[k].match(v): |
69 raise InvalidPointer(_('unexpected value: %s=%s') % ( |
68 raise InvalidPointer(_('unexpected value: %s=%s') |
70 k, stringutil.pprint(v, bprefix=False))) |
69 % (k, stringutil.pprint(v))) |
71 requiredcount += 1 |
70 requiredcount += 1 |
72 elif not self._keyre.match(k): |
71 elif not self._keyre.match(k): |
73 raise InvalidPointer(_('unexpected key: %s') % k) |
72 raise InvalidPointer(_('unexpected key: %s') % k) |
74 if not self._valuere.match(v): |
73 if not self._valuere.match(v): |
75 raise InvalidPointer(_('unexpected value: %s=%s') % ( |
74 raise InvalidPointer(_('unexpected value: %s=%s') |
76 k, stringutil.pprint(v, bprefix=False))) |
75 % (k, stringutil.pprint(v))) |
77 if len(self._requiredre) != requiredcount: |
76 if len(self._requiredre) != requiredcount: |
78 miss = sorted(set(self._requiredre.keys()).difference(self.keys())) |
77 miss = sorted(set(self._requiredre.keys()).difference(self.keys())) |
79 raise InvalidPointer(_('missed keys: %s') % ', '.join(miss)) |
78 raise InvalidPointer(_('missed keys: %s') % ', '.join(miss)) |
80 return self |
79 return self |
81 |
80 |