From d67abd93077f49a6df2d4263fb3350361054aa81 Mon Sep 17 00:00:00 2001 From: Jason Pellerin Date: Wed, 19 Jul 2006 18:57:26 +0000 Subject: [PATCH] [multi-db] Moved ConnectionInfoDescriptor to django.db, updated imports accordingly. git-svn-id: http://code.djangoproject.com/svn/django/branches/multiple-db-support@3386 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/manager.py | 76 ++----------------------------------- 1 file changed, 3 insertions(+), 73 deletions(-) diff --git a/django/db/models/manager.py b/django/db/models/manager.py index 51eeeaf0ef..ebe996adae 100644 --- a/django/db/models/manager.py +++ b/django/db/models/manager.py @@ -1,7 +1,7 @@ from django import core from django.utils.functional import curry from django.core.exceptions import ImproperlyConfigured -from django.db import connections, _default +from django.db import ConnectionInfoDescriptor from django.db.models.query import QuerySet from django.dispatch import dispatcher from django.db.models import signals, get_apps, get_models @@ -34,72 +34,6 @@ def ensure_default_manager(sender): cls.add_to_class('objects', Manager()) dispatcher.connect(ensure_default_manager, signal=signals.class_prepared) -class ConnectionInfoDescriptor(object): - """Descriptor used to access database connection information from a - manager or other connection holder. Keeps a thread-local cache of - connections per instance, and always returns the same connection for an - instance in particular thread during a particular request. - - Any object that includes an attribute ``model`` that holds a model class - can use this descriptor to manage connections. - """ - - def __init__(self): - self.cnx = local() - self.cnx.cache = {} - - def __get__(self, instance, type=None): - if instance is None: - raise AttributeError, \ - "ConnectionInfo is accessible only through an instance" - instance_connection = self.cnx.cache.get(instance, None) - if instance_connection is None: - instance_connection = self.get_connection(instance) - def reset(): - self.reset(instance) - dispatcher.connect(reset, signal=core.signals.request_finished) - self.cnx.cache[instance] = instance_connection - return instance_connection - - def __set__(self, instance, value): - self.cnx.cache[instance] = instance_connection - - def __delete__(self, instance): - self.reset(instance) - - def get_connection(self, instance): - from django.conf import settings - app = instance.model._meta.app_label - model = instance.model.__name__ - app_model = "%s.%s" % (app, model) - - # Quick exit if no OTHER_DATABASES defined - if (not hasattr(settings, 'OTHER_DATABASES') - or not settings.OTHER_DATABASES): - return connections[_default] - # Look in MODELS for the best match: app_label.Model. If that isn't - # found, take just app_label. If nothing is found, use the default - maybe = None - for name, db_def in settings.OTHER_DATABASES.items(): - if not 'MODELS' in db_def: - continue - mods = db_def['MODELS'] - # Can't get a better match than this - if app_model in mods: - return connections[name] - elif app in mods: - if maybe is not None: - raise ImproperlyConfigured, \ - "App %s appears in more than one OTHER_DATABASES " \ - "setting (%s and %s)" % (maybe, name) - maybe = name - if maybe: - return connections[name] - # No named connection for this model; use the default - return connections[_default] - - def reset(self, instance): - self.cnx.cache[instance] = None class Manager(object): @@ -214,16 +148,12 @@ class Manager(object): pending.setdefault(klass, []).extend(statements) return pending - def load_initial_data(self): - """Load initial data for my model into the database.""" - pass # FIXME - - def drop(self): + def drop(self, cascade=False): """Drop my model's table.""" pass # FIXME def get_installed_models(self, table_list): - """Get list of models installed, given a list of tables + """Get list of models installed, given a list of tables. """ all_models = [] for app in get_apps():