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