async def deserialize_cloud_field(field, value, context): data_context = context if IContentBehavior.implementedBy(context.__class__): field = field.bind(context) context = context.context else: field = field.bind(context) if isinstance(value, dict): try: file_ob = field.get(data_context) except AttributeError: return if file_ob: # update file fields for key, item_value in value.items(): if key in serialize_mappings: setattr(file_ob, serialize_mappings[key], item_value) data_context._p_register() return file_ob else: value = convert_base64_to_binary(value) request = get_current_request() file_manager = get_multi_adapter((context, request, field), IFileManager) val = await file_manager.save_file(partial(_generator, value), content_type=value['content_type'], size=len(value['data'])) return val
def find_field(content, name): if IContentBehavior.implementedBy(content.__class__): content = content.context while content is not None: if IDynamicFields.__identifier__ in content.__behaviors__: behavior = IDynamicFields(content) _fields = behavior.fields or {} if name in _fields: return _fields[name] content = content.__parent__
async def __call__(self, context, request): if IContentBehavior.implementedBy(context.__class__): field = self.field.bind(context) context = context.context else: field = self.field.bind(context) file_manager = getMultiAdapter((context, request, field), IFileManager) val = await file_manager.save_file( self.generator, content_type=self.value['content_type'], size=len(self.value['data'])) return val
async def deserialize_cloud_field(field, value, context): request = get_current_request() value = convert_base64_to_binary(value) if IContentBehavior.implementedBy(context.__class__): field = field.bind(context) context = context.context else: field = field.bind(context) file_manager = get_multi_adapter((context, request, field), IFileManager) val = await file_manager.save_file(partial(_generator, value), content_type=value['content_type'], size=len(value['data'])) return val
async def deserialize_cloud_field(field, value, context): # It supports base64 web value or a dict data_context = context if IContentBehavior.implementedBy(context.__class__): field = field.bind(context) context = context.context else: field = field.bind(context) if isinstance(value, dict): try: file_ob = field.get(data_context) except AttributeError: file_ob = None if file_ob is not None: # update file fields for key, item_value in value.items(): if key in serialize_mappings: setattr(file_ob, serialize_mappings[key], item_value) data_context.register() if "data" in value: value["data"] = base64.b64decode(value["data"]) else: # already updated necessary values return file_ob else: # base64 web value value = convert_base64_to_binary(value) # There is not file and expecting a dict # 'data', 'encoding', 'content-type', 'filename' request = get_current_request() file_manager = get_multi_adapter((context, request, field), IFileManager) content_type = value.get("content_type", value.get("content-type")) filename = value.get("filename", None) val = await file_manager.save_file(partial(_generator, value), content_type=content_type, size=len(value["data"]), filename=filename) return val
async def deserialize_cloud_field(field, value, context): # It supports base64 web value or a dict data_context = context if IContentBehavior.implementedBy(context.__class__): field = field.bind(context) context = context.context else: field = field.bind(context) if isinstance(value, dict): try: file_ob = field.get(data_context) except AttributeError: file_ob = None if file_ob is not None: # update file fields for key, item_value in value.items(): if key in serialize_mappings: setattr(file_ob, serialize_mappings[key], item_value) data_context._p_register() if 'data' in value: value['data'] = base64.b64decode(value['data']) else: # already updated necessary values return file_ob else: # base64 web value value = convert_base64_to_binary(value) # There is not file and expecting a dict # 'data', 'encoding', 'content-type', 'filename' request = get_current_request() file_manager = get_multi_adapter((context, request, field), IFileManager) content_type = value.get('content_type', value.get('content-type')) filename = value.get('filename', None) val = await file_manager.save_file( partial(_generator, value), content_type=content_type, size=len(value['data']), filename=filename) return val