aboutsummaryrefslogtreecommitdiff
path: root/tagging/registry.py
diff options
context:
space:
mode:
authorJonas Genannt <genannt@debian.org>2015-11-15 22:26:06 +0100
committerJonas Genannt <genannt@debian.org>2015-11-15 22:26:06 +0100
commitd65aa3c3c146b12548a54c894060bce9a8715ad2 (patch)
tree293607c424ec0b1d41e2aefaf26989a7adbd3e04 /tagging/registry.py
parent29425a36c920e9b54e5860429ef3e3ce639fb155 (diff)
downloadpython-django-tagging-d65aa3c3c146b12548a54c894060bce9a8715ad2.tar
python-django-tagging-d65aa3c3c146b12548a54c894060bce9a8715ad2.tar.gz
Imported Upstream version 0.4upstream/0.4
Diffstat (limited to 'tagging/registry.py')
-rw-r--r--tagging/registry.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/tagging/registry.py b/tagging/registry.py
new file mode 100644
index 0000000..30c00ae
--- /dev/null
+++ b/tagging/registry.py
@@ -0,0 +1,51 @@
+"""
+Registery for tagging.
+"""
+from tagging.managers import TagDescriptor
+from tagging.managers import ModelTaggedItemManager
+
+registry = []
+
+
+class AlreadyRegistered(Exception):
+ """
+ An attempt was made to register a model more than once.
+ """
+ pass
+
+
+def register(model, tag_descriptor_attr='tags',
+ tagged_item_manager_attr='tagged'):
+ """
+ Sets the given model class up for working with tags.
+ """
+ if model in registry:
+ raise AlreadyRegistered(
+ "The model '%s' has already been registered." %
+ model._meta.object_name)
+ if hasattr(model, tag_descriptor_attr):
+ raise AttributeError(
+ "'%s' already has an attribute '%s'. You must "
+ "provide a custom tag_descriptor_attr to register." % (
+ model._meta.object_name,
+ tag_descriptor_attr,
+ )
+ )
+ if hasattr(model, tagged_item_manager_attr):
+ raise AttributeError(
+ "'%s' already has an attribute '%s'. You must "
+ "provide a custom tagged_item_manager_attr to register." % (
+ model._meta.object_name,
+ tagged_item_manager_attr,
+ )
+ )
+
+ # Add tag descriptor
+ setattr(model, tag_descriptor_attr, TagDescriptor())
+
+ # Add custom manager
+ ModelTaggedItemManager().contribute_to_class(
+ model, tagged_item_manager_attr)
+
+ # Finally register in registry
+ registry.append(model)