Guest User

Untitled

a guest
Jun 22nd, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. import amara
  2.  
  3. class UpdateSite(object):
  4.  
  5. def __init__(self):
  6. self.description = ''
  7. self.url = ''
  8.  
  9. self.features = {}
  10. self.categories = {}
  11.  
  12. def from_xml_string(self, xml):
  13. doc = amara.parse(xml)
  14. return self.from_xml_object(doc)
  15.  
  16. def from_xml_object(self, obj):
  17. s = obj.site
  18. self.parse_categories(s)
  19. self.parse_features(s)
  20.  
  21. def parse_categories(self, obj):
  22. for c in obj['category-def']:
  23. try:
  24. description = c.description
  25. except AttributeError:
  26. description = ''
  27.  
  28. my_c = Category(c.name, c.label, description)
  29. self.categories[c.name] = my_c
  30.  
  31. def parse_features(self, obj):
  32. for f in obj.feature:
  33. my_f = Feature(f.url, f.id, f.version, f.category.name)
  34. self.features[f.id] = my_f
  35. self.categories[f.category.name].add_feature(f.id)
  36.  
  37. def to_xml(self):
  38. doc = amara.create_document(u"site")
  39. for f in self.features.values():
  40. a = {u'id': f.id, u'url': f.url, u'version': f.version}
  41. my_f = doc.xml_create_element(u'feature', attributes = a)
  42.  
  43. b = {u'name': f.category}
  44. my_f_c = doc.xml_create_element(u'category', attributes = b)
  45.  
  46. my_f.xml_append(my_f_c)
  47. doc.site.xml_append(my_f)
  48.  
  49. for c in self.categories.values():
  50. a = {u'name': c.name, u'label': c.label}
  51. my_c = doc.xml_create_element(u'category-def', attributes = a)
  52.  
  53. try:
  54. my_d = doc.xml_create_element(u'description')
  55. my_d.append(my_c.description)
  56. my_c.xml_append(my_d)
  57. except:
  58. pass
  59.  
  60. doc.site.xml_append(my_c)
  61.  
  62. return doc.xml()
  63.  
  64.  
  65.  
  66.  
  67. class Feature(object):
  68.  
  69. def __init__(self, url, id, version, category):
  70. self.url = url
  71. self.id = id
  72. self.version = version
  73.  
  74. self.extended_version = { \
  75. 'major': '',
  76. 'minor': '',
  77. 'patch': '',
  78. 'sub' : ''
  79. }
  80. self.category = category
  81. self.parse_version(version)
  82.  
  83. def parse_version(self, version):
  84. v = str(version).split('.')
  85.  
  86. self.extended_version['major'] = v[0]
  87. self.extended_version['minor'] = v[1]
  88. self.extended_version['patch'] = v[2]
  89.  
  90. if len(v) > 3:
  91. self.extended_version['sub'] = v[3]
  92.  
  93.  
  94. class Category(object):
  95.  
  96. def __init__(self, name, label, description = ''):
  97. self.name = name
  98. self.label = label
  99. self.description = description
  100. self.feature_refs = []
  101.  
  102. def add_feature(self, f):
  103. if f not in self.feature_refs:
  104. self.feature_refs.append(f)
Add Comment
Please, Sign In to add comment