Commit graph

115 commits

Author SHA1 Message Date
52514ca411
Merge branch 'release-0.1.0' into main
Some checks failed
CI / tests (push) Has been cancelled
2020-08-05 16:10:39 +02:00
4cf0cf4b08
Finalize release 0.1.0 2020-08-05 15:53:34 +02:00
44f32cecd7
Enable CI with GitHub Actions 2020-08-05 15:38:28 +02:00
762fbf33b4
Finalize the automated tasks in nox
- only support Python 3.8 in the project
  as GitHub Actions has no 3.9 in its base image
- re-order some sessions so that the order in
  `poetry run nox --list` is more intuitive
- add extensive documentation to the noxfile.py module
- add more whitespace to noxfile.py to make it easier to read
- add generic maintainance tasks:
  + "init-project" => set up all pre-commit hooks
  + "clean-pwd" => ~ `git clean -X` with minor exceptions
- upgrade isort to 5.3.0
2020-08-05 15:37:26 +02:00
882226f0a9
Add technical documentation for the package
- use sphinx to document the developed package
- create a nox session "docs" that builds the docs
- include a skeleton in the docs/ folder
  + how to install the package
  + how to use nox
  + license
2020-08-05 01:44:29 +02:00
126dcf7c39
Include doctests in the test suite
- use xdoctest to validate all code snippets in docstrings
- add xdoctest to the nox session "test"
2020-08-05 00:02:40 +02:00
48fe2f6879
Add security checks for the dependencies
- add a nox session "safety"
2020-08-04 23:16:15 +02:00
8586db58c7
Run type checks only against packaged *.py files
- for tests/ and the noxfile.py, type annotations are not strictly
  enforced any more
  + this simplifies the way test cases and nox sessions are written
  + for many pytest fixtures, no types are available via a public API
- put fixtures inside the classes the corresponding test cases are
  grouped in
2020-08-04 22:57:55 +02:00
97d714d9ee
Add CLI entry point umd
- add the following file:
  + src/urban_meal_delivery/console.py => click-based CLI tools
  + tests/test_console.py => tests for the module above
- add a CLI entry point `umd`:
  + implement the --version / -V option
    to show the installed package's version
  + rework to package's top-level:
    * add a __pkg_name__ variable to parameterize the package name
  + add unit and integration tests
- fix that pylint cannot know the proper order of imports in the
  isolated nox session
2020-08-04 21:14:40 +02:00
da233e2e35
Set up pre-commit hooks
- add pre-commit and pre-merge hooks:
  + run `poetry run nox -s pre-commit` on staged *.py files
  + run common pre-commit hooks for validations that could not be
    achieved with tools in the develop environment so easily
  + run `poetry run nox -s pre-merge` before merges and pushes
- implement the "pre-commit" and "pre-merge" sessions in nox
  + include a little hack to deal with the positional arguments
    passed by the pre-commit framework
- provide more documentation on the nox sessions
2020-08-04 17:58:35 +02:00
9fc5b4816a
Add a testing tool chain
- use pytest as the base, measure coverage with pytest-cov
  + configure coverage to include branches and specify source locations
  + configure pytest to enforce explicit markers
- add a package for the test suite under tests/
- add a `__version__` identifier at the package's root
  + it is dynamically assigned the version of the installed package
  + the version is PEP440 compliant and follows a strict subset of
    semantic versioning: x.y.z[.devN] where x, y, z, and N are all
    non-negative integers
  + add module with tests for the __version__
- add a nox session "test" that runs the test suite
- use flake8 to lint pytest for consistent style
2020-08-04 00:09:29 +02:00
c7989e0040
Add a code linting tool chain
- use flake8 as the main and pylint as the auxiliary linter
- install flake8 with the following plug-ins:
  + flake8-annotations => enforce type annotations for functions/classes
  + flake8-black => ensure black would not make any changes
  + flake8-expression-complexity
  + wemake-python-styleguide, which packages the following:
    * darglint         * flake8-bandit         * flake8-broken-line
    * flake8-bugbear   * flake8-commas         * flake8-comprehensions
    * flake8-debugger  * flake8-docstrings     * flake8-eradicate
    * flake8-isort     * flake8-rst-docstrings * flake8-string-format
    * flake8-quotes    * pep8-naming
- configure flake8 & friends in a rather explicit and strict way
- isort needed to be downgraded to ^4.3.21 due to a conflict with
  pylint and wemake-python-styleguide:
  + provide TODO's to remove the parts that "fix" isort
- use mypy for static type checking
- add a nox session "lint" that runs flake8, mypy, and pylint
- lint all source files
2020-08-03 23:12:12 +02:00
bb6de05709
Add a code formatting tool chain
- (auto-)format code with:
  + autoflake => * remove unused imports and variables
                 * remove duplicate dict keys
                 * expand star imports
  + black => enforce an uncompromising code style
  + isort => enforce a consistent import style
             (complying with Google's Python Style Guide)
- implement the nox session "format" that runs all these tools
- add the following file:
  + setup.cfg => holds configurations for the develop tools
2020-08-03 21:39:49 +02:00
6754f04fcd
Add nox as the task runner
- set up skeletons for all planned nox sessions
- provide a base configuration for all nox sessions
- create two utility functions:
  + _begin() => run commands common to all sessions
  + _install_packages() => install dependencies in nox sessions
                           respecting the versions pinned in poetry.lock
- add the following file:
  + noxfile.py
2020-08-03 21:24:06 +02:00
de8afa6335
Initial commit
- add the following files:
  + .gitignore => ignore poetry's and pyenv's artifacts
  + LICENSE.txt => MIT license as the project is scientific research
  + README.md => rough description of the project
  + poetry.lock
  + pyproject.toml
  + src/urban_meal_delivery/__init__.py => source code package
- use a "src" layout structure:
  + ensure that pytest runs the tests against a packaged and pip
    installed version of the source code, not the *.py files in the
    project directory
  + more info: https://hynek.me/articles/testing-packaging/
2020-08-03 20:19:42 +02:00