for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
"""
* PyDMXControl: A Python 3 module to control DMX via Python. Featuring fixture profiles and working with uDMX.
* <https://github.com/MattIPv4/PyDMXControl/>
* Copyright (C) 2018 Matt Cowley (MattIPv4) ([email protected])
from time import time
from typing import Dict
class TimedEvent:
def __init__(self, run_time: int, callback: callable, args: tuple = (), name: str = ""):
self.__time = run_time
self.__cb = callback
self.__args = args
self.__name = name
self.__fired = None
@property
def time(self) -> str:
return "{}ms".format("{:.4f}".format(self.__time).rstrip("0").rstrip("."))
def name(self) -> str:
return "{}".format(self.__name)
def func(self) -> str:
return "<func {}>".format(self.__cb.__name__)
def args(self) -> str:
return "[{}]".format(", ".join(["{}".format(f) for f in self.__args]))
def fired(self) -> str:
if self.__fired is None:
return ""
return "{:.4f}ms ({:.4f}ms late)".format(self.__fired, self.__fired - self.__time)
def data(self) -> Dict[str, str]:
return {
"time": self.time,
"name": self.name,
"func": self.func,
"args": self.args,
"fired": self.fired
}
def __str__(self) -> str:
return "Event {} (\"{}\") {}".format(self.__time, self.name, self.func)
def run(self, start_time) -> str:
self.__cb(*self.__args)
self.__fired = (time() * 1000.0) - start_time
return "{} fired at {}".format(str(self), self.fired)