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:
parent
89dcb9943a
commit
95417dab81
3 changed files with 26 additions and 1 deletions
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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''):
|
||||||
|
|
Loading…
Add table
Reference in a new issue