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.7+.
Pip:
pip install flashback
Build from sources:
git clone git@github.com:PaulRenvoise/flashback.git
cd flashback
python setup.py install
Flashback's helpers are currently organised within 7 modules, and global helpers:
accessing/
dig()
recursively fetch keys and indices in a nested dict or sequencevalues_at()
retrieves values from each given keys in dictionarypick()
fetches key/value pairs with given keys from a dictionary
caching/
Cache
supports several cache stores: in-memory, disk, Redis, and Memcached@cached
caches a callable's return value based on its arguments
debugging/
xp()
prints debug information about its given arguments@profiled
collects 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/
Locale
dynamically 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_CONFIGURATION
logs to stderr with a sensible set of informationDJANGO_CONSOLE_CONFIGURATION
logs to stderr with the same formatting as Django's loggerFLASK_CONSOLE_CONFIGURATION
logs to stderr with the same formatting as Flask's loggerPYRAMID_CONSOLE_CONFIGURATION
logs to stderr with the same formatting as Pyramid's loggerRAILS_CONSOLE_CONFIGURATION
logs to stderr with the same formatting as RoR's loggerAffixedStreamHandler
allows custom affixes to log records@muted
silences all (or selected) loggers during a callable's execution
EncryptedFile
exposes a mechanism to read and write encrypted contents to a fileBorg
exposes a class useful to produce a singleton behaviour across multiple instancesSentinel
exposes a class that can be used to implement the Sentinel design patternSingleton
exposes a metaclass useful to implement the Singleton design pattern@classproperty
combines @classmethod and @property (with support for @attr.setter)@deprecated
documents deprecated callables with a explicit message@retryable
retries failing executing of a callable@sampled
implements sampling strategies to filter calls made to a callable@timed
measures and prints the execution time of a callable@timeoutable
stops 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 pytest
:
pytest tests
Run the lint with ruff
:
ruff check flashback tests
Flashback is released under the MIT License.