diff --git a/.gitignore b/.gitignore index cf8b95a..a97b84a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ fishbowl.log fishbowl/fishbowl.ini +fishbowl_api.egg-info \ No newline at end of file diff --git a/fishbowl/api.py b/fishbowl/api.py index 14265b6..2a43d56 100644 --- a/fishbowl/api.py +++ b/fishbowl/api.py @@ -665,8 +665,9 @@ def get_so(self, number): def save_so(self, so): request = xmlrequests.SaveSO(so, key=self.key) response = self.send_message(request) + # print etree.tostring(response) check_status(response.find('FbiMsgsRs')) - return objects.SalesOrder(response.find('SalesOrder')) + return objects.SalesOrder(response.find('.//SalesOrder')) class FishbowlAPI(object): diff --git a/fishbowl/objects.py b/fishbowl/objects.py index 55b0c93..6d0397d 100644 --- a/fishbowl/objects.py +++ b/fishbowl/objects.py @@ -11,19 +11,23 @@ def fishbowl_datetime(text): - return datetime.strptime(text, '%Y-%m-%dT%H:%M:%S') - + if isinstance(text, str): + return datetime.datetime.strptime(text, '%Y-%m-%dT%H:%M:%S') + elif isinstance(text, datetime.datetime): + return text.strftime('%Y-%m-%dT%H:%M:%S') fishbowl_datetime.type = datetime.datetime def fishbowl_boolean(text): - if not text: - return False - if text.lower() in ('0', 'false', 'f'): - return False - return True - + if isinstance(text, str): + if not text: + return False + if text.lower() in ('0', 'false', 'f'): + return False + return True + elif isinstance(text, bool): + return 'true' if text else 'false' fishbowl_boolean.type = bool @@ -142,7 +146,7 @@ def get_xml_data(self, base_el): if six.PY2: key = key.encode(self.encoding) if children: - if [el for el in child if el.text.strip()]: + if [el for el in child if el.text and el.text.strip()]: data[key] = self.get_xml_data(child) else: inner = [] @@ -167,8 +171,13 @@ def __setitem__(self, key, value): raise KeyError('No field named {}'.format(key)) expected_type = self.fields[key] expected_type = getattr(expected_type, 'type', expected_type) + if expected_type is None: expected_type = six.text_type + + if not inspect.isclass(expected_type): + expected_type = expected_type.__class__ + if not isinstance(value, expected_type): raise ValueError('Value was not type {}'.format(expected_type)) self.mapped[key] = value @@ -392,8 +401,8 @@ class SalesOrderItem(FishbowlObject): ('CustomerPartNum', None), ('Taxable', fishbowl_boolean), ('Quantity', int), - ('ProductPrice', int), - ('TotalPrice', int), + ('ProductPrice', decimal.Decimal), + ('TotalPrice', decimal.Decimal), ('UOMCode', None), ('ItemType', int), ('Status', int),