1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 import string
21 import sys
22 from xml.dom.minidom import parseString
23 from xml.sax import SAXParseException
24
25
28
29
30
55
56
63
64
66 _db_label = None
67 _slot_name = None
68
70 self.quantity = quantity
71
74
76 """Returns the label of this type of slot in the database"""
77 return self._db_label
78
80 """Returns the name of the slot, used by
81 rhn_entitlements.modify_org_service"""
82 return self._slot_name
83
84
88
89
93
94
95
96
100
101
105
106
107
108
112
113
115
116 """Satellite certificate class
117 Usage:
118 c = SatelliteCert()
119 c.load('<rhn-cert><rhn-cert-field name="owner">John Doe</rhn-cert-field></rhn-cert>')
120 print c.owner
121 """
122
123 fields_scalar = ['product', 'owner', 'issued', 'expires', 'slots',
124 'provisioning-slots', 'nonlinux-slots',
125 'monitoring-slots', 'virtualization_host',
126 'virtualization_host_platform', 'satellite-version',
127 'generation', ]
128 fields_list = {'channel-families': ChannelFamily}
129
130
131 datesFormat_cert = '%Y-%m-%d %H:%M:%S'
132 datesFormat_db = '%Y-%m-%d %H:%M:%S'
133
142
144 try:
145 self._load(s)
146 except SAXParseException:
147 raise ParseException(None, sys.exc_info()[2])
148
149 self._slots.clear()
150 for slot_name, (slot_attr, factory) in self._slot_maps.items():
151 quantity = getattr(self, slot_attr)
152 self._slots[slot_name] = factory(quantity)
153
154 return self
155
157 dom_element = parseString(s)
158 certs = dom_element.getElementsByTagName("rhn-cert")
159 if not certs:
160 self._root = None
161 else:
162 self._root = certs[0]
163 for child in self._root.childNodes:
164 if child.nodeType != child.ELEMENT_NODE:
165
166 continue
167 if child.nodeName == 'rhn-cert-field':
168 field_name = child.getAttribute("name")
169 if not field_name:
170
171 continue
172 if field_name in self.fields_scalar:
173 val = get_text(child)
174 if not val:
175 continue
176 setattr(self, field_name, val)
177 continue
178 if field_name in self.fields_list:
179 val = self.fields_list[field_name](child)
180 l = getattr(self, val.attribute_name)
181 l.append(val)
182 elif child.nodeName == 'rhn-cert-signature':
183 self.signature = get_text(child)
184
185
186
187
188
189
190 dom_element.unlink()
191
192 _slot_maps = {
193 'management': ('slots', ManagementSlots),
194 'provisioning': ('provisioning-slots', ProvisioningSlots),
195 'monitoring': ('monitoring-slots', MonitoringSlots),
196 'virtualization': ('virtualization_host', VirtualizationSlots),
197 'virtualization_platform': ('virtualization_host_platform', VirtualizationPlatformSlots)
198 }
199
201 if slot_type not in self._slots:
202 raise AttributeError(slot_type)
203 return self._slots[slot_type]
204
207
209
210 for label, (_, slot_class) in self._slot_maps.items():
211 if slot_class._db_label == db_label:
212 return label
213 return None
214
215
217 return string.join([x.data for x in node.childNodes if x.nodeType == x.TEXT_NODE], "")
218