From e57cc90c164ca9e078882158d830c5d9f717e13b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 30 Mar 2011 17:48:42 +0000 Subject: [PATCH] Removed deprecated legacy connection handling for `Field.get_db_*`. git-svn-id: http://code.djangoproject.com/svn/django/trunk@15958 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/fields/__init__.py | 2 - django/db/models/fields/subclassing.py | 67 +------------------- tests/modeltests/field_subclassing/fields.py | 4 +- 3 files changed, 3 insertions(+), 70 deletions(-) diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index ccb57da69e..628c8cd883 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -7,7 +7,6 @@ import math from itertools import tee from django.db import connection -from django.db.models.fields.subclassing import LegacyConnection from django.db.models.query_utils import QueryWrapper from django.conf import settings from django import forms @@ -46,7 +45,6 @@ class FieldDoesNotExist(Exception): class Field(object): """Base class for all field types""" - __metaclass__ = LegacyConnection # Designates whether empty strings fundamentally are allowed at the # database level. diff --git a/django/db/models/fields/subclassing.py b/django/db/models/fields/subclassing.py index b8d1cd6710..d4d7d75222 100644 --- a/django/db/models/fields/subclassing.py +++ b/django/db/models/fields/subclassing.py @@ -6,72 +6,7 @@ Add SubfieldBase as the __metaclass__ for your Field subclass, implement to_python() and the other necessary methods and everything will work seamlessly. """ -from inspect import getargspec -from warnings import warn - -def call_with_connection(func): - arg_names, varargs, varkwargs, defaults = getargspec(func) - updated = ('connection' in arg_names or varkwargs) - if not updated: - warn("A Field class whose %s method hasn't been updated to take a " - "`connection` argument." % func.__name__, - DeprecationWarning, stacklevel=3) - - def inner(*args, **kwargs): - if 'connection' not in kwargs: - from django.db import connection - kwargs['connection'] = connection - warn("%s has been called without providing a connection argument. " % - func.__name__, DeprecationWarning, - stacklevel=2) - if updated: - return func(*args, **kwargs) - if 'connection' in kwargs: - del kwargs['connection'] - return func(*args, **kwargs) - return inner - -def call_with_connection_and_prepared(func): - arg_names, varargs, varkwargs, defaults = getargspec(func) - updated = ( - ('connection' in arg_names or varkwargs) and - ('prepared' in arg_names or varkwargs) - ) - if not updated: - warn("A Field class whose %s method hasn't been updated to take " - "`connection` and `prepared` arguments." % func.__name__, - DeprecationWarning, stacklevel=3) - - def inner(*args, **kwargs): - if 'connection' not in kwargs: - from django.db import connection - kwargs['connection'] = connection - warn("%s has been called without providing a connection argument. " % - func.__name__, DeprecationWarning, - stacklevel=2) - if updated: - return func(*args, **kwargs) - if 'connection' in kwargs: - del kwargs['connection'] - if 'prepared' in kwargs: - del kwargs['prepared'] - return func(*args, **kwargs) - return inner - -class LegacyConnection(type): - """ - A metaclass to normalize arguments give to the get_db_prep_* and db_type - methods on fields. - """ - def __new__(cls, name, bases, attrs): - new_cls = super(LegacyConnection, cls).__new__(cls, name, bases, attrs) - for attr in ('db_type', 'get_db_prep_save'): - setattr(new_cls, attr, call_with_connection(getattr(new_cls, attr))) - for attr in ('get_db_prep_lookup', 'get_db_prep_value'): - setattr(new_cls, attr, call_with_connection_and_prepared(getattr(new_cls, attr))) - return new_cls - -class SubfieldBase(LegacyConnection): +class SubfieldBase(type): """ A metaclass for custom Field subclasses. This ensures the model's attribute has the descriptor protocol attached to it. diff --git a/tests/modeltests/field_subclassing/fields.py b/tests/modeltests/field_subclassing/fields.py index ba1eb90823..efe01d661b 100644 --- a/tests/modeltests/field_subclassing/fields.py +++ b/tests/modeltests/field_subclassing/fields.py @@ -40,7 +40,7 @@ class SmallField(models.Field): return value return Small(value[0], value[1]) - def get_db_prep_save(self, value): + def get_db_prep_save(self, value, connection): return unicode(value) def get_prep_lookup(self, lookup_type, value): @@ -70,7 +70,7 @@ class JSONField(models.TextField): value = json.loads(value) return value - def get_db_prep_save(self, value): + def get_db_prep_save(self, value, connection): if value is None: return None return json.dumps(value)