Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow set and save to be chained #15

Open
wants to merge 2 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions easysettings/common_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,8 @@ def save(self, module, filename=None, **kwargs):
with BackedUpWriter(self.filename) as f:
module.dump(self.save_hook(self.data), f, **kwargs)

return self

def save_hook(self, data):
""" Called on self.data before JSON encoding, before saving.
Can be overridden to modify self.data before encoding/saving.
Expand All @@ -283,6 +285,7 @@ def set(self, option, value):
value : Value to set for the option/key.
"""
self.data[option] = value
return self

def set_defaults(self, default_config):
""" Save a copy of keys/value-types from `default_config` to optionally
Expand Down
2 changes: 2 additions & 0 deletions easysettings/json_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@ def save(self, filename=None, sort_keys=False):
def setsave(self, option, value, filename=None, sort_keys=False):
""" The same as calling .set() and then .save(). """
super(JSONSettings, self).setsave(
option,
value,
filename=filename,
sort_keys=sort_keys,
)
38 changes: 38 additions & 0 deletions easysettings/test_settingsbase.py
Original file line number Diff line number Diff line change
Expand Up @@ -475,6 +475,44 @@ def test_setattr(self):
msg='setattr() did not change the real attribute.',
)

def test_setsave(self):
"""setsave() should work as a shortcut for set() and save()"""
settings = self.settings_cls.from_file(self.testfile)
settings.setsave('option5', 'value5', filename=self.testfile)

with open(self.testfile) as f:
rawdata = f.read()

self.assertEqual(
settings.option5,
'value5',
msg='setsave() did not set the attribute.',
)

self.assertTrue(
('option5' in rawdata) and ('value5' in rawdata),
msg='Could not find new option in saved data!',
)

def test_chain_set_save(self):
"""set() and save() can be chained"""
settings = self.settings_cls.from_file(self.testfile)
settings.set('option6', 'value6').save(filename=self.testfile)

with open(self.testfile) as f:
rawdata = f.read()

self.assertEqual(
settings.option6,
'value6',
msg='set().save() did not set the attribute.',
)

self.assertTrue(
('option6' in rawdata) and ('value6' in rawdata),
msg='Could not find new option in saved data!',
)


class JSONSettingsBaseTests(SettingsBaseTests):
def test_encoder_decoder(self):
Expand Down
2 changes: 1 addition & 1 deletion easysettings/toml_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,4 +106,4 @@ def save(self, filename=None):

def setsave(self, option, value, filename=None):
""" The same as calling .set() and then .save(). """
super(TOMLSettings, self).setsave(filename=filename)
super(TOMLSettings, self).setsave(option, value, filename=filename)
2 changes: 1 addition & 1 deletion easysettings/yaml_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,4 +101,4 @@ def save(self, filename=None):

def setsave(self, option, value, filename=None):
""" The same as calling .set() and then .save(). """
super(YAMLSettings, self).setsave(filename=filename)
super(YAMLSettings, self).setsave(option, value, filename=filename)