Types

Types are used to define the internal storage in ZODB.

There are no need to setup specific types in basic usage of sheraf because Model uses xAttribute, not Type.

class sheraf.types.SmallDict(**kwargs)

Bases: persistent.mapping.PersistentMapping

SmallDict is a PersistentMapping implementation with a simple conflict resolution implementation.

When two different keys of the mapping are edited in concurrency, no conflict is raised.

class sheraf.types.counter.Counter(value=0)

Bases: persistent.Persistent

Counter is a simple numeric persistent type with conflict proof increment and decrement functions.

class sheraf.types.largedict.LargeDict

Bases: BTrees.OOBTree.OOBTree

A Large Dictionnary based on a Object-Object-BTree.

LargeDicts keys are ordered and thus they can be iterated:

>>> mydict = sheraf.types.LargeDict({
...     "D": "four",
...     "C": "three",
...     "B": "two",
...     "A": "one",
... }) # declaration is unordered
...
>>> list(v for v in mydict.values())
... # iteration is ordered
['one', 'two', 'three', 'four']

LargeDicts can also be sliced. Slices return a generator over the values:

>>> list(mydict["B":"D"])
['two', 'three', 'four']
>>> list(mydict[::-1])
['four', 'three', 'two', 'one']

When using integers as dictionnary keys, be careful that slices behave a bit different than they would do for a list, as we use keys and not indexes.

>>> mydict = sheraf.types.LargeDict({1:"one", 2:"two", 3:"three"})
>>> mylist = ["one", "two", "three"]
>>>
>>> list(mydict[1:2]) # 1 and 2 are keys
['one', 'two']
>>>
>>> mylist[1:2] # 1 and 2 are indices
['two']
class sheraf.types.largelist.LargeList(items=None)

Bases: BTrees.IOBTree.IOBTree

Large List.

insert(key, value) → 0 or 1

Add an item if the key is not already used. Return 1 if the item was added, or 0 otherwise.

pop(k[, d]) → v, remove key and return the corresponding value.

If key is not found, d is returned if given, otherwise KeyError is raised.