Augment fields in content list item

This commit is contained in:
Christian Cueni 2019-07-17 11:33:20 +02:00
parent 251c05abad
commit 599344e4be
2 changed files with 57 additions and 49 deletions

View File

@ -107,7 +107,7 @@
{ {
text_block, text_block,
content_list_item: [contents...], content_list_item: [contents...],
contentlist_item: [contents...], content_list_item: [contents...],
text_block text_block
} becomes } becomes
{ {

View File

@ -18,20 +18,26 @@ class GenericStreamFieldType(Scalar):
@staticmethod @staticmethod
def serialize(stream_value): def serialize(stream_value):
stream_data = stream_value.stream_data stream_data = stream_value.stream_data
return augment_fields(stream_data)
for d in stream_data: # by_api = stream_value.stream_block.get_api_representation(stream_value)
if isinstance(d, dict): # return by_api
_type = d['type']
def augment_fields(stream_data):
for data in stream_data:
if isinstance(data, dict):
_type = data['type']
if _type == 'image_block': if _type == 'image_block':
_value = d['value'] _value = data['value']
value = { value = {
# 'value': _value, # 'value': _value,
# 'id': d['id'], # 'id': d['id'],
'path': Image.objects.get(id=_value).file.url 'path': Image.objects.get(id=_value).file.url
} }
d['value'] = value data['value'] = value
if _type == 'assignment': if _type == 'assignment':
_value = d['value'] _value = data['value']
assignment_id = _value['assignment_id'] assignment_id = _value['assignment_id']
try: try:
assignment = Assignment.objects.get(pk=assignment_id) assignment = Assignment.objects.get(pk=assignment_id)
@ -40,16 +46,16 @@ class GenericStreamFieldType(Scalar):
'assignment': assignment.assignment, 'assignment': assignment.assignment,
'id': to_global_id('AssignmentNode', assignment.pk) 'id': to_global_id('AssignmentNode', assignment.pk)
} }
d['value'] = value data['value'] = value
except Assignment.DoesNotExist: except Assignment.DoesNotExist:
logger.error('Assignment {} does not exist'.format(assignment_id)) logger.error('Assignment {} does not exist'.format(assignment_id))
if _type == 'basic_knowledge' or _type == 'instrument': if _type == 'basic_knowledge' or _type == 'instrument':
_value = d['value'] _value = data['value']
basic_knowledge = BasicKnowledge.objects.get(pk=_value['basic_knowledge']) basic_knowledge = BasicKnowledge.objects.get(pk=_value['basic_knowledge'])
_value.update({ _value.update({
'slug': basic_knowledge.slug 'slug': basic_knowledge.slug
}) })
d['value'] = _value data['value'] = _value
# value = dict(d['value']) # value = dict(d['value'])
# if 'document' in value: # if 'document' in value:
@ -65,12 +71,14 @@ class GenericStreamFieldType(Scalar):
# if 'image' in value: # if 'image' in value:
# value['image'] = value['image'].file.url # value['image'] = value['image'].file.url
return stream_data if _type == 'content_list_item':
item_data = data['value']
data['value'] = augment_fields(item_data)
# by_api = stream_value.stream_block.get_api_representation(stream_value) return stream_data
# return by_api
@convert_django_field.register(StreamField) @convert_django_field.register(StreamField)
def convert_stream_field(field, registry=None): def convert_stream_field(field, registry=None):
return GenericStreamFieldType(description=field.help_text, required=not field.null) return GenericStreamFieldType(description=field.help_text, required=not field.null)