Package grassyknoll :: Package collection :: Module DelegateCollection
[hide private]

Source Code for Module grassyknoll.collection.DelegateCollection

 1  """Contains L{DelegateCollection}, an implementation that passes the buck to a 
 2  L{CollectionReader} and L{CollectionWriter}""" 
 3   
 4  from Collection import Collection 
 5  from grassyknoll.lib.meta import FactoryMixin 
 6   
 7  __all__=['DelegateCollection', 'CollectionReader', 'CollectionWriter'] 
 8   
9 -class DelegateCollection(Collection):
10 """A L{Collection} implementation that passes the buck. 11 12 The reader and writer instances should not be shared with other objects. 13 14 @ivar writer_factory: the writer factory 15 @ivar writer_factory: callable 16 17 @ivar reader_factory: the reader factory 18 @type reader_factory: callable 19 """ 20
21 - def __init__(self, writer_factory, reader_factory):
22 # create writer first since it may create index 23 self.writer = writer_factory() 24 for name in ('create', 'delete'): 25 setattr(self, name, getattr(self.writer, name)) 26 27 self.reader = reader_factory() 28 for name in ['list', 'retrieve'] + [n for n in dir(self.reader) if n.endswith('Query')]: 29 setattr(self, name, getattr(self.reader, name))
30
31 - def close(self):
32 self.reader.close() 33 self.writer.close()
34
35 -class CollectionReader(FactoryMixin):
36 """A reader for a L{Collection}. See its docs."""
37 - def list(self):
38 raise NotImplementedError
39
40 - def retrieve(self, ids, fields=None):
41 raise NotImplementedError
42
43 - def close(self):
44 pass
45
46 -class CollectionWriter(FactoryMixin):
47 """A writer for a L{Collection} See its docs."""
48 - def create(self, docs):
49 raise NotImplementedError
50
51 - def delete(self, ids):
52 raise NotImplementedError
53
54 - def close(self):
55 pass
56