From b34f81bb46d46afb07bf8d35c7bbc03771867fa4 Mon Sep 17 00:00:00 2001 From: Andrey Prokhorov Date: Wed, 28 Aug 2019 17:57:46 +0300 Subject: [PATCH] Add 'portobject.py' --- portobject.py | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 portobject.py diff --git a/portobject.py b/portobject.py new file mode 100644 index 0000000..b461893 --- /dev/null +++ b/portobject.py @@ -0,0 +1,89 @@ +class PortObject: + CLS_EQ = 1 + CLS_RANGE = 2 + CLS_LT = 3 + CLS_GT = 4 + CLS_NEQ = 5 + + tpe = {'eq': CLS_EQ, 'range': CLS_RANGE, 'lt': CLS_LT, 'gt': CLS_LT, 'neq': CLS_NEQ} + + def __init__(self, eq=None, range_=None, lt=None, gt=None, neq=None): + po = dict() + if eq: + if not isinstance(eq, (list, tuple)): + raise ValueError("Unsupported type for eq parameter!") + po['eq'] = eq + if range_: + if not isinstance(range_, (list, tuple)): + raise ValueError("Unsupported type for range_ parameter!") + if len(range_) != 2: + raise ValueError("range_ should define range, so only 2 values accepted in tuple or list") + po['range'] = range_ + if lt: + if not isinstance(lt, int): + raise ValueError("Unsupported type for lt parameter!") + po['lt'] = lt + if gt: + if not isinstance(gt, int): + raise ValueError("Unsupported type for gt parameter!") + po['gt'] = gt + if neq: + if not isinstance(neq, int): + raise ValueError("Unsupported type for neq parameter!") + po['neq'] = neq + + if len(po) == 0: + raise ValueError("Cannot create object without parameters!") + elif len(po) > 1: + raise ValueError("Unable to determine type of PortObject. Please specify only one type of port definition!") + + self.type = [x for x in po][0] + + self._range_s = 0 + self._range_e = 0 + self._eq = list() + self._f_neq = False + + if self.tpe[self.type] in [self.CLS_LT, self.CLS_GT, self.CLS_RANGE]: + if self.tpe[self.type] == self.CLS_LT: + self._range_s = 1 + self._range_e = po['lt'] - 1 + + elif self.tpe[self.type] == self.CLS_GT: + self._range_s = po['gt'] + 1 + self._range_e = 65535 + + elif self.tpe[self.type] == self.CLS_RANGE: + self._range_s = po['range'][0] + self._range_e = po['range'][1] + + elif self.tpe[self.type] == self.CLS_EQ: + if isinstance(po['eq'], (tuple, list)): + self._eq = list(po['eq']) + else: + self._eq = [po['eq']] + + elif self.tpe[self.type] == self.CLS_NEQ: + self._eq = [po['neq']] + self._f_neq = True + + print(self._range_s, self._range_e, self._eq, self._f_neq) + + def match(self, port): + if self.tpe[self.type] in [self.CLS_LT, self.CLS_GT, self.CLS_RANGE]: + return self._range_s <= port <= self._range_e + elif self.tpe[self.type] == self.CLS_EQ: + return port in self._eq + elif self.tpe[self.type] == self.CLS_NEQ: + return port not in self._eq + + +if __name__ == "__main__": + po1 = PortObject(range_=(5,10)) + print(po1.type) + po2 = PortObject(eq=[1024, 3389, 8080]) + print(po2.type) + print(po2.match(4500)) + po3 = PortObject(neq=25) + print(po3.type) + print(po3.match(4500))