From 06e049e5519ccf90674be45de88b01035a7a8c47 Mon Sep 17 00:00:00 2001 From: Ismael Carnales Date: Tue, 10 Mar 2009 16:15:49 +0000 Subject: [PATCH] move meta class initialization to metaclass in ItemAdaptor --HG-- extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%40974 --- .../scrapy/contrib_exp/newitem/adaptors.py | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py b/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py index 8f1a63c0b..21c89cfb5 100644 --- a/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py +++ b/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py @@ -13,9 +13,23 @@ def adaptize(func): class ItemAdaptorMeta(type): + def __new__(meta, class_name, bases, attrs): cls = type.__new__(meta, class_name, bases, attrs) - cls.__classinit__.im_func(cls, attrs) + + if 'default_adaptor' in attrs: + default_adaptor = adaptize(attrs['default_adaptor']) + cls.default_adaptor = staticmethod(default_adaptor) + + cls.field_adaptors = cls.field_adaptors.copy() + + if cls.item_class: + for item_field in cls.item_class.fields.keys(): + if item_field in attrs: + adaptor = adaptize(attrs[item_field]) + cls.field_adaptors[item_field] = adaptor + setattr(cls, item_field, staticmethod(adaptor)) + return cls def __getattr__(cls, name): @@ -34,20 +48,6 @@ class ItemAdaptor(object): default_adaptor = IDENTITY field_adaptors = {} - def __classinit__(cls, attrs): - if 'default_adaptor' in attrs: - setattr(cls, 'default_adaptor', - staticmethod(adaptize(attrs['default_adaptor']))) - - cls.field_adaptors = cls.field_adaptors.copy() - - if cls.item_class: - for item_field in cls.item_class.fields.keys(): - if item_field in attrs: - adaptor = adaptize(attrs[item_field]) - cls.field_adaptors[item_field] = adaptor - setattr(cls, item_field, staticmethod(adaptor)) - def __init__(self, response=None, item=None): self.item_instance = item if item else self.item_class() self._response = response