X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=persistent.py;h=58014608f9a894fa40742249cd9c04933007d52e;hb=e46158e49121b8a955bb07b73f5bcf9928b79c90;hp=808f95533ada4f0231918aa84ed6647e7353debd;hpb=02302bbd9363facb59c4df2c1f4013087702cfa6;p=python_utils.git diff --git a/persistent.py b/persistent.py index 808f955..5801460 100644 --- a/persistent.py +++ b/persistent.py @@ -2,8 +2,8 @@ # © Copyright 2021-2022, Scott Gasch -"""A :class:Persistent is just a class with a load and save method. This -module defines the :class:Persistent base and a decorator that can be used to +"""A :class:`Persistent` is just a class with a load and save method. This +module defines the :class:`Persistent` base and a decorator that can be used to create a persistent singleton that autoloads and autosaves.""" import atexit @@ -60,7 +60,7 @@ class Persistent(ABC): def was_file_written_today(filename: str) -> bool: - """Convenience wrapper around was_file_written_within_n_seconds. + """Convenience wrapper around :meth:`was_file_written_within_n_seconds`. Args: filename: filename to check @@ -136,13 +136,13 @@ class PersistAtShutdown(enum.Enum): """ An enum to describe the conditions under which state is persisted to disk. This is passed as an argument to the decorator below and - is used to indicate when to call :meth:save on a :class:Persistent + is used to indicate when to call :meth:`save` on a :class:`Persistent` subclass. - * NEVER: never call :meth:save - * IF_NOT_LOADED: call :meth:save as long as we did not successfully - :meth:load its state. - * ALWAYS: always call :meth:save + * NEVER: never call :meth:`save` + * IF_NOT_LOADED: call :meth:`save` as long as we did not successfully + :meth:`load` its state. + * ALWAYS: always call :meth:`save` """ NEVER = (0,) @@ -151,27 +151,27 @@ class PersistAtShutdown(enum.Enum): class persistent_autoloaded_singleton(object): - """A decorator that can be applied to a :class:Persistent subclass - (i.e. a class with :meth:save and :meth:load methods. The + """A decorator that can be applied to a :class:`Persistent` subclass + (i.e. a class with :meth:`save` and :meth:`load` methods. The decorator will intercept attempts to instantiate the class via - it's c'tor and, instead, invoke the class' :meth:load to give it a + it's c'tor and, instead, invoke the class' :meth:`load` to give it a chance to read state from somewhere persistent (disk, db, whatever). Subsequent calls to construt instances of the wrapped class will return a single, global instance (i.e. the wrapped class is a singleton). - If :meth:load fails (returns None), the c'tor is invoked with the + If :meth:`load` fails (returns None), the c'tor is invoked with the original args as a fallback. Based upon the value of the optional argument :code:`persist_at_shutdown` argument, (NEVER, IF_NOT_LOADED, - ALWAYS), the :meth:save method of the class will be invoked just + ALWAYS), the :meth:`save` method of the class will be invoked just before program shutdown to give the class a chance to save its state somewhere. .. note:: - The implementations of :meth:save and :meth:load and where the - class persists its state are details left to the :class:Persistent + The implementations of :meth:`save` and :meth:`load` and where the + class persists its state are details left to the :class:`Persistent` implementation. Essentially this decorator just handles the plumbing of calling your save/load and appropriate times and creates a transparent global singleton whose state can be