class UserSchema(Schema): name = fields.String() age = fields.Float() created = fields.DateTime() created_formatted = fields.DateTime(format="%Y-%m-%d", attribute="created") created_iso = fields.DateTime(format="iso", attribute="created") updated = fields.DateTime() updated_local = fields.LocalDateTime(attribute="updated") species = fields.String(attribute="SPECIES") id = fields.String(default="no-id") uppername = Uppercased(attribute='name') homepage = fields.Url() email = fields.Email() balance = fields.Price() is_old = fields.Method("get_is_old") lowername = fields.Function(lambda obj: obj.name.lower()) registered = fields.Boolean() hair_colors = fields.List(fields.Raw) sex_choices = fields.List(fields.Raw) finger_count = fields.Integer() uid = fields.UUID() time_registered = fields.Time() birthdate = fields.Date() since_created = fields.TimeDelta() sex = fields.Select(['male', 'female']) def get_is_old(self, obj): try: return obj.age > 80 except TypeError as te: raise ValidationError(text_type(te)) def make_object(self, data): return User(**data)
def test_select_field(self): field = fields.Select(['male', 'female']) assert_equal(field.output("sex", self.user), "male") invalid = User('foo', sex='alien') assert_raises( MarshallingError, lambda: field.output('sex', invalid), )
class StrainerSchema(Schema): def __init__(self, strainer, *args, **kwargs): self._strainer = strainer kwargs.setdefault('many', True) # todo: make_object gets called unless strict is true.. # kwargs['strict'] = True # must be strict! super(StrainerSchema, self).__init__(*args, **kwargs) name = fields.String(required=True) find = fields.Select(['any', 'all'], default='any') # todo: validator for values values = fields.List(fields.String, allow_none=True) action = fields.String(default='contains') not_ = fields.Bool(default=False, attribute='not') """ :returns """ def make_object(self, data): # todo: this gets called even when there are errors, unless strict is set try: entry = self._strainer.get(data['name']) column = entry.column column_filter = column_matcher(column, data.get('action', 'contains')) except KeyError: return data values = data.get('values', None) print(values) if not values: f = column_filter(column, None) else: reduce = lambda *args: args[0] if len(values) > 1: if data.get('find', 'any') != 'any': reduce = sql_and else: reduce = sql_or f = reduce(*(column_filter(column, x) for x in values)) if data.get('not_'): f = sql_not(f) data['filter'] = f return data
def test_select_field(self, user): field = fields.Select(['male', 'female', 'transexual', 'asexual']) assert field.serialize("sex", user) == "male" invalid = User('foo', sex='alien') with pytest.raises(MarshallingError): field.serialize('sex', invalid)
class CchValSchema(Schema): name = fields.String(position=0, required=True) datetime = fields.DateTime(position=1, format='%Y/%m/%d %H:%M') season = fields.Select(position=2, choices=[0, 1]) ai = fields.Integer(position=3) ao = fields.Integer(position=4, allow_none=True)
def test_select_field(self): field = fields.Select(['male', 'female']) assert field.output("sex", self.user) == "male" invalid = User('foo', sex='alien') with pytest.raises(MarshallingError): field.output('sex', invalid)
class ColorSchema(Schema): color = fields.Select([C.red, C.blue, C.green])
def select_wrap(pairs, *args, **kwargs): choices = [p[0] for p in pairs] kwargs["pairs"] = pairs return fields.Select(choices, *args, **kwargs)