1
2
3 from collections.abc import Iterable
4 from marshmallow import Schema as _Schema, fields, ValidationError, validate
5 from six import string_types
6
7
8 loads_kwargs = {}
9 try:
10 from marshmallow.utils import EXCLUDE
11 loads_kwargs = {"unknown": EXCLUDE}
12 except ImportError:
13 pass
14
15
17
18
19
21 super_object = super(Schema, self)
22 super_result = getattr(super_object, name)(*args, **kwargs)
23 if hasattr(super_result, 'data') and hasattr(super_result, 'errors'):
24
25 if super_result.errors:
26 raise ValidationError(super_result.errors)
27 return super_result.data
28 else:
29 return super_result
30
31 - def dump(self, *args, **kwargs):
33
34 - def loads(self, *args, **kwargs):
37
39 """
40 :param fn_list: list of callable functions, each takes one param
41 :return: None if at least one validation function exists without exceptions
42 :raises ValidationError: otherwise
43 """
44 def func(value):
45 errors = []
46 for fn in fn_list:
47 try:
48 fn(value)
49 except ValidationError as err:
50 errors.append(str(err))
51 else:
52 return
53 else:
54 errors.insert(0, u"At least one validator should accept given value:")
55 raise ValidationError(errors)
56
57 return func
58
59
62 if value is None:
63 return []
64 return value.split()
65
66 - def _deserialize(self, value, attr=None, data=None, **kwargs):
67 if value is None:
68 return ""
69 elif not isinstance(value, Iterable) or isinstance(value, string_types):
70 raise ValidationError("Value `{}` is not a list of strings"
71 .format(value))
72 else:
73 return " ".join(value)
74
75
77 """ stored in db as a string:
78 "python3-marshmallow 2.0.0b5\npython-marshmallow 2.0.0b5"
79 we would represent them as
80 { name: "pkg", version: "pkg version" }
81 we implement only the serialization, since field is read-only
82 """
84 if value is None:
85 return []
86 result = []
87 try:
88 for chunk in value.split("\n"):
89 pkg, version = chunk.split()
90 result.append({
91 "name": pkg,
92 "version": version
93 })
94 except:
95 pass
96
97 return result
98
99
105
106
111
112
135
136
138 name = fields.Str(
139 required=True,
140 validate=[
141 validate.Regexp(
142 r"^[a-zA-Z][\w.-]*$",
143 error="Name must contain only letters,"
144 "digits, underscores, dashes and dots."
145 "And starts with letter"),
146 ])
147 group = fields.Str(load_only=True, allow_none=True)
148 chroots = SpaceSeparatedList(load_only=True, default=list)
149
150
151
160
161
164
165
176
177
198
199
206
207
210