spend.display package¶
Submodules¶
spend.display.Message module¶
-
class
spend.display.Message.Message(content=None, level=30, duration=None, template=2, is_last_one=False)¶ Bases:
objectDisplayed message representation. Comparable, Hashable, Human-readable
-
LEVEL_CRITICAL= 0¶
-
LEVEL_DEBUG= 40¶
-
LEVEL_ERROR= 10¶
-
LEVEL_INFO= 30¶
-
LEVEL_WARNING= 20¶
-
TEMPLATE_TYPES= [1, 2, 3]¶
-
TEMPLATE_TYPE_ERROR= 3¶
-
TEMPLATE_TYPE_NORMAL= 2¶
-
TEMPLATE_TYPE_SPLASH= 1¶
-
can_overtake(message)¶ Check if message in argument can overtake A message can overtake others with lower level, or with same level and no duration
Parameters: message (Message) Returns: Return type: boolean can_overtake
-
spend.display.MessageHandler module¶
spend.display.QueueManager module¶
-
class
spend.display.QueueManager.PreviousItemsList¶ Bases:
listOld thing ? List that can have only one Message without duration On insert, previous elem is discarded
-
class
spend.display.QueueManager.QueueManager(queue, message_handler)¶ Bases:
threading.ThreadThis module handles Message bus management. It allows Message prioritization and Temporary messages.
-
CHECK_FREQUENCY= 1¶
-
current_item= None¶
-
display(message: spend.display.Message.Message)¶ Store argument as currently displayed message and pass it to the Handler
Parameters: message (Message)
-
external_queue= None¶
-
kill()¶ kills instance without waiting
-
message_handler= None¶
-
next(message: spend.display.Message.Message)¶ function called by a Timer when it wakes up. Trigger update
Parameters: message (Message)
-
poll()¶ Get a new item from the Queue and process it
-
previous_items= []¶
-
process_message(raw_message: Union[spend.display.Message.Message, logging.LogRecord])¶ Check if message can be displayed considering current item. Start Timer if needed and ask for display
Parameters: raw_message (Union[Message, LogRecord]) Raises: StopListeningException– Used to stop the Manager. Triggered when receiving Message(is_last_one=True)
-
process_previous_items(new_item=Message: [Lvl.40] )¶ Check if previous messages can be displayed considering new Message. If last previous item can overtake new one and nothing is displayed, of if it can overtake both ; it can be used
-
run()¶ Loop until StopListeningException is received
-
stop()¶ Wait for Messages with duration to complete and stop instance
-
timers= {}¶
-
-
exception
spend.display.QueueManager.StopListeningException¶ Bases:
BaseException
spend.display.init module¶
Functions managing global oled communication environment : PriorityQueue joining QueueManager and a logging.Logger
-
spend.display.init.kill_display_management(display_props)¶ Stop display management with kill flag
Parameters: display_props
-
spend.display.init.start_display_management()¶ - Create PriorityQueue
- Create logging Handler
- Create QueueManager thread reading from the PriorityQueue
Returns: {‘queue_manager’ Return type: QueueManager, ‘message_queue’: PriorityQueue, ‘handler’: logging.Handler}
-
spend.display.init.teardown_display_management(display_props, kill=False)¶ Stops disaplys management. Join threads.
Parameters: - display_props ({‘queue_manager’: QueueManager, ‘message_queue’: PriorityQueue, ‘handler’: logging.Handler})
- kill (bool)
spend.display.logging module¶
This file hold classes for a custom logger, preparing LogRecord containing a Message to be push in a PriorityQueue Overrides in order to
- filter log record not meant to be displayed
- Put only Message instances in the queue
-
class
spend.display.logging.DisplayFilter(name='')¶ Bases:
logging.Filter-
filter(r)¶ Filter non-Message LogRecords
-
-
class
spend.display.logging.DisplayFormatter(fmt=None, datefmt=None, style='%')¶ Bases:
logging.Formatter-
format(record)¶ Does nothing
-
-
class
spend.display.logging.DisplayQueueHandler(queue)¶ Bases:
logging.handlers.QueueHandler-
prepare(record)¶ Return actual content
-
-
spend.display.logging.create_display_handler(queue: queue.PriorityQueue)¶ Bootstrap handler and registers it
Parameters: queue (PriorityQueue)
Module contents¶
This module abstracts communication from one or many scripts to an OLED screen connected via GPIO It receive Message from a PriorityQueue and display them using a MessageHandler It can be plugged to the logging module for convenient use