55 |
49 |
56 class LdtUtils(object): |
50 class LdtUtils(object): |
57 |
51 |
58 def generateLdt(self, contentList, file, title = u"", author=u"IRI Web", web_url=u"", media_url="", startSegment = None, contributions=None): |
52 def generateLdt(self, contentList, file, title = u"", author=u"IRI Web", web_url=u"", media_url="", startSegment = None, contributions=None): |
59 |
53 |
60 writer = MarkupWriter(file, indent = u"yes") |
54 iri = lxml.etree.Element(u'iri') |
61 writer.startDocument() |
55 doc = lxml.etree.ElementTree(iri) |
62 writer.startElement(u"iri") |
56 |
63 writer.simpleElement(u"project", attributes={u"id":unicode(str(uuid.uuid1())), u"title":unicode(title) , u"user":author, u"abstract":u""}) |
57 project = lxml.etree.SubElement(iri, u'project') |
64 writer.startElement(u"medias") |
58 project.set(u"id",unicode(str(uuid.uuid1()))) |
65 for content in contentList: |
59 project.set(u"title",unicode(title)) |
66 videopath = unicode(settings.STREAM_URL) |
60 project.set(u"user",author) |
67 if content.videopath : |
61 project.set(u"abstract",u"") |
68 videopath = unicode(content.videopath) |
62 |
69 writer.simpleElement(u"media", attributes={u"id":content.iri_id,u"src":content.iri_url(web_url),u"video":videopath,u"pict":u"",u"extra":u""}) |
63 medias = lxml.etree.SubElement(iri, u"medias") |
70 writer.endElement(u"medias") |
64 for content in contentList: |
|
65 videopath = unicode(settings.STREAM_URL) |
|
66 if content.videopath : |
|
67 videopath = unicode(content.videopath) |
|
68 media = lxml.etree.SubElement(medias, "media") |
|
69 media.set(u"id",content.iri_id) |
|
70 media.set(u"src",content.iri_url(web_url)) |
|
71 media.set(u"video",videopath) |
|
72 media.set(u"pict",u"") |
|
73 media.set(u"extra",u"") |
71 |
74 |
72 if contributions is None: |
75 if contributions is None: |
73 contributions = [] |
76 contributions = [] |
74 annotations_nodes = {} |
77 annotations_nodes = {} |
75 for contrib in contributions: |
78 for contrib in contributions: |
76 doc = xml.dom.minidom.parseString(contrib.ldtproject.ldt.encode("utf-8")) |
79 ldtdoc = lxml.etree.fromstring(contrib.ldtproject.ldt.encode("utf-8")) |
77 con = xml.xpath.Context.Context(doc, 1, 1, None) |
80 res = ldtdoc.xpath("/iri/annotations/content") |
78 res = xml.xpath.Evaluate("/iri/annotations/content", context=con) |
81 |
79 for content in res: |
82 for content in res: |
80 contentid = content.getAttribute("id") |
83 contentid = content.get("id") |
81 if annotations_nodes.has_key(contentid): |
84 if annotations_nodes.has_key(contentid): |
82 contentnode = annotations_nodes[contentid] |
85 contentnode = annotations_nodes[contentid] |
83 else: |
86 else: |
84 contentnode = {"id":contentid, "ensembles":[]} |
87 contentnode = {"id":contentid, "ensembles":[]} |
85 annotations_nodes[contentid]=contentnode |
88 annotations_nodes[contentid]=contentnode |
86 for ens in content.childNodes: |
89 for ens in content.childNodes: |
87 if ens.nodeType == xml.dom.Node.ELEMENT_NODE and ens.tagName.endswith("ensemble"): |
90 if ens.tag.endswith("ensemble"): |
88 contentnode["ensembles"].append(ens.toprettyxml()) |
91 contentnode["ensembles"].append(ens.tag) |
|
92 |
89 |
93 |
90 if len(annotations_nodes) > 0: |
94 if len(annotations_nodes) > 0: |
91 writer.startElement(u"annotations") |
95 annotations = lxml.etree.SubElement(iri, "annotations") |
92 for content in contentList: |
96 for content in contentList: |
93 if content.content_base.iri_id in annotations_nodes: |
97 if content.content_base.iri_id in annotations_nodes: |
94 contentnode = annotations_nodes[content.content_base.iri_id] |
98 contentnode = annotations_nodes[content.content_base.iri_id] |
95 if contentnode is not None: |
99 if contentnode is not None: |
96 if len(contentnode["ensembles"])>0: |
100 if len(contentnode["ensembles"])>0: |
97 writer.startElement(u"content", attributes={"id":contentnode["id"]}) |
101 content = lxml.etree.SubElement(annotation, "content") |
98 writer.text(u"") |
102 content.set("id",contentnode["id"]) |
99 for ens in contentnode["ensembles"]: |
103 content.text = u"" |
100 writer.xmlFragment(ens.encode("utf-8")) |
|
101 writer.endElement(u"content") |
|
102 else: |
104 else: |
103 writer.simpleElement(u"content", attributes={"id":contentnode["id"]}) |
105 content = lxml.etree.SubElement(annotation, "content") |
104 writer.endElement(u"annotations") |
106 content.set("id",contentnode["id"]) |
|
107 |
105 else: |
108 else: |
106 writer.simpleElement(u"annotations") |
109 annotations = lxml.etree.SubElement(iri, "annotations") |
107 |
110 |
108 |
111 |
109 writer.startElement(u"displays") |
112 displays = lxml.etree.SubElement(iri, "displays") |
110 if len(contentList) > 0: |
113 if len(contentList) > 0: |
111 writer.startElement(u"display", attributes={u"id":u"0",u"title":u"generated",u"idsel":contentList[0].iri_id,u"tc":u"0"}) |
114 display = lxml.etree.SubElement(displays, "display") |
|
115 display.set(u"id",u"0") |
|
116 display.set(u"title",u"generated") |
|
117 display.set(u"idsel",contentList[0].iri_id) |
|
118 display.set(u"tc",u"0") |
112 for content in contentList: |
119 for content in contentList: |
113 writer.startElement(u"content", attributes={u"id":content.iri_id}) |
120 contentd = lxml.etree.SubElement(display,"content") |
|
121 contentd.set(u"id",content.iri_id) |
114 filepath = urllib.urlopen(content.iri_url()) |
122 filepath = urllib.urlopen(content.iri_url()) |
115 doc = xml.dom.minidom.parse(filepath) |
123 |
116 con = xml.xpath.Context.Context(doc, 1, 1, None) |
124 udoc = lxml.etree.parse(filepath) |
117 res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble/decoupage", context=con) |
125 res = udoc.xpath("/iri/body/ensembles/ensemble/decoupage") |
118 for decoupagenode in res: |
126 for decoupagenode in res: |
119 decoupage_id = decoupagenode.getAttribute(u"id") |
127 decoupage_id = decoupagenode.getAttribute(u"id") |
120 ensemble_id = decoupagenode.parentNode.getAttribute(u"id") |
128 ensemble_id = decoupagenode.parentNode.getAttribute(u"id") |
121 writer.simpleElement(u"decoupage", attributes={u"id":decoupage_id,u"idens":ensemble_id}) |
129 decoupage_id = decoupagenode.get(u"id") |
122 writer.endElement(u"content") |
130 ensemble_id = decoupagenode.getparent().get(u"id") |
|
131 decoupage = lxml.etree.SubElement(content,"decoupage") |
|
132 decoupage.set(u"id",decoupage_id) |
|
133 decoupage.set(u"idens",ensemble_id) |
123 if startSegment is not None: |
134 if startSegment is not None: |
124 writer.startElement(u"activeSegment") |
135 activeSegment = lxml.etree.SubElement(display,"activeSegment") |
125 writer.simpleElement(u"id",attributes={u"idctt" : startSegment["idcontent"],u"idens" : startSegment["idgroup"], u"idcut" : startSegment["idcutting"], u"idseg" : startSegment["idsegment"]}) |
136 idas = lxml.etree.SubElement(activeSegment,"id") |
126 writer.endElement(u"activeSegment") |
137 idas.set(u"idctt",startSegment["idcontent"]) |
127 |
138 idas.set(u"idens" ,startSegment["idgroup"]) |
128 writer.endElement(u"display") |
139 idas.set(u"idcut",startSegment["idcutting"]) |
129 writer.endElement(u"displays") |
140 idas.set(u"idseg",startSegment["idsegment"]) |
130 writer.simpleElement(u"edits") |
141 |
131 writer.endElement(u"iri") |
142 edits = lxml.etree.SubElement(iri, "edits") |
|
143 |
|
144 doc.write(file, pretty_print=True) |
|
145 |
132 |
146 |
133 def generateInit(self, url, method, search=None): |
147 def generateInit(self, url, method, search=None): |
134 |
148 |
135 import xml.dom |
149 iri = lxml.etree.Element('iri') |
136 import xml.dom.ext |
150 impl = lxml.etree.ElementTree(iri) |
137 |
151 |
138 impl = xml.dom.getDOMImplementation() |
152 elementFiles = lxml.etree.SubElement(iri,'files') |
139 doc = impl.createDocument(xml.dom.EMPTY_NAMESPACE, 'iri', None) |
153 elementInit = lxml.etree.SubElement(elementFiles, 'init') |
140 |
154 elementfile = lxml.etree.SubElement(elementInit, 'file') |
141 elementFiles = doc.createElement('files') |
|
142 doc.documentElement.appendChild(elementFiles) |
|
143 |
|
144 elementInit = doc.createElement('init') |
|
145 elementFiles.appendChild(elementInit) |
|
146 |
|
147 elementfile = doc.createElement('file') |
|
148 |
155 |
149 elementfile.setAttribute('src',settings.WEB_URL + django.core.urlresolvers.reverse(method, args=url)) |
156 elementfile.set('src',settings.WEB_URL + django.core.urlresolvers.reverse(method, args=url)) |
150 elementfile.setAttribute('display', '1') |
157 elementfile.set('display', '1') |
151 if(search): |
158 if(search): |
152 elementfile.setAttribute("segsel",settings.WEB_URL + django.core.urlresolvers.reverse(search, args=url)) |
159 elementfile.set("segsel",settings.WEB_URL + django.core.urlresolvers.reverse(search, args=url)) |
153 |
160 |
154 |
161 |
155 # /*chemin video : tant que le serveur de media n'est pas up, */ |
162 # /*chemin video : tant que le serveur de media n'est pas up, */ |
156 elementfile.setAttribute('video', settings.STREAM_URL) |
163 elementfile.set('video', settings.STREAM_URL) |
157 elementfile.setAttribute('pict', "") |
164 elementfile.set('pict', "") |
158 elementfile.setAttribute('extra', "") |
165 elementfile.set('extra', "") |
159 |
166 |
160 elementInit.appendChild(elementfile); |
167 elementRecent = lxml.etree.SubElement(elementFiles, 'recent') |
161 |
168 elementLibrary = lxml.etree.SubElement(elementFiles, 'library') |
162 elementRecent = doc.createElement('recent'); |
|
163 elementFiles.appendChild(elementRecent); |
|
164 |
|
165 |
|
166 elementLibrary = doc.createElement('library'); |
|
167 elementFiles.appendChild(elementLibrary); |
|
168 |
169 |
169 username = '' |
170 username = '' |
170 id = '' |
171 id = '' |
171 elementUser = doc.createElement('user') |
172 |
172 elementUser.setAttribute('name', username) |
173 elementUser = lxml.etree.SubElement(iri, 'user') |
173 elementUser.setAttribute('id', id) |
174 elementUser.set('name', username) |
174 doc.documentElement.appendChild(elementUser) |
175 elementUser.set('id', id) |
175 |
176 |
176 return doc |
177 return iri |
|
178 |
|
179 |
177 |
180 |
178 def create_ldt(project, user): |
181 def create_ldt(project, user): |
179 |
182 |
180 contentList=project.contents.all() |
183 contentList = project.contents.all() |
181 |
184 |
182 """create xml""" |
185 """create xml""" |
183 |
186 |
184 # create a dom |
187 # create a dom |
185 impl = xml.dom.getDOMImplementation() |
188 iri = lxml.etree.Element('iri') |
186 dom = impl.createDocument(xml.dom.EMPTY_NAMESPACE, 'iri', None) |
189 doc = lxml.etree.ElementTree(iri) |
|
190 |
187 #node project |
191 #node project |
188 elementProject = dom.createElement('project') |
192 elementProject = lxml.etree.SubElement(iri, 'project') |
189 dom.documentElement.appendChild(elementProject) |
193 |
190 |
194 elementProject.set('abstract', "") |
191 |
195 elementProject.set('title', project.title) |
192 elementProject.setAttribute('abstract', "") |
196 elementProject.set('user', user.username) |
193 elementProject.setAttribute('title', project.title) |
197 elementProject.set('id', project.ldt_id) |
194 elementProject.setAttribute('user', user.username) |
198 |
195 elementProject.setAttribute('id', project.ldt_id) |
|
196 #node medias |
199 #node medias |
197 elementMedias = dom.createElement('medias') |
200 elementMedias = lxml.etree.SubElement(iri, 'medias') |
198 dom.documentElement.appendChild(elementMedias) |
|
199 |
201 |
200 idsel = None |
202 idsel = None |
201 for content in contentList: |
203 for content in contentList: |
202 if not idsel: |
204 if not idsel: |
203 idsel = content.iri_id |
205 idsel = content.iri_id |
204 elementMedia = dom.createElement('media') |
206 elementMedia = lxml.etree.SubElement(elementMedias, 'media') |
205 elementMedia.setAttribute('id', content.iri_id) |
207 elementMedia.set('id', content.iri_id) |
206 elementMedia.setAttribute('src', content.iri_url()) |
208 elementMedia.set('src', content.iri_url()) |
|
209 |
207 if content.videopath and content.videopath !="": |
210 if content.videopath and content.videopath !="": |
208 elementMedia.setAttribute('video', content.videopath) |
211 elementMedia.set('video', content.videopath) |
209 else: |
212 else: |
210 elementMedia.setAttribute('video', settings.STREAM_URL) |
213 elementMedia.set('video', settings.STREAM_URL) |
211 elementMedia.setAttribute('pict', "") |
214 elementMedia.set('pict', "") |
212 elementMedia.setAttribute('extra', "") |
215 elementMedia.set('extra', "") |
213 elementMedias.appendChild(elementMedia) |
216 |
214 if not idsel: |
217 if not idsel: |
215 idsel = "" |
218 idsel = "" |
216 |
219 |
217 #node annotations |
220 #node annotations |
218 elementAnnotations = dom.createElement('annotations') |
221 elementAnnotations = lxml.etree.SubElement(iri, 'annotations') |
219 dom.documentElement.appendChild(elementAnnotations) |
222 |
220 #node displays |
223 #node displays |
221 elementDisplays = dom.createElement('displays') |
224 elementDisplays = lxml.etree.SubElement(iri, 'displays') |
222 elementDisplay = dom.createElement('display') |
225 elementDisplay = lxml.etree.SubElement(elementDisplays, 'display') |
223 elementDisplay.setAttribute('id', '0') |
226 elementDisplay.set('id', '0') |
224 elementDisplay.setAttribute('title', 'Init view') |
227 elementDisplay.set('title', 'Init view') |
225 elementDisplay.setAttribute('idsel', idsel) |
228 elementDisplay.set('idsel', idsel) |
226 elementDisplay.setAttribute('tc', '0') |
229 elementDisplay.set('tc', '0') |
227 elementDisplay.setAttribute('zoom', '0') |
230 elementDisplay.set('zoom', '0') |
228 elementDisplay.setAttribute('scroll', '0') |
231 elementDisplay.set('scroll', '0') |
229 elementDisplay.setAttribute('infoBAB', '') |
232 elementDisplay.set('infoBAB', '') |
|
233 |
|
234 |
230 #node content |
235 #node content |
231 for content in contentList: |
236 for content in contentList: |
232 elementContent = dom.createElement('content') |
237 elementContent = lxml.etree.SubElement(elementDisplay, 'content') |
233 elementContent.setAttribute('id', content.iri_id) |
238 elementContent.set('id', content.iri_id) |
|
239 |
234 if not 'http' in content.iriurl: |
240 if not 'http' in content.iriurl: |
235 #eg: "iiiielizabethrosse/ENMI08-III_elizabethrosse.iri" |
241 #eg: "iiiielizabethrosse/ENMI08-III_elizabethrosse.iri" |
236 url = content.iri_url() |
242 url = content.iri_url() |
237 else: |
243 else: |
238 url =content.iriurl |
244 url =content.iriurl |
239 file = urllib.urlopen(url) |
245 file = urllib.urlopen(url) |
240 doc = xml.dom.minidom.parse(file) |
246 doc = lxml.etree.parse(file) |
241 con = xml.xpath.Context.Context(doc, 1, 1, None) |
247 res = doc.xpath("/iri/body/ensembles/ensemble/decoupage") |
242 res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble/decoupage", context=con) |
248 |
243 #node decoupage |
249 |
|
250 #node decoupage |
244 for decoupagenode in res: |
251 for decoupagenode in res: |
245 decoupage_id = decoupagenode.getAttribute(u"id") |
252 decoupage_id = decoupagenode.attrib(u"id") |
246 ensemble_id = decoupagenode.parentNode.getAttribute(u"id") |
253 parent= decoupagenode.getparent() |
247 elementDecoupage = dom.createElement('decoupage') |
254 ensemble_id = parent.attrib(u"id") |
248 elementDecoupage.setAttribute('idens', ensemble_id) |
255 elementDecoupage = etree.SubElement(elementContent, 'decoupage') |
249 elementDecoupage.setAttribute('id', decoupage_id) |
256 elementDecoupage.set('idens', ensemble_id) |
250 elementContent.appendChild(elementDecoupage) |
257 elementDecoupage.set('id', decoupage_id) |
251 elementDisplay.appendChild(elementContent) |
258 |
252 |
259 #node edits |
253 elementDisplays.appendChild(elementDisplay) |
260 elementEdits = lxml.etree.SubElement(iri, 'edits') |
254 dom.documentElement.appendChild(elementDisplays) |
261 |
255 |
262 #write dom in Project.ldt |
256 elementEdits = dom.createElement('edits') |
263 project.ldt = lxml.etree.tostring(iri, pretty_print=True) |
257 dom.documentElement.appendChild(elementEdits) |
264 |
258 # write dom in Project.ldt |
|
259 project.ldt = dom.documentElement.toprettyxml() |
|
260 #save Project |
265 #save Project |
261 project.save() |
266 project.save() |
262 return project |
267 return project |
263 |
268 |
264 |
269 |
270 |
275 |
271 contentList=project.contents.all() |
276 contentList=project.contents.all() |
272 |
277 |
273 """create xml""" |
278 """create xml""" |
274 |
279 |
275 # create a dom |
280 ldt = lxml.etree.fromstring(project.ldt.encode("utf-8")) |
276 dom = xml.dom.minidom.parseString(project.ldt.encode("utf-8")) |
281 res = ldt.xpath("/iri/project") |
277 con = xml.xpath.Context.Context(dom, 1, 1, None) |
|
278 res = xml.xpath.Evaluate("iri/project", context=con) |
|
279 for elementProject in res: |
282 for elementProject in res: |
280 elementProject.setAttribute('abstract', "") |
283 elementProject.set('abstract', "") |
281 elementProject.setAttribute('title', new_project.title) |
284 elementProject.set('title', new_project.title) |
282 elementProject.setAttribute('user', user.username) |
285 elementProject.set('user', user.username) |
283 elementProject.setAttribute('id', new_project.ldt_id) |
286 elementProject.set('id', new_project.ldt_id) |
284 |
287 |
285 new_project.ldt = dom.documentElement.toprettyxml() |
288 new_project.ldt = lxml.etree.tostring(ldt, pretty_print=True) |
|
289 |
286 #save Project |
290 #save Project |
287 new_project.save() |
291 new_project.save() |
288 return new_project |
292 return new_project |
289 |
293 |
290 def create_empty_iri(file, content, username): |
294 def create_empty_iri(file, content, username): |
291 |
295 |
292 writer = MarkupWriter(file, indent = u"yes") |
296 iri = lxml.etree.Element('iri') |
293 writer.startDocument() |
297 doc = lxml.etree.ElementTree(iri) |
294 writer.startElement(u"iri") |
298 |
295 |
299 head = lxml.etree.SubElement(iri, 'head') |
296 writer.startElement(u"head") |
300 meta1 = lxml.etree.SubElement(head, 'meta') |
297 |
301 meta1.set(u'name', u'id') |
298 writer.simpleElement(u'meta', attributes={u'name':u'id', 'content':unicode(content.iri_id)}) |
302 meta1.set(u'content', unicode(content.iri_id)) |
299 writer.simpleElement(u'meta', attributes={u'name':u'title', 'content':unicode(content.title)}) |
303 meta2 = lxml.etree.SubElement(head, 'meta') |
300 writer.simpleElement(u'meta', attributes={u'name':u'abstract', 'content':unicode(content.description)}) |
304 meta2.set(u'name',u'title') |
301 writer.simpleElement(u'meta', attributes={u'name':u'author', 'content':unicode(username)}) |
305 meta2.set(u'content', unicode(content.title)) |
302 writer.simpleElement(u'meta', attributes={u'name':u'contributor', 'content':unicode(username)}) |
306 meta3 = lxml.etree.SubElement(head, 'meta') |
303 writer.simpleElement(u'meta', attributes={u'name':u'date', 'content':unicode(datetime.date.today().isoformat())}) |
307 meta3.set(u'name',u'abstract') |
304 writer.simpleElement(u'meta', attributes={u'name':u'copyright', 'content':u'IRI'}) |
308 meta3.set(u'content', unicode(content.description)) |
305 writer.simpleElement(u'meta', attributes={u'name':u'type', 'content':u'video'}) |
309 meta4 = lxml.etree.SubElement(head, 'meta') |
306 |
310 meta4.set(u'name',u'author') |
307 writer.endElement(u"head") |
311 meta4.set(u'content', unicode(username)) |
308 |
312 meta5 = lxml.etree.SubElement(head, 'meta') |
309 writer.startElement(u"body") |
313 meta5.set(u'name',u'contributor') |
310 |
314 meta5.set(u'content', unicode(username)) |
311 writer.startElement(u"ensembles") |
315 meta6 = lxml.etree.SubElement(head, 'meta') |
312 writer.endElement(u"ensembles") |
316 meta6.set(u'name',u'date') |
313 |
317 meta6.set(u'content', unicode(datetime.date.today().isoformat())) |
314 writer.simpleElement(u'links') |
318 meta7 = lxml.etree.SubElement(head, 'meta') |
315 writer.startElement(u"medias") |
319 meta7.set(u'name',u'copyright') |
316 |
320 meta7.set(u'content', u'IRI') |
317 writer.startElement(u"media", attributes={u'id':u'video'}) |
321 meta8 = lxml.etree.SubElement(head, 'meta') |
318 writer.simpleElement(u'video', attributes={u'src':unicode(content.stream_src),u'id':unicode(content.iri_id),u'dur':unicode(content.duration),u'begin':u'0'}) |
322 meta8.set(u'name', u'type') |
319 writer.endElement(u"media") |
323 meta8.set(u'content', u'video') |
320 |
324 |
321 writer.startElement(u"media", attributes={u'id':u'tool'}) |
325 body = lxml.etree.SubElement(iri, 'body') |
322 writer.simpleElement(u'tool') |
326 ensembles = lxml.etree.SubElement(body, 'ensembles') |
323 writer.endElement(u"media") |
327 links = lxml.etree.SubElement(body, 'links') |
324 |
328 |
325 writer.endElement(u"medias") |
329 medias = lxml.etree.SubElement(body, 'medias') |
326 |
330 |
327 #writer.startElement(u'display', attributes={u'id':unicode(uuid.uuid1()), u'title':u"default", u"idsel":unicode(content.iri_id), u"tc":u"0", u"zoom":u"0", u"scroll":u"0", u"infoBAB":u""}) |
331 media1 = lxml.etree.SubElement(medias, 'media') |
328 writer.simpleElement(u'display') |
332 media1.set(u'id',u'video') |
329 |
333 video = lxml.etree.SubElement(media1, 'video') |
330 writer.endElement(u"body") |
334 video.set(u'src',unicode(content.stream_src)) |
331 |
335 video.set(u'id',unicode(content.iri_id)) |
332 |
336 video.set(u'dur',unicode(content.duration)) |
333 writer.endElement(u"iri") |
337 video.set(u'begin',u'0') |
334 writer.endDocument() |
338 |
335 |
339 media2 = lxml.etree.SubElement(medias, 'media') |
|
340 media2.set(u'id',u'tool') |
|
341 tool = lxml.etree.SubElement(media2, 'tool') |
|
342 |
|
343 display = lxml.etree.SubElement(body, 'display') |
|
344 |
|
345 doc.write(file, pretty_print=True) |
|
346 |
|
347 |
336 def update_iri(filepath, content, username): |
348 def update_iri(filepath, content, username): |
337 |
349 |
338 # open xml |
350 # open xml |
339 doc = lxml.etree.parse(filepath) |
351 doc = lxml.etree.parse(filepath) |
340 |
352 |