*** empty log message ***
[pli.git] / pli / persistance / sql / shelve.py
blob05f401355abd0fba99b9e9fce2a53a2185173901
1 #=======================================================================
3 __version__ = '''0.0.01'''
4 __sub_version__ = '''20051010153516'''
5 __copyright__ = '''(c) Alex A. Naanou 2003'''
8 #-----------------------------------------------------------------------
10 import pli.pattern.mixin.mapping as mapping
13 #-----------------------------------------------------------SQLShelve---
14 ##!!!
15 # XXX should this be live???
16 class SQLShelve(mapping.Mapping):
17 '''
18 '''
19 # TODO make this create a new dict for the id if one is not
20 # present.... (might be a good idea to use some other id
21 # method...)
22 # one alternative id method is to create a root dict that will
23 # contain names of all the dicts used and their coresponding
24 # id's...
25 def __init__(self, interface, name):
26 '''
27 '''
28 self._interface = interface
29 self._name = name
30 # if such a name does not exist...
31 try:
32 self._data = interface.get(name)
33 except KeyError:
34 d = self._data = {}
35 interface.write(name, d)
36 ##!!! sanity check: if the name refereneces a non-dict or non-dict-like...
37 ##!!!
38 def __getitem__(self, name):
39 '''
40 '''
41 if name in self._data:
42 return self._interface.get(self._data[name])
43 raise KeyError, name
44 ##!!! make this safe...
45 def __setitem__(self, name, value):
46 '''
47 '''
48 data = self._data
49 # insert the object...
50 oid = self._interface.write(value)
51 # update the keys dict...
52 data[name] = oid
53 self._interface.write(data)
54 def __delitem__(self, name):
55 '''
56 '''
57 return self._interface.delete(self._data.pop(name))
58 def __iter__(self):
59 '''
60 '''
61 for name in self._data:
62 yield name
66 #=======================================================================
67 # vim:set ts=4 sw=4 nowrap :