Ejemplo n.º 1
0
class Indexable(Persistent):
  # prepend _v_ to make it volatilive
  _v_book = None
  def __init__(self):
    self._v_book = Book()
    self._v_book.addData(self)
  def __setattr__(self, name, value):
    #only run this if the name is within the current objects attributes
    if self._v_book and name not in Persistent.__dict__:
      # if the book exists AND
      # if the value has changed
      # and that attribute is an indexable attribute
      # OR we want it to be indexed, however it is not actually in the index (this condition will be caught 
      # in updateIndexedValue)
      if self._v_book and self.__dict__.get(name) != value and name in self.indexableAttrs:
        self._v_book.updateIndexedValue(self, name, value)
      # save changes
      self._v_book.commitTransaction()
    Persistent.__setattr__(self, name, value)


  #TODO
  def __delattr__(self, name):
    pass
Ejemplo n.º 2
0
class Person(Persistent):
  name = None
  age = None
  indexable = ('name',)

if __name__ == '__main__':
  book = Book()
  p = Person()
  p.name = "Mike"
  age = 20
  p1 = Person()
  p1.name = "Matt"
  p1.age = 30
  p2 = Person()
  p2.name = "Mitch"
  p2.age = 25
  p3 = Person()
  p3.name = "Bob"
  p3.age = 21
  book.addData(p)
  book.addData(p1)
  book.addData(p2)
  book.addData(p3)
  """
  #2nd run
  p2 = book.indexdb['Person']['Mitch']
  p2.name = "Mitch1aasdf"
  p2.age = 25
  """
  print map(lambda x: x.name, book.indexdb['Person'].values("Mi"))