[Checkins] SVN: lovely.tag/trunk/src/lovely/tag/ factored out tagid
queries, added tags kw to getTagObjects
Bernd Dorn
bernd.dorn at lovelysystems.com
Mon Mar 5 05:26:22 EST 2007
Log message for revision 72978:
factored out tagid queries, added tags kw to getTagObjects
Changed:
U lovely.tag/trunk/src/lovely/tag/README.txt
U lovely.tag/trunk/src/lovely/tag/engine.py
-=-
Modified: lovely.tag/trunk/src/lovely/tag/README.txt
===================================================================
--- lovely.tag/trunk/src/lovely/tag/README.txt 2007-03-05 09:36:58 UTC (rev 72977)
+++ lovely.tag/trunk/src/lovely/tag/README.txt 2007-03-05 10:26:19 UTC (rev 72978)
@@ -155,6 +155,24 @@
[u'jodok', u'srichter']
+Querying for Tagobjects
+~~~~~~~~~~~~~~~~~~~~~~~
+
+Sometimes it is usefull to have the actual tag objects directly. These
+tag objects can be queried by tagnames, users and items.
+
+ >>> sorted(engine.getTagObjects(tags=(u'personal',)))
+ [<Tag u'personal' for 1 by u'srichter'>,
+ <Tag u'personal' for 3 by u'jodok'>]
+ >>> sorted(engine.getTagObjects(tags=(u'personal',),
+ ... users=(u'srichter',)))
+ [<Tag u'personal' for 1 by u'srichter'>]
+ >>> sorted(engine.getTagObjects(tags=(u'personal',),
+ ... items=(3,)))
+ [<Tag u'personal' for 3 by u'jodok'>]
+
+We can also search fr
+
Tagging Statistics
------------------
Modified: lovely.tag/trunk/src/lovely/tag/engine.py
===================================================================
--- lovely.tag/trunk/src/lovely/tag/engine.py 2007-03-05 09:36:58 UTC (rev 72977)
+++ lovely.tag/trunk/src/lovely/tag/engine.py 2007-03-05 10:26:19 UTC (rev 72978)
@@ -151,85 +151,46 @@
result = self.getTagObjects(items, users)
return set([tag.name for tag in result])
- def getTagObjects(self, items=None, users=None):
-
- if items is None and users is None:
- users_result = set()
+ def _getTagIds(self, items=None, users=None, tags=None):
+ if items is None and users is None and tags is None:
+ # get them all
+ result = set()
for v in self._item_to_tagids.values():
- users_result.update(v)
+ result.update(v)
+ return result
+ result = None
+ for seq, bt in ((items, self._item_to_tagids),
+ (users, self._user_to_tagids),
+ (tags, self._name_to_tagids)):
+ res = set()
+ if seq is not None:
+ for item in seq:
+ res.update(bt.get(item, set()))
+ if result is not None:
+ result = result.intersection(res)
+ else:
+ result = res
+ return result
- if items is not None:
- items_result = set()
- for item in items:
- items_result.update(self._item_to_tagids.get(item, set()))
+ def getTagObjects(self, items=None, users=None, tags=None):
+ ids = self._getTagIds(items, users, tags)
+ return set([self._tag_ids.getObject(id) for id in ids])
- if users is not None:
- users_result = set()
- for user in users:
- users_result.update(self._user_to_tagids.get(user, set()))
-
- if items is None:
- result = users_result
- elif users is None:
- result = items_result
- else:
- result = items_result.intersection(users_result)
- return set([self._tag_ids.getObject(id) for id in result])
-
def getItems(self, tags=None, users=None):
"""See interfaces.ITaggingEngine"""
- if tags is None and users is None:
- return set(self._item_to_tagids.keys())
-
- if tags is not None:
- tags_result = set()
- for name in tags:
- tags_result.update(self._name_to_tagids.get(name, set()))
-
- if users is not None:
- users_result = set()
- for user in users:
- users_result.update(self._user_to_tagids.get(user, set()))
-
- if tags is None:
- result = users_result
- elif users is None:
- result = tags_result
- else:
- result = tags_result.intersection(users_result)
+ uids = self._getTagIds(items=None, users=users, tags=tags)
res = set()
- for uid in result:
+ for uid in uids:
o = self._tag_ids.queryObject(uid)
if o is not None:
res.add(o.item)
return res
-
def getUsers(self, tags=None, items=None):
"""See interfaces.ITaggingEngine"""
- if tags is None and items is None:
- return set(self._user_to_tagids.keys())
+ ids = self._getTagIds(items=items, users=None, tags=tags)
+ return set([self._tag_ids.getObject(id).user for id in ids])
- if tags is not None:
- tags_result = set()
- for name in tags:
- tags_result.update(self._name_to_tagids.get(name, set()))
-
- if items is not None:
- items_result = set()
- for item in items:
- items_result.update(self._item_to_tagids.get(item, set()))
-
- if tags is None:
- result = items_result
- elif items is None:
- result = tags_result
- else:
- result = tags_result.intersection(items_result)
-
- return set([self._tag_ids.getObject(id).user for id in result])
-
-
def getRelatedTags(self, tag, degree=1):
"""See interfaces.ITaggingEngine"""
result = set()
More information about the Checkins
mailing list