annotate MetaDataFolder.py @ 38:67115536b7ec default tip

DC as JSON export added
author dwinter
date Thu, 22 May 2014 12:09:20 +0200
parents e231cff8688b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
1 from OFS.Folder import Folder
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
2 from Products.PageTemplates.PageTemplateFile import PageTemplateFile
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
3 from Globals import package_home
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
4 from AccessControl import ClassSecurityInfo
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
5 import os.path
9
eeaad777d3d7 more work for non-bib metadata
casties
parents: 8
diff changeset
6 import urlparse
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
7 import logging
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
8
12
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
9 import xml.etree.ElementTree as ET
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
10
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
11 from MetaDataMapping import MetaDataMapping
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
12 from MetaData import MetaData
12
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
13 from SrvTxtUtils import getHttpData, getText
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
14
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
15 def normalizeBibField(bt, underscore=True):
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
16 """returns normalised bib type for looking up mappings"""
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
17 bt = bt.strip().replace(' ', '-').lower()
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
18 if underscore:
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
19 bt = bt.replace('_', '-')
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
20
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
21 return bt
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
22
6
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
23 def toString(list):
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
24 ret=u""
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
25
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
26 for l in list:
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
27 ret+=unicode(l)
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
28
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
29 return ret
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
30
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
31 class MetaDataFolder(Folder):
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
32 """provides methods for managing complete metadata structures"""
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
33 meta_type='MetaDataFolder'
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
34 security=ClassSecurityInfo()
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
35 manage_options = Folder.manage_options+(
5
c1dbf78cc036 more MetaDataFolder
casties
parents: 4
diff changeset
36 {'label':'Main Config','action':'changeMetaDataFolderForm'},
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
37 )
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
38
12
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
39 metaDataServerUrl = "http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Texter?fn=%s"
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
40 """URL of metadata server. %s replaced by file path."""
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
41
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
42 def __init__(self,id,title='',metaDataServerUrl=None):
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
43 """initialize a new instance"""
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
44 self.id = id
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
45 self.title = title
12
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
46 if metaDataServerUrl:
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
47 self.metaDataServerUrl = metaDataServerUrl
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
48
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
49
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
50 def getMDFromPathOrUrl(self,path):
10
68bc459c9f59 getmd handles empty url
casties
parents: 9
diff changeset
51 """returns contents of metadata file from server as text"""
68bc459c9f59 getmd handles empty url
casties
parents: 9
diff changeset
52 if not path:
68bc459c9f59 getmd handles empty url
casties
parents: 9
diff changeset
53 logging.error("getMDFromPathOrUrl: empty path!")
12
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
54 return None
10
68bc459c9f59 getmd handles empty url
casties
parents: 9
diff changeset
55
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
56 parsedurl = urlparse.urlparse(path)
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
57 if parsedurl[0] != "":
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
58 # has schema (e.g. http)
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
59 url=path
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
60 else:
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
61 # path only
8
4cd862bf37a3 more renovation
casties
parents: 6
diff changeset
62 path = path.replace('/mpiwg/online/', '')
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
63 if path.endswith("index.meta"):
8
4cd862bf37a3 more renovation
casties
parents: 6
diff changeset
64 url = self.metaDataServerUrl%path
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
65 else:
8
4cd862bf37a3 more renovation
casties
parents: 6
diff changeset
66 url = os.path.join(self.metaDataServerUrl%path,'index.meta')
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
67
23
5ed16f971297 getDomFromPathOrUrl does not throw exception but returns None.
casties
parents: 20
diff changeset
68 try:
5ed16f971297 getDomFromPathOrUrl does not throw exception but returns None.
casties
parents: 20
diff changeset
69 md = getHttpData(url)
5ed16f971297 getDomFromPathOrUrl does not throw exception but returns None.
casties
parents: 20
diff changeset
70 return md
5ed16f971297 getDomFromPathOrUrl does not throw exception but returns None.
casties
parents: 20
diff changeset
71
5ed16f971297 getDomFromPathOrUrl does not throw exception but returns None.
casties
parents: 20
diff changeset
72 except:
5ed16f971297 getDomFromPathOrUrl does not throw exception but returns None.
casties
parents: 20
diff changeset
73 logging.error("getMDFromPathOrUrl: unable to get data!")
5ed16f971297 getDomFromPathOrUrl does not throw exception but returns None.
casties
parents: 20
diff changeset
74
5ed16f971297 getDomFromPathOrUrl does not throw exception but returns None.
casties
parents: 20
diff changeset
75 return None
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
76
12
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
77 def getDomFromPathOrUrl(self, path):
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
78 """returns DOM of metadata file at given path"""
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
79 dom = None
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
80 data = self.getMDFromPathOrUrl(path)
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
81 if data:
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
82 dom = ET.fromstring(data)
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
83
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
84 return dom
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
85
14
281d223aa361 attribution works now
casties
parents: 12
diff changeset
86 def getXmlPathObj(self, xmlpath):
281d223aa361 attribution works now
casties
parents: 12
diff changeset
87 """returns object at xmlpath"""
9
eeaad777d3d7 more work for non-bib metadata
casties
parents: 8
diff changeset
88 # make xmlpath relative for Zope
eeaad777d3d7 more work for non-bib metadata
casties
parents: 8
diff changeset
89 if xmlpath[0] == '/':
eeaad777d3d7 more work for non-bib metadata
casties
parents: 8
diff changeset
90 xmlpath = xmlpath[1:]
eeaad777d3d7 more work for non-bib metadata
casties
parents: 8
diff changeset
91
14
281d223aa361 attribution works now
casties
parents: 12
diff changeset
92 obj = self.restrictedTraverse(xmlpath, None)
281d223aa361 attribution works now
casties
parents: 12
diff changeset
93 return obj
281d223aa361 attribution works now
casties
parents: 12
diff changeset
94
17
ba617e755c56 mostly finished attributions and copyright
casties
parents: 15
diff changeset
95 def getXmlPathData(self, xmlpath, path=None, dom=None, recursive=0, all=False, allText=False):
31
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
96 """returns contents of element at xmlpath as dict.
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
97
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
98 @param xmlpath: xml path to selected elements
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
99 @param path: file or url path to metadata file
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
100 @param dom: dom of metadata
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
101 @param all: put contents of tags with the same name in list value
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
102 @param recursive: number of recursions. 0=just children
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
103 @param allText: get text content of all subelements
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
104 @returns: dict with attributes (key=@attr) and child elements (key=tag)
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
105 """
14
281d223aa361 attribution works now
casties
parents: 12
diff changeset
106 logging.error("getXmlPathData(%s)"%xmlpath)
281d223aa361 attribution works now
casties
parents: 12
diff changeset
107 mdObj = self.getXmlPathObj(xmlpath)
9
eeaad777d3d7 more work for non-bib metadata
casties
parents: 8
diff changeset
108 if mdObj is not None:
17
ba617e755c56 mostly finished attributions and copyright
casties
parents: 15
diff changeset
109 return mdObj.getData(path=path, dom=dom, recursive=recursive, all=all, allText=allText)
9
eeaad777d3d7 more work for non-bib metadata
casties
parents: 8
diff changeset
110 else:
27
a0d273542509 better DRI handling.
casties
parents: 26
diff changeset
111 logging.error("getXmlPathData: MetaData object for '%s' not found!"%xmlpath)
9
eeaad777d3d7 more work for non-bib metadata
casties
parents: 8
diff changeset
112 return None
eeaad777d3d7 more work for non-bib metadata
casties
parents: 8
diff changeset
113
17
ba617e755c56 mostly finished attributions and copyright
casties
parents: 15
diff changeset
114 def getXmlPathFormatted(self, xmlpath, template, path=None, dom=None, data=None, allFields=False, recursive=0, all=False, allText=False):
31
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
115 """returns contents of element at xmlpath as dict
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
116
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
117 @param xmlpath: xml path to selected elements
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
118 @param template: name of template for data
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
119 @param path: file or url path to metadata file
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
120 @param dom: dom of metadata
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
121 @param all: put contents of tags with the same name in list value
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
122 @param recursive: number of recursions. 0=just children
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
123 @param allText: get text content of all subelements
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
124 @returns: dict with attributes (key=@attr) and child elements (key=tag)
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
125 """
14
281d223aa361 attribution works now
casties
parents: 12
diff changeset
126 logging.error("getXmlPathFormatted(xmlpath=%s, template=%s)"%(xmlpath,template))
281d223aa361 attribution works now
casties
parents: 12
diff changeset
127 mdObj = self.getXmlPathObj(xmlpath)
281d223aa361 attribution works now
casties
parents: 12
diff changeset
128 if mdObj is not None:
281d223aa361 attribution works now
casties
parents: 12
diff changeset
129 if data is None:
17
ba617e755c56 mostly finished attributions and copyright
casties
parents: 15
diff changeset
130 data = mdObj.getData(path=path, dom=dom, recursive=recursive, all=all, allText=allText)
14
281d223aa361 attribution works now
casties
parents: 12
diff changeset
131
281d223aa361 attribution works now
casties
parents: 12
diff changeset
132 if data is None:
281d223aa361 attribution works now
casties
parents: 12
diff changeset
133 return ''
281d223aa361 attribution works now
casties
parents: 12
diff changeset
134
281d223aa361 attribution works now
casties
parents: 12
diff changeset
135 fmt = ''
15
41b90f09a1f2 new getdata
casties
parents: 14
diff changeset
136 if all:
14
281d223aa361 attribution works now
casties
parents: 12
diff changeset
137 # data is list of elements
281d223aa361 attribution works now
casties
parents: 12
diff changeset
138 for d in data:
281d223aa361 attribution works now
casties
parents: 12
diff changeset
139 # concatenate formatted strings
281d223aa361 attribution works now
casties
parents: 12
diff changeset
140 fmt += mdObj.getFormatted(template, path=path, dom=dom, data=d, allFields=allFields) + '\n'
281d223aa361 attribution works now
casties
parents: 12
diff changeset
141
281d223aa361 attribution works now
casties
parents: 12
diff changeset
142 else:
281d223aa361 attribution works now
casties
parents: 12
diff changeset
143 fmt = mdObj.getFormatted(template, path=path, dom=dom, data=data, allFields=allFields)
281d223aa361 attribution works now
casties
parents: 12
diff changeset
144
281d223aa361 attribution works now
casties
parents: 12
diff changeset
145 return fmt
281d223aa361 attribution works now
casties
parents: 12
diff changeset
146
281d223aa361 attribution works now
casties
parents: 12
diff changeset
147 else:
27
a0d273542509 better DRI handling.
casties
parents: 26
diff changeset
148 logging.error("getXmlPathFormatted: MetaData object for '%s' not found!"%xmlpath)
14
281d223aa361 attribution works now
casties
parents: 12
diff changeset
149 return ''
281d223aa361 attribution works now
casties
parents: 12
diff changeset
150
33
1f845c76dad3 all getXXX take recursive and all parameters.
casties
parents: 31
diff changeset
151 def getResourceData(self, path=None, dom=None, recursive=0, all=False):
12
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
152 """returns contents of resource tag as dict"""
33
1f845c76dad3 all getXXX take recursive and all parameters.
casties
parents: 31
diff changeset
153 return self.getXmlPathData('resource', path=path, dom=dom, recursive=recursive, all=all)
12
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
154
31
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
155 def getTexttoolData(self, path=None, dom=None, recursive=0, all=False):
8
4cd862bf37a3 more renovation
casties
parents: 6
diff changeset
156 """returns contents of texttool tag as dict"""
31
ab58edfc0707 more parameters and more comments.
casties
parents: 29
diff changeset
157 return self.getXmlPathData('resource/meta/texttool', path=path, dom=dom, recursive=recursive, all=all)
8
4cd862bf37a3 more renovation
casties
parents: 6
diff changeset
158
33
1f845c76dad3 all getXXX take recursive and all parameters.
casties
parents: 31
diff changeset
159 def getAccessData(self, path=None, dom=None, recursive=0, all=False):
12
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
160 """returns contents of access tag as dict"""
33
1f845c76dad3 all getXXX take recursive and all parameters.
casties
parents: 31
diff changeset
161 return self.getXmlPathData('resource/meta/access-conditions/access', path=path, dom=dom, recursive=recursive, all=all)
12
7f0e2b656e5c more work for non-bib metadata
casties
parents: 11
diff changeset
162
33
1f845c76dad3 all getXXX take recursive and all parameters.
casties
parents: 31
diff changeset
163 def getAttributionData(self, path=None, dom=None, recursive=0, all=True):
14
281d223aa361 attribution works now
casties
parents: 12
diff changeset
164 """returns contents of attribution tag as dict"""
33
1f845c76dad3 all getXXX take recursive and all parameters.
casties
parents: 31
diff changeset
165 return self.getXmlPathData('resource/meta/access-conditions/attribution', path=path, dom=dom, recursive=recursive, all=all)
14
281d223aa361 attribution works now
casties
parents: 12
diff changeset
166
33
1f845c76dad3 all getXXX take recursive and all parameters.
casties
parents: 31
diff changeset
167 def getAttributionFormatted(self, template, path=None, dom=None, data=None, recursive=0, all=True):
14
281d223aa361 attribution works now
casties
parents: 12
diff changeset
168 """returns formatted contents of access tag"""
33
1f845c76dad3 all getXXX take recursive and all parameters.
casties
parents: 31
diff changeset
169 return self.getXmlPathFormatted('resource/meta/access-conditions/attribution', template, path=path, dom=dom, data=data, recursive=recursive, all=all)
14
281d223aa361 attribution works now
casties
parents: 12
diff changeset
170
17
ba617e755c56 mostly finished attributions and copyright
casties
parents: 15
diff changeset
171 def getCopyrightData(self, path=None, dom=None, recursive=1, all=True):
14
281d223aa361 attribution works now
casties
parents: 12
diff changeset
172 """returns contents of copyright tag as dict"""
18
611b6df70840 niceification
casties
parents: 17
diff changeset
173 # information is two tags deep - recursive=1
17
ba617e755c56 mostly finished attributions and copyright
casties
parents: 15
diff changeset
174 return self.getXmlPathData('resource/meta/access-conditions/copyright', path=path, dom=dom, recursive=recursive, all=all)
14
281d223aa361 attribution works now
casties
parents: 12
diff changeset
175
18
611b6df70840 niceification
casties
parents: 17
diff changeset
176 def getCopyrightFormatted(self, template, path=None, dom=None, data=None, recursive=1, all=True):
14
281d223aa361 attribution works now
casties
parents: 12
diff changeset
177 """returns formatted contents of access tag"""
18
611b6df70840 niceification
casties
parents: 17
diff changeset
178 # information is two tags deep - recursive=1
611b6df70840 niceification
casties
parents: 17
diff changeset
179 return self.getXmlPathFormatted('resource/meta/access-conditions/copyright', template, path=path, dom=dom, data=data, recursive=recursive, all=all)
14
281d223aa361 attribution works now
casties
parents: 12
diff changeset
180
33
1f845c76dad3 all getXXX take recursive and all parameters.
casties
parents: 31
diff changeset
181 def getContextData(self, path=None, dom=None, recursive=0, all=True):
20
9a1e75e708e1 small bugs
dwinter
parents: 18
diff changeset
182 """returns contents of context tag as dict"""
9a1e75e708e1 small bugs
dwinter
parents: 18
diff changeset
183 # information is two tags deep - recursive=1
33
1f845c76dad3 all getXXX take recursive and all parameters.
casties
parents: 31
diff changeset
184 return self.getXmlPathData('resource/meta/context', path=path, dom=dom, recursive=recursive, all=all)
20
9a1e75e708e1 small bugs
dwinter
parents: 18
diff changeset
185
9a1e75e708e1 small bugs
dwinter
parents: 18
diff changeset
186
26
a19575be96e8 getDRI reshuffled, works on python 2.6. now.
casties
parents: 25
diff changeset
187 def getDRI(self, path=None, dom=None, type="escidoc"):
24
d036de7fd78d getDRI added
dwinter
parents: 20
diff changeset
188 """returns the DRI of the document"""
26
a19575be96e8 getDRI reshuffled, works on python 2.6. now.
casties
parents: 25
diff changeset
189 dris = self.getXmlPathData('resource/meta/dri', path=path, dom=dom, all=True)
27
a0d273542509 better DRI handling.
casties
parents: 26
diff changeset
190 #logging.debug("getDRI: dris=%s"%repr(dris))
26
a19575be96e8 getDRI reshuffled, works on python 2.6. now.
casties
parents: 25
diff changeset
191 if dris is None:
a19575be96e8 getDRI reshuffled, works on python 2.6. now.
casties
parents: 25
diff changeset
192 return None
a19575be96e8 getDRI reshuffled, works on python 2.6. now.
casties
parents: 25
diff changeset
193
a19575be96e8 getDRI reshuffled, works on python 2.6. now.
casties
parents: 25
diff changeset
194 for dri in dris:
27
a0d273542509 better DRI handling.
casties
parents: 26
diff changeset
195 #logging.debug("getDRI: dri=%s"%dri)
a0d273542509 better DRI handling.
casties
parents: 26
diff changeset
196 if type is None:
a0d273542509 better DRI handling.
casties
parents: 26
diff changeset
197 # no type -- take the first one
a0d273542509 better DRI handling.
casties
parents: 26
diff changeset
198 return dri.get('@text', None)
a0d273542509 better DRI handling.
casties
parents: 26
diff changeset
199
a0d273542509 better DRI handling.
casties
parents: 26
diff changeset
200 # use element with matching @type
26
a19575be96e8 getDRI reshuffled, works on python 2.6. now.
casties
parents: 25
diff changeset
201 att = dri.get('@attr', None)
a19575be96e8 getDRI reshuffled, works on python 2.6. now.
casties
parents: 25
diff changeset
202 if att is not None:
a19575be96e8 getDRI reshuffled, works on python 2.6. now.
casties
parents: 25
diff changeset
203 if (att.get('type', None) == type):
a19575be96e8 getDRI reshuffled, works on python 2.6. now.
casties
parents: 25
diff changeset
204 return dri.get('@text', None)
a19575be96e8 getDRI reshuffled, works on python 2.6. now.
casties
parents: 25
diff changeset
205
a19575be96e8 getDRI reshuffled, works on python 2.6. now.
casties
parents: 25
diff changeset
206 return None
27
a0d273542509 better DRI handling.
casties
parents: 26
diff changeset
207
24
d036de7fd78d getDRI added
dwinter
parents: 20
diff changeset
208
28
40508e672841 richer metadata for bib. still not sufficient though.
casties
parents: 27
diff changeset
209 def getBibData(self, path=None, dom=None, all=False, recursive=0):
6
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
210 """returns contents of bib tag as dict"""
28
40508e672841 richer metadata for bib. still not sufficient though.
casties
parents: 27
diff changeset
211 return self.resource.meta.bib.getData(path=path, dom=dom, all=all, recursive=recursive)
6
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
212
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
213 def getBibMapping(self, bibtype):
6
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
214 """returns MetaDataMapping for resource/meta/bib of bibtype"""
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
215 return self.resource.meta.bib.getMapping(bibtype)
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
216
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
217 def getBibFields(self, bibdata):
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
218 """returns dict with metadata description for bibdata"""
6
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
219 return self.resource.meta.bib.getMapFields(bibdata)
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
220
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
221 def getBibMappedData(self, bibdata, allFields=False):
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
222 """returns dict with metadata descriptions and data for bibdata"""
6
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
223 return self.resource.meta.bib.getMappedData(bibdata, allFields=allFields)
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
224
36
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
225 def getBibMappedDataJSON(self, bibdata=None, allFields=False):
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
226 """returns dict with metadata descriptions and data for bibdata as JSON takes bidata as JSON"""
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
227
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
228 import json
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
229
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
230
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
231
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
232 if bibdata is None:
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
233 bibdata=self.REQUEST.form
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
234
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
235 bibdata = json.loads(bibdata,'utf-8')
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
236
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
237 return json.dumps(self.resource.meta.bib.getMappedData(bibdata, allFields=allFields));
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
238
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
239
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
240
29
b3428e281ee2 dcpmapping added to metadata
dwinter
parents: 28
diff changeset
241 def getDCDataFromPath(self,path):
b3428e281ee2 dcpmapping added to metadata
dwinter
parents: 28
diff changeset
242 """returns DC mapped data from path to index.meta"""
b3428e281ee2 dcpmapping added to metadata
dwinter
parents: 28
diff changeset
243 return self.resource.meta.bib.getDCDataFromPath(path)
b3428e281ee2 dcpmapping added to metadata
dwinter
parents: 28
diff changeset
244
6
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
245 def getDCMappedData(self, bibdata):
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
246 """returns dict with DC keys and data from bibdata"""
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
247 return self.resource.meta.bib.getDCMappedData(bibdata)
36
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
248
38
67115536b7ec DC as JSON export added
dwinter
parents: 37
diff changeset
249
67115536b7ec DC as JSON export added
dwinter
parents: 37
diff changeset
250 def getDCMappedDataJSON(self, bibdata):
67115536b7ec DC as JSON export added
dwinter
parents: 37
diff changeset
251 """returns dict with DC keys and data from bibdata"""
67115536b7ec DC as JSON export added
dwinter
parents: 37
diff changeset
252 import json
67115536b7ec DC as JSON export added
dwinter
parents: 37
diff changeset
253
67115536b7ec DC as JSON export added
dwinter
parents: 37
diff changeset
254 if bibdata is None:
67115536b7ec DC as JSON export added
dwinter
parents: 37
diff changeset
255 bibdata=self.REQUEST.form
67115536b7ec DC as JSON export added
dwinter
parents: 37
diff changeset
256
67115536b7ec DC as JSON export added
dwinter
parents: 37
diff changeset
257
67115536b7ec DC as JSON export added
dwinter
parents: 37
diff changeset
258 bibdata = json.loads(bibdata,'utf-8')
67115536b7ec DC as JSON export added
dwinter
parents: 37
diff changeset
259
67115536b7ec DC as JSON export added
dwinter
parents: 37
diff changeset
260 return json.dumps(self.resource.meta.bib.getDCMappedData(bibdata));
67115536b7ec DC as JSON export added
dwinter
parents: 37
diff changeset
261
36
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
262 def getBibFormattedMetaDataJSON(self, path=None, dom=None, bibdata=None, bibxdata=None):
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
263 """get the metadafrom server as json, takes bibdata json-formatted"""
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
264 import json
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
265
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
266 logging.debug("getBibFormattedMetaData(path=%s)"%path)
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
267
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
268 if bibdata is None:
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
269 bibdata=self.REQUEST.form
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
270
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
271
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
272 bibdata = json.loads(bibdata,'utf-8')
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
273
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
274 return json.dumps(self.resource.meta.bib.getFormatted('metadata_template', path=path, dom=dom, data=bibdata, xdata=bibxdata))
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
275
28
40508e672841 richer metadata for bib. still not sufficient though.
casties
parents: 27
diff changeset
276 def getBibFormattedMetaData(self, path=None, dom=None, bibdata=None, bibxdata=None):
6
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
277 """get the metadafrom server"""
36
559907a4d538 json schnittstellen
dwinter
parents: 33
diff changeset
278
6
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
279 logging.debug("getBibFormattedMetaData(path=%s)"%path)
28
40508e672841 richer metadata for bib. still not sufficient though.
casties
parents: 27
diff changeset
280 return self.resource.meta.bib.getFormatted('metadata_template', path=path, dom=dom, data=bibdata, xdata=bibxdata)
6
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
281
28
40508e672841 richer metadata for bib. still not sufficient though.
casties
parents: 27
diff changeset
282 def getBibFormattedMetaDataExtended(self,path=None, dom=None, bibdata=None, bibxdata=None):
6
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
283 """get the metadafrom server"""
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
284 logging.debug("getBibFormattedMetaDataExtended(path=%s)"%path)
28
40508e672841 richer metadata for bib. still not sufficient though.
casties
parents: 27
diff changeset
285 return self.resource.meta.bib.getFormatted('metadata_extended_template', path=path, dom=dom, data=bibdata, xdata=bibxdata, allFields=True)
37
e231cff8688b getFormatttedlabel in json verison
dwinter
parents: 36
diff changeset
286
e231cff8688b getFormatttedlabel in json verison
dwinter
parents: 36
diff changeset
287
e231cff8688b getFormatttedlabel in json verison
dwinter
parents: 36
diff changeset
288 def getBibFormattedLabelJSON(self, path=None, dom=None, bibdata=None, bibxdata=None):
e231cff8688b getFormatttedlabel in json verison
dwinter
parents: 36
diff changeset
289 """get the formatted metadafrom server as json, takes bibdata json-formatted"""
e231cff8688b getFormatttedlabel in json verison
dwinter
parents: 36
diff changeset
290 import json
e231cff8688b getFormatttedlabel in json verison
dwinter
parents: 36
diff changeset
291
e231cff8688b getFormatttedlabel in json verison
dwinter
parents: 36
diff changeset
292 logging.debug("getBibFormattedMetaData(path=%s)"%path)
e231cff8688b getFormatttedlabel in json verison
dwinter
parents: 36
diff changeset
293
e231cff8688b getFormatttedlabel in json verison
dwinter
parents: 36
diff changeset
294 if bibdata is None:
e231cff8688b getFormatttedlabel in json verison
dwinter
parents: 36
diff changeset
295 bibdata=self.REQUEST.form
e231cff8688b getFormatttedlabel in json verison
dwinter
parents: 36
diff changeset
296
e231cff8688b getFormatttedlabel in json verison
dwinter
parents: 36
diff changeset
297
e231cff8688b getFormatttedlabel in json verison
dwinter
parents: 36
diff changeset
298 bibdata = json.loads(bibdata,'utf-8')
e231cff8688b getFormatttedlabel in json verison
dwinter
parents: 36
diff changeset
299
e231cff8688b getFormatttedlabel in json verison
dwinter
parents: 36
diff changeset
300 return json.dumps(self.resource.meta.bib.getFormatted('label_template', path=path, dom=dom, data=bibdata, xdata=bibxdata))
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
301
6
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
302 def getBibFormattedLabel(self,path=None, dom=None, bibdata=None):
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
303 """get the metadafrom server"""
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
304 logging.debug("getBibFormattedLabel(%s)"%path)
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
305 return self.resource.meta.bib.getFormatted('label_template', path=path, dom=dom, data=bibdata)
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
306
8
4cd862bf37a3 more renovation
casties
parents: 6
diff changeset
307 # compatibility
6
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
308 getFormattedMetaData = getBibFormattedMetaData
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
309 getFormattedMetaDataShort = getBibFormattedMetaData
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
310 getFormattedMetaDataExtended = getBibFormattedMetaDataExtended
00147a1ab4ac division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents: 5
diff changeset
311 getFormattedLabel = getBibFormattedLabel
8
4cd862bf37a3 more renovation
casties
parents: 6
diff changeset
312
28
40508e672841 richer metadata for bib. still not sufficient though.
casties
parents: 27
diff changeset
313
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
314 changeMetaDataFolderForm = PageTemplateFile('zpt/changeMetaDataFolder',globals())
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
315
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
316 security.declarePublic('changeMetaDataFolder')
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
317 def changeMetaDataFolder(self,title,metaDataServerUrl,RESPONSE=None):
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
318 """Change MetaDataFolder"""
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
319 self.title = title
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
320 self.metaDataServerUrl=metaDataServerUrl
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
321 if RESPONSE is not None:
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
322 RESPONSE.redirect('manage_main')
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
323
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
324
9
eeaad777d3d7 more work for non-bib metadata
casties
parents: 8
diff changeset
325 def manage_addMetaDataFolderForm(self):
eeaad777d3d7 more work for non-bib metadata
casties
parents: 8
diff changeset
326 """add MetaDataFolder form"""
eeaad777d3d7 more work for non-bib metadata
casties
parents: 8
diff changeset
327 pt = PageTemplateFile('zpt/addMetadataFolderForm',globals()).__of__(self)
eeaad777d3d7 more work for non-bib metadata
casties
parents: 8
diff changeset
328 return pt()
4
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
329
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
330 def manage_addMetaDataFolder(self,id,title,RESPONSE=None):
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
331 """a MetaDataFolder objekt"""
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
332 newObj=MetaDataFolder(id,title)
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
333 self.Destination()._setObject(id,newObj)
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
334 if RESPONSE is not None:
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
335 RESPONSE.redirect('manage_main')
8291255b1868 adding new base level class MetaDataFolder.
casties
parents:
diff changeset
336