fixes for handling external files and office files with versioning

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3960 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2010-08-16 08:27:49 +00:00
parent 89dcb9943a
commit 95417dab81
3 changed files with 26 additions and 1 deletions

View file

@ -38,6 +38,7 @@ from zope.interface import implements, Attribute
from zope.schema.interfaces import IField
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
@ -47,6 +48,7 @@ from loops.integrator.interfaces import IExternalCollectionProvider
from loops.resource import Resource
from loops.setup import addAndConfigureObject
from loops.type import TypeInterfaceSourceList
from loops.versioning.interfaces import IVersionable
TypeInterfaceSourceList.typeInterfaces += (IExternalCollection,)
@ -74,11 +76,21 @@ class ExternalCollectionAdapter(AdapterBase):
def update(self):
existing = self.context.getResources()
old = dict((adapted(obj).externalAddress, obj) for obj in existing)
versions = set()
if self.useVersioning:
for obj in old.values():
for vaddr, vobj, vid in self.getVersions(obj):
print '###', vaddr, vobj, vid
versions.add(vaddr)
new = []
oldFound = []
provider = component.getUtility(IExternalCollectionProvider,
name=self.providerName or '')
#print '*** old', old, versions, self.lastUpdated
for addr, mdate in provider.collect(self):
#print '***', addr, mdate
if addr in versions:
continue
if addr in old:
# may be it would be better to return a file's hash
# for checking for changes...
@ -91,6 +103,7 @@ class ExternalCollectionAdapter(AdapterBase):
notify(ObjectModifiedEvent(obj))
else:
new.append(addr)
#print '*** new', new
if new:
self.newResources = provider.createExtFileObjects(self, new)
for r in self.newResources:
@ -113,6 +126,16 @@ class ExternalCollectionAdapter(AdapterBase):
def resourceManager(self):
return self.context.getLoopsRoot().getResourceManager()
@Lazy
def useVersioning(self):
if IOptions(self.context.getLoopsRoot())('useVersioning'):
return True
def getVersions(self, obj):
versionable = IVersionable(obj)
return [(adapted(v).externalAddress, v, vid)
for vid, v in versionable.versions.items() if vid != '1.1']
class DirectoryCollectionProvider(object):
""" A utility that provides access to files in a directory.

View file

@ -23,10 +23,11 @@ $Id$
"""
from datetime import date
from time import strptime
from logging import getLogger
from lxml import etree
import os
import shutil
from time import strptime
from zipfile import ZipFile
from zope.cachedescriptors.property import Lazy
from zope import component

View file

@ -158,6 +158,7 @@ class VersionableResource(object):
adaptedObj.externalAddress = newExtAddr
adaptedObj.data = adaptedContext.data
adaptedObj.externalAddress = newExtAddr # trigger post-processing
#print '***', adaptedObj.externalAddress, obj.__name__
return obj
def createVersion(self, level=1, comment=u''):