zoom.records module

zoom.records

record store

class zoom.records.RecordStore(db, record_class=<class 'dict'>, name=None, key='id')

Bases: zoom.store.Store

stores records

>>> db = setup_test()
>>> class Person(Record): pass
>>> class People(RecordStore): pass
>>> people = People(db, Person)
>>> people.kind
'person'
>>> joe = Person(name='Joe', age=20, birthdate=datetime.date(1992,5,5))
>>> repr(joe) == (
...     "<Person {'name': 'Joe', 'age': 20, "
...     "'birthdate': datetime.date(1992, 5, 5)}>"
... )
True
>>> people.put(joe)
1
>>> person = people.get(1)
>>> repr(person) == (
...     "<Person {'name': 'Joe', 'age': 20, "
...     "'birthdate': datetime.date(1992, 5, 5)}>"
... )
True
>>> sally = Person(name='Sally', kids=0,
...             birthdate=datetime.date(1992,5,5))
>>> people.put(sally)
2
>>> sally = people.find(name='Sally')
>>> repr(sally) == (
...     "[<Person {'name': 'Sally', "
...     "'kids': 0, 'birthdate': datetime.date(1992, 5, 5)}>]"
... )
True
>>> sally = people.first(name='Sally')
>>> repr(sally) == (
...     "<Person {'name': 'Sally', "
...     "'kids': 0, 'birthdate': datetime.date(1992, 5, 5)}>"
... )
True
>>> sally.kids += 1
>>> people.put(sally)
2
>>> repr(people.first(name='Sally')) == (
...     "<Person {'name': 'Sally', "
...     "'kids': 1, 'birthdate': datetime.date(1992, 5, 5)}>"
... )
True
>>> sally = people.first(name='Sally')
>>> sally.kids += 1
>>> people.put(sally)
2
>>> repr(people.first(name='Sally')) == (
...     "<Person {'name': 'Sally', "
...     "'kids': 2, 'birthdate': datetime.date(1992, 5, 5)}>"
... )
True
>>> sally = people.first(name='Sally')
>>> sally.kids += 1
>>> people.put(sally)
2
>>> repr(people.first(name='Sally')) == (
...     "<Person {'name': 'Sally', "
...     "'kids': 3, 'birthdate': datetime.date(1992, 5, 5)}>"
... )
True
>>> class Account(Record): pass
>>> class Accounts(RecordStore): pass
>>> accounts = Accounts(db, Account, key='account_id')
>>> accounts.kind
'account'
>>> account = Account(name='Joe', added=datetime.date(1992,5,5))
>>> repr(account) == (
...     "<Account {'name': 'Joe', 'added': datetime.date(1992, 5, 5)}>"
... )
True
>>> id = accounts.put(account)
>>> id
1
>>> accounts.put(Account(name='Sam', added=datetime.date(2001,1,1)))
2
>>> accounts.put(Account(name='Sal', added=datetime.date(2001,1,1)))
3
>>> account = accounts.get(1)
>>> print(accounts)
account
account_id name added
---------- ---- ----------
         1 Joe  1992-05-05
         2 Sam  2001-01-01
         3 Sal  2001-01-01
3 account records
>>> print(accounts.first(name='Sam'))
Account
  account_id ..........: 2
  name ................: 'Sam'
  added ...............: datetime.date(2001, 1, 1)
>>> print(accounts.find(added=datetime.date(2001, 1, 1)))
account
account_id name added
---------- ---- ----------
         2 Sam  2001-01-01
         3 Sal  2001-01-01
2 account records
>>> accounts.delete(2)
[2]
>>> print(accounts)
account
account_id name added
---------- ---- ----------
         1 Joe  1992-05-05
         3 Sal  2001-01-01
2 account records
all()

Retrieves all entities

>>> db = setup_test()
>>> class Person(Record): pass
>>> class People(RecordStore): 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))
>>> repr(people.all()) == (
...     "[<Person {'name': 'Sally', 'age': 25}>, "
...     "<Person {'name': 'Sam', 'age': 25}>, "
...     "<Person {'name': 'Joe', 'age': 25}>]"
... )
True
delete(*args, **kwargs)

delete a record

>>> db = setup_test()
>>> class Person(Record): pass
>>> class People(RecordStore): 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 a record

>>> db = setup_test()
>>> class Person(Record): pass
>>> class People(RecordStore): pass
>>> people = People(db, Person)
>>> id = people.put(Person(name='Sally', age=25))
>>> id
1
>>> 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]
filter(function)

finds records that satisfiy filter

>>> db = setup_test()
>>> class Person(Record): pass
>>> class People(RecordStore): pass
>>> people = People(db, Person)
>>> id = people.put(Person(name='Sam Adam Jones', age=25))
>>> id = people.put(Person(name='Sally Mary Smith', age=55))
>>> id = people.put(Person(name='Bob Marvin Smith', age=25))
>>> list(people.filter(lambda a: 'Mary' in a.name))
[<Person {'name': 'Sally Mary Smith', 'age': 55}>]
>>> repr(list(people.filter(lambda a: a.age < 40))) == (
...     "[<Person {'name': 'Sam Adam Jones', 'age': 25}>, "
...     "<Person {'name': 'Bob Marvin Smith', 'age': 25}>]"
... )
True
find(**kwargs)

finds entities that meet search criteria

>>> db = setup_test()
>>> class Person(Record): pass
>>> class People(RecordStore): 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
>>> people.find(name='Sam')
[<Person {'name': 'Sam', 'age': 25}>]
>>> len(people.find(name='Sam'))
1
first(**kwargs)

finds the first record that meet search criteria

>>> db = setup_test()
>>> class Person(Record): pass
>>> class People(RecordStore): 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=25)
<Person {'name': 'Sam', 'age': 25}>
get(keys)

retrives records

>>> db = setup_test()
>>> class Person(Record): pass
>>> class People(RecordStore): pass
>>> people = People(db, Person)
>>> id = people.put(Person(**{'name': 'Sam', 'age':15}))
>>> sam = people.get(id)
>>> sam
<Person {'name': 'Sam', 'age': 15}>
>>> people.put(Person(name='Jim',age=21))
2
>>> print(people)
person
_id name age
--- ---- ---
  1 Sam   15
  2 Jim   21
2 person records
>>> people.put(Person(name='Alice',age=29))
3
>>> print(people.get([1, 3]))
person
_id name  age
--- ----- ---
  1 Sam    15
  3 Alice  29
2 person records
get_attributes()

get complete set of attributes for the record type

>>> db = setup_test()
>>> class Person(Record): pass
>>> class People(RecordStore): pass
>>> people = People(db, Person)
>>> sam = Person(**{'name': 'Sam', 'age':15})
>>> sorted(sam.keys())
['age', 'name']
>>> id = people.put(sam)
>>> people.get_attributes()
['name', 'age', 'kids', 'birthdate']
id_name
last(**kwargs)

finds the last record that meet search criteria

>>> db = setup_test()
>>> class Person(Record): pass
>>> class People(RecordStore): 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}>
put(record)

stores a record

>>> db = setup_test()
>>> class Person(Record): pass
>>> class People(RecordStore): 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}>
search(text)

search for records that match text

>>> db = setup_test()
>>> class Person(Record): pass
>>> class People(RecordStore): pass
>>> people = People(db, Person)
>>> id = people.put(Person(name='Sam Adam Jones', age=25))
>>> id = people.put(Person(name='Sally Mary Smith', age=55))
>>> id = people.put(Person(name='Bob Marvin Smith', age=25))
>>> repr(list(people.search('smi'))) == (
...     "[<Person {'name': 'Sally Mary Smith', 'age': 55}>, "
...     "<Person {'name': 'Bob Marvin Smith', 'age': 25}>]"
... )
True
>>> list(people.search('bo smi'))
[<Person {'name': 'Bob Marvin Smith', 'age': 25}>]
>>> list(people.search('smi 55'))
[<Person {'name': 'Sally Mary Smith', 'age': 55}>]
zap()

deletes all entities of the given kind

>>> db = setup_test()
>>> class Person(Record): pass
>>> class People(RecordStore): 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))
>>> repr(people.all()) == (
...     "[<Person {'name': 'Sally', 'age': 25}>, "
...     "<Person {'name': 'Sam', 'age': 25}>, "
...     "<Person {'name': 'Joe', 'age': 25}>]"
... )
True
>>> people.zap()
>>> people.all()
[]
class zoom.records.Result(rows, storage)

Bases: object

rows resulting from a method call

zoom.records.get_result_iterator(rows, storage)

returns an iterator that iterates over the rows and zips the names onto the items being iterated so they come back as dicts

zoom.records.table_of(klass, db=None)

Return a table of Records of the given class

The klass parameter can be a subclass of zoom.Model or a table name. If a zoom.Model is provided the actual table name is derived from the class name. If the table name is provivded then it’s taken as-is.

Uses the current site database if none is provided.

>>> site = zoom.sites.Site()
>>> users = table_of('users', site.db)
>>> user = users.first(username='admin')
>>> user['first_name']
'Admin'