# HG changeset patch # User casties # Date 1311956886 -7200 # Node ID 7f0e2b656e5c961c91c749ac71bdfb27f6405a20 # Parent a29665fa9c62e57081c94c734d39ce8807c4c9ca more work for non-bib metadata diff -r a29665fa9c62 -r 7f0e2b656e5c MetaData.py --- a/MetaData.py Fri Jul 29 14:45:13 2011 +0200 +++ b/MetaData.py Fri Jul 29 18:28:06 2011 +0200 @@ -74,8 +74,7 @@ """returns the subtree of the dom rooted in this element""" if dom is None: # get from server - md = self.getMDFromPathOrUrl(path) - dom = ET.fromstring(md) + md = self.getDomFromPathOrUrl(path) # ElementTree doesn't like absolute paths # lets assume dom is rooted in the first element @@ -84,7 +83,7 @@ elem = dom.find(xpath) return elem - def getData(self, path=None, dom=None, normalizeNames=True): + def getData(self, path=None, dom=None, normalizeNames=True, recursive=0): """returns dict with attributes and child elements from corresponding tag""" data = {} attr = {} @@ -104,10 +103,10 @@ # put all subelements in dict if normalizeNames: for e in elem: - data[normalizeFieldName(e.tag)] = getText(e) + data[normalizeFieldName(e.tag)] = getText(e, recursive=recursive) else: for e in elem: - data[e.tag] = getText(e) + data[e.tag] = getText(e, recursive=recursive) return data diff -r a29665fa9c62 -r 7f0e2b656e5c MetaDataFolder.py --- a/MetaDataFolder.py Fri Jul 29 14:45:13 2011 +0200 +++ b/MetaDataFolder.py Fri Jul 29 18:28:06 2011 +0200 @@ -6,8 +6,11 @@ import urlparse import logging +import xml.etree.ElementTree as ET + from MetaDataMapping import MetaDataMapping from MetaData import MetaData +from SrvTxtUtils import getHttpData, getText def normalizeBibField(bt, underscore=True): """returns normalised bib type for looking up mappings""" @@ -77,18 +80,22 @@ {'label':'Main Config','action':'changeMetaDataFolderForm'}, ) - def __init__(self,id,title='',metaDataServerUrl=''): + metaDataServerUrl = "http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Texter?fn=%s" + """URL of metadata server. %s replaced by file path.""" + + def __init__(self,id,title='',metaDataServerUrl=None): """initialize a new instance""" self.id = id self.title = title - self.metaDataServerUrl = metaDataServerUrl + if metaDataServerUrl: + self.metaDataServerUrl = metaDataServerUrl def getMDFromPathOrUrl(self,path): """returns contents of metadata file from server as text""" if not path: logging.error("getMDFromPathOrUrl: empty path!") - return "" + return None parsedurl = urlparse.urlparse(path) if parsedurl[0] != "": @@ -106,6 +113,15 @@ md = getHttpData(url) return md + def getDomFromPathOrUrl(self, path): + """returns DOM of metadata file at given path""" + dom = None + data = self.getMDFromPathOrUrl(path) + if data: + dom = ET.fromstring(data) + + return dom + def getXmlPathData(self, xmlpath, path=None, dom=None): """returns contents of element at xmlpath as dict""" logging.error("getXmlPathData(%s)"%xmlpath) @@ -120,10 +136,18 @@ logging.error("getXmlPathData: MetaData element at '%s' not found!"%xmlpath) return None + def getResourceData(self, path=None, dom=None): + """returns contents of resource tag as dict""" + return self.getXmlPathData('resource', path=path, dom=dom) + def getTexttoolData(self, path=None, dom=None): """returns contents of texttool tag as dict""" return self.getXmlPathData('resource/meta/texttool', path=path, dom=dom) + def getAccessData(self, path=None, dom=None): + """returns contents of access tag as dict""" + return self.getXmlPathData('resource/meta/access-conditions/access', path=path, dom=dom) + def getBibData(self, path=None, dom=None): """returns contents of bib tag as dict""" return self.resource.meta.bib.getData(path=path, dom=dom) diff -r a29665fa9c62 -r 7f0e2b656e5c SrvTxtUtils.py --- a/SrvTxtUtils.py Fri Jul 29 14:45:13 2011 +0200 +++ b/SrvTxtUtils.py Fri Jul 29 18:28:06 2011 +0200 @@ -6,7 +6,7 @@ import logging -srvTxtUtilsVersion = "1.1" +srvTxtUtilsVersion = "1.2" def getInt(number, default=0): """returns always an int (0 in case of problems)""" @@ -22,14 +22,18 @@ except: return default -def getText(node): +def getText(node, recursive=0): """returns all text content of a node and its subnodes""" if node is None: - return "" + return '' + # ElementTree: - text = node.text or "" + text = node.text or '' for e in node: - text += gettext(e) + if recursive: + text += getText(e) + else: + text += e.text or '' if e.tail: text += e.tail diff -r a29665fa9c62 -r 7f0e2b656e5c zpt/changeMetaDataFolder.zpt --- a/zpt/changeMetaDataFolder.zpt Fri Jul 29 14:45:13 2011 +0200 +++ b/zpt/changeMetaDataFolder.zpt Fri Jul 29 18:28:06 2011 +0200 @@ -6,7 +6,7 @@
Title:

- Server for XML files (e.g. url of digilib Texter-servlet)
+ Server for XML files (e.g. url of digilib Texter-servlet. '%s' replaced with file path)