-
Notifications
You must be signed in to change notification settings - Fork 1
/
Metadata_XML.py
116 lines (94 loc) · 3.39 KB
/
Metadata_XML.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# Copyright (C) 2004 Eric Olinger, http://evvl.rustedhalo.net
# Distributed under the terms of the GNU General Public License, v2 or later
# Author : Eric Olinger <EvvL AT RustedHalo DOT net>
# Contributor(s): David Stanek
from xml.sax import saxutils, make_parser
from xml.sax.handler import feature_namespaces
__version_ = "0.2"
class Metadata_XML_person:
name = ""
email = ""
description = {}
class Metadata_XML_changelog:
date = ""
developer = Metadata_XML_person()
contributor = Metadata_XML_person()
version = ""
description = {}
files = []
bugid = ""
class Metadata_XML(saxutils.DefaultHandler):
# Private variable only for parsing
__tag_ = {}
__lang_ = "en"
# User data
herd = ""
maintainers = []
maintainers.append( Metadata_XML_person() )
longdescription = {}
changelog = []
changelog.append( Metadata_XML_changelog() )
def startElement(self, tag, attr):
self.__tag_[ tag ] = "Yes"
if attr.has_key('lang'):
self.__lang_ = attr.get("lang")
else:
self.__lang_ = "en"
def endElement(self, tag):
self.__tag_[ tag ] = "No"
if tag == "maintainer":
self.maintainers.append( Metadata_XML_person() )
if tag == "change":
self.changelog.append( Metadata_XML_changelog() )
def characters(self, contents):
if self.__tag_['pkgmetadata'] == "Yes":
if self.__tag_.get('herd') == "Yes":
self.herd = contents
if self.__tag_.get('maintainer') == "Yes":
if self.__tag_.get('name') == "Yes":
self.maintainers[ -1 ].name = contents
if self.__tag_.get('description') == "Yes":
if self.maintainers[ -1 ].description.get( self.__lang_ ):
self.maintainers[ -1 ].description[ self.__lang_ ] += contents
else:
self.maintainers[ -1 ].description[ self.__lang_ ] = contents
if self.__tag_.get('email') == "Yes":
self.maintainers[ -1 ].email = contents
if self.__tag_.get('longdescription') == "Yes":
if self.longdescription.get( self.__lang_ ):
self.longdescription[ self.__lang_ ] += contents
else:
self.longdescription[ self.__lang_ ] = contents
if self.__tag_.get('changelog') == "Yes":
if self.__tag_.get('change') == "Yes":
if self.__tag_.get('date') == "Yes":
self.changelog[ -1 ].date = contents
if self.__tag_.get('developer') == "Yes":
if self.__tag_.get('email') == "Yes":
self.changelog[ -1 ].developer.email = contents
if self.__tag_.get('name') == "Yes":
self.changelog[ -1 ].developer.name = contents
if self.__tag_.get('contributor') == "Yes":
if self.__tag_.get('email') == "Yes":
self.changelog[ -1 ].contributor.email = contents
if self.__tag_.get('name') == "Yes":
self.changelog[ -1 ].contributor.name = contents
if self.__tag_.get('version') == "Yes":
self.changelog[ -1 ].version = contents
if self.__tag_.get('description') == "Yes":
if self.changelog[ -1 ].description.get( self.__lang_ ):
self.changelog[ -1 ].description[ self.__lang_ ] += contents
else:
self.changelog[ -1 ].description[ self.__lang_ ] = contents
if self.__tag_.get('file') == "Yes":
self.changelog[ -1 ].files.append( contents )
if self.__tag_.get('bug') == "Yes":
self.changelog[ -1 ].bugid = contents
def parse_metadata_xml( file ):
parser = make_parser()
handler = Metadata_XML()
parser.setContentHandler(handler)
parser.parse( file )
handler.changelog.pop()
handler.maintainers.pop()
return handler