chore: Implement `pop` method on `BaseSettings` class

This commit is contained in:
Laerte Pereira 2023-06-22 23:58:03 -03:00
parent 04ee3303e4
commit 080b9bd0b8
2 changed files with 27 additions and 0 deletions

View File

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

View File

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