Skip to content

Commit

Permalink
consider extradata and showFields settings
Browse files Browse the repository at this point in the history
context: Without checking the extradata and showFields options of the
save action, a lot of valid data wasn't (de)serialized
  • Loading branch information
ThibautBorn committed Oct 24, 2023
1 parent b5c2a4e commit 5cd6857
Showing 1 changed file with 27 additions and 12 deletions.
39 changes: 27 additions & 12 deletions src/collective/easyform/serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,8 @@ def serializeSavedData(self, result):
serializeable = dict()
storage[name] = serializeable
for id, data in action.getSavedFormInputItems():
column_names = list(data.keys())
column_names.remove("id")
column_names.sort()
if column_names != included_columns_in_savedata:
relevant_columns = columns_to_serialize(action, data)
if not action.showFields and relevant_columns != included_columns_in_savedata:
logger.warning(
"Skipped Saveddata row because of mismatch witch current fields in %s",
self.context.absolute_url(),
Expand All @@ -80,6 +78,15 @@ def serializeSavedData(self, result):
if storage:
result["savedDataStorage"] = storage

def columns_to_serialize(action, data):
if action.showFields:
column_names = action.showFields
else:
column_names = list(data.keys())
column_names.remove("id")
for extra in action.ExtraData:
column_names.remove(extra)
return column_names.sort()

def convertBeforeSerialize(value):
if isinstance(value, (datetime, date)):
Expand Down Expand Up @@ -116,23 +123,31 @@ def deserializeSavedData(self, data):
actions = getFieldsInOrder(get_actions(self.context))
schema = get_schema(self.context)

AllFieldsinOrder = schema.namesAndDescriptions()
included_columns_in_savedata = []
for column, field in AllFieldsinOrder:
if "label" not in field.__str__().lower():
included_columns_in_savedata.append(column)

for name, action in actions:
if ISaveData.providedBy(action) and name in storage:
relevant_columns = columns_to_deserialize(action, schema)
savedData = storage[name]
for key, value in savedData.items():
for name in included_columns_in_savedata: # schema.names():
for name in relevant_columns:
value[name] = convertAfterDeserialize(
schema[name], value[name]
)
)
action.setDataRow(int(key), value)


def columns_to_deserialize(action, schema):
AllFieldsinOrder = schema.namesAndDescriptions()
relevant_columns = []
if action.showFields:
relevant_columns = action.showFields
else:
for column, field in AllFieldsinOrder:
if "label" not in field.__str__().lower():
relevant_columns.append(column)
return relevant_columns



def convertAfterDeserialize(field, value):
if ISet.providedBy(field):
return set(value)
Expand Down

0 comments on commit 5cd6857

Please sign in to comment.