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:
parent
7ab2d6abfd
commit
9a6a72eb73
4 changed files with 22 additions and 5 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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])
|
||||||
|
|
|
@ -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):
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue