make external collection accept filenames with umlaut characters

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@4025 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2010-09-30 15:00:24 +00:00
parent 7ab2d6abfd
commit 9a6a72eb73
4 changed files with 22 additions and 5 deletions

View file

@ -236,7 +236,11 @@ def normalizeName(baseName):
try:
c = c.encode('ISO8859-15')
except UnicodeEncodeError:
# skip all characters not representable in ISO encoding
# replace all characters not representable in ISO encoding
result.append('_')
continue
except UnicodeDecodeError:
result.append('_')
continue
if c in '._':
# separator and special characters to keep

View file

@ -41,7 +41,7 @@ from zope.traversing.api import getName, getParent
from cybertools.meta.interfaces import IOptions
from cybertools.text import mimetypes
from cybertools.typology.interfaces import IType
from loops.common import AdapterBase, adapted
from loops.common import AdapterBase, adapted, normalizeName
from loops.interfaces import IResource, IConcept
from loops.integrator.interfaces import IExternalCollection
from loops.integrator.interfaces import IExternalCollectionProvider
@ -112,7 +112,7 @@ class ExternalCollectionAdapter(AdapterBase):
for r in self.newResources:
self.context.assignResource(r)
for addr in old:
if addr not in oldFound:
if str(addr) not in oldFound:
# not part of the collection any more
# TODO: only remove from collection but keep object?
self.remove(old[addr])
@ -204,7 +204,7 @@ class DirectoryCollectionProvider(object):
def getDirectory(self, client):
baseAddress = client.baseAddress or ''
address = client.address or ''
return os.path.join(baseAddress, address)
return str(os.path.join(baseAddress, address))
def generateName(self, container, name):
name = INameChooser(container).chooseName(name, None)
@ -217,5 +217,8 @@ class DirectoryCollectionProvider(object):
if ext.lower() in mimetypes.extensions.values():
title = base
if not isinstance(title, unicode):
title = title.decode('UTF-8')
try:
title = title.decode('UTF-8')
except UnicodeDecodeError:
title = title.decode('CP852')
return title

View file

@ -127,6 +127,8 @@ class OfficeFile(ExternalFileAdapter):
def parseDate(s):
if not s:
return None
dt = datetime(*strptime(s, '%Y-%m-%dT%H:%M:%SZ')[:6]) + timedelta(hours=2)
return date(dt.year, dt.month, dt.day)
#return date(*strptime(s, '%Y-%m-%dT%H:%M:%SZ')[:3])

View file

@ -361,6 +361,14 @@ class IResource(ILoopsObject, IPotentialTarget):
available via a view or a concept.
"""
resourceType = schema.Choice(
title=_(u'Resource Type'),
description=_(u"The type of the resource, specified by a relation to "
"a concept of type 'type'."),
default=None,
source="loops.resourceTypeSource",
required=False)
class IDocumentSchema(IResourceSchema):