aboutsummaryrefslogtreecommitdiff
path: root/tagging/registry.py
diff options
context:
space:
mode:
authorJonas Genannt <genannt@debian.org>2015-11-15 22:26:10 +0100
committerJonas Genannt <genannt@debian.org>2015-11-15 22:26:10 +0100
commitda6a2bd205506257eaa6785c00981c88146d6c9f (patch)
tree6636c5e5a0186d9bf42c0df12bbb2180480ace7b /tagging/registry.py
parent24cd0a91184be6fa20168f9b132b1ab3f5911949 (diff)
parentd65aa3c3c146b12548a54c894060bce9a8715ad2 (diff)
downloadpython-django-tagging-da6a2bd205506257eaa6785c00981c88146d6c9f.tar
python-django-tagging-da6a2bd205506257eaa6785c00981c88146d6c9f.tar.gz
Merge tag 'upstream/0.4'
Upstream version 0.4 # gpg: Signature made Sun 15 Nov 2015 10:26:06 PM CET using RSA key ID 016CFFD0 # gpg: Good signature from "Jonas Genannt <jonas@brachium-system.net>" # gpg: aka "Jonas Genannt <jonas.genannt@capi2name.de>" # gpg: aka "Jonas Genannt <genannt@debian.org>" * tag 'upstream/0.4': Imported Upstream version 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)