comparison MetaDataFolder.py @ 12:7f0e2b656e5c

more work for non-bib metadata
author casties
date Fri, 29 Jul 2011 18:28:06 +0200
parents a29665fa9c62
children 281d223aa361
comparison
equal deleted inserted replaced
11:a29665fa9c62 12:7f0e2b656e5c
4 from AccessControl import ClassSecurityInfo 4 from AccessControl import ClassSecurityInfo
5 import os.path 5 import os.path
6 import urlparse 6 import urlparse
7 import logging 7 import logging
8 8
9 import xml.etree.ElementTree as ET
10
9 from MetaDataMapping import MetaDataMapping 11 from MetaDataMapping import MetaDataMapping
10 from MetaData import MetaData 12 from MetaData import MetaData
13 from SrvTxtUtils import getHttpData, getText
11 14
12 def normalizeBibField(bt, underscore=True): 15 def normalizeBibField(bt, underscore=True):
13 """returns normalised bib type for looking up mappings""" 16 """returns normalised bib type for looking up mappings"""
14 bt = bt.strip().replace(' ', '-').lower() 17 bt = bt.strip().replace(' ', '-').lower()
15 if underscore: 18 if underscore:
75 security=ClassSecurityInfo() 78 security=ClassSecurityInfo()
76 manage_options = Folder.manage_options+( 79 manage_options = Folder.manage_options+(
77 {'label':'Main Config','action':'changeMetaDataFolderForm'}, 80 {'label':'Main Config','action':'changeMetaDataFolderForm'},
78 ) 81 )
79 82
80 def __init__(self,id,title='',metaDataServerUrl=''): 83 metaDataServerUrl = "http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Texter?fn=%s"
84 """URL of metadata server. %s replaced by file path."""
85
86 def __init__(self,id,title='',metaDataServerUrl=None):
81 """initialize a new instance""" 87 """initialize a new instance"""
82 self.id = id 88 self.id = id
83 self.title = title 89 self.title = title
84 self.metaDataServerUrl = metaDataServerUrl 90 if metaDataServerUrl:
91 self.metaDataServerUrl = metaDataServerUrl
85 92
86 93
87 def getMDFromPathOrUrl(self,path): 94 def getMDFromPathOrUrl(self,path):
88 """returns contents of metadata file from server as text""" 95 """returns contents of metadata file from server as text"""
89 if not path: 96 if not path:
90 logging.error("getMDFromPathOrUrl: empty path!") 97 logging.error("getMDFromPathOrUrl: empty path!")
91 return "" 98 return None
92 99
93 parsedurl = urlparse.urlparse(path) 100 parsedurl = urlparse.urlparse(path)
94 if parsedurl[0] != "": 101 if parsedurl[0] != "":
95 # has schema (e.g. http) 102 # has schema (e.g. http)
96 url=path 103 url=path
104 111
105 #logging.debug("get Metadata: %s"%url) 112 #logging.debug("get Metadata: %s"%url)
106 md = getHttpData(url) 113 md = getHttpData(url)
107 return md 114 return md
108 115
116 def getDomFromPathOrUrl(self, path):
117 """returns DOM of metadata file at given path"""
118 dom = None
119 data = self.getMDFromPathOrUrl(path)
120 if data:
121 dom = ET.fromstring(data)
122
123 return dom
124
109 def getXmlPathData(self, xmlpath, path=None, dom=None): 125 def getXmlPathData(self, xmlpath, path=None, dom=None):
110 """returns contents of element at xmlpath as dict""" 126 """returns contents of element at xmlpath as dict"""
111 logging.error("getXmlPathData(%s)"%xmlpath) 127 logging.error("getXmlPathData(%s)"%xmlpath)
112 # make xmlpath relative for Zope 128 # make xmlpath relative for Zope
113 if xmlpath[0] == '/': 129 if xmlpath[0] == '/':
118 return mdObj.getData(path=path, dom=dom) 134 return mdObj.getData(path=path, dom=dom)
119 else: 135 else:
120 logging.error("getXmlPathData: MetaData element at '%s' not found!"%xmlpath) 136 logging.error("getXmlPathData: MetaData element at '%s' not found!"%xmlpath)
121 return None 137 return None
122 138
139 def getResourceData(self, path=None, dom=None):
140 """returns contents of resource tag as dict"""
141 return self.getXmlPathData('resource', path=path, dom=dom)
142
123 def getTexttoolData(self, path=None, dom=None): 143 def getTexttoolData(self, path=None, dom=None):
124 """returns contents of texttool tag as dict""" 144 """returns contents of texttool tag as dict"""
125 return self.getXmlPathData('resource/meta/texttool', path=path, dom=dom) 145 return self.getXmlPathData('resource/meta/texttool', path=path, dom=dom)
126 146
147 def getAccessData(self, path=None, dom=None):
148 """returns contents of access tag as dict"""
149 return self.getXmlPathData('resource/meta/access-conditions/access', path=path, dom=dom)
150
127 def getBibData(self, path=None, dom=None): 151 def getBibData(self, path=None, dom=None):
128 """returns contents of bib tag as dict""" 152 """returns contents of bib tag as dict"""
129 return self.resource.meta.bib.getData(path=path, dom=dom) 153 return self.resource.meta.bib.getData(path=path, dom=dom)
130 154
131 def getBibMapping(self, bibtype): 155 def getBibMapping(self, bibtype):