def demarshall(self, instance, data, **kwargs): # We don't want to pass file forward. if 'file' in kwargs: if not data: # TODO Yuck! Shouldn't read the whole file, never. # OTOH, if you care about large files, you should be # using the PrimaryFieldMarshaller or something # similar. data = kwargs['file'].read() del kwargs['file'] headers, body = parseRFC822(data) query = {} for k, v in headers.items(): if not k.startswith("query"): continue else: index = int(k[5]) sub_key = k.split("_")[1] query_part = query.get(index, {}) query_part[sub_key] = v query[index] = query_part del headers[k] query = [facet[1] for facet in sorted(query.items())] header = formatRFC822Headers(headers.items()) data = '%s\n\n%s' % (header, body) try: return RFC822Marshaller.demarshall(self, instance, data, **kwargs) finally: instance.query = query
def marshall(self, instance, **kwargs): content_type, length, data = RFC822Marshaller.marshall(self, instance, **kwargs) headers, body = parseRFC822(data) headers = headers.items() for i, query in enumerate(instance.query): for key, value in query.items(): if isinstance(value, list): value = "\n".join(value) header_key = 'query%d_%s' % (i, key) headers.append((header_key, value)) header = formatRFC822Headers(headers) data = '%s\n\n%s' % (header, body) length = len(data) return (content_type, length, data)
), StringField( name='title', required=1, searchable=1, default='', accessor='Title', widget=StringWidget( label_msgid='label_title', visible={'view': 'invisible'}, i18n_domain='plone', ), ), ), marshall=RFC822Marshaller()) class BaseObject(Referenceable): security = ClassSecurityInfo() # Protect AttributeStorage-based attributes. See the docstring of # AttributeValidator for the low-down. if ATTRIBUTE_SECURITY: attr_security = AttributeValidator() security.setDefaultAccess(attr_security) # Delete so it cannot be accessed anymore. del attr_security schema = content_type