import socket import urllib import xml.dom.minidom def getText(nodelist): rc = "" for node in nodelist: if node.nodeType == node.TEXT_NODE: rc = rc + node.data return rc def readFieldFromXML(meta_url,parent,field): """lesespezifisches metadatum""" try: dom=xml.dom.minidom.parse(meta_url) except: try: fh=urllib.urlopen(meta_url) dom=xml.dom.minidom.parse(fh) except: return None if not dom: return None parent=dom.getElementsByTagName(parent) if not parent: return None field=parent[0].getElementsByTagName(field) if not field: return None return getText(field[0].childNodes) def urlopen(url): """urlopen mit timeout""" socket.setdefaulttimeout(2) ret=urllib.urlopen(url) socket.setdefaulttimeout(5) return ret # urlopener = urllib.URLopener() # # try: # con = urlopener.open(url) # return con # except timeoutsocket.Timeout: # return None displayTypes = ['ZSQLExtendFolder','ZSQLBibliography','ECHO_group','ECHO_collection','ECHO_resource','ECHO_link','ECHO_sqlElement','ECHO_pageTemplate','ImageCollectionIFrame','VLP_resource','VLP_essay','ECHO_ZCatalogElement'] def checkOnlyOneInGroup(object): """check if object is a group and if it containt only one element it return this element""" displayedObjects=object.ZopeFind(object,obj_metatypes=displayTypes) if len(displayedObjects)==1: # nur ein Object dann redirect auf dieses Object return displayedObjects[0][1] else: return object def getSubCols(self,sortfield="weight",subColTypes= displayTypes): ids=[] displayedObjects=self.ZopeFind(self,obj_metatypes=subColTypes) for entry in displayedObjects: object=entry[1] try: if object.meta_type in subColTypes: ids.append(object) except: """nothing""" try: sortfield=self.sortfield except: """nothing""" tmplist=[] for x in ids: if hasattr(x,sortfield): try: x=int(x) except: """nothing""" tmp=getattr(x,sortfield) else: tmp=10000000 tmplist.append((tmp,x)) tmplist.sort() return [x for (key,x) in tmplist]