Skip to content

Commit 667ca78

Browse files
committed
Move register function to tagging.registry submodule, to avoid weird architecture of the package and allow more flexibility
1 parent cfd6699 commit 667ca78

File tree

3 files changed

+53
-51
lines changed

3 files changed

+53
-51
lines changed

docs/index.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,12 @@ access some additional tagging-related features.
129129
The ``register`` function
130130
-------------------------
131131

132-
To register a model, import the ``tagging`` module and call its
132+
To register a model, import the ``tagging.registry`` module and call its
133133
``register`` function, like so::
134134

135135
from django.db import models
136136

137-
import tagging
137+
from tagging.registry import register
138138

139139
class Widget(models.Model):
140140
name = models.CharField(max_length=50)

tagging/__init__.py

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -13,52 +13,3 @@
1313
__url__ = 'https://github.com/Fantomas42/django-tagging'
1414

1515
default_app_config = 'tagging.apps.TaggingConfig'
16-
17-
class AlreadyRegistered(Exception):
18-
"""
19-
An attempt was made to register a model more than once.
20-
"""
21-
pass
22-
23-
24-
registry = []
25-
26-
27-
def register(model, tag_descriptor_attr='tags',
28-
tagged_item_manager_attr='tagged'):
29-
"""
30-
Sets the given model class up for working with tags.
31-
"""
32-
33-
from tagging.managers import ModelTaggedItemManager, TagDescriptor
34-
35-
if model in registry:
36-
raise AlreadyRegistered(
37-
"The model '%s' has already been registered." %
38-
model._meta.object_name)
39-
if hasattr(model, tag_descriptor_attr):
40-
raise AttributeError(
41-
"'%s' already has an attribute '%s'. You must "
42-
"provide a custom tag_descriptor_attr to register." % (
43-
model._meta.object_name,
44-
tag_descriptor_attr,
45-
)
46-
)
47-
if hasattr(model, tagged_item_manager_attr):
48-
raise AttributeError(
49-
"'%s' already has an attribute '%s'. You must "
50-
"provide a custom tagged_item_manager_attr to register." % (
51-
model._meta.object_name,
52-
tagged_item_manager_attr,
53-
)
54-
)
55-
56-
# Add tag descriptor
57-
setattr(model, tag_descriptor_attr, TagDescriptor())
58-
59-
# Add custom manager
60-
ModelTaggedItemManager().contribute_to_class(
61-
model, tagged_item_manager_attr)
62-
63-
# Finally register in registry
64-
registry.append(model)

tagging/registry.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
"""
2+
Registery for tagging.
3+
"""
4+
from tagging.managers import TagDescriptor
5+
from tagging.managers import ModelTaggedItemManager
6+
7+
registry = []
8+
9+
10+
class AlreadyRegistered(Exception):
11+
"""
12+
An attempt was made to register a model more than once.
13+
"""
14+
pass
15+
16+
17+
def register(model, tag_descriptor_attr='tags',
18+
tagged_item_manager_attr='tagged'):
19+
"""
20+
Sets the given model class up for working with tags.
21+
"""
22+
if model in registry:
23+
raise AlreadyRegistered(
24+
"The model '%s' has already been registered." %
25+
model._meta.object_name)
26+
if hasattr(model, tag_descriptor_attr):
27+
raise AttributeError(
28+
"'%s' already has an attribute '%s'. You must "
29+
"provide a custom tag_descriptor_attr to register." % (
30+
model._meta.object_name,
31+
tag_descriptor_attr,
32+
)
33+
)
34+
if hasattr(model, tagged_item_manager_attr):
35+
raise AttributeError(
36+
"'%s' already has an attribute '%s'. You must "
37+
"provide a custom tagged_item_manager_attr to register." % (
38+
model._meta.object_name,
39+
tagged_item_manager_attr,
40+
)
41+
)
42+
43+
# Add tag descriptor
44+
setattr(model, tag_descriptor_attr, TagDescriptor())
45+
46+
# Add custom manager
47+
ModelTaggedItemManager().contribute_to_class(
48+
model, tagged_item_manager_attr)
49+
50+
# Finally register in registry
51+
registry.append(model)

0 commit comments

Comments
 (0)