diff --git a/scrapy/settings/__init__.py b/scrapy/settings/__init__.py index b0f59ccc7..e62bdd08e 100644 --- a/scrapy/settings/__init__.py +++ b/scrapy/settings/__init__.py @@ -49,14 +49,11 @@ class SettingsAttribute(object): def set(self, value, priority): """Sets value if priority is higher or equal than current priority.""" - if isinstance(self.value, BaseSettings): - # Ignore self.priority if self.value has per-key priorities - self.value.update(value, priority) - self.priority = max(self.value.maxpriority(), priority) - else: - if priority >= self.priority: - self.value = value - self.priority = priority + if priority >= self.priority: + if isinstance(self.value, BaseSettings): + value = BaseSettings(value, priority=priority) + self.value = value + self.priority = priority def __str__(self): return "", 'u"'): settingsstr = settingsstr.replace(char, '"') settingsdict = json.loads(settingsstr) - self.assertIn('tests.test_cmdline.extensions.DummyExtension', settingsdict) - self.assertIn('value=200', settingsdict['tests.test_cmdline.extensions.DummyExtension']) - self.assertIn('value=100', settingsdict['tests.test_cmdline.extensions.TestExtension']) + six.assertCountEqual(self, settingsdict.keys(), EXTENSIONS.keys()) + self.assertIn('value=200', settingsdict[EXT_PATH]) diff --git a/tests/test_settings/__init__.py b/tests/test_settings/__init__.py index 8d98d2cec..44b9b6df3 100644 --- a/tests/test_settings/__init__.py +++ b/tests/test_settings/__init__.py @@ -37,21 +37,22 @@ class SettingsAttributeTest(unittest.TestCase): self.assertEqual(self.attribute.value, 'value') self.assertEqual(self.attribute.priority, 10) - def test_set_per_key_priorities(self): - attribute = SettingsAttribute( - BaseSettings({'one': 10, 'two': 20}, 0), 0) + def test_overwrite_basesettings(self): + original_dict = {'one': 10, 'two': 20} + original_settings = BaseSettings(original_dict, 0) + attribute = SettingsAttribute(original_settings, 0) - new_dict = {'one': 11, 'two': 21} + new_dict = {'three': 11, 'four': 21} attribute.set(new_dict, 10) - self.assertEqual(attribute.value['one'], 11) - self.assertEqual(attribute.value['two'], 21) + self.assertIsInstance(attribute.value, BaseSettings) + six.assertCountEqual(self, attribute.value, new_dict) + six.assertCountEqual(self, original_settings, original_dict) - new_settings = BaseSettings() - new_settings.set('one', 12, 20) - new_settings.set('two', 12, 0) - attribute.set(new_settings, 0) - self.assertEqual(attribute.value['one'], 12) - self.assertEqual(attribute.value['two'], 21) + new_settings = BaseSettings({'five': 12}, 0) + attribute.set(new_settings, 0) # Insufficient priority + six.assertCountEqual(self, attribute.value, new_dict) + attribute.set(new_settings, 10) + six.assertCountEqual(self, attribute.value, new_settings) def test_repr(self): self.assertEqual(repr(self.attribute),