Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import amara
- class UpdateSite(object):
- def __init__(self):
- self.description = ''
- self.url = ''
- self.features = {}
- self.categories = {}
- def from_xml_string(self, xml):
- doc = amara.parse(xml)
- return self.from_xml_object(doc)
- def from_xml_object(self, obj):
- s = obj.site
- self.parse_categories(s)
- self.parse_features(s)
- def parse_categories(self, obj):
- for c in obj['category-def']:
- try:
- description = c.description
- except AttributeError:
- description = ''
- my_c = Category(c.name, c.label, description)
- self.categories[c.name] = my_c
- def parse_features(self, obj):
- for f in obj.feature:
- my_f = Feature(f.url, f.id, f.version, f.category.name)
- self.features[f.id] = my_f
- self.categories[f.category.name].add_feature(f.id)
- def to_xml(self):
- doc = amara.create_document(u"site")
- for f in self.features.values():
- a = {u'id': f.id, u'url': f.url, u'version': f.version}
- my_f = doc.xml_create_element(u'feature', attributes = a)
- b = {u'name': f.category}
- my_f_c = doc.xml_create_element(u'category', attributes = b)
- my_f.xml_append(my_f_c)
- doc.site.xml_append(my_f)
- for c in self.categories.values():
- a = {u'name': c.name, u'label': c.label}
- my_c = doc.xml_create_element(u'category-def', attributes = a)
- try:
- my_d = doc.xml_create_element(u'description')
- my_d.append(my_c.description)
- my_c.xml_append(my_d)
- except:
- pass
- doc.site.xml_append(my_c)
- return doc.xml()
- class Feature(object):
- def __init__(self, url, id, version, category):
- self.url = url
- self.id = id
- self.version = version
- self.extended_version = { \
- 'major': '',
- 'minor': '',
- 'patch': '',
- 'sub' : ''
- }
- self.category = category
- self.parse_version(version)
- def parse_version(self, version):
- v = str(version).split('.')
- self.extended_version['major'] = v[0]
- self.extended_version['minor'] = v[1]
- self.extended_version['patch'] = v[2]
- if len(v) > 3:
- self.extended_version['sub'] = v[3]
- class Category(object):
- def __init__(self, name, label, description = ''):
- self.name = name
- self.label = label
- self.description = description
- self.feature_refs = []
- def add_feature(self, f):
- if f not in self.feature_refs:
- self.feature_refs.append(f)
Add Comment
Please, Sign In to add comment