diff --git a/categories/migration.py b/categories/south_migration.py similarity index 88% rename from categories/migration.py rename to categories/south_migration.py index d08a7b5..431cbe0 100644 --- a/categories/migration.py +++ b/categories/south_migration.py @@ -9,7 +9,7 @@ def migrate_app(sender, app, created_models=None, verbosity=False, *args, **kwar """ from .fields import CategoryM2MField, CategoryFKField from .models import Category - from .settings import FIELD_REGISTRY + from .registration import registry import sys import StringIO @@ -26,7 +26,7 @@ def migrate_app(sender, app, created_models=None, verbosity=False, *args, **kwar else: app_name = app.__name__.split('.')[-2] - fields = [fld for fld in FIELD_REGISTRY.keys() if fld.startswith(app_name)] + fields = [fld for fld in registry._field_registry.keys() if fld.startswith(app_name)] # call the south commands to add the fields/tables for fld in fields: app_name, model_name, field_name = fld.split('.') @@ -35,12 +35,12 @@ def migrate_app(sender, app, created_models=None, verbosity=False, *args, **kwar # always best to be sure. mdl = models.get_model(app_name, model_name) - if isinstance(FIELD_REGISTRY[fld], CategoryFKField): + if isinstance(registry._field_registry[fld], CategoryFKField): try: db.start_transaction() table_name = mdl._meta.db_table - FIELD_REGISTRY[fld].default = -1 - db.add_column(table_name, field_name, FIELD_REGISTRY[fld], keep_default=False) + registry._field_registry[fld].default = -1 + db.add_column(table_name, field_name, registry._field_registry[fld], keep_default=False) db.commit_transaction() if verbosity: print (_('Added ForeignKey %(field_name)s to %(model_name)s') % @@ -54,7 +54,7 @@ def migrate_app(sender, app, created_models=None, verbosity=False, *args, **kwar else: sys.stderr = org_stderror raise e - elif isinstance(FIELD_REGISTRY[fld], CategoryM2MField): + elif isinstance(registry._field_registry[fld], CategoryM2MField): table_name = '%s_%s' % (mdl._meta.db_table, 'categories') try: db.start_transaction() @@ -87,7 +87,7 @@ def drop_field(app_name, model_name, field_name): # Table is typically appname_modelname, but it could be different # always best to be sure. from .fields import CategoryM2MField, CategoryFKField - from .settings import FIELD_REGISTRY + from .registration import registry try: from south.db import db except ImportError: @@ -97,7 +97,7 @@ def drop_field(app_name, model_name, field_name): fld = '%s.%s.%s' % (app_name, model_name, field_name) - if isinstance(FIELD_REGISTRY[fld], CategoryFKField): + if isinstance(registry._field_registry[fld], CategoryFKField): print (_('Dropping ForeignKey %(field_name)s from %(model_name)s') % {'field_name': field_name, 'model_name': model_name}) try: @@ -108,7 +108,7 @@ def drop_field(app_name, model_name, field_name): except DatabaseError, e: db.rollback_transaction() raise e - elif isinstance(FIELD_REGISTRY[fld], CategoryM2MField): + elif isinstance(registry._field_registry[fld], CategoryM2MField): print (_('Dropping Many2Many table between %(model_name)s and %(category_table)s') % {'model_name': model_name, 'category_table': 'category'}) try: diff --git a/categories/tests/test_registration.py b/categories/tests/test_registration.py index 90edc1b..b303980 100644 --- a/categories/tests/test_registration.py +++ b/categories/tests/test_registration.py @@ -2,11 +2,10 @@ # Test adding 1 fk dict # test adding many-to-many # test adding 1 fk, 1 m2m - +import django from django.test import TestCase -from categories.registration import (_process_registry, register_fk, - register_m2m) +from categories.registration import _process_registry, registry class CategoryRegistrationTest(TestCase): @@ -18,7 +17,7 @@ class CategoryRegistrationTest(TestCase): FK_REGISTRY = { 'flatpages.flatpage': 'category' } - _process_registry(FK_REGISTRY, register_fk) + _process_registry(FK_REGISTRY, registry.register_fk) from django.contrib.flatpages.models import FlatPage self.assertTrue('category' in FlatPage()._meta.get_all_field_names()) @@ -26,7 +25,7 @@ class CategoryRegistrationTest(TestCase): FK_REGISTRY = { 'flatpages.flatpage': {'name': 'category'} } - _process_registry(FK_REGISTRY, register_fk) + _process_registry(FK_REGISTRY, registry.register_fk) from django.contrib.flatpages.models import FlatPage self.assertTrue('category' in FlatPage()._meta.get_all_field_names()) @@ -36,16 +35,24 @@ class CategoryRegistrationTest(TestCase): {'name': 'category', 'related_name': 'cats'}, ) } - _process_registry(FK_REGISTRY, register_fk) + _process_registry(FK_REGISTRY, registry.register_fk) + from django.contrib.flatpages.models import FlatPage + self.assertTrue('category' in FlatPage()._meta.get_all_field_names()) + + if django.VERSION[1] >= 7: + def test_new_foreignkey_string(self): + registry.register_model('flatpages', 'flatpage', 'ForeignKey', 'category') + from django.contrib.flatpages.models import FlatPage + self.assertTrue('category' in FlatPage()._meta.get_all_field_names()) + + +class Categorym2mTest(TestCase): + def test_m2m_string(self): + M2M_REGISTRY = { + 'flatpages.flatpage': 'categories' + } + _process_registry(M2M_REGISTRY, register_m2m) from django.contrib.flatpages.models import FlatPage self.assertTrue('category' in FlatPage()._meta.get_all_field_names()) -# class Categorym2mTest(TestCase): -# def test_m2m_string(self): -# M2M_REGISTRY = { -# 'flatpages.flatpage': 'categories' -# } -# _process_registry(M2M_REGISTRY, register_m2m) -# from django.contrib.flatpages.models import FlatPage -# self.assertTrue('category' in FlatPage()._meta.get_all_field_names())