Simple lambda functions without `lambda x:` and with string conversion capability.
Project description
Simple lambda functions without lambda x: and with string conversion capability. Originally developed in the valid8 validation library.
This is the readme for developers. The documentation for users is available here: https://smarie.github.io/python-mini-lambda/
Building from sources + notes on this project’s design principles
This project is basically code generating code generating code :)
The following command performs the first code generation. It updates the mini_lambda/generated.py file.
python ./code_generation/mini_lambda_methods_generation.py
It is based on a mako template located at code_generation/mini_lambda_template.mako.
The generated code contains functions that generate functions when called, such as:
def __gt__(self, other):
""" Returns a new _InputEvaluator performing '<r> > other' on the result <r> of this evaluator's evaluation """
def ___gt__(input):
# first evaluate the inner function
r = self.evaluate(input)
# then call the method
return r > evaluate(other, input)
# return a new InputEvaluator of the same type than self, with the new function as inner function
return type(self)(___gt__)
So whenever you use the syntax provided, for example when you perform power2 = x > 2 |_, it dynamically creates a ‘closure’ function (here ___gt__), that will be called when you will later evaluate the expression on an input, as in power2(3).
Want to contribute ?
Contributions are welcome ! Simply fork this project on github, commit your contributions, and create pull requests.
Here is a non-exhaustive list of interesting open topics: https://github.com/smarie/python-mini-lambda/issues
Running the tests
This project uses pytest.
pytest -v mini_lambda/tests/
You may need to install requirements for setup beforehand, using
pip install -r ci_tools/requirements-test.txt
Packaging
This project uses setuptools_scm to synchronise the version number. Therefore the following command should be used for development snapshots as well as official releases:
python setup.py egg_info bdist_wheel rotate -m.whl -k3
You may need to install requirements for setup beforehand, using
pip install -r ci_tools/requirements-setup.txt
Generating the documentation page
This project uses mkdocs to generate its documentation page. Therefore building a local copy of the doc page may be done using:
mkdocs build
You may need to install requirements for doc beforehand, using
pip install -r ci_tools/requirements-doc.txt
Generating the test reports
The following commands generate the html test report and the associated badge.
pytest --junitxml=junit.xml -v mini_lambda/tests/
ant -f ci_tools/generate-junit-html.xml
python ci_tools/generate-junit-badge.py
PyPI Releasing memo
This project is now automatically deployed to PyPI when a tag is created. Anyway, for manual deployment we can use:
twine upload dist/* -r pypitest
twine upload dist/*
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 mini_lambda-1.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9c99fca7b24914a50df8292251882ae8cc5da516dad8330d9166c7c9aa35d5cd |
|
MD5 | 6dff235946bc531f617cf393d01443f7 |
|
BLAKE2b-256 | cfa2d888a819601baa1bd9c23be4aa223a56cb50fdfd264a70fa34b0bd02c27f |