Skip to content

Commit

Permalink
add on_not_set hooks
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Lasevich committed Aug 22, 2019
1 parent d38c5ed commit 0734376
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 8 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
| :---: |

## QuickScheme Release Notes
* 0.2.1
* Add field not set hooks
* 0.2.0
* Add before/instead/after field set hooks
* 0.1.1
Expand Down
2 changes: 1 addition & 1 deletion package.cfg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[Package]
version = 0.2.0
version = 0.2.1
name = QuickScheme
description = Quick Way To Define Data Schema and Mapping Data To Objects
url = https://mlasevich.github.io/QuickScheme/
Expand Down
10 changes: 5 additions & 5 deletions src/quick_scheme/nodes/scheme_node.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,19 +150,19 @@ def _set_data(self, data):
''' Set data for this object '''
extra_data = self._get_map_class_instance()

keys_set = []
if isinstance(data, dict):
for field, value in data.items():
keys_set.append(object)
self._init_field(field, value, extra_data)
else:
self._brief_set(data)

LOG.error("%s fields not set, %s extra fields when setting %s from %s",
len(keys_set), len(extra_data), self._path_str(), data)

self._data = extra_data

args = Args(data=data)
for field_name, (_field_idx, field) in self._fields.items():
if not field.is_set:
self._run_if_present("_on_not_set_%s" % field_name, args=args)

def _get_by_id(self, id):
''' Return by id '''
fields = self._fields
Expand Down
10 changes: 8 additions & 2 deletions src/quick_scheme/nodes/scheme_node_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ class MyOpenNode(MyClosedNode):
Field('integer_with_default_2', ftype=int, default=2, always=False),
]

def _on_not_set_integer_no_default(self, data, **kwargs):
''' Runs if integer_no_default is not '''
self._data['integer_no_default_unset'] = 'unset'

def _before_set_b4(self, value, **_):
''' Runs Before b4 is set '''
value = "__" + value + "__"
Expand Down Expand Up @@ -135,7 +139,8 @@ def test_open_node_empty(self):
self.assertDictEqual(node.quick_scheme.get_data(), {'id': '',
'name': 'def',
'integer_no_default': 0,
'integer_with_default_1': 1})
'integer_with_default_1': 1,
'integer_no_default_unset': 'unset'})

def test_open_node_data(self):
''' Test getting action_desc'''
Expand Down Expand Up @@ -205,7 +210,8 @@ def test_open_node_brief(self):
self.assertDictEqual(node.quick_scheme.get_data(), {'id': '',
'name': 'my brief value',
'integer_no_default': 0,
'integer_with_default_1': 1})
'integer_with_default_1': 1,
'integer_no_default_unset': 'unset'})


if __name__ == '__main__':
Expand Down

0 comments on commit 0734376

Please sign in to comment.