app/taggable/taggable.py
changeset 3081 14077185c46e
parent 2950 ceec88091db8
child 3083 f384c0a42920
equal deleted inserted replaced
3080:30a33926ab91 3081:14077185c46e
    13   tagged = db.ListProperty(db.Key)
    13   tagged = db.ListProperty(db.Key)
    14   "A List of db.Key values for the datastore objects that have been tagged with this tag value."
    14   "A List of db.Key values for the datastore objects that have been tagged with this tag value."
    15 
    15 
    16   tagged_count = db.IntegerProperty(default=0)
    16   tagged_count = db.IntegerProperty(default=0)
    17   "The number of entities in tagged."
    17   "The number of entities in tagged."
       
    18 
       
    19   auto_delete = db.BooleanProperty(required=True, default=False)
       
    20   "If true, a tag instance should be deleted when tagged_count reaches zero."
    18 
    21 
    19   @classmethod
    22   @classmethod
    20   def __key_name(cls, tag_name):
    23   def __key_name(cls, tag_name):
    21     return cls.__name__ + '_' + tag_name
    24     return cls.__name__ + '_' + tag_name
    22     
    25     
    23   def remove_tagged(self, key):
    26   def remove_tagged(self, key):
    24     def remove_tagged_txn():
    27     def remove_tagged_txn():
    25       if key in self.tagged:
    28       if key in self.tagged:
    26         self.tagged.remove(key)
    29         self.tagged.remove(key)
    27         self.tagged_count -= 1
    30         self.tagged_count -= 1
    28         self.put()
    31         if not self.tagged_count and self.auto_delete:
       
    32           self.delete()
       
    33         else:
       
    34           self.put()
    29     db.run_in_transaction(remove_tagged_txn)
    35     db.run_in_transaction(remove_tagged_txn)
    30     self.__class__.expire_cached_tags()
    36     self.__class__.expire_cached_tags()
    31 
    37 
    32   def add_tagged(self, key):
    38   def add_tagged(self, key):
    33     def add_tagged_txn():
    39     def add_tagged_txn():
    38     db.run_in_transaction(add_tagged_txn)
    44     db.run_in_transaction(add_tagged_txn)
    39     self.__class__.expire_cached_tags()
    45     self.__class__.expire_cached_tags()
    40     
    46     
    41   def clear_tagged(self):
    47   def clear_tagged(self):
    42     def clear_tagged_txn():
    48     def clear_tagged_txn():
    43       self.tagged = []
    49       if self.auto_delete:
    44       self.tagged_count = 0
    50         self.delete()
    45       self.put()
    51       else:
       
    52         self.tagged = []
       
    53         self.tagged_count = 0
       
    54         self.put()
    46     db.run_in_transaction(clear_tagged_txn)
    55     db.run_in_transaction(clear_tagged_txn)
    47     self.__class__.expire_cached_tags()
    56     self.__class__.expire_cached_tags()
    48         
    57         
    49   @classmethod
    58   @classmethod
    50   def get_by_name(cls, tag_name):
    59   def get_by_name(cls, tag_name):