spoolman: remove class variables
Variables should be contained within the spoolman instance, as in the future it could be desirable to support multiple instances. Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
parent
c4f1d251c3
commit
374516a00a
|
@ -25,26 +25,19 @@ ACTIVE_SPOOL_KEY = "spoolman.spool_id"
|
||||||
|
|
||||||
|
|
||||||
class SpoolManager:
|
class SpoolManager:
|
||||||
spool_id: Optional[int] = None
|
|
||||||
highest_e_pos: float = 0.0
|
|
||||||
extruded: float = 0.0
|
|
||||||
has_printed_error_since_last_down: bool = False
|
|
||||||
|
|
||||||
def __init__(self, config: ConfigHelper):
|
def __init__(self, config: ConfigHelper):
|
||||||
self.server = config.get_server()
|
self.server = config.get_server()
|
||||||
|
|
||||||
self.sync_rate_seconds = config.getint("sync_rate", default=5, minval=1)
|
self.sync_rate_seconds = config.getint("sync_rate", default=5, minval=1)
|
||||||
self.last_sync_time = datetime.datetime.now()
|
self.last_sync_time = datetime.datetime.now()
|
||||||
self.extruded_lock = asyncio.Lock()
|
self.extruded_lock = asyncio.Lock()
|
||||||
self.spoolman_url = f"{config.get('server').rstrip('/')}/api"
|
self.spoolman_url = f"{config.get('server').rstrip('/')}/api"
|
||||||
|
self.spool_id: Optional[int] = None
|
||||||
|
self.extruded: float = 0
|
||||||
|
self._error_logged: bool = False
|
||||||
|
self._highest_epos: float = 0
|
||||||
self.klippy_apis: APIComp = self.server.lookup_component("klippy_apis")
|
self.klippy_apis: APIComp = self.server.lookup_component("klippy_apis")
|
||||||
self.http_client: HttpClient = self.server.lookup_component(
|
self.http_client: HttpClient = self.server.lookup_component("http_client")
|
||||||
"http_client"
|
self.database: MoonrakerDatabase = self.server.lookup_component("database")
|
||||||
)
|
|
||||||
self.database: MoonrakerDatabase = self.server.lookup_component(
|
|
||||||
"database"
|
|
||||||
)
|
|
||||||
announcements: Announcements = self.server.lookup_component("announcements")
|
announcements: Announcements = self.server.lookup_component("announcements")
|
||||||
announcements.register_feed("spoolman")
|
announcements.register_feed("spoolman")
|
||||||
self._register_notifications()
|
self._register_notifications()
|
||||||
|
@ -59,7 +52,7 @@ class SpoolManager:
|
||||||
|
|
||||||
def _register_listeners(self):
|
def _register_listeners(self):
|
||||||
self.server.register_event_handler(
|
self.server.register_event_handler(
|
||||||
"server:klippy_ready", self._handle_server_ready
|
"server:klippy_ready", self._handle_klippy_ready
|
||||||
)
|
)
|
||||||
|
|
||||||
def _register_endpoints(self):
|
def _register_endpoints(self):
|
||||||
|
@ -79,14 +72,14 @@ class SpoolManager:
|
||||||
DB_NAMESPACE, ACTIVE_SPOOL_KEY, None
|
DB_NAMESPACE, ACTIVE_SPOOL_KEY, None
|
||||||
)
|
)
|
||||||
|
|
||||||
async def _handle_server_ready(self):
|
async def _handle_klippy_ready(self):
|
||||||
result = await self.klippy_apis.subscribe_objects(
|
result = await self.klippy_apis.subscribe_objects(
|
||||||
{"toolhead": ["position"]}, self._handle_status_update, {}
|
{"toolhead": ["position"]}, self._handle_status_update, {}
|
||||||
)
|
)
|
||||||
initial_e_pos = self._eposition_from_status(result)
|
initial_e_pos = self._eposition_from_status(result)
|
||||||
logging.debug(f"Initial epos: {initial_e_pos}")
|
logging.debug(f"Initial epos: {initial_e_pos}")
|
||||||
if initial_e_pos is not None:
|
if initial_e_pos is not None:
|
||||||
self.highest_e_pos = initial_e_pos
|
self._highest_epos = initial_e_pos
|
||||||
else:
|
else:
|
||||||
logging.error("Spoolman integration unable to subscribe to epos")
|
logging.error("Spoolman integration unable to subscribe to epos")
|
||||||
raise self.server.error("Unable to subscribe to e position")
|
raise self.server.error("Unable to subscribe to e position")
|
||||||
|
@ -97,10 +90,10 @@ class SpoolManager:
|
||||||
|
|
||||||
async def _handle_status_update(self, status: Dict[str, Any], _: float) -> None:
|
async def _handle_status_update(self, status: Dict[str, Any], _: float) -> None:
|
||||||
epos = self._eposition_from_status(status)
|
epos = self._eposition_from_status(status)
|
||||||
if epos and epos > self.highest_e_pos:
|
if epos and epos > self._highest_epos:
|
||||||
async with self.extruded_lock:
|
async with self.extruded_lock:
|
||||||
self.extruded += epos - self.highest_e_pos
|
self.extruded += epos - self._highest_epos
|
||||||
self.highest_e_pos = epos
|
self._highest_epos = epos
|
||||||
|
|
||||||
now = datetime.datetime.now()
|
now = datetime.datetime.now()
|
||||||
difference = now - self.last_sync_time
|
difference = now - self.last_sync_time
|
||||||
|
@ -149,12 +142,15 @@ class SpoolManager:
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if response.has_error():
|
if response.has_error():
|
||||||
if not self.has_printed_error_since_last_down:
|
if not self._error_logged:
|
||||||
response.raise_for_status()
|
self._error_logged = True
|
||||||
self.has_printed_error_since_last_down = True
|
logging.info(
|
||||||
|
f"Failed to update extrusion for spool id {spool_id}, "
|
||||||
|
f"received error: {response.error}"
|
||||||
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
self.has_printed_error_since_last_down = False
|
self._error_logged = False
|
||||||
self.extruded = 0
|
self.extruded = 0
|
||||||
|
|
||||||
async def _handle_spool_id_request(self, web_request: WebRequest):
|
async def _handle_spool_id_request(self, web_request: WebRequest):
|
||||||
|
|
Loading…
Reference in New Issue