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): |