Django

Code

Changeset 1715

Show
Ignore:
Timestamp:
12/16/05 21:59:35 (3 years ago)
Author:
rjwittams
Message:

Some event use. Slight manipulator refactor.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/magic-removal/django/contrib/admin/templatetags/admin_modify.py

    r1700 r1715  
    202202def filter_interface_script_maybe(bound_field): 
    203203    f = bound_field.field 
    204     if f.rel and isinstance(f.rel, meta.ManyToMany) and f.rel.filter_interface: 
     204    if f.rel and isinstance(f.rel, models.ManyToMany) and f.rel.filter_interface: 
    205205       return '<script type="text/javascript">addEvent(window, "load", function(e) {' \ 
    206206              ' SelectFilter.init("id_%s", "%s", %s, "%s"); });</script>\n' % ( 
  • django/branches/magic-removal/django/db/models/base.py

    r1713 r1715  
    1 from django.db.models.manipulators import ManipulatorDescriptor, ModelAddManipulator, ModelChangeManipulator 
    2 from django.db.models.fields import Field, DateField, FileField, ImageField, AutoField 
    3 from django.db.models.fields.related import RelatedField, OneToOne, ManyToOne, ManyToMany, RECURSIVE_RELATIONSHIP_CONSTANT 
     1from django.db.models.manipulators import ModelAddManipulator, ModelChangeManipulator 
     2from django.db.models.fields import AutoField 
     3from django.db.models.fields.related import OneToOne, ManyToOne 
    44from django.db.models.related import RelatedObject 
    5 from django.db.models.manager import Manager, ManagerDescriptor 
     5from django.db.models.manager import Manager 
    66from django.db.models.query import orderlist2sql 
    77from django.db.models.options import Options 
    88from django.db import connection, backend 
    9  
     9from django.db.models.signals import Signals 
     10 
     11from django.dispatch import dispatcher 
    1012from django.core.exceptions import ObjectDoesNotExist 
    1113from django.utils.functional import curry 
     
    2426# Calculate the verbose_name by converting from InitialCaps to "lowercase with spaces". 
    2527get_verbose_name = lambda class_name: re.sub('([A-Z])', ' \\1', class_name).lower().strip() 
     28 
    2629 
    2730 
     
    119122    return 0 
    120123 
     124 
     125 
     126 
    121127class Model(object): 
    122128    __metaclass__ = ModelBase 
     
    129135    add_to_class = classmethod(add_to_class) 
    130136 
    131     AddManipulator = ManipulatorDescriptor('AddManipulator', ModelAddManipulator) 
    132     ChangeManipulator = ManipulatorDescriptor('ChangeManipulator', ModelChangeManipulator) 
    133  
     137     
    134138    def __repr__(self): 
    135139        return '<%s object>' % self.__class__.__name__ 
     
    142146 
    143147    def __init__(self, *args, **kwargs): 
     148        dispatcher.send( signal = Signals.pre_init, sender = self.__class__, args=args, kwargs=kwargs) 
    144149        if kwargs: 
    145150            for f in self._meta.fields: 
     
    172177        for i, arg in enumerate(args): 
    173178            setattr(self, self._meta.fields[i].attname, arg) 
     179        dispatcher.send( signal = Signals.post_init, sender = self.__class__, instance=self) 
    174180 
    175181    def _prepare(cls): 
     182        cls.add_to_class(  'AddManipulator', ModelAddManipulator) 
     183        cls.add_to_class(  'ChangeManipulator', ModelChangeManipulator) 
     184         
    176185        # Creates some methods once self._meta has been populated. 
    177186 
     
    180189            cls.get_previous_in_order = curry(cls._get_next_or_previous_in_order, is_next=False) 
    181190 
    182         RelatedField.do_pending_lookups(cls) 
     191        dispatcher.send( signal = Signals.class_prepared, sender = cls) 
     192 
     193        #RelatedField.do_pending_lookups(cls) 
    183194 
    184195    _prepare = classmethod(_prepare) 
     
    188199        if hasattr(self, '_pre_save'): 
    189200            self._pre_save() 
     201        dispatcher.send( signal=Signals.pre_save, sender = self.__class__, instance = self ) 
    190202 
    191203        non_pks = [f for f in self._meta.fields if not f.primary_key] 
     
    232244 
    233245        # Run any post-save hooks. 
     246        dispatcher.send(signal=Signals.pre_save, sender = self.__class__, instance = self ) 
     247         
    234248        if hasattr(self, '_post_save'): 
    235249            self._post_save() 
     
    284298            if hasattr(instance, '_pre_delete'): 
    285299                instance._pre_delete() 
     300             
     301            dispatcher.send(signal=Signals.pre_delete, sender = cls, instance = instance ) 
    286302 
    287303            for related in cls._meta.get_all_related_many_to_many_objects(): 
     
    312328 
    313329            setattr(self, cls._meta.pk.attname, None) 
    314             for f in cls._meta.fields: 
    315                 if isinstance(f, FileField) and getattr(self, f.attname): 
    316                     file_name = getattr(instance, 'get_%s_filename' % f.name)() 
    317                     # If the file exists and no other object of this type references it, 
    318                     # delete it from the filesystem. 
    319                     if os.path.exists(file_name) and not cls._default_manager.get_list(**{'%s__exact' % f.name: getattr(self, f.name)}): 
    320                         os.remove(file_name) 
    321             # Run any post-delete hooks. 
     330             
     331            dispatcher.send(signal=Signals.post_delete, sender = cls, instance = instance ) 
     332             
    322333            if hasattr(instance, '_post_delete'): 
    323334                instance._post_delete() 
  • django/branches/magic-removal/django/db/models/fields/__init__.py

    r1713 r1715  
     1from django.db.models.signals import Signals 
     2from django.dispatch import dispatcher 
    13from django.conf import settings 
    24from django.core import formfields, validators 
     
    68from django.utils.translation import gettext_lazy, ngettext 
    79import datetime, os 
     10 
    811 
    912# Random entropy string used by "default" param. 
     
    503506        setattr(cls, 'get_%s_size' % self.name, curry(cls._get_FIELD_size, field=self)) 
    504507        setattr(cls, 'save_%s_file' % self.name, curry(cls._save_FIELD_file, field=self)) 
     508        dispatcher.connect( 
     509            self.delete_file, 
     510            signal = Signals.post_delete, 
     511            sender = cls 
     512        ) 
     513         
     514    def delete_file(self, instance): 
     515         if getattr(instance, f.attname): 
     516            file_name = getattr(instance, 'get_%s_filename' % f.name)() 
     517            # If the file exists and no other object of this type references it, 
     518            # delete it from the filesystem. 
     519            if os.path.exists(file_name) and \ 
     520                not instance.__class__._default_manager.get_list(**{'%s__exact' % self.name: getattr(instance, self.attname)}): 
     521                os.remove(file_name) 
    505522 
    506523    def get_manipulator_field_objs(self): 
  • django/branches/magic-removal/django/db/models/fields/related.py

    r1713 r1715  
    44from django.utils.functional import curry 
    55from django.core import formfields 
    6  
     6from django.db.models.signals import Signals 
     7 
     8from django.dispatch import dispatcher 
    79 
    810# Values for Relation.edit_inline. 
     
    1416class RelatedField(object): 
    1517    pending_lookups = {} 
     18     
     19    dispatcher.connect( 
     20        lambda sender: RelatedField.do_pending_lookups(sender) , 
     21        signal = Signals.class_prepared, 
     22        weak = False) 
     23     
    1624     
    1725    def add_lookup(cls, rel_cls, field): 
     
    2836            field.do_related_class(other_cls, rel_cls) 
    2937    do_pending_lookups = classmethod(do_pending_lookups) 
     38     
     39     
    3040     
    3141    def contribute_to_class(self, cls, name): 
  • django/branches/magic-removal/django/db/models/__init__.py

    r1701 r1715  
    1717from django.core.exceptions import ObjectDoesNotExist 
    1818from django.db.models.exceptions import FieldDoesNotExist, BadKeywordArguments 
     19from django.db.models.signals import Signals 
    1920 
    2021# Admin stages. 
  • django/branches/magic-removal/django/db/models/manipulators.py

    r1710 r1715  
    1616            raise "Manipulator accessed via instance" 
    1717        else: 
    18             class Man(self.get_base_manipulator(type), self.base): 
    19                 pass 
    20             Man.classinit(type) 
    21             Man.__name__ = self.name 
    22             return Man 
     18            if not self.man: 
     19                class Man(self.get_base_manipulator(type), self.base): 
     20                    pass 
     21                 
     22                Man._prepare(type) 
     23                Man.__name__ = self.name 
     24                self.man = Man 
     25            return self.man 
    2326             
    2427    def get_base_manipulator(self, type): 
     
    3134 
    3235class AutomaticManipulator(Manipulator): 
    33     def classinit(cls, model): 
     36    def _prepare(cls, model): 
    3437        cls.model = model 
    3538        cls.manager = model._default_manager 
     
    4447            if f.unique_for_year: 
    4548                setattr(cls, 'isUnique%sFor%s' % (f.name, f.unique_for_year), curry(manipulator_validator_unique_for_date, f, opts.get_field(f.unique_for_year), opts, 'year')) 
    46     classinit = classmethod(classinit) 
     49    _prepare = classmethod(_prepare) 
     50     
     51    def contribute_to_class(cls, other_cls, name ): 
     52        setattr(other_cls, name, ManipulatorDescriptor(name, cls)) 
     53    contribute_to_class = classmethod(contribute_to_class) 
    4754     
    4855    def __init__(self, original_object= None, follow=None): 
  • django/branches/magic-removal/django/dispatch/dispatcher.py

    r1714 r1715  
    2828from __future__ import generators 
    2929import types, weakref 
    30 from dispatch import saferef, robustapply, errors 
     30from django.dispatch import saferef, robustapply, errors 
    3131 
    3232__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"