class Tag(StoredObject): _id = StringField(primary=True) date_created = DateTimeField(validate=True) date_modified = DateTimeField(validate=True, auto_now=True) value = StringField(default='default', validate=MinLengthValidator(5)) keywords = StringField(default=['keywd1', 'keywd2'], validate=MinLengthValidator(5), list=True) _meta = {'optimistic':True}
class Blog(StoredObject): _id = StringField(primary=True, optimistic=True) body = StringField(default='blog body') title = StringField(default='asdfasdfasdf', validate=MinLengthValidator(8)) tag = ForeignField('Tag', backref='tagged') tags = ForeignField('Tag', list=True, backref='taggeds') _meta = {'optimistic': True}
class Team(StoredObject): name = StringField(primary=True) owner = ForeignField('Manager', backref='owned') wins = IntegerField(list=True) playoffs = BooleanField(default=None, list=True) schedule = StringField(list=True) players = ForeignField('Player', list=True, backref='plays_for')
class Tag(StoredObject): value = StringField(primary=True) count = StringField(default='c', validate=True) misc = StringField() misc2 = StringField() # created = DateTimeField(validate=True) # modified = DateTimeField(validate=True, auto_now=True) keywords = StringField( default=['keywd1', 'keywd2'], validate=[MinLengthValidator(5), MaxLengthValidator(10)], list=True) mybool = BooleanField(default=False) myint = IntegerField() myints = IntegerField(default=[1, 2, 3], list=True) myfloat = FloatField()
class TestSchema(StoredObject): _id = StringField(primary=True) # Simple fields intfield = IntegerField(list=False, validate=True) floatfield = FloatField(list=False, validate=True) boolfield = BooleanField(list=False, validate=True) datetimefield = DateTimeField(list=False, validate=True) stringfield = StringField(list=False, validate=True) regexfield = StringField(list=False, validate=RegexValidator('^foo$')) urlfield = StringField(list=False, validate=URLValidator()) int_min_field = IntegerField(validate=MinValueValidator(3)) int_max_field = IntegerField(validate=MaxValueValidator(15)) string_min_field = StringField(validate=MinLengthValidator(3)) string_max_field = StringField(validate=MaxLengthValidator(15)) # List fields # int_list = IntegerField(list=True, validate=MinValueValidator(3)) # float_list = FloatField(list=True, validate=True) # bool_list = BooleanField(list=True, validate=True) # datetime_list = DateTimeField(list=True, default=[]) # string_list = StringField(list=True, validate=True) _meta = {'optimistic' : True}
class Sheila(StoredObject): _id = StringField(primary=True) _meta = {'optimistic': True} # Simple fields sheila_str = StringField(default='sheila', validate=True, required=True) sheila_int = IntegerField(default=7, validate=MaxValueValidator(9)) sheila_now = DateTimeField() sheila_url = StringField(validate=URLValidator()) # List fields sheila_strs = StringField(list=True, validate=MinLengthValidator(5), list_validate=MinLengthValidator(3)) sheila_nows = DateTimeField(list=True) #, default=[]) sheila_urls = StringField( list=True, validate=[URLValidator(), MinLengthValidator(20)], list_validate=MinLengthValidator(2)) sheila_ints = IntegerField(list=True, validate=MinValueValidator(3), list_validate=MinLengthValidator(2))
def create_schema(schema_name, **fields): fields['_id'] = StringField(primary=True) fields['_meta'] = {'optimistic' : True} schema = type( schema_name, (StoredObject,), fields ) schema.set_storage(PickleStorage(schema_name)) return schema
def test_validate_max_length_list(self): ''' Assert that a list with MaxLengthValidator(n) cannot be saved with a length greater than n. ''' list_of_items_for_max = [ [1,2,3,4,5,], ['whoaaaaa','whoaaaaa',], ['awesome','aweseome','awesome','awesome',], ['awesome','awesome','awesome','awesome','awesome','awesome','awesome','awesome',], ] Schema = create_schema( 'max_length_schema', field=StringField( list=True, validate=MaxLengthValidator(7), list_validate=[MinLengthValidator(5), MaxLengthValidator(7)] ) ) # import pdb; pdb.set_trace() test_row=Schema()
def test_validate_string_list(self): ''' Assert that the field cannot be saved with lists containing any type other than string ''' test_lists = [ [1, 2, 3,], [4.0, 4.0,], [datetime.datetime.now(), datetime.datetime.now(),], ] Schema = create_schema( 'string_list_schema', field=StringField( list=True, validate=True, ) ) test_row = Schema() for test_list in test_lists: test_row.field = test_list self.assertRaises(Exception, test_row.save)
def test_validate_min_length_list(self): ''' Assert that a list with MinLengthValidator(n) cannot be saved with a length less than n. ''' list_of_items_for_min = [ [1,2,3,4,5,], ['whoa','whoa',], ['awesome','awesome','awesome','awesome',], ['awesome','awesome','awesome','awesome','awesome','awesome','awesome','awesome',], ] Schema = create_schema( 'min_length_schema', field=StringField( list=True, validate=MinLengthValidator(5), list_validate=[MinLengthValidator(5), MaxLengthValidator(7)] ) ) test_row=Schema() for test_list in list_of_items_for_min: test_row.field = test_list self.assertRaises(Exception, test_row.save)
class Blog(CachedObject): _id = StringField() title = StringField() tag = ForeignField( 'Tag', backref='tagged' ) # when you init, add an "on_after_save" to that class, even if it's not a cached object
class Ron(StoredObject): ron_str = StringField() ron_int = IntegerField() ron_now = DateTimeField()
class Keyword(StoredObject): _id = StringField()
class Player(StoredObject): name = StringField(primary=True) number = IntegerField() rating = FloatField(default=0.0) injured = BooleanField(default=False)
class Manager(StoredObject): name = StringField(primary=True) players_managed = ForeignField('Player', list=True, backref='managed_by')
class Cache(StoredObject): _id = StringField() content = DictionaryField(list=True)
def __init__(self, **kwargs): super(CachedObject, self).__init__(**kwargs) # tells are foreign keys to pay attention, even if no backrefs? self._add_field('_cache_id', StringField()) self._cache_id = '{}:{}'.format(self._name, self._primary_key) self._cache = Cache(_id=self._cache_id)
class User(StoredObject): name = StringField(primary=True)
class Tag(StoredObject): _id = StringField() count = IntegerField() keyword = ForeignField('keyword')
class Blog(StoredObject): title = StringField(primary=True) user = ForeignField('user')