mirror of https://github.com/scrapy/scrapy.git
Overwrite, not update, dictionary-like settings
This commit is contained in:
parent
52ecee6a62
commit
44f6ada034
|
|
@ -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 "<SettingsAttribute value={self.value!r} " \
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
import os
|
||||
import json
|
||||
import sys
|
||||
import shutil
|
||||
import os
|
||||
import pstats
|
||||
import tempfile
|
||||
import shutil
|
||||
import six
|
||||
from subprocess import Popen, PIPE
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
try:
|
||||
from cStringIO import StringIO
|
||||
|
|
@ -57,14 +58,14 @@ class CmdlineTest(unittest.TestCase):
|
|||
shutil.rmtree(path)
|
||||
|
||||
def test_override_dict_settings(self):
|
||||
EXT_PATH = "tests.test_cmdline.extensions.DummyExtension"
|
||||
EXTENSIONS = {EXT_PATH: 200}
|
||||
settingsstr = self._execute('settings', '--get', 'EXTENSIONS', '-s',
|
||||
('EXTENSIONS={"tests.test_cmdline.extensions.TestExtension": '
|
||||
'100, "tests.test_cmdline.extensions.DummyExtension": 200}'))
|
||||
'EXTENSIONS=' + json.dumps(EXTENSIONS))
|
||||
# XXX: There's gotta be a smarter way to do this...
|
||||
self.assertNotIn("...", settingsstr)
|
||||
for char in ("'", "<", ">", '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])
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
Loading…
Reference in New Issue