def putloop(self, *mpaths): # sanity check of mpaths if not mpaths or not isinstance(mpaths, tuple): raise MappingFormatError( _("Must be dicts in tuple: putloop(%(mpath)s)"), {"mpath": mpaths}) for part in mpaths: if not isinstance(part, dict): raise MappingFormatError( _("Must be dicts in tuple: putloop(%(mpath)s)"), {"mpath": mpaths}) if "BOTSID" not in part: raise MappingFormatError( _('Section without "BOTSID": putloop(%(mpath)s)'), {"mpath": mpaths}) for key, value in part.items(): if not isinstance(key, str): raise MappingFormatError( _("Keys must be strings: putloop(%(mpath)s)"), {"mpath": mpaths}) if value is None: return False part[key] = str(value).strip() if "BOTSIDnr" not in part: part["BOTSIDnr"] = "1" if self._sameoccurence(mpaths[0]): if len(mpaths) == 1: return self return self._putloopcore(mpaths[1:]) else: raise MappingRootError(_('Error in root putloop "%(mpath)s".'), {"mpath": mpaths[0]})
def sort(self, *mpaths): if self.root.record is None: raise MappingRootError( _('get(%(mpath)s): "root" of message is empty; either split messages or use inn.getloop' ), {"mpath": mpaths}, ) self.root.sort(*mpaths)
def put(self, *mpaths, **kwargs): if self.root.record is None and self.root.children: raise MappingRootError( _('put(%(mpath)s): "root" of outgoing message is empty; use out.putloop' ), {"mpath": mpaths}, ) return self.root.put(*mpaths, **kwargs)
def getrecord(self, *mpaths): if self.root.record is None: raise MappingRootError( _('getrecord(%(mpath)s): "root" of incoming message is empty; either split messages or use inn.getloop' ), {"mpath": mpaths}, ) return self.root.getrecord(*mpaths)
def getcountsum(self, *mpaths): """ return the sum for all values found in mpath. Eg total number of ordered quantities.""" if self.root.record is None: raise MappingRootError( _('get(%(mpath)s): "root" of incoming message is empty; either split messages or use inn.getloop' ), {"mpath": mpaths}, ) return self.root.getcountsum(*mpaths)
def get(self, *mpaths): """ query tree (self.root) with mpath; get value (string); get None if not found.""" if self.root.record is None: raise MappingRootError( _('get(%(mpath)s): "root" of incoming message is empty; either split messages or use inn.getloop' ), {"mpath": mpaths}, ) return self.root.get(*mpaths)
def delete(self, *mpaths): """ query tree (self.root) with mpath; delete if found. return True if deleted, return False if not deleted.""" if self.root.record is None: raise MappingRootError( _('delete(%(mpath)s): "root" of incoming message is empty; either split messages or use inn.getloop' ), {"mpath": mpaths}, ) return self.root.delete(*mpaths)
def putloop(self, *mpaths): if not self.root.record: # no input yet, and start with a putloop(): dummy root if len(mpaths) == 1: self.root.append(node.Node(record=mpaths[0])) return self.root.children[-1] else: raise MappingRootError( _("putloop(%(mpath)s): mpath too long???"), {"mpath": mpaths}) return self.root.putloop(*mpaths)
def getdecimal(self, *mpaths): """ like get, returns None is value is zero (0) or not numeric. Is sometimes usefull in mapping.""" if self.root.record is None: raise MappingRootError( _('getdecimal(%(mpath)s): "root" of incoming message is empty; either split messages or use inn.getloop' ), {"mpath": mpaths}, ) return self.root.getdecimal(*mpaths)
def change(self, where, change): """ query tree (self.root) with where; if found replace with change; return True if change, return False if not changed.""" if self.root.record is None: raise MappingRootError( _('change(%(where)s,%(change)s): "root" of incoming message is empty; either split messages or use inn.getloop' ), { "where": where, "change": change }, ) return self.root.change(where, change)
def put(self, *mpaths, **kwargs): # sanity check of mpaths if not mpaths or not isinstance(mpaths, tuple): raise MappingFormatError( _("Must be dicts in tuple: put(%(mpath)s)"), {"mpath": mpaths}) for part in mpaths: if not isinstance(part, dict): raise MappingFormatError( _("Must be dicts in tuple: put(%(mpath)s)"), {"mpath": mpaths}) if "BOTSID" not in part: raise MappingFormatError( _('Section without "BOTSID": put(%(mpath)s)'), {"mpath": mpaths}) for key, value in part.items(): if value is None: logmap.debug('"None" in put %(mpaths)s.', {"mpaths": str(mpaths)}) return False if not isinstance(key, str): raise MappingFormatError( _("Keys must be strings: put(%(mpath)s)"), {"mpath": mpaths}) if isinstance(value, list): # empty is not useful, drop it (like None) if not value: logmap.debug("Empty list in put %(mpaths)s.", {"mpaths": str(mpaths)}) return False else: if kwargs.get("strip", True): part[key] = str(value).strip( ) # leading and trailing spaces are stripped from the values else: part[key] = str( value) # used for fixed ISA header of x12 if "BOTSIDnr" not in part: part["BOTSIDnr"] = "1" if self._sameoccurence(mpaths[0]): self._putcore(mpaths[1:]) else: raise MappingRootError(_('Error in root put "%(mpath)s".'), {"mpath": mpaths[0]}) logmap.debug('"True" for put %(mpaths)s', {"mpaths": str(mpaths)}) return True