mirror of https://github.com/scrapy/scrapy.git
made DjangoItem a descendant of Item and its metaclass
This commit is contained in:
parent
fb39bca24f
commit
8efe6eb55e
|
|
@ -1,7 +1,7 @@
|
|||
from scrapy.item import DictItem, Field
|
||||
from scrapy.item import Field, Item, ItemMeta
|
||||
|
||||
|
||||
class DjangoItemMeta(type):
|
||||
class DjangoItemMeta(ItemMeta):
|
||||
|
||||
def __new__(mcs, class_name, bases, attrs):
|
||||
cls = super(DjangoItemMeta, mcs).__new__(mcs, class_name, bases, attrs)
|
||||
|
|
@ -12,17 +12,14 @@ class DjangoItemMeta(type):
|
|||
cls._model_meta = cls.django_model._meta
|
||||
for model_field in cls._model_meta.fields:
|
||||
# XXX: for now we're treating each PK as autogenerated field
|
||||
if model_field != cls._model_meta.pk:
|
||||
if model_field != cls._model_meta.pk and \
|
||||
model_field.name not in cls.fields:
|
||||
cls.fields[model_field.name] = Field()
|
||||
cls._model_fields.append(model_field.name)
|
||||
# add declared fields
|
||||
for n, v in attrs.iteritems():
|
||||
if isinstance(v, Field):
|
||||
cls.fields[n] = v
|
||||
return cls
|
||||
|
||||
|
||||
class DjangoItem(DictItem):
|
||||
class DjangoItem(Item):
|
||||
|
||||
__metaclass__ = DjangoItemMeta
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ class Field(dict):
|
|||
"""Container of field metadata"""
|
||||
|
||||
|
||||
class _ItemMeta(type):
|
||||
class ItemMeta(type):
|
||||
|
||||
def __new__(mcs, class_name, bases, attrs):
|
||||
fields = {}
|
||||
|
|
@ -81,7 +81,7 @@ class DictItem(DictMixin, BaseItem):
|
|||
|
||||
class Item(DictItem):
|
||||
|
||||
__metaclass__ = _ItemMeta
|
||||
__metaclass__ = ItemMeta
|
||||
|
||||
|
||||
class ScrapedItem(BaseItem):
|
||||
|
|
|
|||
Loading…
Reference in New Issue