Example #1
0
 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]})
Example #2
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)
Example #3
0
 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)
Example #4
0
 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)
Example #5
0
 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)
Example #6
0
 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)
Example #7
0
 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)
Example #8
0
 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)
Example #9
0
 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)
Example #10
0
 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)
Example #11
0
    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