From 3cbc4d0b94045d80132b4f43735b95ac9c841896 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Gra=C3=B1a?= Date: Tue, 8 Jan 2013 17:56:46 -0200 Subject: [PATCH] django is an optional_features, its imports must not fail --- scrapy/__init__.py | 7 +++++ scrapy/contrib/djangoitem.py | 7 ++--- scrapy/tests/test_djangoitem/__init__.py | 34 ++++++++---------------- 3 files changed, 22 insertions(+), 26 deletions(-) diff --git a/scrapy/__init__.py b/scrapy/__init__.py index 1d49f4abb..0d169683c 100644 --- a/scrapy/__init__.py +++ b/scrapy/__init__.py @@ -40,3 +40,10 @@ except ImportError: pass else: optional_features.add('libxml2') + +try: + import django +except ImportError: + pass +else: + optional_features.add('django') diff --git a/scrapy/contrib/djangoitem.py b/scrapy/contrib/djangoitem.py index 0b9b3b6f6..b9ce064e1 100644 --- a/scrapy/contrib/djangoitem.py +++ b/scrapy/contrib/djangoitem.py @@ -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) diff --git a/scrapy/tests/test_djangoitem/__init__.py b/scrapy/tests/test_djangoitem/__init__.py index 8a8b341e6..0a7c6c06f 100644 --- a/scrapy/tests/test_djangoitem/__init__.py +++ b/scrapy/tests/test_djangoitem/__init__.py @@ -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)