Skip to content

Commit c165823

Browse files
authored
refactoring monkeypatch formsupport (#83)
* refactoring monkeypatch formsupport * black
1 parent 8b4662d commit c165823

File tree

2 files changed

+32
-59
lines changed

2 files changed

+32
-59
lines changed

CHANGES.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ Changelog
44
5.0.19 (unreleased)
55
-------------------
66

7-
- Nothing changed yet.
7+
- Refactoring patch per waiting list
8+
[mamico]
89

910

1011
5.0.18 (2025-10-07)

src/design/plone/policy/patches/collective_volto_formsupport.py

Lines changed: 30 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
from datetime import datetime
2525
from io import StringIO
2626
from plone.protect.interfaces import IDisableCSRFProtection
27-
from plone.restapi.serializer.converters import json_compatible
2827
from souper.soup import Record
2928
from zExceptions import BadRequest
3029
from zope.component import getMultiAdapter
@@ -38,68 +37,41 @@
3837
SKIP_ATTRS = ["block_id", "fields_labels", "fields_order"]
3938

4039

41-
def get_data(self):
42-
store = getMultiAdapter((self.context, self.request), IFormDataStore)
43-
sbuf = StringIO()
44-
fixed_columns = ["date"]
45-
columns = []
46-
# start patch
47-
custom_colums = []
48-
if self.form_block.get("limit", None) is not None:
49-
limit = int(self.form_block["limit"])
50-
if limit > -1:
51-
custom_colums.append("waiting_list")
52-
# end patch
53-
54-
rows = []
55-
# start patch
56-
for index, item in enumerate(reversed(store.search())):
57-
# end patch
58-
data = {}
59-
fields_labels = item.attrs.get("fields_labels", {})
60-
for k in self.get_ordered_keys(item):
61-
if k in SKIP_ATTRS:
62-
continue
63-
value = item.attrs.get(k, None)
64-
label = fields_labels.get(k, k)
65-
if label not in columns and label not in fixed_columns:
66-
columns.append(label)
67-
data[label] = json_compatible(value)
68-
for k in fixed_columns:
69-
# add fixed columns values
70-
value = item.attrs.get(k, None)
71-
data[k] = json_compatible(value)
72-
73-
# start patch
74-
if "waiting_list" in custom_colums:
75-
data.update(
76-
{
77-
"waiting_list": (
78-
translate(_("yes_label", default="Yes"))
79-
if not (index < limit)
80-
else translate(_("no_label", default="No"))
81-
)
82-
}
83-
)
84-
# end patch
85-
86-
rows.append(data)
87-
columns.extend(fixed_columns)
88-
columns.extend(custom_colums)
89-
writer = csv.DictWriter(sbuf, fieldnames=columns, quoting=csv.QUOTE_ALL)
90-
writer.writeheader()
91-
for row in rows:
92-
writer.writerow(row)
93-
res = sbuf.getvalue()
94-
sbuf.close()
95-
return res
40+
def wrapper_get_data(orig):
41+
def get_data(self):
42+
res = orig(self)
43+
has_waiting_list = False
44+
if self.form_block.get("limit") is not None:
45+
limit = int(self.form_block["limit"])
46+
if limit > -1:
47+
has_waiting_list = True
48+
if has_waiting_list:
49+
reader = csv.DictReader(StringIO(res))
50+
columns = reader.fieldnames + ["waiting_list"]
51+
sbuf = StringIO()
52+
writer = csv.DictWriter(sbuf, fieldnames=columns, quoting=csv.QUOTE_ALL)
53+
writer.writeheader()
54+
for idx, row in enumerate(reader):
55+
if idx >= limit:
56+
row["waiting_list"] = translate(_("yes_label", default="Yes"))
57+
else:
58+
row["waiting_list"] = translate(_("no_label", default="No"))
59+
writer.writerow(row)
60+
res = sbuf.getvalue()
61+
sbuf.close()
62+
return res
63+
else:
64+
return res
65+
66+
return get_data
9667

9768

9869
def patch_FormDataExportGet_get_data():
9970
logger.info(
100-
"Patch get_data methos of class FormDataExporterGet from collective.volto.formsupport" # noqa
71+
"Patch collective.volto.formsupport.restapi.services.form_data.csv.FormDataExportGet.get_data "
72+
"addding waiting_list feature"
10173
)
102-
FormDataExportGet.get_data = get_data
74+
FormDataExportGet.get_data = wrapper_get_data(FormDataExportGet.get_data)
10375

10476

10577
def reply(self):

0 commit comments

Comments
 (0)