zoom.store module¶
zoom.store
key value store
-
class
zoom.store.EntityStore(db, klass=<class 'dict'>, kind=None)¶ Bases:
zoom.store.Storestores entities
>>> db = setup_test()
>>> stuff = EntityStore(db) >>> stuff.put(dict(name='Joe', age=14)) 1 >>> stuff.put(dict(name='Sally', age=34)) 2 >>> stuff.put(dict(name='Sam', age=34)) 3 >>> print(zoom.utils.RecordList(stuff.find(name='Joe'))) dict _id name age --- ---- --- 1 Joe 14 1 dict records >>> s = stuff.find(age=34) >>> print(s) dict _id name age --- ----- --- 2 Sally 34 3 Sam 34 2 dict records
>>> db = setup_test() >>> class Person(Entity): pass >>> class People(EntityStore): pass >>> people = People(db, Person) >>> people.kind 'person' >>> joe = Person(name='Joe', age=20, birthdate=datetime.date(1992,5,5)) >>> joe <Person {'name': 'Joe', 'age': 20, 'birthdate': datetime.date(1992, 5, 5)}> >>> people.put(joe) 1 >>> person = people.get(1) >>> person <Person {'name': 'Joe', 'age': 20, 'birthdate': datetime.date(1992, 5, 5)}> >>> sally = Person(name='Sally', kids=0, birthdate=datetime.date(1992,5,5)) >>> people.put(sally) 2 >>> sally = people.find(name='Sally') >>> sally [<Person {'name': 'Sally', 'kids': 0, 'birthdate': datetime.date(1992, 5, 5)}>] >>> sally = people.first(name='Sally') >>> sally <Person {'name': 'Sally', 'kids': 0, 'birthdate': datetime.date(1992, 5, 5)}> >>> sally.kids += 1 >>> people.put(sally) 2 >>> people.first(name='Sally') <Person {'name': 'Sally', 'kids': 1, 'birthdate': datetime.date(1992, 5, 5)}> >>> sally = people.first(name='Sally') >>> sally.kids += 1 >>> people.put(sally) 2 >>> people.first(name='Sally') <Person {'name': 'Sally', 'kids': 2, 'birthdate': datetime.date(1992, 5, 5)}> >>> sally = people.first(name='Sally') >>> sally.kids += 1 >>> people.put(sally) 2 >>> people.first(name='Sally') <Person {'name': 'Sally', 'kids': 3, 'birthdate': datetime.date(1992, 5, 5)}>
>>> class Misc(EntityStore): pass >>> misc = Misc(db, dict) >>> config_info = dict(host='database', name='somename') >>> id = misc.put(config_info) >>> x = misc.put(dict(other='this', stuff='that')) >>> my_info = misc.get(id) >>> Record(my_info) <Record {'name': 'somename', 'host': 'database'}> >>> Record(misc.get(x)) <Record {'other': 'this', 'stuff': 'that'}>
>>> people = EntityStore(db, 'person') >>> people.klass <class 'dict'> >>> people.kind 'person' >>> print(sorted(people.first(name='Sally').items())) [('__store', <EntityStore(dict)>), ('_id', 2), ('birthdate', datetime.date(1992, 5, 5)), ('kids', 3), ('name', 'Sally')] >>> print(Person(people.first(name='Sally'))) Person name ................: 'Sally' kids ................: 3 birthdate ...........: datetime.date(1992, 5, 5) >>> EntityStore(db, 'person').first(name='Joe')['age'] 20 >>> >>> name = 'somename' >>> id = misc.put(dict(host='database', name=name)) >>> my_info = misc.get(id) >>> assert type(my_info['name'])==type(name)
-
all()¶ Retrieves all entities
>>> db = setup_test() >>> class Person(Entity): pass >>> class People(EntityStore): pass >>> people = People(db, Person) >>> id = people.put(Person(name='Sally', age=25)) >>> id = people.put(Person(name='Sam', age=25)) >>> id = people.put(Person(name='Joe', age=25)) >>> people.all() [<Person {'name': 'Sally', 'age': 25}>, <Person {'name': 'Sam', 'age': 25}>, <Person {'name': 'Joe', 'age': 25}>] >>> db.close()
-
delete(*args, **kwargs)¶ delete entities
>>> db = setup_test() >>> class Person(Entity): pass >>> class People(EntityStore): pass >>> people = People(db, Person) >>> id = people.put(Person(name='Sally', age=25)) >>> id = people.put(Person(name='Sam', age=25)) >>> id = people.put(Person(name='Joe', age=25)) >>> joe = people.get(id) >>> id 3 >>> bool(joe) True >>> joe <Person {'name': 'Joe', 'age': 25}> >>> people.delete(id) [3] >>> joe = people.get(id) >>> joe >>> bool(joe) False
>>> bool(people.find(name='Sally')) True >>> people.delete(name='Sallie') >>> bool(people.find(name='Sally')) True >>> people.delete() >>> people.delete(name='Sally') [1] >>> bool(people.find(name='Sally')) False
>>> db.close()
-
exists(keys=None)¶ tests for existence of an entity
>>> db = setup_test() >>> class Person(Entity): pass >>> class People(EntityStore): pass >>> people = People(db, Person) >>> id = people.put(Person(name='Sally', age=25)) >>> sally = people.get(id) >>> sally <Person {'name': 'Sally', 'age': 25}> >>> people.exists(1) True >>> people.exists(2) False >>> people.exists([1, 2]) [True, False] >>> id = people.put(Person(name='Sam', age=25)) >>> people.exists([1, 2]) [True, True] >>> db.close()
-
find(**kv)¶ finds entities that meet search criteria
>>> db = setup_test() >>> class Person(Entity): pass >>> class People(EntityStore): pass >>> people = People(db, Person) >>> id = people.put(Person(name='Sam', age=25)) >>> id = people.put(Person(name='Sally', age=55)) >>> id = people.put(Person(name='Bob', age=25))
>>> print(people.find(age=25)) person _id name age --- ---- --- 1 Sam 25 3 Bob 25 2 person records
>>> len(people.find(name='Sam')) 1
>>> db.close()
-
first(**kv)¶ finds the first entity that meet search criteria
>>> db = setup_test() >>> class Person(Entity): pass >>> class People(EntityStore): pass >>> people = People(db, Person) >>> id = people.put(Person(name='Sam', age=25)) >>> id = people.put(Person(name='Sally', age=55)) >>> id = people.put(Person(name='Bob', age=25)) >>> people.first(age=5) >>> people.first(age=55) <Person {'name': 'Sally', 'age': 55}> >>> people.first() <Person {'name': 'Sam', 'age': 25}> >>> db.close()
-
get(keys)¶ retrives entities
>>> db = setup_test() >>> class Person(Entity): pass >>> class People(EntityStore): pass >>> people = People(db, Person) >>> id = people.put(Person(**{'name': 'Sam', 'age':15, ... 'salary': decimal.Decimal('100.00')})) >>> sam = people.get(id) >>> sam <Person {'name': 'Sam', 'age': 15, 'salary': Decimal('100.00')}> >>> people.put(Person(name='Jim', age=21, ... salary=decimal.Decimal('50'))) 2 >>> people.put(Person(name='Alice', age=29)) 3 >>> print(people) person _id name age salary --- ----- --- ------ 1 Sam 15 100.00 2 Jim 21 50 3 Alice 29 None 3 person records
>>> print(people.get([1, '3'])) person _id name age salary --- ----- --- ------ 1 Sam 15 100.00 3 Alice 29 None 2 person records
>>> db.close()
-
get_attributes()¶ get complete set of attributes for the entity type
>>> db = setup_test() >>> class Person(Entity): pass >>> class People(EntityStore): pass >>> people = People(db, Person) >>> sam = Person(**{'name': 'Sam', 'age':15}) >>> sorted(sam.keys()) ['age', 'name'] >>> id = people.put(sam) >>> sorted(people.get_attributes()) ['age', 'name'] >>> db.close()
-
last(**kv)¶ finds the last entity that meet search criteria
>>> db = setup_test() >>> class Person(Entity): pass >>> class People(EntityStore): pass >>> people = People(db, Person) >>> id = people.put(Person(name='Sam', age=25)) >>> id = people.put(Person(name='Sally', age=55)) >>> id = people.put(Person(name='Bob', age=25)) >>> people.last(age=5) >>> people.last(age=25) <Person {'name': 'Bob', 'age': 25}> >>> db.close()
-
put(entity)¶ stores an entity
>>> db = setup_test() >>> class Person(Entity): pass >>> class People(EntityStore): pass >>> people = People(db, Person) >>> sally = Person(name='Sally', age=25) >>> sally <Person {'name': 'Sally', 'age': 25}> >>> id = people.put(Person(name='Sally', age=25)) >>> id 1 >>> sally <Person {'name': 'Sally', 'age': 25}> >>> sally = people.get(id) >>> sally <Person {'name': 'Sally', 'age': 25}> >>> sally.age = 35 >>> people.put(sally) 1 >>> person = people.get(id) >>> person <Person {'name': 'Sally', 'age': 35}> >>> id = people.put({'name':'James', 'age':15}) >>> id 2 >>> people.get(id) <Person {'name': 'James', 'age': 15}> >>> classes = ['one', 'Not this one'] >>> grades = (('one', 'A'), ('Not this one', 'C+'), ) >>> id = people.put({'name':'James', 'classes':classes, 'grades': grades}) >>> assert classes == people.get(id).classes >>> assert len(people.get(id).grades) == 2 # json dump/load will bring back all tuples as lists >>> db.close()
-
search(text)¶ search for entities that match text
>>> db = setup_test() >>> class Person(Entity): pass >>> class People(EntityStore): pass >>> people = People(db, Person) >>> id = people.put(Person(name='Sam', age=25)) >>> id = people.put(Person(name='Sally', age=55)) >>> id = people.put(Person(name='Bob', age=25))
>>> list(people.search('bob')) [<Person {'name': 'Bob', 'age': 25}>]
>>> for r in list(people.search(25)): print(r) Person name ................: 'Sam' age .................: 25 Person name ................: 'Bob' age .................: 25
>>> list(people.search('Bill')) [] >>> db.close()
-
zap()¶ deletes all entities of the given kind
>>> db = setup_test() >>> class Person(Entity): pass >>> class People(EntityStore): pass >>> people = People(db, Person) >>> id = people.put(Person(name='Sally', age=25)) >>> id = people.put(Person(name='Sam', age=25)) >>> id = people.put(Person(name='Joe', age=25)) >>> people.all() [<Person {'name': 'Sally', 'age': 25}>, <Person {'name': 'Sam', 'age': 25}>, <Person {'name': 'Joe', 'age': 25}>] >>> people.zap() >>> people.all() [] >>> db.close()
-
-
class
zoom.store.Store¶ Bases:
object-
after_delete(record)¶
-
after_insert(record)¶
-
after_update(record)¶
-
before_delete(record)¶
-
before_insert(record)¶
-
before_update(record)¶
-
-
zoom.store.entify(rs, storage)¶ converts query result into an EntityList
-
zoom.store.store_of(klass, db=None)¶ Returns a store of the given entity class
The klass parameter can be a subclass of zoom.Model or an entity kind. If a zoom.Model is provided the actual entity kind is derived from the class name. If the entity kind is provivded as a string then it’s taken as-is.
Uses the current site database if none is provided.
>>> site = zoom.sites.Site() >>> class Person(Entity): pass >>> people = store_of(Person, site.db) >>> id = people.put(Person(name='Sam', age=25)) >>> id = people.put(Person(name='Sally', age=55)) >>> id = people.put(Person(name='Bob', age=25)) >>> person = people.first(name='Sally') >>> person['age'] 55