aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFilipp Lepalaan <f@0x00.co>2013-01-15 12:54:36 +0200
committerFilipp Lepalaan <f@0x00.co>2013-01-15 12:54:36 +0200
commit91bfe60762af1e20e4c4aa440abea5bd33ba7d2f (patch)
tree07c3b839054f6ead4f0e7ddfd05d6f7bc32478b3
parent43905ada7a8f5211a447798a870ffbb075a4a917 (diff)
downloadpy-gsxws-91bfe60762af1e20e4c4aa440abea5bd33ba7d2f.tar.gz
py-gsxws-91bfe60762af1e20e4c4aa440abea5bd33ba7d2f.tar.bz2
py-gsxws-91bfe60762af1e20e4c4aa440abea5bd33ba7d2f.zip
Implement fetching CompTIA codes
-rwxr-xr-xgsx.py66
1 files changed, 63 insertions, 3 deletions
diff --git a/gsx.py b/gsx.py
index f6c69f7..45cac5e 100755
--- a/gsx.py
+++ b/gsx.py
@@ -123,17 +123,76 @@ class GsxObject(object):
return data
+ def get_response(self, xml_el):
+
+ if isinstance(xml_el, list):
+ out = []
+ for i in xml_el:
+ out.append(self.get_response(i))
+
+ return out
+
+ class ReturnData(dict):
+ pass
+
+ rd = ReturnData()
+
+ for r in xml_el.iter():
+ print type(r)
+ k, v = r.tag, r.text
+ if k in ['packingList', 'proformaFileData', 'returnLabelFileData']:
+ v = base64.b64decode(v)
+
+ setattr(rd, k, v)
+
+ return rd
+
+
class CompTia:
"""
Stores and accesses CompTIA codes.
- This should really be fetched from GSX, but suds gives this error:
- suds.TypeNotFound: Type not found: 'comptiaDescription'
- when calling CompTIACodes()...
"""
def __init__(self):
df = open(os.path.join(os.path.dirname(__file__), 'comptia.json'))
self.data = json.load(df)
+ def fetch(self):
+ """
+ Here we must resort to raw XML parsing since SUDS throws this:
+ suds.TypeNotFound: Type not found: 'comptiaDescription'
+ when calling CompTIACodes()...
+ """
+ CLIENT.set_options(retxml=True)
+ dt = CLIENT.factory.create('ns3:comptiaCodeLookupRequestType')
+ dt.userSession = SESSION
+ xml = CLIENT.service.CompTIACodes(dt)
+
+ root = ET.fromstring(xml).findall('.//%s' % 'comptiaInfo')[0]
+
+ # Process CompTIA Groups
+ class ComptiaGroup:
+ pass
+
+ class ComptiaModifier:
+ pass
+
+ self.groups = list()
+ self.modifiers = list()
+
+ for el in root.findall('.//comptiaGroup'):
+ dt = ComptiaGroup()
+ self.groups.append(self.__process(el, dt))
+
+ for el in root.findall('.//comptiaModifier'):
+ mod = ComptiaModifier()
+ self.modifiers.append(self.__process(el, mod))
+
+ def __process(self, element, obj):
+ for i in element.iter():
+ setattr(obj, i.tag, i.text)
+
+ return obj
+
def symptoms(self, component=None):
symptoms = self.data['symptoms']
return symptoms[component] if component else symptoms
@@ -162,6 +221,7 @@ class Lookup(GsxObject):
dt.userSession = SESSION
dt.lookupRequestData = self.data
result = CLIENT.service.PartsLookup(dt)
+ comptiaInfo
return result.parts
def repairs(self):