[Port] add describe() for logging
This commit is contained in:
parent
bb7f4906af
commit
a89f07c441
1 changed files with 29 additions and 2 deletions
|
|
@ -143,6 +143,33 @@ class Port(PivotableImpl, PositionableImpl, Mirrorable, Flippable, Copyable):
|
||||||
self.rotation = rotation
|
self.rotation = rotation
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
def describe(self) -> str:
|
||||||
|
"""
|
||||||
|
Returns a human-readable description of the port's state including cardinal directions.
|
||||||
|
"""
|
||||||
|
deg = numpy.rad2deg(self.rotation) if self.rotation is not None else "any"
|
||||||
|
|
||||||
|
cardinal = ""
|
||||||
|
travel_dir = ""
|
||||||
|
|
||||||
|
if self.rotation is not None:
|
||||||
|
dirs = {0: "East (+x)", 90: "North (+y)", 180: "West (-x)", 270: "South (-y)"}
|
||||||
|
# normalize to [0, 360)
|
||||||
|
deg_norm = deg % 360
|
||||||
|
|
||||||
|
# Find closest cardinal
|
||||||
|
closest = min(dirs.keys(), key=lambda x: abs((deg_norm - x + 180) % 360 - 180))
|
||||||
|
if numpy.isclose((deg_norm - closest + 180) % 360 - 180, 0, atol=1e-3):
|
||||||
|
cardinal = f" ({dirs[closest]})"
|
||||||
|
|
||||||
|
# Travel direction (rotation + 180)
|
||||||
|
t_deg = (deg_norm + 180) % 360
|
||||||
|
closest_t = min(dirs.keys(), key=lambda x: abs((t_deg - x + 180) % 360 - 180))
|
||||||
|
if numpy.isclose((t_deg - closest_t + 180) % 360 - 180, 0, atol=1e-3):
|
||||||
|
travel_dir = f" (Travel -> {dirs[closest_t]})"
|
||||||
|
|
||||||
|
return f"pos=({self.x:g}, {self.y:g}), rot={deg:g}{cardinal}{travel_dir}"
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
if self.rotation is None:
|
if self.rotation is None:
|
||||||
rot = 'any'
|
rot = 'any'
|
||||||
|
|
@ -210,11 +237,11 @@ class PortList(metaclass=ABCMeta):
|
||||||
|
|
||||||
def _log_port_update(self, name: str) -> None:
|
def _log_port_update(self, name: str) -> None:
|
||||||
""" Log the current state of the named port """
|
""" Log the current state of the named port """
|
||||||
port_logger.info("Port %s: %s", name, self.ports[name])
|
port_logger.debug("Port %s: %s", name, self.ports[name].describe())
|
||||||
|
|
||||||
def _log_port_removal(self, name: str) -> None:
|
def _log_port_removal(self, name: str) -> None:
|
||||||
""" Log that the named port has been removed """
|
""" Log that the named port has been removed """
|
||||||
port_logger.info("Port %s: removed", name)
|
port_logger.debug("Port %s: removed", name)
|
||||||
|
|
||||||
def _log_bulk_update(self, label: str) -> None:
|
def _log_bulk_update(self, label: str) -> None:
|
||||||
""" Log all current ports at DEBUG level """
|
""" Log all current ports at DEBUG level """
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue