From: jlaine Date: Mon, 11 Apr 2011 14:05:15 +0000 (+0000) Subject: get rid of custom meta class X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fupstream%2Fdjango-ldapdb.git;a=commitdiff_plain;h=9f6b1812de19fef1d735a7be64f0855fb079f233 get rid of custom meta class git-svn-id: https://svn.bolloretelecom.eu/opensource/django-ldapdb/trunk@1043 e071eeec-0327-468d-9b6a-08194a12b294 --- diff --git a/ldapdb/models/base.py b/ldapdb/models/base.py index 0fc77ea..1d54480 100644 --- a/ldapdb/models/base.py +++ b/ldapdb/models/base.py @@ -40,31 +40,11 @@ from django.db import connections, router from django.db.models import signals import ldapdb -from ldapdb.models.query import QuerySet - -class ModelBase(django.db.models.base.ModelBase): - """ - Metaclass for all LDAP models. - """ - def __new__(cls, name, bases, attrs): - super_new = super(ModelBase, cls).__new__ - new_class = super_new(cls, name, bases, attrs) - - # patch manager to use our own QuerySet class - if not new_class._meta.abstract: - def get_query_set(): - return QuerySet(new_class) - new_class.objects.get_query_set = get_query_set - new_class._default_manager.get_query_set = get_query_set - - return new_class class Model(django.db.models.base.Model): """ Base class for all LDAP models. """ - __metaclass__ = ModelBase - dn = django.db.models.fields.CharField(max_length=200) # meta-data diff --git a/ldapdb/models/query.py b/ldapdb/models/query.py deleted file mode 100644 index 795dee5..0000000 --- a/ldapdb/models/query.py +++ /dev/null @@ -1,89 +0,0 @@ -# -*- coding: utf-8 -*- -# -# django-ldapdb -# Copyright (c) 2009-2010, Bolloré telecom -# All rights reserved. -# -# See AUTHORS file for a full list of contributors. -# -# Redistribution and use in source and binary forms, with or without modification, -# are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of Bolloré telecom nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -from django.db.models.query import QuerySet as BaseQuerySet -from django.db.models.sql import Query -from django.db.models.sql.where import WhereNode as BaseWhereNode, Constraint as BaseConstraint, AND, OR - -from ldapdb.models.fields import CharField - -class Constraint(BaseConstraint): - """ - An object that can be passed to WhereNode.add() and knows how to - pre-process itself prior to including in the WhereNode. - - NOTES: - - we redefine this class, because when self.field is None calls - Field().get_db_prep_lookup(), which short-circuits our LDAP-specific code. - """ - def process(self, lookup_type, value, connection): - """ - Returns a tuple of data suitable for inclusion in a WhereNode - instance. - """ - # Because of circular imports, we need to import this here. - from django.db.models.base import ObjectDoesNotExist - - try: - if self.field: - params = self.field.get_db_prep_lookup(lookup_type, value, - connection=connection, prepared=True) - db_type = self.field.db_type() - else: - params = CharField().get_db_prep_lookup(lookup_type, value, - connection=connection, prepared=True) - db_type = None - except ObjectDoesNotExist: - raise EmptyShortCircuit - - return (self.alias, self.col, db_type), params - -class WhereNode(BaseWhereNode): - def add(self, data, connector): - if not isinstance(data, (list, tuple)): - super(WhereNode, self).add(data, connector) - return - - # we replace the native Constraint by our own - obj, lookup_type, value = data - if hasattr(obj, "process"): - obj = Constraint(obj.alias, obj.col, obj.field) - super(WhereNode, self).add((obj, lookup_type, value), connector) - -class QuerySet(BaseQuerySet): - def __init__(self, model=None, query=None, using=None): - if not query: - query = Query(model, WhereNode) - super(QuerySet, self).__init__(model=model, query=query, using=using) -