django is an optional_features, its imports must not fail

This commit is contained in:
Daniel Graña 2013-01-08 17:56:46 -02:00
parent d8a760bf57
commit 3cbc4d0b94
3 changed files with 22 additions and 26 deletions

View File

@ -40,3 +40,10 @@ except ImportError:
pass
else:
optional_features.add('libxml2')
try:
import django
except ImportError:
pass
else:
optional_features.add('django')

View File

@ -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)

View File

@ -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)