From 95417dab81250da346fb2667c17dad70fcf77eb0 Mon Sep 17 00:00:00 2001 From: helmutm Date: Mon, 16 Aug 2010 08:27:49 +0000 Subject: [PATCH] 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 --- integrator/collection.py | 23 +++++++++++++++++++++++ integrator/office/base.py | 3 ++- versioning/versionable.py | 1 + 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/integrator/collection.py b/integrator/collection.py index 9e4dbca..3d608d3 100644 --- a/integrator/collection.py +++ b/integrator/collection.py @@ -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. diff --git a/integrator/office/base.py b/integrator/office/base.py index 21c2f83..79254d1 100644 --- a/integrator/office/base.py +++ b/integrator/office/base.py @@ -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 diff --git a/versioning/versionable.py b/versioning/versionable.py index 4130913..23fd04c 100644 --- a/versioning/versionable.py +++ b/versioning/versionable.py @@ -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''):