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.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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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''):
|
||||
|
|
Loading…
Add table
Reference in a new issue