def filterObjs(objects, sts, ets, name=None, uselmts=False): try: op = {} xobjs = filterByName(objects, name) if name is not None else objects for obj in xobjs: dt = obj["LastModified"] ts = dt.timestamp() if ts not in op: op[ts] = [] if uselmts: state = filterTS(obj, ts, sts, ets) if state: op[ts].append(obj) elif sts == 0: op[ts].append(obj) else: ts, state = filterRE(obj["Key"], sts, ets) if ts not in op: op[ts] = [] if state: op[ts].append(obj) return op except Exception as e: msg = f"failed to filter xobjs: sts {sts}, ets {ets}, name {name}, uselmts {uselmts}" msg += f"\nException: {e}" errorExit("filterObjs", msg)
def test_exits(): """It attempts sys.exit.""" fname = "test_notify" msg = "This is the test exception" e = TheException(msg) with pytest.raises(SystemExit): errorExit(fname, e, 1)
def filterByName(objects, name): try: objs = [obj for obj in objects if name in obj["Key"]] return objs except Exception as e: msg = f"failed to filter by name: {name}" msg += f"\nException {e}" errorExit("filterByName", msg)
def filterTS(obj, ts, sts, ets): try: if ts >= sts and ts <= ets: return True return False except Exception as e: msg = f"failed to filterTS object {obj}, sts {sts}, ets {ets}" msg += f"\nException {e}" errorExit("filterTS", msg)
def makeTsFromStr(dtstr): try: if dtstr.isnumeric() and len(dtstr) == 10: ts = int(dtstr) else: dt = datetime.datetime.fromisoformat(dtstr) ts = dt.timestamp() return ts except Exception as e: msg = f"failed to decode '{dtstr}' into a date/time" errorExit("makeTsFromStr", msg)
def filterRE(name, sts, ets): ts = ets try: m = tre.match(name) if m is not None: dt = datetime.datetime.fromisoformat(m[1]) ts = dt.timestamp() if ts >= sts and ts <= ets: return (ts, True) return (ts, False) except Exception as e: msg = f"failed to filterRE name {name}, sts {sts}, ets {ets}" msg += f"\nException {e}" errorExit("filterRE", msg)
def makeTsFromLength(length, startts): try: ll = length[-1:] xl = int(length[:-1]) mult = 0 ets = startts if ll == "h": mult = 3600 elif ll == "d": mult = 86400 elif ll == "w": mult = 86400 * 7 zl = xl * mult if zl > 0: ets = startts + zl return ets except Exception as e: msg = f"failed to decode '{length}' into a sane length of time" msg += f"\nException: {e}" errorExit("makeTsFromStr", msg)