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
	
	 helmutm
						helmutm