{"id":46451502,"url":"https://github.com/patrikspiess/demo_patrikspiess","last_synced_at":"2026-03-06T00:31:59.558Z","repository":{"id":65715090,"uuid":"544031246","full_name":"patrikspiess/demo_patrikspiess","owner":"patrikspiess","description":"Demo project to try a package development and deployment","archived":false,"fork":false,"pushed_at":"2025-11-26T07:35:09.000Z","size":605,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-29T07:09:49.570Z","etag":null,"topics":["github","github-actions","mypy","poetry","pypi","python","rich","tox"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/patrikspiess.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-10-01T13:08:12.000Z","updated_at":"2025-11-26T07:34:11.000Z","dependencies_parsed_at":"2023-02-19T06:02:06.574Z","dependency_job_id":"a4cb8ded-a983-45bd-8432-743504c386b8","html_url":"https://github.com/patrikspiess/demo_patrikspiess","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/patrikspiess/demo_patrikspiess","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrikspiess%2Fdemo_patrikspiess","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrikspiess%2Fdemo_patrikspiess/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrikspiess%2Fdemo_patrikspiess/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrikspiess%2Fdemo_patrikspiess/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/patrikspiess","download_url":"https://codeload.github.com/patrikspiess/demo_patrikspiess/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrikspiess%2Fdemo_patrikspiess/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30156286,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T22:39:40.138Z","status":"ssl_error","status_checked_at":"2026-03-05T22:39:24.771Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["github","github-actions","mypy","poetry","pypi","python","rich","tox"],"created_at":"2026-03-06T00:31:59.373Z","updated_at":"2026-03-06T00:31:59.545Z","avatar_url":"https://github.com/patrikspiess.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp style=\"text-align: right\"\u003e\u003cimg src=https://raw.githubusercontent.com/patrikspiess/demo_patrikspiess/main/demo.png width=\"200px\"\u003e\u003c/p\u003e\n\n# demo_patrikspiess\n**Demo for a Python package development**\n\n***\n\n![Author](https://img.shields.io/badge/author-patrikspiess-blue?style=plastic)\n![GitHub release (latest by date)](https://img.shields.io/github/v/release/patrikspiess/demo_patrikspiess?style=plastic)\n![GitHub Workflow Status (with branch)](https://img.shields.io/github/actions/workflow/status/patrikspiess/demo_patrikspiess/tests.yaml?style=plastic)\n![GitHub](https://img.shields.io/github/license/patrikspiess/demo_patrikspiess?style=plastic)\n![GitHub open issues](https://img.shields.io/github/issues-raw/patrikspiess/demo_patrikspiess?style=plastic)\n![GitHub closed issues](https://img.shields.io/github/issues-closed-raw/patrikspiess/demo_patrikspiess?style=plastic)\n![GitHub Repo stars](https://img.shields.io/github/stars/patrikspiess/demo_patrikspiess?style=plastic)\n![GitHub watchers](https://img.shields.io/github/watchers/patrikspiess/demo_patrikspiess?style=plastic)\n![GitHub forks](https://img.shields.io/github/forks/patrikspiess/demo_patrikspiess?style=plastic)\n![GitHub language count](https://img.shields.io/github/languages/count/patrikspiess/demo_patrikspiess?style=plastic)\n![GitHub top language](https://img.shields.io/github/languages/top/patrikspiess/demo_patrikspiess?style=plastic)\n![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/patrikspiess/demo_patrikspiess?style=plastic)\n![GitHub repo file count](https://img.shields.io/github/directory-file-count/patrikspiess/demo_patrikspiess?style=plastic)\n![GitHub all releases](https://img.shields.io/github/downloads/patrikspiess/demo_patrikspiess/total?style=plastic)\n\nThese badges are all generated with [shields.io](https://shields.io/).\n\n***\n\n# Official Documentation\n\nFor the official documentation of this project please got to\n[demo-patrikspiess.readthedocs.io](https://demo-patrikspiess.readthedocs.io/)\n\n\n# Contents\n\n- [Reference](#reference)\n- [Package Installation](#package-installation)\n  - [Upgrade](#upgrade)\n- [CI/CD with Github Actions](#cicd-with-github-actions)\n- [Documentation](#documentation)\n\n# Reference\n\nThis project is a demo project from the **Packaging Python Projects** Tutorial which can be found at\nhttps://packaging.python.org/en/latest/tutorials/packaging-projects/#\n\nOther than in the tutorial mentioned above I use poetry as a package manager. Therefore some of the\nconfiguration or commands differ from what you see in the tutorial.\n\nAdditionally I use some test and build features to try out some workflow/actions stuff.\n\n# License\n\nMIT License\n\nCopyright (c) 2023 Patrik Spiess\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and \nassociated documentation files (the \"Software\"), to deal in the Software without restriction, \nincluding without limitation the rights to use, copy, modify, merge, publish, distribute, \nsublicense, and/or sell copies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial\nportions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT \nNOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND \nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES\nOR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN \nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n***\n\n# CI/CD with Github Actions\n\nI use tox with Github actions. Tox ist configured in the pyproject.toml file as legacy_tox_ini. See https://tox.wiki/en/latest/example/basic.html.\n\nFor using Github actions you define your configuration in ./.github/workflows/*.yaml. Example for pylint is given there. In the Github actions I use the prepared tox environments. So I may execute the same tests locally.\n\n# Documentation\n\nFor documentation I use sphinx and autodoc. The generated docs are published to readthedocs.com.\n\nThe directory used for the documentation is docs in the project root. So create this directory and initialize sphinx from there.\n\nInstalling and setup sphinx\n\n    poetry add --group dev sphinx\n    poetry add --group dev sphinx-rtd-theme\n    mkdir docs\n    cd docs\n    poetry run sphinx-quickstart\n        \u003e Separate source and build directories (y/n) [n]: y\n        \u003e Project name: demops\n        \u003e Author name(s): Patrik Spiess\n        \u003e Project release []:\n        \u003e Project language [en]:\n\nBuilding the documentation from the projects root folder (one level above docs) is then possible with:\n\n    poetry run sphinx-build -b html docs/source docs/build\n\nI do not use the option to build the documentation with `poetry run make html` as I prefer to do everything with poetry. therefore I added a tox env for creating the documentation:\n\n    poetry run tox -e docs\n\n## readthedocs Configuration\n\nThis projects documentation has been published on readthedocs.io. The path to the docs is:\n\n[demo-patrikspiess.readthedocs.io](https://demo-patrikspiess.readthedocs.io/)\n\nFor readthedocs being able to create the docs from the github repository I added a .readthedocs.yaml\nin the root of the project. The important statements are the python version and the requirements\nfile.\n\nAlthough the package dependencies are managed by poetry, readthedocs needs a classic\nrequirements.txt file. Therefore a tox env was created to generate the requirements.txt into the\nsource directory.\n\n    poetry export --without-hashes --format=requirements.txt --output=source/requirements.txt\n\nrun it with\n\n    poetry run tox -e requirements\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatrikspiess%2Fdemo_patrikspiess","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpatrikspiess%2Fdemo_patrikspiess","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatrikspiess%2Fdemo_patrikspiess/lists"}