Fixed double shift implementation. Added implicit renaming

This commit is contained in:
2025-07-24 21:42:13 +02:00
parent 34f959812b
commit 1ceddfac7c
3 changed files with 34 additions and 1 deletions

View File

@@ -39,7 +39,9 @@ function bindAIBuddy(elementId) {
event.preventDefault(); event.preventDefault();
makeAIRequest(); makeAIRequest();
} }
});
document.addEventListener('keyup', (event) => {
if (event.key === 'Shift') { if (event.key === 'Shift') {
const currentTime = new Date().getTime(); const currentTime = new Date().getTime();
if (currentTime - lastShiftPress <= doublePressDelay) { if (currentTime - lastShiftPress <= doublePressDelay) {

View File

@@ -45,7 +45,7 @@ class DefaultDataPresenter(DataPresenter):
mappings[key] = key mappings[key] = key
elif key.endswith(".*"): elif key.endswith(".*"):
# all fields in a sub-object # all fields in a sub-object
if value != "*": if value != "*" and value != "":
raise ValueError("Only '*' is accepted when renaming wildcard.") raise ValueError("Only '*' is accepted when renaming wildcard.")
obj_path = key[:-2] obj_path = key[:-2]
sub_obj = data.get(obj_path) sub_obj = data.get(obj_path)
@@ -86,6 +86,8 @@ class DefaultDataPresenter(DataPresenter):
for mapping in self._split_definitions: for mapping in self._split_definitions:
if "=" in mapping: if "=" in mapping:
key, value = [s.strip() for s in mapping.split('=', 1)] key, value = [s.strip() for s in mapping.split('=', 1)]
if not value:
value = key.split(".")[-1]
mappings[key] = value mappings[key] = value
else: else:
mappings[mapping] = mapping mappings[mapping] = mapping

View File

@@ -14,6 +14,18 @@ def test_i_can_present_static_mappings():
assert actual == Expando({"renamed_1": "value1", "field2": "value2"}) # field3 is removed assert actual == Expando({"renamed_1": "value1", "field2": "value2"}) # field3 is removed
def test_i_can_present_implicit_renaming():
mappings_def = "root.field1="
presenter = DefaultDataPresenter("comp_id", mappings_def)
as_dict = {"root": {"field1": "value1"}}
data = Expando(as_dict)
actual = presenter.present(data)
assert isinstance(actual, Expando)
assert actual.as_dict() == {"field1": "value1"}
def test_the_latter_mappings_take_precedence(): def test_the_latter_mappings_take_precedence():
mappings_def = "field1 = renamed_1 , field1 " mappings_def = "field1 = renamed_1 , field1 "
presenter = DefaultDataPresenter("comp_id", mappings_def) presenter = DefaultDataPresenter("comp_id", mappings_def)
@@ -105,6 +117,23 @@ def test_i_can_present_dynamic_mappings_with_sub_fields_and_renames():
"field4": "value4"} "field4": "value4"}
def test_i_can_present_dynamic_mappings_with_sub_fields_and_implicit_renames():
mappings_def = "root.sub_field.*="
presenter = DefaultDataPresenter("comp_id", mappings_def)
as_dict = {"root": {"field1": "value1",
"field2": "value2",
"sub_field": {"field3": "value3",
"field4": "value4"
}}}
data = Expando(as_dict)
actual = presenter.present(data)
assert isinstance(actual, Expando)
assert actual.as_dict() == {"field3": "value3",
"field4": "value4"}
def test_i_can_present_dynamic_mappings_and_rename_them(): def test_i_can_present_dynamic_mappings_and_rename_them():
mappings_def = "*=*" # does not really have effects as '*' only goes down one level mappings_def = "*=*" # does not really have effects as '*' only goes down one level
presenter = DefaultDataPresenter("comp_id", mappings_def) presenter = DefaultDataPresenter("comp_id", mappings_def)