make access fault-tolerant - show error message; show top-level link on breadcrumbs again
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2796 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
		
							parent
							
								
									95a372807e
								
							
						
					
					
						commit
						ea156942ec
					
				
					 2 changed files with 33 additions and 7 deletions
				
			
		|  | @ -78,11 +78,12 @@ class ItemView(BaseView): | |||
|     @property | ||||
|     def breadCrumbs(self): | ||||
|         parents = list(self.context.parents) | ||||
|         for p in reversed(parents[:-1]): | ||||
|         #for p in reversed(parents[:-1]): | ||||
|         for p in reversed(parents): | ||||
|             view = ItemView(p, self.request, self.parentView) | ||||
|             yield dict(url=view.url, title=view.title) | ||||
|         #if parents: | ||||
|         #    yield dict(url=self.url, title=self.title) | ||||
|         if parents: | ||||
|             yield dict(url=self.url, title=self.title) | ||||
| 
 | ||||
| 
 | ||||
| class BSCWView(BaseView): | ||||
|  | @ -100,6 +101,8 @@ class BSCWView(BaseView): | |||
| 
 | ||||
|     @Lazy | ||||
|     def itemMacro(self): | ||||
|         if self.remoteProxy is None: | ||||
|             return None | ||||
|         typeName = self.remoteProxy.itemType.lower() | ||||
|         return self.viewTemplate.macros.get(typeName, self.defaultMacro) | ||||
| 
 | ||||
|  | @ -115,6 +118,8 @@ class BSCWView(BaseView): | |||
| 
 | ||||
|     @Lazy | ||||
|     def item(self): | ||||
|         if self.remoteProxy is None: | ||||
|             return None | ||||
|         return self.itemView(self.remoteProxy, self.request, self) | ||||
| 
 | ||||
|     def content(self): | ||||
|  |  | |||
|  | @ -22,10 +22,11 @@ Access to objects in a BSCW repository. | |||
| $Id$ | ||||
| """ | ||||
| 
 | ||||
| import logging | ||||
| import os | ||||
| from datetime import datetime | ||||
| from time import strptime | ||||
| from xmlrpclib import ServerProxy | ||||
| from xmlrpclib import ServerProxy, Fault | ||||
| from zope import component | ||||
| from zope.app.file.image import getImageInfo | ||||
| from zope.cachedescriptors.property import Lazy | ||||
|  | @ -83,13 +84,25 @@ class BSCWConnection(object): | |||
|             self.baseURL, self.rootId = url.rsplit('/', 1) | ||||
| 
 | ||||
|     def getItem(self, address, nested=True): | ||||
|         return self.server.get_attributes(address, standardAttributes, 1, nested) | ||||
|         try: | ||||
|             item = self.server.get_attributes(address, standardAttributes, 1, nested) | ||||
|         except Fault, excp: | ||||
|             logging.getLogger('cybertools.integrator.bscw').warn(str(excp)) | ||||
|             item = None | ||||
|         except Exception, excp: | ||||
|             logging.getLogger('cybertools.integrator.bscw').error(str(excp)) | ||||
|             item = None | ||||
|         return item | ||||
| 
 | ||||
|     def getProxy(self, item=None, address=None, parentPath='', nested=True): | ||||
|         if item is None: | ||||
|             if address is None: | ||||
|                 address = self.rootId | ||||
|             item = self.getItem(address, nested=nested)[0] | ||||
|             items = self.getItem(address, nested=nested) | ||||
|             if items: | ||||
|                 item = items[0] | ||||
|             else: | ||||
|                 return None | ||||
|         address = item['id'] | ||||
|         itemType = item['__class__'].split('.')[-1] | ||||
|         internalPath = '/'.join((parentPath, address)).strip('/') | ||||
|  | @ -220,7 +233,15 @@ class File(BSCWProxyBase, File): | |||
|     contentType = None | ||||
| 
 | ||||
|     def getData(self, num=None): | ||||
|         return self.server.get_document() | ||||
|         try: | ||||
|             data = self.server.get_document() | ||||
|         except Fault, excp: | ||||
|             logging.getLogger('cybertools.integrator.bscw').warn(str(excp)) | ||||
|             item = None | ||||
|         except Exception, excp: | ||||
|             logging.getLogger('cybertools.integrator.bscw').error(str(excp)) | ||||
|             item = None | ||||
|         return data | ||||
|     data = property(getData) | ||||
| 
 | ||||
|     def getSize(self): | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 helmutm
						helmutm