mirror of https://github.com/scrapy/scrapy.git
django is an optional_features, its imports must not fail
This commit is contained in:
parent
d8a760bf57
commit
3cbc4d0b94
|
|
@ -40,3 +40,10 @@ except ImportError:
|
|||
pass
|
||||
else:
|
||||
optional_features.add('libxml2')
|
||||
|
||||
try:
|
||||
import django
|
||||
except ImportError:
|
||||
pass
|
||||
else:
|
||||
optional_features.add('django')
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
from django.core.exceptions import ValidationError
|
||||
|
||||
from scrapy.item import Field, Item, ItemMeta
|
||||
from scrapy import optional_features
|
||||
if 'django' in optional_features:
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
|
||||
class DjangoItemMeta(ItemMeta):
|
||||
|
|
@ -13,7 +14,7 @@ class DjangoItemMeta(ItemMeta):
|
|||
cls._model_fields = []
|
||||
cls._model_meta = cls.django_model._meta
|
||||
for model_field in cls._model_meta.fields:
|
||||
if model_field.auto_created == False:
|
||||
if not model_field.auto_created:
|
||||
if model_field.name not in cls.fields:
|
||||
cls.fields[model_field.name] = Field()
|
||||
cls._model_fields.append(model_field.name)
|
||||
|
|
|
|||
|
|
@ -2,41 +2,30 @@ import os
|
|||
from twisted.trial import unittest
|
||||
|
||||
from scrapy.contrib.djangoitem import DjangoItem, Field
|
||||
from scrapy import optional_features
|
||||
|
||||
os.environ['DJANGO_SETTINGS_MODULE'] = 'scrapy.tests.test_djangoitem.settings'
|
||||
|
||||
try:
|
||||
import django
|
||||
except ImportError:
|
||||
django = None
|
||||
|
||||
if django:
|
||||
if 'django' in optional_features:
|
||||
from .models import Person, IdentifiedPerson
|
||||
else:
|
||||
Person = None
|
||||
IdentifiedPerson = None
|
||||
|
||||
class BasePersonItem(DjangoItem):
|
||||
django_model = Person
|
||||
|
||||
class BasePersonItem(DjangoItem):
|
||||
django_model = Person
|
||||
class NewFieldPersonItem(BasePersonItem):
|
||||
other = Field()
|
||||
|
||||
class OverrideFieldPersonItem(BasePersonItem):
|
||||
age = Field()
|
||||
|
||||
class NewFieldPersonItem(BasePersonItem):
|
||||
other = Field()
|
||||
|
||||
|
||||
class OverrideFieldPersonItem(BasePersonItem):
|
||||
age = Field()
|
||||
|
||||
|
||||
class IdentifiedPersonItem(DjangoItem):
|
||||
django_model = IdentifiedPerson
|
||||
class IdentifiedPersonItem(DjangoItem):
|
||||
django_model = IdentifiedPerson
|
||||
|
||||
|
||||
class DjangoItemTest(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
if not django:
|
||||
if 'django' not in optional_features:
|
||||
raise unittest.SkipTest("Django is not available")
|
||||
|
||||
def test_base(self):
|
||||
|
|
@ -111,7 +100,6 @@ class DjangoItemTest(unittest.TestCase):
|
|||
i['age'] = '22'
|
||||
self.assertTrue(i.is_valid())
|
||||
|
||||
|
||||
def test_default_field_values(self):
|
||||
i = BasePersonItem()
|
||||
person = i.save(commit=False)
|
||||
|
|
|
|||
Loading…
Reference in New Issue