GithubHelp home page GithubHelp logo

functional-results's Introduction

Results

Table of content

Quick start

Installing the project

Users can install project from github using pip:

pip install functional-results@git+https://github.com/quara-dev/functional-results.git

Confirm that project is installed correctly by importing the version string:

from results import __version__
print(__version__)

Developer installation

This project is packaged using setuptools and a pyproject.toml according to PEP 621.

Starting with PEP 621, the Python community selected pyproject.toml as a standard way of specifying python projects metadata. Setuptools has adopted this standard and use the information contained in this file as an input in the build process.

Install using script

The install script is responsible for first creating a virtual environment, then updating packaging dependencies such as pip, setuptools and wheel within the virtual environment. Finally, it installs the project in development mode within the virtual environment.

The virtual environment is always named .venv/

Run the install.py script located in the scripts/ directory with the Python interpreter of your choice. The script accepts the following arguments:

  • --dev: install extra dependencies required to contribute to development
  • --docs: install extra dependencies required to build and serve documentation
  • -e or --extras: a string of comma-separated extras such as "dev,docs".
  • -a or --all: a boolean flag indicating that all extras should be installed.

Example usage:

  • Install with build extra only (default behaviour)
python3 scripts/install.py
  • Install with dev extra
python3 scripts/install.py --dev
  • Install all extras
python3 scripts/install.py --all

Note: The venv module must be installed for the python interpreter used to run install script. On Debian and Ubuntu systems, this package can be installed using the following command: sudo apt-get install python3-venv. On Windows systems, python distributions have the venv module installed by default.

Development tasks

The file tasks.py is an invoke task file. It describes several tasks which developers can execute to perform various actions.

To list all available tasks, activate the project virtual environment, and run the command inv --list:

$ inv --list

Available tasks:

  build         Build sdist and wheel, and optionally build documentation.
  requirements  Generate requirements.txt file
  check         Run mypy typechecking.
  clean         Clean build artifacts and optionally documentation artifacts as well as generated bytecode.
  coverage      Serve code coverage results and optionally run tests before serving results
  docker        Build cross-platform docker image for the project
  docs          Serve the documentation in development mode.
  format        Format source code using black and isort.
  lint          Lint source code using flake8.
  test          Run tests using pytest and optionally enable coverage.
  wheelhouse    Build wheelhouse for the project

Build project artifacts

The build task can be used to build a source distribution (sdist), a wheel binary package by default.

Optionally, it can be used to build the project documentation as a static website.

Usage:

  • Build sdist and wheel only:
inv build
  • Build sdist, wheel and documentation:
inv build --docs

Building wheelhouse

The wheelhouse task can be used to generate an installation bundle also known as a wheelhouse.

pip wheel can be used to generate and package all of a project’s dependencies, with all the compilation performed, into a single directory that can be converted into a single archive. This archive then allows installation when index servers are unavailable and avoids time-consuming recompilation.

This command does not accept any argument, and generates the wheelhouse into dist/wheelhouse.

Run tests

The test task can be used to run tests using pytest.

By default, test coverage is not enabled and -c or --cov option must be provided to enable test coverage.

Usage:

  • Run tests without coverage:
inv test
  • Run tests with coverage:
inv test --cov

Visualize test coverage

The coverage task can be used to serve test coverage results on http://localhost:8000 by default. Use --port option to use a different port.

By default, test coverage is expected to be present before running the task. If it is desired to run tests before serving the results, use --run option.

Run typechecking

The check task can be used to run mypy.

By default type checking is not run on tests and -i or --include-tests option must be provided to include them.

Run linter

The lint task can be used to lint source code using flake8. This task does not accept any option.

flake8 is configured in the setup.cfg file.

Format source code

The format task can be used to format source code using black and isort. This task does not accept any option.

black is not configured in any way, but isort is configured in setup.cfg.

Serve the documentation

The docs task can be used to serve the documentation as a static website on http://localhost:8000 with auto-reload enabled by default. Use the --port option to change the listenning port and the --no-watch to disable auto-reload.

Build Docker image

The docker task can be used to build a Docker image for the project. The Dockerfile can be found at the root of the repository. By default, image is built for linux/amd64 only. Use --platform argument to build image for different architectures.

Use inv docker --help to learn about allowed options.

Git flow

Two branches exist:

  • next: The development branch. All developers must merge commits to next through Pull Requests.

  • main: The release branch. Developers must not commit to this branch. Only merge from next branch with fast-forward strategy are allowed on main branch.

Each time new commits are pushed on main, semantic-release may perform a release bump according to commit messages.

Git commits

Developers are execpted to write commit messages according to the Convetionnal Commits specification.

Commit messages which are not valid conventionnal commits are ignored in changelog.

Changelog

Changelog is generated for each release candidate and each release according to commit messages found since last release.

Changelog content is written to CHANGELOG.md by @semantic-release/release-notes-generator plugin configured with conventionnalcommit preset.

Contributing to the documentation

Project documentation is written using MkDocs static site generator. Documentation source files are written in Markdown. They can be found in docs/ directory.

Aside from documentation written in markdown files, Python API reference is generated from docstrings and type annotations found in source code.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.