convert external addresses (e.g. file names) with special characters smoothly to/from unicode
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@4042 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
77085d7f3c
commit
499f86848b
1 changed files with 31 additions and 5 deletions
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Helmut Merz helmutm@cy55.de
|
# Copyright (c) 2010 Helmut Merz helmutm@cy55.de
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@ -25,6 +25,7 @@ $Id$
|
||||||
from zope.interface import Interface, Attribute
|
from zope.interface import Interface, Attribute
|
||||||
from zope.i18nmessageid import MessageFactory
|
from zope.i18nmessageid import MessageFactory
|
||||||
from zope import schema
|
from zope import schema
|
||||||
|
from zope.schema._bootstrapinterfaces import StopValidation
|
||||||
from zope.app.container.constraints import contains, containers
|
from zope.app.container.constraints import contains, containers
|
||||||
from zope.app.container.interfaces import IContainer, IOrderedContainer
|
from zope.app.container.interfaces import IContainer, IOrderedContainer
|
||||||
from zope.app.file.interfaces import IImage as IBaseAsset
|
from zope.app.file.interfaces import IImage as IBaseAsset
|
||||||
|
@ -33,6 +34,7 @@ from zope.size.interfaces import ISized
|
||||||
|
|
||||||
from cybertools.relation.interfaces import IDyadicRelation
|
from cybertools.relation.interfaces import IDyadicRelation
|
||||||
from cybertools.tracking.interfaces import ITrackingStorage
|
from cybertools.tracking.interfaces import ITrackingStorage
|
||||||
|
from cybertools.util.format import toStr, toUnicode
|
||||||
from loops import util
|
from loops import util
|
||||||
from loops.util import _
|
from loops.util import _
|
||||||
|
|
||||||
|
@ -747,6 +749,27 @@ class IFile(IResourceAdapter, IResourceSchema):
|
||||||
localFilename = Attribute('Filename provided during upload.')
|
localFilename = Attribute('Filename provided during upload.')
|
||||||
|
|
||||||
|
|
||||||
|
# external file stuff
|
||||||
|
|
||||||
|
|
||||||
|
class ExternalAddressField(schema.TextLine):
|
||||||
|
|
||||||
|
def __init__(self, *args, **kw):
|
||||||
|
self.encoding = kw.pop('encoding', 'UTF-8')
|
||||||
|
super(ExternalAddressField, self).__init__(*args, **kw)
|
||||||
|
|
||||||
|
def get(self, obj):
|
||||||
|
value = super(ExternalAddressField, self).get(obj)
|
||||||
|
return toUnicode(value, self.encoding)
|
||||||
|
|
||||||
|
def set(self, obj, value):
|
||||||
|
value = toStr(value, self.encoding)
|
||||||
|
super(ExternalAddressField, self).set(obj, value)
|
||||||
|
|
||||||
|
def fromUnicode(self, value):
|
||||||
|
return toStr(value, self.encoding)
|
||||||
|
|
||||||
|
|
||||||
class IStorageInfo(Interface):
|
class IStorageInfo(Interface):
|
||||||
|
|
||||||
storageName = schema.BytesLine(
|
storageName = schema.BytesLine(
|
||||||
|
@ -765,11 +788,11 @@ class IStorageInfo(Interface):
|
||||||
missing_value='',
|
missing_value='',
|
||||||
required=False)
|
required=False)
|
||||||
|
|
||||||
externalAddress = schema.BytesLine(
|
externalAddress = ExternalAddressField(
|
||||||
title=_(u'External Address'),
|
title=_(u'External Address'),
|
||||||
description=_(u'The full address for accessing the object '
|
description=_(u'The full address for accessing the object '
|
||||||
'on the external storage, e.g. a filename or path.'),
|
'on the external storage, e.g. a filename or path.'),
|
||||||
default='',
|
default=u'',
|
||||||
missing_value='',
|
missing_value='',
|
||||||
required=False)
|
required=False)
|
||||||
|
|
||||||
|
@ -786,11 +809,11 @@ class IExternalFile(IFile):
|
||||||
missing_value='',
|
missing_value='',
|
||||||
required=False)
|
required=False)
|
||||||
|
|
||||||
externalAddress = schema.BytesLine(
|
externalAddress = ExternalAddressField(
|
||||||
title=_(u'External Address'),
|
title=_(u'External Address'),
|
||||||
description=_(u'The full address for accessing the object '
|
description=_(u'The full address for accessing the object '
|
||||||
'on the external storage, e.g. a filename or path.'),
|
'on the external storage, e.g. a filename or path.'),
|
||||||
default='',
|
default=u'',
|
||||||
missing_value='',
|
missing_value='',
|
||||||
required=False)
|
required=False)
|
||||||
|
|
||||||
|
@ -803,6 +826,9 @@ class IExternalFile(IFile):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
# specialized resources
|
||||||
|
|
||||||
|
|
||||||
class IImage(IResourceAdapter):
|
class IImage(IResourceAdapter):
|
||||||
""" A media asset that may be embedded in a (web) page as an image.
|
""" A media asset that may be embedded in a (web) page as an image.
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Add table
Reference in a new issue