From 51e2b1e2584d1ea44621690323e136d09482f1ec Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Fri, 25 Oct 2019 21:58:35 +0200 Subject: [PATCH] implement registerWildcard() for modules --- boswatch/wildcard.py | 24 ++++++++++++++++-------- module/module.py | 16 ++++++++++++++++ 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/boswatch/wildcard.py b/boswatch/wildcard.py index a57cce6..cf8ced0 100644 --- a/boswatch/wildcard.py +++ b/boswatch/wildcard.py @@ -12,19 +12,24 @@ @file: wildcard.py @date: 15.01.2018 @author: Bastian Schroll -@description: Little Helper to replace wildcards in stings +@description: Functions to replace wildcards in stings """ import logging import time -# from boswatch.module import file - logging.debug("- %s loaded", __name__) # todo check function and document + write an test -# todo maybe can be a module instead of a native boswatch piece -# idea: maybe this can be a class with a register_wildcard() method -# so the list with wildcards can be modified by other modules + +_additionalWildcards = {} + + +def registerWildcard(wildcard, bwPacketField): + if wildcard in _additionalWildcards: + logging.error("wildcard always registered: %s", wildcard) + return + logging.debug("register new wildcard %s for field: %s", wildcard, bwPacketField) + _additionalWildcards[wildcard] = bwPacketField def replaceWildcards(message, bwPacket): @@ -78,7 +83,10 @@ def replaceWildcards(message, bwPacket): # message for MSG packet is done in poc } - for wildcard in _wildcards: - message = message.replace(wildcard, _wildcards.get(wildcard)) + for wildcard, field in _wildcards.items(): + message = message.replace(wildcard, field) + + for wildcard, field in _additionalWildcards.items(): + message = message.replace(wildcard, bwPacket.getField(field)) return message diff --git a/module/module.py b/module/module.py index 05fd317..7598ce7 100644 --- a/module/module.py +++ b/module/module.py @@ -17,6 +17,8 @@ import logging import time +from boswatch import wildcard + logging.debug("- %s loaded", __name__) @@ -98,3 +100,17 @@ class Module: """!Called on shutdown of boswatch can be inherited""" pass + + @staticmethod + def registerWildcard(newWildcard, bwPacketField): + """!Register a new wildcard + + @param newWildcard: wildcard where parser searching for + @param bwPacketField: field from bwPacket where holds replacement data""" + if not newWildcard.startswith("{") or not newWildcard.endswith("}"): + logging.error("wildcard not registered - false format: %s", newWildcard) + return + if bwPacketField == "": + logging.error("wildcard not registered - bwPacket field is empty") + return + wildcard.registerWildcard(newWildcard, bwPacketField)