pyTooling is a powerful collection of arbitrary useful classes, decorators, meta-classes and exceptions.
Project description
pyTooling
pyTooling is a powerful collection of arbitrary useful abstract data models, classes, decorators, meta-classes and exceptions. It also provides lots of helper functions e.g. to ease the handling of package descriptions.
It's useful for any Python-base project independent if it's a library, framework or CLI tool.
Introduction
pyTooling is a basic collection of powerful helpers needed by almost any Python project. More specialized helpers can be found in sub-namespaces like:
In addition, pyTooling provides a collection of CI job templates for GitHub Actions. This drastically simplifies GHA-based CI pipelines for Python projects.
Package Details
Common Helper Functions
This is a set of useful helper functions:
- getsizeof calculates the "real" size of a data structure.
- isnestedclass checks if a class is nested inside another class.
- mergedicts merges multiple dictionaries into a new dictionary.
- zipdicts iterate multiple dictionaries simultaneously.
Common Classes
- Python doesn't provide call-by-reference parameters for
simple types. This behavior can be emulated with classes provided by the
pyTooling.CallByRef
module. - Setuptools, PyPI, and others have a varying understanding of license names. The
pyTooling.Licensing
module provides unified license names as well as license name mappings or translations. - Python has many ways in figuring out the current platform using APIs from
sys
,platform
,os
, …. Unfortunately, none of the provided standard APIs offers a comprehensive answer. pyTooling provides a unified platform and environment description by summarizing multiple platform APIs into a single class instance. - While Python itself has a good versioning schema, there are no classes provided to abstract version numbers. pyTooling
provides such a representations of version numbers
following semantic versioning (SemVer) and calendar versioning (CalVer) schemes. It's provided by the
pyTooling.Versioning
module.
Configuration
Various file formats suitable for configuration information share the same features supporting: key-value pairs (dictionaries), sequences (lists), and simple types like string, integer and float. pyTooling provides an abstract configuration file data model supporting these features. Moreover, concrete configuration file format reader implementations are provided as well.
- JSON configuration reader → To be implemented.
- TOML configuration reader → To be implemented.
- YAML configuration reader for the YAML file format.
Data Structures
pyTooling also provides fast and powerful data structures offering object-oriented APIs:
- Graph data structure
→ A directed graph implementation using aVertex
andEdge
class. - Tree data structure
→ A fast and simple implementation using a singleNode
class.
Decorators
- Abstract Methods
- Methods marked with
abstractmethod
are abstract and need to be overwritten in a derived class.
An abstract method might be called from the overwriting method. - Methods marked with
mustoverride
are abstract and need to be overridden in a derived class.
It's not allowed to call a mustoverride method.
- Methods marked with
- Documentation
- Copy the doc-string from given base-class via
InheritDocString
.
- Copy the doc-string from given base-class via
- Visibility
- Register the given function or class as publicly accessible in a module via
export
.
- Register the given function or class as publicly accessible in a module via
- Documentation
@InheritDocString
→ Copy the doc-string from given base-class.
- Visibility
@export
→ Register the given function or class as publicly accessible in a module.
Exceptions
- EnvironmentException
... is raised when an expected environment variable is missing. - PlatformNotSupportedException
... is raise if the platform is not supported. - NotConfiguredException
... is raise if the requested setting is not configured.
Meta-Classes
pyTooling provides an enhanced meta-class called
ExtendedType
. This meta-classes allows to implement
abstract methods,
singletons,
slotted types and combinations thereof.
class MyClass(metaclass=ExtendedType):
A class definition using that meta-class can implement
abstract methods using decorators
@abstractmethod
or @mustoverride
.
class MyClass(metaclass=ExtendedType, singleton=True):
A class defined with enabled singleton behavior
allows only a single instance of that class to exist. If another instance is going to be created, a previously cached
instance of that class will be returned.
class MyClass(metaclass=ExtendedType, useSlots=True):
A class defined with enabled useSlots behavior
stores instance fields in slots. The meta-class, translates all type-annotated fields in a class definition into
slots. Slots allow a more efficient field storage and access compared to dynamically stored and accessed fields hosted
by __dict__
. This improves the memory footprint as well as the field access performance of all class instances. This
behavior is automatically inherited to all derived classes.
class MyClass(ObjectWithSlots):
A class definition deriving from ObjectWithSlots
will bring the slotted type behavior to that class and all derived
classes.
Packaging
A set of helper functions to describe a Python package for setuptools.
- Helper Functions:
loadReadmeFile
Load aREADME.md
file from disk and provide the content as long description for setuptools.loadRequirementsFile
Load arequirements.txt
file from disk and provide the content for setuptools.extractVersionInformation
Extract version information from Python source files and provide the data to setuptools.
- Package Descriptions
DescribePythonPackage
tbdDescribePythonPackageHostedOnGitHub
tbd
Examples
@export
Decorator
from pyTooling.Decorators import export
@export
class MyClass:
pass
CallByRefIntParam
from pyTooling.CallByRef import CallByRefIntParam
# define a call-by-reference parameter for integer values
myInt = CallByRefIntParam(3)
# a function using a call-by-reference parameter
def func(param: CallByRefIntParam):
param <<= param * 4
# call the function and pass the wrapper object
func(myInt)
print(myInt.Value)
Contributors
- Patrick Lehmann (Maintainer)
- Sven Köhler
- and more...
License
This Python package (source code) licensed under Apache License 2.0.
The accompanying documentation is licensed under Creative Commons - Attribution 4.0 (CC-BY 4.0).
SPDX-License-Identifier: Apache-2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pyTooling-2.6.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 910db5b496d14e42f772911367a9df848f725effc627228a7b9d5d2c12165370 |
|
MD5 | dd8305e9a8a50bf133fd46eb258889a3 |
|
BLAKE2b-256 | 21913d6569169f216650015cdced3e09008c772a845540367bd3fc0c3f495c06 |