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

View file

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

View file

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