You've probably already implemented it.
Flashback is a collection of python utilities: it contains classes, metaclasses, decorators, functions, constants, etc. that you might have written a couple times already.
Flashback supports python 3.12+.
Pip:
pip install flashbackUv:
uv pip install flashbackBuild from sources:
git clone git@github.com:PaulRenvoise/flashback.git
cd flashback
uv buildFlashback's helpers are currently organised within 7 modules, and global helpers:
accessing/dig()recursively fetch keys and indices in a nested mapping or sequencevalues_at()retrieves values from each given keys in dictionarypick()fetches key/value pairs with given keys from a dictionary
caching/Cachesupports several cache stores: in-memory, disk, Redis, and Memcached@cachedcaches a callable's return value based on its arguments
debugging/xp()prints debug information about its given arguments@profiledcollects and dumps profiling stats over a callable's executioncaller()allows a developer to print debug information about a callable's callerget_callable()extracts a callable instance from a frameget_call_context()finds and returning the code context around a call made in a frameget_frameinfo()implements a fasterinspect.stack()[x]
formatting/oxford_join()joins strings in a human-readable waytransliterate()represents unicode text in ASCII (using Unidecode)camelize()transforms any case to camelCasepascalize()transforms any case to PascalCasesnakeize()transforms any case to snake_casekebabize()transforms any case to kebab-caseparameterize()formats a given string to be used in URLsordinalize()represents numbers in their ordinal representationsadverbize()represents numbers in their numeral adverb representationstruncate()truncates long sentences at a given limit and append a suffix if neededsingularize()returns the singular form of a given wordpluralize()returns the plural form of a given word
iterating/renumerate()enumerates an iterable starting from its endchunks()splits an iterable into smaller chunks, padding them if requestedpartition()splits an iterable into items validating a predicate and the ones that don'tuniq()removes duplicates from an iterable while keeping the items' orderuniq_by()removes duplicates defined via a user-supplied callable from an iterable while keeping the items' ordercompact()removes None values from an iterableflatten()unpacks nested iterable into the given iterableflat_map()applies a function to every item and nested item of the given iterable
i16g/Localedynamically loads localization files from a package path
importing/import_class_from_path()fetches a class from a package path and returns itimport_module_from_path()exposes the contents of a module as globals from a package path
logging/DEFAULT_CONSOLE_CONFIGURATIONlogs to stderr with a sensible set of informationDJANGO_CONSOLE_CONFIGURATIONlogs to stderr with the same formatting as Django's loggerFLASK_CONSOLE_CONFIGURATIONlogs to stderr with the same formatting as Flask's loggerPYRAMID_CONSOLE_CONFIGURATIONlogs to stderr with the same formatting as Pyramid's loggerRAILS_CONSOLE_CONFIGURATIONlogs to stderr with the same formatting as RoR's loggerAffixedStreamHandlerallows custom affixes to log records@mutedsilences all (or selected) loggers during a callable's execution
EncryptedFileexposes a mechanism to read and write encrypted contents to a fileBorgexposes a class useful to produce a singleton behaviour across multiple instancesSentinelexposes a class that can be used to implement the Sentinel design patternSingletonexposes a metaclass useful to implement the Singleton design pattern@classpropertycombines @classmethod and @property (with support for @attr.setter)@deprecateddocuments deprecated callables with a explicit message@retryableretries failing executing of a callable@sampledimplements sampling strategies to filter calls made to a callable@timedmeasures and prints the execution time of a callable@timeoutablestops the execution of a callable if its run time is too long
The Pull Request template has a checklist containing everything you need to submit a new PR.
Run the tests with:
uv run pytest testsRun the typechecker with:
uv run pyrefly check flashback testsRun the lint with:
uv run ruff check flashback testsRun the formatter with:
uv run ruff format flashback testsFlashback is released under the MIT License.
