Skip to content

Commit d22b269

Browse files
committed
Merge branch 'hotfix/19.29.2'
2 parents 9af2129 + 58d7d6e commit d22b269

File tree

3 files changed

+42
-33
lines changed

3 files changed

+42
-33
lines changed

api/registrations/serializers.py

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from framework.auth.core import Auth
2424
from osf.exceptions import ValidationValueError, NodeStateError
2525
from osf.models import Node, RegistrationSchema
26+
from osf.utils.registrations import strip_registered_meta_comments
2627
from website.settings import ANONYMIZED_TITLES
2728
from framework.sentry import log_exception
2829

@@ -387,15 +388,15 @@ def anonymize_registered_meta(self, obj):
387388
matching ANONYMIZED_TITLES. If present, deletes that question's response
388389
from meta_values.
389390
"""
390-
meta_values = obj.registered_meta.values()[0]
391+
meta_values = strip_registered_meta_comments(obj.registered_meta.values()[0])
392+
391393
if is_anonymized(self.context['request']):
392394
registration_schema = RegistrationSchema.objects.get(_id=obj.registered_schema_id)
393395
for page in registration_schema.schema['pages']:
394396
for question in page['questions']:
395397
if question['title'] in ANONYMIZED_TITLES and meta_values.get(question.get('qid')):
396398
del meta_values[question['qid']]
397399

398-
strip_registered_meta_comments(meta_values)
399400
return meta_values
400401

401402
def check_admin_perms(self, registration, user, validated_data):
@@ -621,33 +622,3 @@ class RegistrationStorageProviderSerializer(NodeStorageProviderSerializer):
621622
kind='folder',
622623
never_embed=True,
623624
)
624-
625-
def strip_registered_meta_comments(messy_dict_or_list):
626-
"""Removes Prereg Challenge comments from a given `registered_meta` dict.
627-
628-
Nothing that uses APIv2 needs these comments:
629-
```
630-
{
631-
"registered_meta": {
632-
"q20": {
633-
"comments": [ ... ], <~~~ THIS
634-
"value": "foo",
635-
"extra": []
636-
},
637-
}
638-
}
639-
```
640-
"""
641-
if isinstance(messy_dict_or_list, list):
642-
for obj in messy_dict_or_list:
643-
strip_registered_meta_comments(obj)
644-
elif isinstance(messy_dict_or_list, dict):
645-
comments = messy_dict_or_list.get('comments', None)
646-
647-
# some schemas have a question named "comments" -- those will have a dict value
648-
if isinstance(comments, list):
649-
del messy_dict_or_list['comments']
650-
651-
# dig into the deeply nested structure
652-
for nested_obj in messy_dict_or_list.values():
653-
strip_registered_meta_comments(nested_obj)

osf/utils/registrations.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import copy
2+
3+
def strip_registered_meta_comments(messy_dict_or_list, in_place=False):
4+
"""Removes Prereg Challenge comments from a given `registered_meta` dict.
5+
6+
Nothing publicly exposed needs these comments:
7+
```
8+
{
9+
"registered_meta": {
10+
"q20": {
11+
"comments": [ ... ], <~~~ THIS
12+
"value": "foo",
13+
"extra": []
14+
},
15+
}
16+
}
17+
```
18+
19+
If `in_place` is truthy, modifies `messy_dict_or_list` and returns it.
20+
Else, returns a deep copy without modifying the given `messy_dict_or_list`
21+
"""
22+
obj = messy_dict_or_list if in_place else copy.deepcopy(messy_dict_or_list)
23+
24+
if isinstance(obj, list):
25+
for nested_obj in obj:
26+
strip_registered_meta_comments(nested_obj, in_place=True)
27+
elif isinstance(obj, dict):
28+
comments = obj.get('comments', None)
29+
30+
# some schemas have a question named "comments" -- those will have a dict value
31+
if isinstance(comments, list):
32+
del obj['comments']
33+
34+
# dig into the deeply nested structure
35+
for nested_obj in obj.values():
36+
strip_registered_meta_comments(nested_obj, in_place=True)
37+
return obj

website/project/views/node.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from framework.exceptions import HTTPError
2121
from osf.models.nodelog import NodeLog
2222
from osf.utils.functional import rapply
23+
from osf.utils.registrations import strip_registered_meta_comments
2324
from osf.utils import sanitize
2425
from osf import features
2526

@@ -762,7 +763,7 @@ def _view_project(node, auth, primary=False,
762763
'registered_from_url': node.registered_from.url if is_registration else '',
763764
'registered_date': iso8601format(node.registered_date) if is_registration else '',
764765
'root_id': node.root._id if node.root else None,
765-
'registered_meta': node.registered_meta,
766+
'registered_meta': strip_registered_meta_comments(node.registered_meta),
766767
'registered_schemas': serialize_meta_schemas(list(node.registered_schema.all())) if is_registration else False,
767768
'is_fork': node.is_fork,
768769
'is_collected': node.is_collected,

0 commit comments

Comments
 (0)