1
2
3
4 """
5 A module for representing and writting XML metadata
6
7 copyright (c) 2005 the icecube collaboration
8
9 @version: $Revision: 1.0 $
10 @date: Fri Sep 5 16:27:07 CDT 2008
11 @author: Juan Carlos Diaz Velez <juancarlos@icecube.wisc.edu>
12
13 """
14
15 import sys,os
16 import string
17 import re
18 import logging
19 import time
20
21 from dataclasses import *
22 from os.path import expandvars
23 from os.path import join
24 from iceprod.core import ipxml
25
26 logger = logging.getLogger('inventory')
27
28 name = 'inventory.xml'
29
31 """
32 @brief: List of files and destinations
33 """
34
37
38 - def AddFile(self,source,target,track=False):
39 self.filelist.append({'source':source,'target':target,'track':track})
40
41 - def Write(self,filename):
42 dom = ipxml.getDOMImplementation()
43 doctype = dom.createDocumentType("IceProdInventory", None, None)
44 doc = dom.createDocument(ipxml.EMPTY_NAMESPACE, "IceProdInventory", doctype)
45
46 docElement = doc.documentElement
47 doc.documentElement.setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance')
48 doc.documentElement.setAttribute('xsi:noNamespaceSchemaLocation','inventory.xsd')
49
50 for file in self.filelist:
51 itemElement = doc.createElement( 'item' )
52 if file['track']:
53 itemElement.setAttribute('track','1')
54 sourceElement = doc.createElement( 'source' )
55 sourceElement.appendChild(doc.createTextNode(file['source']))
56 itemElement.appendChild(sourceElement)
57 targetElement = doc.createElement( 'target' )
58 targetElement.appendChild(doc.createTextNode(file['target']))
59 itemElement.appendChild(targetElement)
60 doc.documentElement.appendChild(itemElement)
61
62 file_object = open(filename, "w")
63 ipxml.PrettyPrint(doc, file_object)
64 file_object.close()
65
66
67 - def Read(self,file_name,validate=0):
68
69
70 doc = None
71
72 xmlin = open(file_name, 'r')
73 try:
74
75 logger.debug("opened %s" % file_name)
76
77 doc = ipxml.Parse(xmlin, validate=validate)
78 logger.debug("doc = Sax2.FromXmlStream(xmlin, validate=1)")
79
80 except Exception, xe:
81 logger.error("%s : %s" % (sys.exc_type, xe) )
82 raise Exception, xe
83
84 itemElement = doc.getElementsByTagName('item')
85 self.filelist = []
86 for item in itemElement:
87 sourceElement = item.getElementsByTagName('source')
88 targetElement = item.getElementsByTagName('target')
89 entry = {}
90 entry['source'] = sourceElement[0].firstChild.data
91 entry['target'] = targetElement[0].firstChild.data
92 entry['track'] = False
93 if item.hasAttribute('track') and item.getAttribute('track') == '1':
94 entry['track'] = True
95 self.filelist.append(entry)
96 xmlin.close()
97
99 return self.filelist
100