Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions django_sorcery/db/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,18 @@

from __future__ import absolute_import, print_function, unicode_literals

from . import middleware
from .sqlalchemy import SQLAlchemy # noqa
from .utils import dbdict


databases = dbdict()


class SQLAlchemyMiddleware(middleware.SQLAlchemyDBMiddleware):

db = databases


# For backwards compat, we set it back to the middleware module
middleware.SQLAlchemyMiddleware = SQLAlchemyMiddleware
6 changes: 3 additions & 3 deletions django_sorcery/db/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
from django.core import validators as django_validators
from django.forms import fields as djangofields

from .. import fields as sorceryfields


__all__ = [
"BigIntegerField",
Expand Down Expand Up @@ -208,9 +210,7 @@ def get_type(self, type_class, type_kwargs):

def get_form_class(self, kwargs):
if self.type.enum_class:
from ..fields import EnumField

return EnumField
return sorceryfields.EnumField

return djangofields.TypedChoiceField

Expand Down
33 changes: 28 additions & 5 deletions django_sorcery/db/meta/__init__.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,32 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, unicode_literals
import sys
import types


if True: # skipping importanize, imports need to be in this order for py2
from .column import * # noqa
from .model import * # noqa
from .composite import * # noqa
from .relations import * # noqa
class lazy_module(types.ModuleType):
def __init__(self, name, old_module, origins):
super(lazy_module, self).__init__(name)
self.origins = origins or {}
self.__dict__.update(
{
"__file__": old_module.__file__,
"__package__": old_module.__package__,
"__path__": old_module.__path__,
"__doc__": old_module.__doc__,
}
)

def __getattr__(self, name):
if name in self.origins:
module = __import__(self.__name__ + "." + self.origins[name], None, None, [name])
return getattr(module, name)
return types.ModuleType.__getattribute__(self, name)


old_module = sys.modules[__name__]
sys.modules[__name__] = lazy_module(
__name__,
old_module,
{"model_info": "model", "Identity": "model", "relation_info": "relations", "column_info": "column"},
)
4 changes: 2 additions & 2 deletions django_sorcery/db/meta/relations.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

from django.core.exceptions import ImproperlyConfigured

from ...fields import ModelChoiceField, ModelMultipleChoiceField


class relation_info(object):
"""
Expand Down Expand Up @@ -114,8 +116,6 @@ def formfield(self, form_class=None, **kwargs):
return form_class(self.related_model, **field_kwargs)

def get_form_class(self):
from ...fields import ModelChoiceField, ModelMultipleChoiceField

if self.uselist:
return ModelMultipleChoiceField

Expand Down
6 changes: 0 additions & 6 deletions django_sorcery/db/middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
from __future__ import absolute_import, print_function, unicode_literals
import logging

from . import databases
from .signals import all_signals


Expand Down Expand Up @@ -78,8 +77,3 @@ def commit(self, request, response):

def remove(self, request, response):
self.db.remove()


class SQLAlchemyMiddleware(SQLAlchemyDBMiddleware):

db = databases
5 changes: 2 additions & 3 deletions django_sorcery/db/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

from django.utils.text import camel_case_to_spaces

from ..forms import model_to_dict as real_model_to_dict
from . import meta, signals
from .mixins import CleanMixin

Expand Down Expand Up @@ -39,9 +40,7 @@ def get_identity_key(model, kwargs):

def model_to_dict(instance, fields=None, exclude=None):
warnings.warn("Deprecated, use django_sorcery.forms.model_to_dict instead.", DeprecationWarning)
from ..forms import model_to_dict

return model_to_dict(instance, fields=fields, exclude=exclude)
return real_model_to_dict(instance, fields=fields, exclude=exclude)


def simple_repr(instance, fields=None):
Expand Down
3 changes: 1 addition & 2 deletions django_sorcery/db/sqlalchemy.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from ..utils import make_args
from . import fields
from .composites import BaseComposite, CompositeField
from .middleware import SQLAlchemyDBMiddleware
from .models import Base, BaseMeta
from .query import Query, QueryProperty
from .relations import RelationsMixin
Expand Down Expand Up @@ -239,8 +240,6 @@ def make_middleware(self):
"""
Creates a middleware to be used in a django application
"""
from .middleware import SQLAlchemyDBMiddleware

return type(str("{}SQLAlchemyMiddleware".format(self.alias)), (SQLAlchemyDBMiddleware,), {"db": self})

def args(self, *args, **kwargs):
Expand Down
2 changes: 1 addition & 1 deletion django_sorcery/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from django.forms import fields as djangofields
from django.utils.translation import gettext_lazy

from .db import meta
from .utils import suppress


Expand Down Expand Up @@ -110,7 +111,6 @@ def __init__(

self._choices = None
self.model = model
from .db import meta

self.model_info = meta.model_info(model)
self.session = session
Expand Down
6 changes: 2 additions & 4 deletions django_sorcery/validators/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, unicode_literals


if True:
from .runner import ValidationRunner # noqa
from .base import * # noqa
from .base import * # noqa
from .runner import ValidationRunner # noqa
4 changes: 2 additions & 2 deletions django_sorcery/validators/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _

from ..db import meta


class ValidateTogetherModelFields(object):
"""
Expand Down Expand Up @@ -67,8 +69,6 @@ def __init__(self, session, *args, **kwargs):
def __call__(self, m):
clauses = [getattr(m.__class__, attr) == getattr(m, attr) for attr in self.attrs]

from ..db import meta

info = meta.model_info(m)
state = info.sa_state(m)
if state.persistent:
Expand Down
4 changes: 2 additions & 2 deletions tests/db/meta/test_column.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,12 @@ def test_column_info_enum(self):
def test_column_info_enum_from_class_from_info(self):
col = sa.Column(sa.Enum(VehicleType), info={"form_class": djangofields.IntegerField})
info = meta.column_info(col, name="test")
self.assertIsInstance(info, meta.enum_column_info)
self.assertIsInstance(info, meta.column.enum_column_info)
self.assertEqual(info.form_class, djangofields.IntegerField)

def test_column_info_boolean_from_class_from_info(self):
info = meta.column_info(sa.Column(sa.Boolean(), info={"form_class": djangofields.IntegerField}), name="test")
self.assertIsInstance(info, meta.boolean_column_info)
self.assertIsInstance(info, meta.column.boolean_column_info)
self.assertEqual(info.form_class, djangofields.IntegerField)

def test_column_info_validators(self):
Expand Down