mirror of
https://github.com/avatao-content/baseimage-tutorial-framework
synced 2024-11-22 18:21:31 +00:00
Make EventHandlerBase capable of stopping all it's instances
This commit is contained in:
parent
68a6469d23
commit
3be018eb17
@ -1,5 +1,4 @@
|
|||||||
import logging
|
import logging
|
||||||
from inspect import currentframe
|
|
||||||
from typing import Iterable
|
from typing import Iterable
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
@ -12,7 +11,10 @@ class EventHandlerBase:
|
|||||||
|
|
||||||
Derived classes must implement the handle_event() method
|
Derived classes must implement the handle_event() method
|
||||||
"""
|
"""
|
||||||
|
_instances = set()
|
||||||
|
|
||||||
def __init__(self, key, server_connector, scope):
|
def __init__(self, key, server_connector, scope):
|
||||||
|
type(self)._instances.add(self)
|
||||||
self.server_connector = server_connector
|
self.server_connector = server_connector
|
||||||
self.scope = scope
|
self.scope = scope
|
||||||
self.keys = []
|
self.keys = []
|
||||||
@ -92,6 +94,11 @@ class EventHandlerBase:
|
|||||||
self.server_connector.unsubscribe(key)
|
self.server_connector.unsubscribe(key)
|
||||||
self.keys.remove(key)
|
self.keys.remove(key)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def stop_all_instances(cls):
|
||||||
|
for instance in cls._instances:
|
||||||
|
instance.stop()
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
self.server_connector.close()
|
self.server_connector.close()
|
||||||
self.cleanup()
|
self.cleanup()
|
||||||
@ -101,15 +108,3 @@ class EventHandlerBase:
|
|||||||
Perform cleanup actions such as releasing database
|
Perform cleanup actions such as releasing database
|
||||||
connections and stuff like that.
|
connections and stuff like that.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get_local_instances(cls):
|
|
||||||
frame = currentframe()
|
|
||||||
if frame is None:
|
|
||||||
raise EnvironmentError('inspect.currentframe() is not supported!')
|
|
||||||
|
|
||||||
locals_values = frame.f_back.f_locals.values()
|
|
||||||
return {
|
|
||||||
instance for instance in locals_values
|
|
||||||
if isinstance(instance, cls)
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user