mirror of https://github.com/scrapy/scrapy.git
chore: Implement `pop` method on `BaseSettings` class
This commit is contained in:
parent
04ee3303e4
commit
080b9bd0b8
|
|
@ -75,6 +75,8 @@ class BaseSettings(MutableMapping):
|
|||
highest priority will be retrieved.
|
||||
"""
|
||||
|
||||
__default = object()
|
||||
|
||||
def __init__(self, values=None, priority="project"):
|
||||
self.frozen = False
|
||||
self.attributes = {}
|
||||
|
|
@ -445,6 +447,18 @@ class BaseSettings(MutableMapping):
|
|||
else:
|
||||
p.text(pformat(self.copy_to_dict()))
|
||||
|
||||
def pop(self, name, default=__default):
|
||||
try:
|
||||
value = self.attributes[name]
|
||||
except KeyError:
|
||||
if default is self.__default:
|
||||
raise
|
||||
|
||||
return SettingsAttribute(default, get_settings_priority("project"))
|
||||
else:
|
||||
del self.attributes[name]
|
||||
return value
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -451,6 +451,19 @@ class SettingsTest(unittest.TestCase):
|
|||
self.assertIsInstance(myhandler_instance, FileDownloadHandler)
|
||||
self.assertTrue(hasattr(myhandler_instance, "download_request"))
|
||||
|
||||
def test_pop_item_with_default_value(self):
|
||||
settings = Settings()
|
||||
|
||||
with self.assertRaises(KeyError):
|
||||
settings.pop("DUMMY_CONFIG")
|
||||
|
||||
dummy_config = settings.pop("DUMMY_CONFIG", "dummy_value")
|
||||
|
||||
self.assertEqual(
|
||||
repr(dummy_config), "<SettingsAttribute value='dummy_value' priority=20>"
|
||||
)
|
||||
self.assertEqual(dummy_config.value, "dummy_value")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
|||
Loading…
Reference in New Issue