diff --git a/browser/resource.py b/browser/resource.py index fc20f2b..037088e 100644 --- a/browser/resource.py +++ b/browser/resource.py @@ -59,14 +59,14 @@ renderingFactories = { class CustomFileWidget(FileWidget): def hasInput(self): - print 'hasInput', self.request.form.get(self.name) if not self.request.form.get(self.name): return False + return True class ResourceEditForm(EditForm): - @Lazy + @property def typeInterface(self): return IType(self.context).typeInterface @@ -78,8 +78,8 @@ class ResourceEditForm(EditForm): omit = [f for f in typeInterface if f in IBaseResource] fields = FormFields(fields.omit(*omit), typeInterface) dataField = fields['data'] - if IBytes.providedBy(dataField): - dataField.customWidget = CustomFileWidget + if IBytes.providedBy(dataField.field): + dataField.custom_widget = CustomFileWidget return fields def setUpWidgets(self, ignore_request=False): diff --git a/interfaces.py b/interfaces.py index 50d5173..db5afc9 100644 --- a/interfaces.py +++ b/interfaces.py @@ -608,12 +608,26 @@ class IFile(IResourceAdapter, IResourceSchema): may be downloaded instead. """ + data = schema.Bytes( + title=_(u'Data'), + description=_(u'Resource raw data'), + default='', + missing_value='', + required=False) + class IExternalFile(IFile): """ A file whose content (data attribute) is not stored in the ZODB but somewhere else, typically in the file system. """ + data = schema.Bytes( + title=_(u'Data'), + description=_(u'Resource raw data'), + default='', + missing_value='', + required=False) + class IImage(IResourceAdapter): """ A media asset that may be embedded in a (web) page as an image. diff --git a/resource.py b/resource.py index 141e681..a9b4857 100644 --- a/resource.py +++ b/resource.py @@ -323,8 +323,6 @@ class ExternalFileAdapter(FileAdapter): return self.context.__name__ def setData(self, data): - if not data: - return storageParams = self.storageParams storageName = self.storageName storage = component.getUtility(IExternalStorage, name=storageName)