1 #=======================================================================
3 __version__
= '''0.0.01'''
4 __sub_version__
= '''20040803232005'''
5 __copyright__
= '''(c) Alex A. Naanou 2003'''
8 #-----------------------------------------------------------------------
13 #-----------------------------------------------------------------------
15 #---------------------------------------------------------StoreClient---
16 class GenericStaticStoreClient(store
.BaseStore
):
19 __source_store__
= None
21 def __init__(self
, filters
=()):
24 if self
.__source
_store
__ == None:
25 raise TypeError, 'no store defined.'
26 super(GenericStaticStoreClient
, self
).__init
__(None)
27 self
._store
_data
= self
.__source
_store
__
28 self
._store
_types
= self
.__source
_store
__._store
_types
29 self
._store
_filters
= filters
30 def __getattr__(self
, name
):
33 # deligate the call to the original store object
35 store
= self
.__source
_store
__
36 if not hasattr(store
, name
):
37 raise AttributeError, '%s has no attribute "%s"' % (self
, name
)
38 if name
in store
._store
_types
:
39 return getattr(store
, name
)
40 raise AttributeError, ''
41 def isaccessible(self
, key
):
44 obj
= self
._store
_data
[key
]
45 if hasattr(obj
, '__store_public__') and obj
.__store
_public
__ or\
46 None not in [f(obj
) for f
in self
._store
_filters
]:
49 def __getitem__(self
, key
):
52 if self
.isaccessible(key
):
53 return self
._store
_data
[key
]
54 def __setitem__(self
, key
, obj
):
57 if key
in self
._store
_data
and not self
.isaccessible(key
):
58 raise KeyError, 'can\'t set the "%s" item.' % key
59 ## BaseStore.__setitem__(self, key, obj)
60 super(GenericStaticStoreClient
, self
).__setitem
__(key
, obj
)
61 def __delitem__(self
, key
):
64 if key
in self
._store
_data
and not self
.isaccessible(key
):
65 raise KeyError, 'can\'t remove the "%s" item.' % key
66 ## BaseStore.__delitem__(self, key)
67 super(GenericStaticStoreClient
, self
).__delitem
__(key
)
71 for n
in self
._store
_data
:
72 if self
.isaccessible(n
):
77 ## print '>>>', self._store_data.__getitem__('ttt')
78 ## print '!!!', self._store_data, id(self._store_data)
79 for e
in self
._store
_data
.iterkeys():
80 if self
.isaccessible(e
):
85 for e
in self
._store
_data
.iterkeys():
86 if self
.isaccessible(e
):
87 yield self
._store
_data
[e
]
91 for n
, o
in self
._store
_data
.iteritems():
92 if self
.isaccessible(n
):
97 return list(self
.iterkeys())
101 return list(self
.itervalues())
102 def get_object_data(self
, key
, *attrs
):
105 if not self
.isaccessible(key
):
107 return super(GenericStaticStoreClient
, self
).get_object_data(self
, key
, *attrs
)
110 #---------------------------------------------------StaticStoreClient---
111 # TODO move this into storeutils... (??)
112 class StaticStoreClient(GenericStaticStoreClient
):
116 __ignore_nonexistant_filter_attrs__
= False
118 def __init__(self
, filters
={}):
121 super(StaticStoreClient
, self
).__init
__(filters
)
122 def isaccessible(self
, key
):
125 obj
= self
._store
_data
[key
]
127 if hasattr(self
, '__ignore_nonexistant_filter_attrs__') \
128 and self
.__ignore
_nonexistant
_filter
_attrs
__:
130 for attr
, val
in self
._store
_filters
.items():
132 res
+= [getattr(obj
, attr
) == val
]
133 except AttributeError:
138 if hasattr(obj
, '__store_public__') and obj
.__store
_public
__ or\
139 False not in [getattr(obj
, attr
) == val
for attr
, val
in self
._store
_filters
.items()]:
144 #----------------------------------------StaticStoreClientConstructor---
145 class StaticStoreClientConstructor(StaticStoreClient
):
148 def __init__(self
, source_store
=None, filters
={}):
151 self
.__source
_store
__ = source_store
152 super(StaticStoreClientConstructor
, self
).__init
__(filters
)
156 #=======================================================================
157 # vim:set ts=4 sw=4 nowrap :