|
1 |
| -from django.utils.translation import ugettext as _ |
2 |
| - |
3 | 1 | from tagging.managers import ModelTaggedItemManager, TagDescriptor
|
4 | 2 |
|
| 3 | + |
| 4 | + |
5 | 5 | VERSION = (0, 4, 'pre')
|
6 | 6 |
|
| 7 | + |
| 8 | + |
7 | 9 | class AlreadyRegistered(Exception):
|
8 | 10 | """
|
9 | 11 | An attempt was made to register a model more than once.
|
10 | 12 | """
|
11 | 13 | pass
|
12 | 14 |
|
| 15 | + |
13 | 16 | registry = []
|
14 | 17 |
|
| 18 | + |
15 | 19 | def register(model, tag_descriptor_attr='tags',
|
16 | 20 | tagged_item_manager_attr='tagged'):
|
17 | 21 | """
|
18 | 22 | Sets the given model class up for working with tags.
|
19 | 23 | """
|
| 24 | + |
20 | 25 | if model in registry:
|
21 |
| - raise AlreadyRegistered( |
22 |
| - _('The model %s has already been registered.') % model.__name__) |
23 |
| - registry.append(model) |
| 26 | + raise AlreadyRegistered("The model '%s' has already been " |
| 27 | + "registered." % model._meta.object_name) |
| 28 | + if hasattr(model, tag_descriptor_attr): |
| 29 | + raise AttributeError("'%s' already has an attribute '%s'. You must " |
| 30 | + "provide a custom tag_descriptor_attr to register." % ( |
| 31 | + model._meta.object_name, |
| 32 | + tag_descriptor_attr, |
| 33 | + ) |
| 34 | + ) |
| 35 | + if hasattr(model, tagged_item_manager_attr): |
| 36 | + raise AttributeError("'%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 | + ) |
24 | 42 |
|
25 | 43 | # Add tag descriptor
|
26 | 44 | setattr(model, tag_descriptor_attr, TagDescriptor())
|
27 | 45 |
|
28 | 46 | # Add custom manager
|
29 |
| - ModelTaggedItemManager().contribute_to_class(model, |
30 |
| - tagged_item_manager_attr) |
| 47 | + ModelTaggedItemManager().contribute_to_class(model, tagged_item_manager_attr) |
| 48 | + |
| 49 | + # Finally register in registry |
| 50 | + registry.append(model) |
0 commit comments