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: try:
c = c.encode('ISO8859-15') c = c.encode('ISO8859-15')
except UnicodeEncodeError: 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 continue
if c in '._': if c in '._':
# separator and special characters to keep # 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.meta.interfaces import IOptions
from cybertools.text import mimetypes from cybertools.text import mimetypes
from cybertools.typology.interfaces import IType 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.interfaces import IResource, IConcept
from loops.integrator.interfaces import IExternalCollection from loops.integrator.interfaces import IExternalCollection
from loops.integrator.interfaces import IExternalCollectionProvider from loops.integrator.interfaces import IExternalCollectionProvider
@ -112,7 +112,7 @@ class ExternalCollectionAdapter(AdapterBase):
for r in self.newResources: for r in self.newResources:
self.context.assignResource(r) self.context.assignResource(r)
for addr in old: for addr in old:
if addr not in oldFound: if str(addr) not in oldFound:
# not part of the collection any more # not part of the collection any more
# TODO: only remove from collection but keep object? # TODO: only remove from collection but keep object?
self.remove(old[addr]) self.remove(old[addr])
@ -204,7 +204,7 @@ class DirectoryCollectionProvider(object):
def getDirectory(self, client): def getDirectory(self, client):
baseAddress = client.baseAddress or '' baseAddress = client.baseAddress or ''
address = client.address or '' address = client.address or ''
return os.path.join(baseAddress, address) return str(os.path.join(baseAddress, address))
def generateName(self, container, name): def generateName(self, container, name):
name = INameChooser(container).chooseName(name, None) name = INameChooser(container).chooseName(name, None)
@ -217,5 +217,8 @@ class DirectoryCollectionProvider(object):
if ext.lower() in mimetypes.extensions.values(): if ext.lower() in mimetypes.extensions.values():
title = base title = base
if not isinstance(title, unicode): if not isinstance(title, unicode):
title = title.decode('UTF-8') try:
title = title.decode('UTF-8')
except UnicodeDecodeError:
title = title.decode('CP852')
return title return title

View file

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