Skip to content
Snippets Groups Projects
Commit c745d3ee authored by Moul's avatar Moul
Browse files

Proofread CONTRIBUTING.md (#433)

Introduce logos
parent b8a0203a
No related branches found
No related tags found
1 merge request!271Set up new website structure with MkDocs (#433)
......@@ -6,23 +6,27 @@ Part of the Duniter project running the Ğ1 currency, Silkaj project is aiming a
## Install the development environment
We are using [Poetry](https://python-poetry.org/) as a development environment solution. Start [installing Poetry](/install_poetry/).
We are using [Poetry](https://python-poetry.org/) as a development environment solution. Start by [installing Poetry](/install_poetry/).
This will install a sandboxed Python environment.
Dependencies will be installed in it in order to have Silkaj running and to have pre-installed developement tools.
## Workflow
- We use branches for merge requests
- We prefer fast-forward and rebase method than having a merge commit. This in order to have a clean history.
- We prefer fast-forward and rebase method than having merge commits created. This in order to have a clean history.
## Branches
- `main`: development and stable branch
- maintainance branches, to maintain a stable version while developing future version with breaking changes. For instance: `0.10`
- maintainance branches, to maintain a stable version while developing future version with breaking changes. For instance: `release/0.12`
## Developing with DuniterPy
[DuniterPy](https://git.duniter.org/clients/python/duniterpy) is a Python library for Duniter clients.
<center>
[![DuniterPy logo](images/duniterpy_logo.png){: style="height:150px;width:150px"}](https://git.duniter.org/clients/python/duniterpy)
</center>
[DuniterPy](https://git.duniter.org/clients/python/duniterpy) is a Python library for Duniter v1 clients.
It implements a client with multiple APIs, the handling for document signing.
As it is coupled with Silkaj, it is oftenly needed to develop in both repositories.
......@@ -49,40 +53,51 @@ Please read their documentations on how to use them the best possible.
- [DuniterPy](https://clients.pages.duniter.org/python/duniterpy/index.html): Autogenerated documentation.
- Feel free to contribute upstream to share the code with other Python programs
- [Click](https://click.palletsprojects.com/#documentation)
- [Rich-Click](https://github.com/ewels/rich-click)
- [Arrow](https://arrow.readthedocs.io/)
- [texttable](https://github.com/foutaise/texttable/#documentation)
## Pre-commit hooks
<center>
[![Pre-commit logo](images/pre-commit_logo.svg){: style="height:150px;width:150px"}](https://pre-commit.com/)
</center>
We are using [`pre-commit`](https://pre-commit.com/) tool to perform checks on staged changes before committing.
We are using it for `black` formatting, `mypy` static typing, `gitlab-ci` linting.
We are also using `ruff` which replaces `isort` imports sorting, `pylint` code linting, `autoflake`, and `pyupgrade`
Install `pre-commit` from your distribution. In case it is an outdated version, install it from `pip`:
Install `pre-commit` from your distribution. In case it is an outdated version, install it with `pipx`:
```bash
sudo apt install pre-commit
pip install --user pre-commit
pipx install pre-commit
```
To install the `git-hooks`, run:
To install the `git-hooks`, from within Silkaj repository, run:
```bash
> pre-commit install
pre-commit install
```
Then each time you commit changes, the hooks will perform checks.
Then each time you commit changes, the hooks will perform verifications.
In case you want to commit while the hooks are failing, run the following to [skip the hooks](https://stackoverflow.com/a/7230886):
```bash
git commit -m "msg" --no-verify/-n
```
To manually run one of the tool above, run (eg for `black`):
```bash
> pre-commit run --all-files black
pre-commit run --all-files black
```
To run all checks on all files:
```bash
> pre-commit run -a
pre-commit run -a
```
### Authorization for GitLab CI linter hook
......@@ -90,7 +105,7 @@ To run all checks on all files:
`pre-commit run -a (gitlab-ci-linter)` is failing due to authorization required for CI lint API accesses.
When running this command, just ignore this failed hook.
In case you want to commit a `.gitlab-ci.yml` edition, this hook will prevent the commit creation.
You can [skip the hooks](https://stackoverflow.com/a/7230886) with `git commit -m "msg" --no-verify`.
You can skip the hooks as mentionned above.
This is fine for occasional `.gitlab-ci.yml` editions. In case you would like to edit this file more often and have it checked, ask a maintainer to provide you with `GITLAB_PRIVATE_TOKEN` environment variable that can be set into a shell configuration.
With Bash, in `$HOME/.bashrc` add the following:
......@@ -104,15 +119,19 @@ With Fish, in `$HOME/.config/fish/config.fish` add the following:
set -xg GITLAB_PRIVATE_TOKEN ""
```
Check out duniterpy#169 for more details.
Check out [duniterpy#169](https://git.duniter.org/clients/python/duniterpy/-/issues/169) for more details.
## Tests
We are using [Pytest](https://pytest.org) as a tests framework. To know more about how Silkaj implement it read the [project test documentation](/test_and_coverage/).
<center>
[![Pytest logo](images/pytest_logo.svg){: style="height:150px;width:150px"}](https://pytest.org)
</center>
We are using [Pytest](https://pytest.org) as a tests framework. For more information on how Silkaj implements them check the [project test documentation](/test_and_coverage/).
Tests are stored into `unit` and `integration` folders depending on their types, then using the same tree as the source code.
Tests are stored into `unit` and `integration` folders depending on their types, then using a similar tree as the source code.
To run tests, within `silkaj` repository:
To run the tests, from within `silkaj` repository, run:
```bash
poetry run pytest
......@@ -136,7 +155,7 @@ To create a release, we use following script which will bump the version in diff
./release.sh 0.20.0
```
Then, a `git push --tags` is necessary to publish the tag. Git could be configured to publish tags with a simple `push`.
Then, a `git push --tags` is necessary to publish the tag.
### How to release a pre-release on PyPI
......@@ -154,18 +173,22 @@ pip install silkaj --user --upgrade --pre
pip install silkaj --user --upgrade -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/
```
### Update copyright year
## Update copyright year
Follow [this documentation](https://github.com/Lucas-C/pre-commit-hooks#removing-old-license-and-replacing-it-with-a-new-one)
Only difference is to update the year in `license_header.txt` rather than `LICENSE.txt`.
## PyPI and PyPI test distributions
<center>
[![PyPI logo](images/pypi_logo.svg){: style="height:150px;width:150px"}](https://pypi.org/project/silkaj)
</center>
Silkaj is distributed to PyPI, the Python Package Index, for further `pip` installation.
Silkaj can be published to [PyPI](https://pypi.org/project/silkaj) or to [PyPI test](https://test.pypi.org/project/silkaj/) for testing purposes.
Publishing to PyPI or PyPI test can be directly done from the continuous delivery or from Poetry it-self.
The CD jobs does appear on a tag and have to be triggered manually.
Only the project maintainers have the rights to publish tags.
The CD jobs appear on a tag and have to be triggered manually.
Only the project maintainers have the rights to push tags.
### PyPI
......@@ -194,13 +217,16 @@ The `--extra-index-url` is used to retrieve dependencies packages from the offic
## Continuous integration and delivery
<center>
![GitLab logo](images/GitLab_icon.svg){: style="height:100px;width:100px"}
</center>
### Own built Docker images
- https://git.duniter.org/docker/python3/poetry
- Python images based on latest Debian
- Poetry installed on top
Silkaj pipeline is running images built on top of official Python images based on latest Debian with Poetry installed on top them.
### Jobs
They can be found in [this repository](https://git.duniter.org/docker/python3/poetry).
### Pipeline and its jobs
- Checks:
- pre-commit hooks
......@@ -213,15 +239,18 @@ The `--extra-index-url` is used to retrieve dependencies packages from the offic
- PyPI test
- Docker pip
- Docker poetry
- Coverage website deployment on GitLab Pages
- Website/project documentation commited to be deployed via GitLab Pages
### Ğ1 monetary license update
To modify the Ğ1 monetary license files, please change them on [its repository](https://git.duniter.org/documents/g1_monetary_license), since it’s integrated in silkaj repository as a `git subtree`.
To pull changes from upstream with `git subtree`, add the repository as a remote then pull:
Ğ1 monetary license is included in Silkaj repository as a `git subtree`.
To update the licence files, add the license repository as a remote then pull:
```bash
git remote add g1_monetary_license https://git.duniter.org/documents/g1_monetary_license.git
git subtree pull --prefix g1_monetary_license g1_monetary_license master
```
Depending on your distribution, you might need to install `git-subtree`.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1000"
height="963.197"
viewBox="0 0 1000 963.197"
version="1.1"
id="svg85">
<sodipodi:namedview
id="namedview87"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="1"
inkscape:cx="991.5"
inkscape:cy="964.5"
inkscape:window-width="1126"
inkscape:window-height="895"
inkscape:window-x="774"
inkscape:window-y="12"
inkscape:window-maximized="0"
inkscape:current-layer="svg85" />
<defs
id="defs74">
<style
id="style72">.cls-1{fill:#e24329;}.cls-2{fill:#fc6d26;}.cls-3{fill:#fca326;}</style>
</defs>
<g
id="LOGO"
transform="matrix(5.2068817,0,0,5.2068817,-489.30756,-507.76085)">
<path
class="cls-1"
d="m 282.83,170.73 -0.27,-0.69 -26.14,-68.22 a 6.81,6.81 0 0 0 -2.69,-3.24 7,7 0 0 0 -8,0.43 7,7 0 0 0 -2.32,3.52 l -17.65,54 h -71.47 l -17.65,-54 a 6.86,6.86 0 0 0 -2.32,-3.53 7,7 0 0 0 -8,-0.43 6.87,6.87 0 0 0 -2.69,3.24 L 97.44,170 l -0.26,0.69 a 48.54,48.54 0 0 0 16.1,56.1 l 0.09,0.07 0.24,0.17 39.82,29.82 19.7,14.91 12,9.06 a 8.07,8.07 0 0 0 9.76,0 l 12,-9.06 19.7,-14.91 40.06,-30 0.1,-0.08 a 48.56,48.56 0 0 0 16.08,-56.04 z"
id="path76" />
<path
class="cls-2"
d="m 282.83,170.73 -0.27,-0.69 a 88.3,88.3 0 0 0 -35.15,15.8 L 190,229.25 c 19.55,14.79 36.57,27.64 36.57,27.64 l 40.06,-30 0.1,-0.08 a 48.56,48.56 0 0 0 16.1,-56.08 z"
id="path78" />
<path
class="cls-3"
d="m 153.43,256.89 19.7,14.91 12,9.06 a 8.07,8.07 0 0 0 9.76,0 l 12,-9.06 19.7,-14.91 c 0,0 -17.04,-12.89 -36.59,-27.64 -19.55,14.75 -36.57,27.64 -36.57,27.64 z"
id="path80" />
<path
class="cls-2"
d="M 132.58,185.84 A 88.19,88.19 0 0 0 97.44,170 l -0.26,0.69 a 48.54,48.54 0 0 0 16.1,56.1 l 0.09,0.07 0.24,0.17 39.82,29.82 c 0,0 17,-12.85 36.57,-27.64 z"
id="path82" />
</g>
</svg>
docs/images/duniterpy_logo.png

36.1 KiB

<svg xmlns="http://www.w3.org/2000/svg" height="2000" width="2000"><defs><clipPath id="a" clipPathUnits="userSpaceOnUse"><path d="M0 1500h1500V0H0z"/></clipPath></defs><g clip-path="url(#a)" transform="matrix(1.33333 0 0 -1.33333 0 2000)"><path d="M665.147 130.852L130.853 665.147c-46.863 46.862-46.863 122.842 0 169.705l534.294 534.295c46.863 46.864 122.843 46.864 169.706 0l534.294-534.294c46.863-46.863 46.863-122.843 0-169.706L834.853 130.852c-46.863-46.862-122.843-46.862-169.706 0" fill="#fab040"/><path d="M687.774 233.226L233.225 687.775c-34.366 34.366-34.366 90.085 0 124.45l454.55 454.55c34.365 34.366 90.084 34.366 124.45 0l454.55-454.55c34.365-34.365 34.365-90.084 0-124.45l-454.55-454.55c-34.366-34.365-90.085-34.365-124.45 0z" fill="none" stroke="#040521" stroke-width="34" stroke-miterlimit="10"/><path d="M784.672 763.286c12.096 0 23.74.893 34.943 2.688 11.194 1.785 21.053 5.26 29.569 10.416 8.504 5.145 15.34 12.432 20.496 21.84 5.144 9.408 7.726 21.724 7.726 36.96 0 15.225-2.582 27.552-7.726 36.96-5.156 9.408-11.992 16.684-20.496 21.84-8.516 5.145-18.375 8.62-29.57 10.416-11.202 1.785-22.846 2.688-34.942 2.688h-81.985V763.286zm28.895 225.792c30.009 0 55.544-4.368 76.609-13.104 21.05-8.736 38.187-20.275 51.406-34.608 13.209-14.343 22.85-30.692 28.897-49.056 6.048-18.375 9.072-37.412 9.072-57.12 0-19.268-3.024-38.2-9.072-56.784-6.047-18.596-15.688-35.06-28.897-49.392-13.22-14.343-30.355-25.872-51.406-34.608-21.065-8.736-46.6-13.104-76.61-13.104h-110.88V509.27H597.184v479.808z"/></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="247.808" height="185.85" viewBox="0 0 232.32 174.235"><path d="m276.515 367.463 15.556 5.662 15.785-5.745-15.555-5.662zm15.624-12.783 15.555 5.662 15.786-5.745-15.556-5.662z" style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m292.139 354.68 15.555 5.662v18.283l-15.555-5.662z" style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m260.892 391.608 15.555 5.662 15.786-5.745-15.555-5.662z" style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m260.892 391.608 15.555 5.662v18.283l-15.555-5.662z" style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m260.892 365.608 15.555 5.662 15.786-5.745-15.555-5.662z" style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M276.447 371.27v18.283l15.786-5.746v-18.282z" style="fill:#fff;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m260.892 365.608 15.555 5.662v18.283l-15.555-5.662z" style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m276.7 350.057-.025.03a2.783 2.783 0 0 0-2.758 2.782 2.783 2.783 0 0 0 .053.531l-11.746 14.385 7.646 9.363-3.869-9.363 9.984-12.228a2.783 2.783 0 0 0 .715.095 2.783 2.783 0 0 0 .715-.093l5.315 6.507 5.373 1.955-8.672-10.62a2.783 2.783 0 0 0 .05-.532 2.783 2.783 0 0 0-2.755-2.781l-.025-.031zm2.135-7.289a2.136 2.136 0 1 0-4.271 0v3.265a2.136 2.136 0 0 0 4.271 0v-3.265zm-.98-.002v3.265a1.155 1.155 0 0 1-2.31 0v-3.265a1.154 1.154 0 1 1 2.31 0zm.98-11.211a2.136 2.136 0 1 0-4.271 0v3.265a2.136 2.136 0 0 0 4.271 0v-3.265zm-.98-.002v3.265a1.155 1.155 0 0 1-2.31 0v-3.265a1.154 1.154 0 1 1 2.31 0z" style="fill:#646464;fill-opacity:1" transform="translate(-260.714 -252.848)"/><path d="M277.22 335.545v6.498a.518.518 0 1 1-1.04 0v-6.498a.518.518 0 1 1 1.04 0zm0 11.213v6.497a.518.518 0 1 1-1.04 0v-6.497a.518.518 0 1 1 1.04 0zm0-22.463v6.498a.518.518 0 1 1-1.04 0v-6.498a.518.518 0 1 1 1.04 0z" style="fill:#646464;fill-opacity:1" transform="translate(-260.714 -252.848)"/><path d="m276.515 397.29 15.556 5.661v18.283l-15.556-5.662z" style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m276.515 378.826 15.556 5.661 15.785-5.745-15.555-5.662z" style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m276.515 378.826 15.556 5.661v18.283l-15.556-5.661z" style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M354.564 391.589v18.283l15.786-5.746v-18.282z" style="fill:#fff;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M338.94 397.27v18.283l15.787-5.746v-18.282z" style="fill:#ffd242;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M351.866 401.728a2.617 3.737 35 0 1-3.032 4.33 2.617 3.737 35 0 1-3.032-2.123 2.617 3.737 35 0 1 3.032-4.33 2.617 3.737 35 0 1 3.032 2.123z" style="fill:#fff;fill-opacity:1" transform="translate(-260.714 -252.848)"/><path d="M323.318 402.952v18.282l15.785-5.745v-18.283z" style="fill:#ffd242;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M307.694 408.633v18.282l15.786-5.745v-18.283z" style="fill:#fff;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m292.139 402.971 15.555 5.662v18.282l-15.555-5.661z" style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M354.564 373.125v18.283l15.786-5.746V367.38z" style="fill:#ffd242;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m339.009 349 15.555 5.661 15.786-5.745-15.556-5.662z" style="fill:#ffc91d;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M354.564 354.661v18.283l15.786-5.746v-18.282zm-15.624 24.145v18.283l15.787-5.745V373.06z" style="fill:#ffd242;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M338.94 360.342v18.283l15.787-5.745v-18.283z" style="fill:#3775a9;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m323.385 336.217 15.556 5.661 15.785-5.745-15.555-5.662z" style="fill:#2f6491;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M338.94 341.878v18.283l15.787-5.745v-18.283z" style="fill:#3775a9;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M323.318 384.488v18.282l15.785-5.745v-18.283z" style="fill:#ffd242;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M323.318 366.024v18.282l15.785-5.745v-18.283zm-15.624 24.145v18.282l15.786-5.745v-18.283z" style="fill:#3775a9;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m292.139 384.507 15.555 5.662v18.282l-15.555-5.661zm0-18.464 15.555 5.662 15.786-5.746-15.556-5.661z" style="fill:#2f6491;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M307.694 371.705v18.282l15.786-5.745v-18.283z" style="fill:#3775a9;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m292.139 366.043 15.555 5.662v18.282l-15.555-5.661zm15.623-24.145 15.556 5.662 15.785-5.746-15.555-5.662z" style="fill:#2f6491;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M323.318 347.56v18.282l15.785-5.745v-18.283z" style="fill:#3775a9;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m307.762 341.898 15.556 5.662v18.282l-15.556-5.661z" style="fill:#2f6491;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M332.242 353.432a2.617 3.737 35 0 1-3.032 4.33 2.617 3.737 35 0 1-3.031-2.123 2.617 3.737 35 0 1 3.031-4.33 2.617 3.737 35 0 1 3.032 2.123z" style="fill:#fff;fill-opacity:1" transform="translate(-260.714 -252.848)"/><path d="M297.375 291.705c0-9.645-2.75-14.596-8.25-14.868a15.497 15.497 0 0 0-6.404 1.053c-1.66.594-2.776 1.181-3.364 1.775v23.022c3.519 2.208 6.643 3.234 9.368 3.073 5.765-.381 8.65-5.062 8.65-14.055zm6.785.4c0 4.9-1.149 8.968-3.46 12.202-2.576 3.66-6.146 5.546-10.71 5.649-3.441.11-6.985-.968-10.633-3.228v20.923l-5.9-2.104v-46.444c.968-1.187 2.214-2.207 3.725-3.073 3.512-2.046 7.779-3.098 12.801-3.15l.084.084c4.59-.058 8.128 1.827 10.614 5.649 2.317 3.505 3.48 7.998 3.48 13.492zm36.063 13.732c0 6.572-.659 11.123-1.976 13.654-1.323 2.53-3.84 4.552-7.56 6.056-3.014 1.188-6.275 1.833-9.774 1.943l-.974-3.719c3.557-.484 6.062-.968 7.514-1.452 2.86-.969 4.823-2.453 5.9-4.442.866-1.62 1.292-4.713 1.292-9.29v-1.536a30.317 30.317 0 0 1-12.686 2.744c-2.905 0-5.468-.91-7.676-2.744-2.479-1.995-3.718-4.526-3.718-7.592V274.9l5.9-2.021v24.72c0 2.64.852 4.673 2.557 6.1 1.704 1.427 3.912 2.111 6.617 2.06 2.705-.059 5.604-1.104 8.683-3.15v-28.84h5.9v32.067zm23.034 3.796c-.704.058-1.35.084-1.943.084-3.338 0-5.94-.794-7.799-2.389-1.853-1.594-2.782-3.796-2.782-6.604v-23.241h-4.042v-3.712h4.042v-9.858l5.894-2.098v11.956h6.63v3.712h-6.63v23.08c0 2.214.594 3.783 1.782 4.7 1.02.755 2.64 1.187 4.848 1.297v3.073zm35.727-.484h-5.9v-22.776c0-2.318-.543-4.313-1.621-5.978-1.246-1.885-2.976-2.828-5.197-2.828-2.705 0-6.088 1.427-10.149 4.28v27.302h-5.9v-54.442l5.9-1.86v24.797c3.77-2.743 7.89-4.118 12.363-4.118 3.125 0 5.655 1.052 7.592 3.15 1.943 2.098 2.912 4.713 2.912 7.837v24.636zm31.362-18.373c0-3.706-.703-6.766-2.104-9.187-1.666-2.95-4.255-4.506-7.754-4.668-6.469.375-9.697 5.01-9.697 13.893 0 4.074.672 7.476 2.028 10.207 1.73 3.48 4.325 5.197 7.785 5.139 6.495-.052 9.742-5.178 9.742-15.384zm6.463.038c0 5.275-1.35 9.665-4.042 13.17-2.963 3.925-7.056 5.894-12.279 5.894-5.177 0-9.212-1.969-12.124-5.894-2.64-3.505-3.957-7.895-3.957-13.17 0-4.958 1.426-9.128 4.28-12.524 3.015-3.602 6.979-5.41 11.879-5.41 4.9 0 8.89 1.808 11.962 5.41 2.854 3.396 4.28 7.566 4.28 12.524zm33.828 18.335h-5.9v-24.067c0-2.64-.795-4.7-2.383-6.185-1.588-1.479-3.705-2.195-6.346-2.137-2.802.052-5.468.968-7.999 2.744v29.645h-5.9v-30.375c3.396-2.472 6.52-4.086 9.374-4.842 2.692-.703 5.067-1.052 7.114-1.052 1.4 0 2.718.136 3.957.407 2.318.536 4.203 1.53 5.656 2.989 1.62 1.614 2.427 3.55 2.427 5.816v27.057z" style="fill:#646464;fill-opacity:1" transform="translate(-260.714 -252.848)"/><path d="M482.106 267.276h1.014v-6.358h2.401v-.758h-5.817v.758h2.402v6.358m4.314 0h.866v-5.807l1.88 5.806h.964l1.96-5.786v5.787h.944v-7.116h-1.25l-2.14 6.096-1.826-6.096h-1.398v7.116" style="font-style:normal;font-weight:400;font-size:15.16445827px;line-height:125%;font-family:&quot;Bitstream Vera Sans&quot;;fill:#646464;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" transform="translate(-260.714 -252.848)"/><path d="M381.321 335.579h2.988v-6.183h2.68c3.632 0 6.414-1.726 6.414-5.461 0-3.916-2.73-5.204-6.415-5.204h-5.667v16.848zm2.988-8.579v-5.873h2.448c2.447 0 3.71.695 3.71 2.808 0 2.06-1.212 3.065-3.71 3.065h-2.448zm10.503 5.178c0 2.216 1.546 3.71 3.761 3.71 1.494 0 2.782-.747 3.916-1.7h.077l.232 1.39h2.421v-7.496c0-3.53-1.545-5.461-4.714-5.461-2.01 0-3.787.773-5.178 1.648l1.082 1.984c1.108-.67 2.293-1.236 3.555-1.236 1.7 0 2.267 1.133 2.293 2.473-5.178.566-7.445 1.983-7.445 4.688zm2.885-.232c0-1.262 1.134-2.164 4.56-2.602v2.834c-.928.876-1.726 1.391-2.757 1.391-1.056 0-1.803-.49-1.803-1.623zm10.316-2.679c0 4.2 2.653 6.62 6.105 6.62 1.443 0 2.963-.566 4.148-1.622l-1.237-1.88c-.695.566-1.571 1.081-2.602 1.081-1.983 0-3.374-1.674-3.374-4.199 0-2.55 1.416-4.225 3.452-4.225.798 0 1.468.335 2.138.928l1.417-1.88c-.85-.825-2.087-1.47-3.71-1.47-3.375 0-6.337 2.422-6.337 6.647zm12.749 6.312h2.91v-3.22l1.984-2.268 3.246 5.488h3.22l-4.765-7.497 4.328-5.152h-3.246l-4.689 5.822h-.077v-11.36h-2.911v18.187zm12.641-3.401c0 2.216 1.546 3.71 3.761 3.71 1.495 0 2.783-.747 3.916-1.7h.077l.232 1.39h2.422v-7.496c0-3.53-1.546-5.461-4.715-5.461-2.009 0-3.786.773-5.178 1.648l1.082 1.984c1.108-.67 2.293-1.236 3.555-1.236 1.7 0 2.267 1.133 2.293 2.473-5.178.566-7.445 1.983-7.445 4.688zm2.886-.232c0-1.262 1.133-2.164 4.56-2.602v2.834c-.928.876-1.727 1.391-2.757 1.391-1.056 0-1.803-.49-1.803-1.623zm12.763 5.487c0-.592.309-1.159.979-1.674.489.129 1.03.18 1.725.18h1.726c1.443 0 2.242.284 2.242 1.263 0 1.082-1.391 2.035-3.427 2.035-2.009 0-3.245-.67-3.245-1.804zm-2.474.438c0 2.216 2.242 3.298 5.256 3.298 4.122 0 6.75-1.958 6.75-4.457 0-2.19-1.598-3.117-4.638-3.117h-2.241c-1.546 0-2.06-.438-2.06-1.16 0-.566.231-.875.617-1.21a4.665 4.665 0 0 0 1.726.335c2.68 0 4.792-1.494 4.792-4.302 0-.876-.31-1.649-.721-2.138h2.318v-2.19h-4.534a5.7 5.7 0 0 0-1.855-.31c-2.653 0-4.997 1.624-4.997 4.535 0 1.494.798 2.705 1.648 3.349v.103c-.72.515-1.39 1.365-1.39 2.344 0 1.03.489 1.7 1.133 2.112v.103c-1.16.722-1.804 1.65-1.804 2.705zm5.41-8.166c-1.236 0-2.215-.927-2.215-2.55 0-1.597.979-2.5 2.215-2.5 1.237 0 2.19.928 2.19 2.5 0 1.623-.979 2.55-2.19 2.55zm7.597-.438c0 4.173 2.731 6.62 6.235 6.62 1.597 0 3.117-.566 4.328-1.365l-1.005-1.854c-.927.592-1.855.927-2.937.927-2.035 0-3.478-1.288-3.735-3.58h8.037c.077-.31.13-.825.13-1.392 0-3.53-1.804-6.002-5.23-6.002-2.963 0-5.823 2.524-5.823 6.646zm2.86-1.133c.258-2.113 1.546-3.22 3.04-3.22 1.726 0 2.576 1.21 2.576 3.22h-5.616zm-81.124 33.721h2.988v-16.848h-2.988v16.848zm6.988 0h2.962v-8.836c1.056-1.03 1.778-1.572 2.885-1.572 1.392 0 1.984.773 1.984 2.86v7.548h2.963v-7.935c0-3.194-1.185-5.023-3.89-5.023-1.726 0-3.014.901-4.148 2.01h-.103l-.206-1.701h-2.447v12.649zm13.667-6.312c0 4.173 2.035 6.62 5.204 6.62 1.365 0 2.653-.746 3.58-1.674h.104l.206 1.366h2.447v-18.188h-2.962v4.586l.103 2.035c-.98-.85-1.88-1.391-3.323-1.391-2.757 0-5.359 2.524-5.359 6.646zm3.066-.026c0-2.653 1.314-4.173 2.937-4.173.85 0 1.7.283 2.576 1.056v5.9c-.85.979-1.675 1.416-2.654 1.416-1.829 0-2.86-1.468-2.86-4.199zm11.424.026c0 4.173 2.73 6.62 6.234 6.62 1.597 0 3.117-.566 4.328-1.365l-1.005-1.854c-.927.592-1.855.927-2.937.927-2.035 0-3.477-1.288-3.735-3.58h8.037c.078-.31.13-.825.13-1.392 0-3.53-1.804-6.002-5.23-6.002-2.963 0-5.822 2.524-5.822 6.646zm2.86-1.133c.257-2.113 1.545-3.22 3.039-3.22 1.726 0 2.576 1.21 2.576 3.22h-5.616zm9.224 7.445h3.091l1.34-2.5c.36-.772.747-1.52 1.108-2.24h.103c.438.72.876 1.494 1.288 2.24l1.546 2.5h3.194l-4.019-6.26 3.736-6.39h-3.066l-1.21 2.397c-.31.695-.67 1.442-.98 2.138h-.103a87.248 87.248 0 0 1-1.16-2.138l-1.416-2.396h-3.194l3.76 6.054-4.018 6.595z" style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:medium;line-height:125%;font-family:&quot;Source Sans Pro&quot;;-inkscape-font-specification:&quot;Source Sans Pro Semi-Bold&quot;;letter-spacing:0;word-spacing:0;fill:#646464;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" transform="translate(-260.714 -252.848)"/></svg>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="1500" height="1500" viewBox="0, 0, 1500, 1500">
<g id="pytest_logo">
<g id="graphics">
<path d="M521.576,213.75 L952.616,213.75 C964.283,213.75 973.741,223.208 973.741,234.875 L973.741,234.875 C973.741,246.542 964.283,256 952.616,256 L521.576,256 C509.909,256 500.451,246.542 500.451,234.875 L500.451,234.875 C500.451,223.208 509.909,213.75 521.576,213.75 z" fill="#696969" id="horizontal_bar"/>
<g id="top_bars">
<path d="M525.333,171 L612,171 L612,191 L525.333,191 L525.333,171 z" fill="#009FE3"/>
<path d="M638.667,171 L725.333,171 L725.333,191 L638.667,191 L638.667,171 z" fill="#C7D302"/>
<path d="M750.5,171 L837.167,171 L837.167,191 L750.5,191 L750.5,171 z" fill="#F07E16"/>
<path d="M861.861,171 L948.528,171 L948.528,191 L861.861,191 L861.861,171 z" fill="#DF2815"/>
</g>
<g id="bottom_bars">
<path d="M861.861,278 L948.528,278 L948.528,424.5 L861.861,424.5 L861.861,278 z" fill="#DF2815"/>
<path d="M750.5,278 L837.328,278 L837.328,516 L750.5,516 L750.5,278 z" fill="#F07E16"/>
<path d="M638.667,278 L725.328,278 L725.328,634.5 L638.667,634.5 L638.667,278 z" fill="#C7D302"/>
<path d="M525.333,278 L612,278 L612,712.5 L525.333,712.5 L525.333,278 z" fill="#009FE3"/>
</g>
</g>
<g id="pytest">
<path d="M252.959,1173.846 Q240.139,1173.846 229.71,1171.021 Q219.28,1168.196 210.914,1163.525 Q202.549,1158.853 196.139,1152.552 Q189.729,1146.25 184.732,1139.297 L182.124,1139.297 Q182.776,1146.685 183.428,1153.421 Q183.862,1159.07 184.297,1165.046 Q184.732,1171.021 184.732,1174.498 L184.732,1276.404 L145.186,1276.404 L145.186,930.921 L177.344,930.921 L182.993,963.079 L184.732,963.079 Q189.729,955.474 196.03,948.847 Q202.332,942.22 210.697,937.331 Q219.063,932.442 229.492,929.509 Q239.922,926.575 252.959,926.575 Q273.384,926.575 290.115,934.397 Q306.846,942.22 318.688,957.756 Q330.53,973.292 337.048,996.324 Q343.567,1019.356 343.567,1049.776 Q343.567,1080.413 337.048,1103.554 Q330.53,1126.695 318.688,1142.339 Q306.846,1157.984 290.115,1165.915 Q273.384,1173.846 252.959,1173.846 z M245.354,959.385 Q228.84,959.385 217.433,964.383 Q206.025,969.38 198.964,979.593 Q191.902,989.805 188.534,1005.015 Q185.166,1020.225 184.732,1040.867 L184.732,1049.776 Q184.732,1071.722 187.665,1088.779 Q190.598,1105.835 197.66,1117.46 Q204.722,1129.085 216.455,1135.06 Q228.189,1141.036 245.789,1141.036 Q275.122,1141.036 288.92,1117.352 Q302.717,1093.667 302.717,1049.341 Q302.717,1004.146 288.92,981.766 Q275.122,959.385 245.354,959.385 z" fill="#696969"/>
<path d="M370.293,930.921 L411.36,930.921 L458.076,1064.117 Q461.118,1072.808 464.269,1082.369 Q467.42,1091.929 470.136,1101.49 Q472.852,1111.05 474.807,1119.959 Q476.763,1128.868 477.632,1136.473 L478.936,1136.473 Q480.022,1131.041 482.412,1121.697 Q484.802,1112.354 487.736,1101.816 Q490.669,1091.277 493.82,1081.065 Q496.97,1070.853 499.36,1063.682 L542.6,930.921 L583.45,930.921 L489.148,1200.572 Q483.064,1218.172 476.002,1232.187 Q468.941,1246.202 459.597,1255.979 Q450.254,1265.757 437.651,1271.081 Q425.049,1276.404 407.666,1276.404 Q396.367,1276.404 388.11,1275.209 Q379.854,1274.014 373.987,1272.71 L373.987,1241.204 Q378.55,1242.291 385.503,1243.051 Q392.456,1243.812 400.061,1243.812 Q410.491,1243.812 418.096,1241.313 Q425.701,1238.814 431.35,1234.034 Q437,1229.253 441.019,1222.3 Q445.039,1215.347 448.298,1206.438 L460.684,1171.673 z" fill="#696969"/>
<path d="M695.568,1141.47 Q699.479,1141.47 704.368,1141.036 Q709.257,1140.601 713.82,1139.949 Q718.383,1139.297 722.186,1138.428 Q725.988,1137.559 727.944,1136.907 L727.944,1166.893 Q725.119,1168.196 720.773,1169.5 Q716.428,1170.804 711.213,1171.781 Q705.998,1172.759 700.349,1173.302 Q694.699,1173.846 689.267,1173.846 Q675.795,1173.846 664.279,1170.369 Q652.763,1166.893 644.398,1158.418 Q636.032,1149.944 631.252,1135.495 Q626.472,1121.045 626.472,1099.1 L626.472,960.689 L592.792,960.689 L592.792,943.089 L626.472,926.141 L643.42,876.165 L666.235,876.165 L666.235,930.921 L726.206,930.921 L726.206,960.689 L666.235,960.689 L666.235,1099.1 Q666.235,1120.176 673.079,1130.823 Q679.924,1141.47 695.568,1141.47 z" fill="#009FE3"/>
<path d="M868.527,1173.846 Q844.626,1173.846 824.853,1165.806 Q805.08,1157.767 790.848,1142.339 Q776.616,1126.912 768.793,1104.097 Q760.971,1081.282 760.971,1051.949 Q760.971,1022.398 768.142,999.148 Q775.312,975.899 788.349,959.711 Q801.386,943.523 819.529,935.049 Q837.673,926.575 859.619,926.575 Q881.13,926.575 898.295,934.289 Q915.461,942.002 927.412,956.017 Q939.362,970.032 945.772,989.697 Q952.182,1009.361 952.182,1033.262 L952.182,1057.815 L801.821,1057.815 Q802.907,1099.751 819.529,1119.524 Q836.152,1139.297 868.962,1139.297 Q880.043,1139.297 889.495,1138.211 Q898.947,1137.125 907.747,1135.06 Q916.547,1132.996 924.804,1129.845 Q933.061,1126.695 941.535,1122.784 L941.535,1157.984 Q932.844,1162.112 924.478,1165.154 Q916.113,1168.196 907.313,1170.152 Q898.513,1172.107 889.061,1172.977 Q879.609,1173.846 868.527,1173.846 z M858.749,959.385 Q833.979,959.385 819.529,976.333 Q805.08,993.282 802.69,1025.657 L909.594,1025.657 Q909.594,1010.882 906.661,998.605 Q903.727,986.329 897.535,977.637 Q891.342,968.946 881.782,964.166 Q872.221,959.385 858.749,959.385 z" fill="#009FE3"/>
<path d="M1155.126,1104.097 Q1155.126,1121.48 1148.825,1134.517 Q1142.524,1147.554 1130.682,1156.354 Q1118.84,1165.154 1102.109,1169.5 Q1085.378,1173.846 1064.518,1173.846 Q1040.834,1173.846 1023.886,1170.043 Q1006.938,1166.241 994.118,1158.853 L994.118,1122.784 Q1000.854,1126.26 1009.111,1129.628 Q1017.368,1132.996 1026.494,1135.604 Q1035.62,1138.211 1045.289,1139.841 Q1054.958,1141.47 1064.518,1141.47 Q1078.642,1141.47 1088.528,1139.08 Q1098.415,1136.69 1104.608,1132.236 Q1110.8,1127.781 1113.625,1121.371 Q1116.45,1114.961 1116.45,1107.139 Q1116.45,1100.403 1114.277,1094.971 Q1112.104,1089.539 1106.346,1084.216 Q1100.588,1078.892 1090.593,1073.46 Q1080.598,1068.028 1064.953,1061.292 Q1049.308,1054.556 1036.815,1048.038 Q1024.321,1041.519 1015.629,1033.479 Q1006.938,1025.44 1002.266,1014.902 Q997.595,1004.363 997.595,989.805 Q997.595,974.595 1003.57,962.753 Q1009.545,950.911 1020.41,942.872 Q1031.274,934.832 1046.484,930.704 Q1061.694,926.575 1080.38,926.575 Q1101.457,926.575 1118.948,931.138 Q1136.44,935.701 1152.084,943.089 L1138.395,975.03 Q1124.272,968.729 1109.388,964.057 Q1094.504,959.385 1079.077,959.385 Q1056.913,959.385 1046.266,966.664 Q1035.62,973.943 1035.62,987.415 Q1035.62,995.02 1038.118,1000.669 Q1040.617,1006.319 1046.701,1011.316 Q1052.785,1016.314 1062.997,1021.42 Q1073.21,1026.526 1088.42,1032.828 Q1104.064,1039.346 1116.341,1045.865 Q1128.618,1052.383 1137.309,1060.531 Q1146,1068.68 1150.563,1079.109 Q1155.126,1089.539 1155.126,1104.097 z" fill="#009FE3"/>
<path d="M1285.28,1141.47 Q1289.191,1141.47 1294.08,1141.036 Q1298.969,1140.601 1303.532,1139.949 Q1308.095,1139.297 1311.898,1138.428 Q1315.7,1137.559 1317.656,1136.907 L1317.656,1166.893 Q1314.831,1168.196 1310.485,1169.5 Q1306.14,1170.804 1300.925,1171.781 Q1295.71,1172.759 1290.06,1173.302 Q1284.411,1173.846 1278.979,1173.846 Q1265.507,1173.846 1253.991,1170.369 Q1242.475,1166.893 1234.109,1158.418 Q1225.744,1149.944 1220.964,1135.495 Q1216.183,1121.045 1216.183,1099.1 L1216.183,960.689 L1182.504,960.689 L1182.504,943.089 L1216.183,926.141 L1233.132,876.165 L1255.947,876.165 L1255.947,930.921 L1315.917,930.921 L1315.917,960.689 L1255.947,960.689 L1255.947,1099.1 Q1255.947,1120.176 1262.791,1130.823 Q1269.636,1141.47 1285.28,1141.47 z" fill="#009FE3"/>
</g>
</g>
<script xmlns=""/></svg>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment