{"id":5805241,"name":"patrick-kidger/action_update_python_project","ecosystem":"actions","description":"Builds a Python projects, runs tests, and if successful tags and uploads to PyPI","homepage":"","licenses":"apache-2.0","normalized_licenses":["Apache-2.0"],"repository_url":"https://github.com/patrick-kidger/action_update_python_project","keywords_array":["action","actions","github-actions","pypi","python"],"namespace":"patrick-kidger","versions_count":9,"first_release_published_at":"2022-03-07T04:06:19.000Z","latest_release_published_at":"2025-01-27T12:39:23.000Z","latest_release_number":"v9","last_synced_at":"2026-03-15T01:45:34.628Z","created_at":"2023-01-04T15:28:34.646Z","updated_at":"2026-03-15T01:45:34.628Z","registry_url":"https://github.com/patrick-kidger/action_update_python_project","install_command":null,"documentation_url":null,"metadata":{"name":"Update Python project: Check version / Test / git tag / GitHub Release / Deploy to PyPI","author":"Patrick Kidger","description":"Builds a Python projects, runs tests, and if successful tags and uploads to PyPI","inputs":{"python-version":{"description":"The version of Python to use. Set to `false` to not install any Python and instead use a preinstalled one.","required":true},"pypi-token":{"description":"A PyPI password or authentication token for your project. Set to `false` to use some other already-configured authentication mechanism.","required":true},"github-user":{"description":"Your username on GitHub.","required":true},"github-token":{"description":"A GitHub authentication token for your project.","required":true},"test-script":{"description":"A bash script for the tests. A uv venv will be available to install into, using `uv` directly on the PATH, e.g. commands often look like `uv sync --foo`.","required":true},"pypi-user":{"description":"Your username on PyPI.","default":"__token__"},"pypi-repository-url":{"description":"The repository URL to use for PyPI, if different than the default. Passed to `twine upload --repository-url`","default":"https://pypi.org/"},"checkout":{"description":"Whether to check out the code. Set to `false` to disable this, e.g. if you have already done this.","default":true},"allow-first-release":{"description":"Whether to allow doing a first release to PyPI for a package that does not already exist there. Set to `true` to allow this.","default":false}},"branding":{"icon":"wind","color":"yellow"},"runs":{"using":"composite","steps":[{"name":"Checkout","uses":"actions/checkout@v2","if":"inputs.checkout != 'false'"},{"name":"Set up Python ${{ inputs.python-version }}","uses":"actions/setup-python@v2","if":"inputs.python-version != 'false'","with":{"python-version":"${{ inputs.python-version }}"}},{"name":"Setup","shell":"bash","run":"python -m pip install --upgrade pip\npython -m pip install --upgrade build uv packaging\npython -m build\n"},{"name":"Get versions","id":"get-versions","shell":"bash","run":"python -c \"\nimport subprocess\nimport tomllib\n\nvparse = lambda x: tuple(map(int, x.split('.')))\n\nwith open('pyproject.toml', 'rb') as f:\n    data = tomllib.load(f)\nname = data['project']['name']\ncheckout_version = data['project']['version']\n\nrepo_url = '${{ inputs.pypi-repository-url }}'.removesuffix('/')\nresult = subprocess.run(f'python -m pip index versions {name} --index-url {repo_url}/simple --keyring-provider subprocess',\n                        shell=True, capture_output=True)\nprint('Got result: ', result)\nif result.returncode == 0:\n    pypi_version = result.stdout.split(b'\\n', 1)[0].split(b' ')[1][1:-1].decode('utf-8')\n    pypi_version = vparse(pypi_version)\n    new_version = str(vparse(checkout_version) \u003e pypi_version).lower()\nelse:\n    if result.stdout == b'' and '${{ inputs.allow-first-release }}' == 'true':\n        pypi_version = '\u003cnew\u003e'\n        new_version = True\n    else:\n        raise RuntimeError('Something went wrong with getting the version from PyPI.')\nsubprocess.run(f'echo name={name} \u003e\u003e $GITHUB_OUTPUT', shell=True)\nsubprocess.run(f'echo tag=v{checkout_version} \u003e\u003e $GITHUB_OUTPUT', shell=True)\nsubprocess.run(f'echo new-version={new_version} \u003e\u003e $GITHUB_OUTPUT', shell=True)\nprint(f'Got checkout_version={vparse(checkout_version)!r}')\nprint(f'Got pypi_version={pypi_version!r}')\nprint(f'Setting name={name}')\nprint(f'Setting tag=v{checkout_version}')\nprint(f'Setting new-version={new_version}')\n\"\n"},{"name":"Test sdist","id":"test-sdist","if":"steps.get-versions.outputs.new-version == 'true'","shell":"bash","run":"cd $(mktemp -d)\npython -m uv venv\npython -m uv pip install ${{ github.workspace }}/dist/*.tar.gz --target .venv/lib/*/site-packages/\nset +e\nbash -c \"\n${{ inputs.test-script }}\n\"\nif [ \"$?\" -eq 0 ]\nthen\n    echo result=true \u003e\u003e $GITHUB_OUTPUT\nelse\n    echo result=false \u003e\u003e $GITHUB_OUTPUT\nfi\nset -e\ncd ${{ github.workspace }}\n"},{"name":"Test bdist_wheel","id":"test-bdist-wheel","if":"steps.get-versions.outputs.new-version == 'true'","shell":"bash","run":"cd $(mktemp -d)\npython -m uv venv\npython -m uv pip install ${{ github.workspace }}/dist/*.whl --target .venv/lib/*/site-packages/\nset +e\nbash -c \"\n${{ inputs.test-script }}\n\"\nif [ \"$?\" -eq 0 ]\nthen\n    echo result=true \u003e\u003e $GITHUB_OUTPUT\nelse\n    echo result=false \u003e\u003e $GITHUB_OUTPUT\nfi\nset -e\ncd ${{ github.workspace }}\n"},{"name":"Logging","shell":"bash","run":"echo new-version=${{ steps.get-versions.outputs.new-version }}\necho sdist-result=${{ steps.test-sdist.outputs.result }}\necho bdist-result=${{ steps.test-bdist-wheel.outputs.result }}\n"},{"name":"Push to PyPI","if":"(steps.get-versions.outputs.new-version == 'true') \u0026\u0026 (steps.test-sdist.outputs.result == 'true') \u0026\u0026 (steps.test-bdist-wheel.outputs.result == 'true')","env":{"TWINE_USERNAME":"${{ inputs.pypi-user }}","TWINE_PASSWORD":"${{ inputs.pypi-token }}"},"shell":"bash","run":"if [ \"${TWINE_PASSWORD}\" == \"false\" ]; then\n  unset TWINE_USERNAME\n  unset TWINE_PASSWORD\nfi\npython -m pip install twine\nif [ ${{ inputs.pypi-repository-url }} == https://pypi.org/ ]; then\n  export REPO_URL=https://upload.pypi.org/legacy/\nelse\n  export REPO_URL=${{ inputs.pypi-repository-url }}\nfi\npython -m twine upload --repository-url $REPO_URL --verbose --non-interactive dist/*\n"},{"name":"Tag","if":"(steps.get-versions.outputs.new-version == 'true') \u0026\u0026 (steps.test-sdist.outputs.result == 'true') \u0026\u0026 (steps.test-bdist-wheel.outputs.result == 'true')","shell":"bash","run":"git config --global user.email \"noreply@example.com\"\ngit config --global user.name \"Action: Update Python project\"\ngit tag \"${{ steps.get-versions.outputs.tag }}\" -m \"\"\ngit push https://${{ inputs.github-user }}:${{ inputs.github-token }}@github.com/${{ github.repository }} \"${{ steps.get-versions.outputs.tag }}\"\n"},{"name":"GitHub release","if":"(steps.get-versions.outputs.new-version == 'true') \u0026\u0026 (steps.test-sdist.outputs.result == 'true') \u0026\u0026 (steps.test-bdist-wheel.outputs.result == 'true')","uses":"softprops/action-gh-release@v1","with":{"name":"${{ steps.get-versions.outputs.name }} ${{ steps.get-versions.outputs.tag }}","body":"Autogenerated release notes as follows:","tag_name":"${{ steps.get-versions.outputs.tag }}","token":"${{ inputs.github-token }}","generate_release_notes":true}},{"name":"Fail","if":"(steps.get-versions.outputs.new-version == 'true') \u0026\u0026 ((steps.test-sdist.outputs.result != 'true') || (steps.test-bdist-wheel.outputs.result != 'true'))","shell":"bash","run":"exit 1"}]},"default_branch":"main","path":null},"repo_metadata":{"id":49749479,"uuid":"466937456","full_name":"patrick-kidger/action_update_python_project","owner":"patrick-kidger","description":"Github Action to: Check version / Test / git tag / GitHub Release / Deploy to PyPI","archived":false,"fork":false,"pushed_at":"2025-03-17T18:23:44.000Z","size":22,"stargazers_count":17,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-06-09T18:49:23.081Z","etag":null,"topics":["action","actions","github-actions","pypi","python"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/patrick-kidger.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["patrick-kidger"]}},"created_at":"2022-03-07T04:07:19.000Z","updated_at":"2025-04-09T10:20:54.000Z","dependencies_parsed_at":"2023-01-04T12:30:17.998Z","dependency_job_id":"98b1d026-3a74-46d4-987c-389b2f1d9ec7","html_url":"https://github.com/patrick-kidger/action_update_python_project","commit_stats":{"total_commits":7,"total_committers":1,"mean_commits":7.0,"dds":0.0,"last_synced_commit":"ca4b423862984110b34ebfe1fa0bac77b5553b9b"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/patrick-kidger/action_update_python_project","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/patrick-kidger","download_url":"https://codeload.github.com/patrick-kidger/action_update_python_project/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268285811,"owners_count":24225798,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-01T02:00:08.611Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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"},"owner_record":{"login":"patrick-kidger","name":"Patrick Kidger","uuid":"33688385","kind":"user","description":"Building a JAX ecosystem: Equinox, Diffrax, Lineax, etc. ---- SciML, numerics, neural ODEs ---- Solo traveller, martial artist, scuba diver!","email":"","website":"https://kidger.site","location":"Zürich","twitter":"PatrickKidger","company":"Cradle.bio","icon_url":"https://avatars.githubusercontent.com/u/33688385?u=bead9dd6effb04344bba650b32e9f911dc1ff9fc\u0026v=4","repositories_count":59,"last_synced_at":"2025-07-21T22:50:27.246Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/patrick-kidger","funding_links":["https://github.com/sponsors/patrick-kidger"],"total_stars":10953,"followers":2477,"following":2,"created_at":"2022-11-13T11:41:52.577Z","updated_at":"2025-07-21T22:50:27.246Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/patrick-kidger","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/patrick-kidger/repositories"},"tags":[{"name":"v9","sha":"1a3982daa7b912fb2ec508dc3a73b23398b07b27","kind":"commit","published_at":"2025-01-27T12:39:23.000Z","download_url":"https://codeload.github.com/patrick-kidger/action_update_python_project/tar.gz/v9","html_url":"https://github.com/patrick-kidger/action_update_python_project/releases/tag/v9","dependencies_parsed_at":null,"dependency_job_id":"21496d74-25a2-4764-867d-86ffe7326cfb","purl":"pkg:github/patrick-kidger/action_update_python_project@v9","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v9/manifests"},{"name":"v8","sha":"6e56fca31f723bcd31d5d11cdd4cb99bc76b38d8","kind":"commit","published_at":"2025-01-27T12:33:08.000Z","download_url":"https://codeload.github.com/patrick-kidger/action_update_python_project/tar.gz/v8","html_url":"https://github.com/patrick-kidger/action_update_python_project/releases/tag/v8","dependencies_parsed_at":null,"dependency_job_id":"a4623196-8881-4a9c-897e-2940f0e3be1b","purl":"pkg:github/patrick-kidger/action_update_python_project@v8","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v8/manifests"},{"name":"v7","sha":"df5970aaeffe81bb11a0f7f099a08ca562a99f8d","kind":"commit","published_at":"2025-01-05T16:24:32.000Z","download_url":"https://codeload.github.com/patrick-kidger/action_update_python_project/tar.gz/v7","html_url":"https://github.com/patrick-kidger/action_update_python_project/releases/tag/v7","dependencies_parsed_at":"2025-01-08T04:47:33.941Z","dependency_job_id":null,"purl":"pkg:github/patrick-kidger/action_update_python_project@v7","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v7/manifests"},{"name":"v7","sha":"df5970aaeffe81bb11a0f7f099a08ca562a99f8d","kind":"commit","published_at":"2025-01-05T16:24:32.000Z","download_url":"https://codeload.github.com/patrick-kidger/action_update_python_project/tar.gz/v7","html_url":"https://github.com/patrick-kidger/action_update_python_project/releases/tag/v7","dependencies_parsed_at":"2025-01-08T04:47:33.936Z","dependency_job_id":null,"purl":"pkg:github/patrick-kidger/action_update_python_project@v7","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v7/manifests"},{"name":"v6","sha":"3d0368e64035bf93e3c0c10e434dacfe3df60b0b","kind":"commit","published_at":"2024-11-25T08:01:42.000Z","download_url":"https://codeload.github.com/patrick-kidger/action_update_python_project/tar.gz/v6","html_url":"https://github.com/patrick-kidger/action_update_python_project/releases/tag/v6","dependencies_parsed_at":"2024-12-06T04:06:02.314Z","dependency_job_id":null,"purl":"pkg:github/patrick-kidger/action_update_python_project@v6","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v6/manifests"},{"name":"v5","sha":"7f7bfb5e56ecf04c1c5394602f98489087a68a85","kind":"commit","published_at":"2024-11-24T21:22:55.000Z","download_url":"https://codeload.github.com/patrick-kidger/action_update_python_project/tar.gz/v5","html_url":"https://github.com/patrick-kidger/action_update_python_project/releases/tag/v5","dependencies_parsed_at":"2024-12-06T04:06:02.321Z","dependency_job_id":null,"purl":"pkg:github/patrick-kidger/action_update_python_project@v5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v5/manifests"},{"name":"v4","sha":"80f8e829b2d9b33c73224da4f0c69e7e067046ae","kind":"commit","published_at":"2024-09-17T09:14:50.000Z","download_url":"https://codeload.github.com/patrick-kidger/action_update_python_project/tar.gz/v4","html_url":"https://github.com/patrick-kidger/action_update_python_project/releases/tag/v4","dependencies_parsed_at":"2024-09-18T04:29:56.789Z","dependency_job_id":null,"purl":"pkg:github/patrick-kidger/action_update_python_project@v4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v4/manifests"},{"name":"v3","sha":"df54820263cc30dff2deb3a23998c0576303630a","kind":"commit","published_at":"2023-10-17T18:11:49.000Z","download_url":"https://codeload.github.com/patrick-kidger/action_update_python_project/tar.gz/v3","html_url":"https://github.com/patrick-kidger/action_update_python_project/releases/tag/v3","dependencies_parsed_at":"2023-10-19T04:35:06.553Z","dependency_job_id":null,"purl":"pkg:github/patrick-kidger/action_update_python_project@v3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v3/manifests"},{"name":"v2","sha":"79faa53d9ba71070cdcc4b2df522cddc2891b659","kind":"commit","published_at":"2023-04-30T20:52:52.000Z","download_url":"https://codeload.github.com/patrick-kidger/action_update_python_project/tar.gz/v2","html_url":"https://github.com/patrick-kidger/action_update_python_project/releases/tag/v2","dependencies_parsed_at":"2023-06-02T11:32:03.170Z","dependency_job_id":null,"purl":"pkg:github/patrick-kidger/action_update_python_project@v2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v2/manifests"},{"name":"v1","sha":"1d192e48d3622dce93e52f00b459b887b921b444","kind":"tag","published_at":"2022-03-07T04:06:19.000Z","download_url":"https://codeload.github.com/patrick-kidger/action_update_python_project/tar.gz/v1","html_url":"https://github.com/patrick-kidger/action_update_python_project/releases/tag/v1","dependencies_parsed_at":"2023-05-31T09:57:49.147Z","dependency_job_id":null,"purl":"pkg:github/patrick-kidger/action_update_python_project@v1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/tags/v1/manifests"}]},"repo_metadata_updated_at":"2025-08-01T20:03:16.979Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":7,"rankings":{"downloads":null,"dependent_repos_count":13.718903501822217,"dependent_packages_count":0.0,"stargazers_count":13.129456504515923,"forks_count":16.146411028363175,"docker_downloads_count":null,"average":10.748692758675329},"purl":"pkg:githubactions/patrick-kidger/action_update_python_project","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/actions/patrick-kidger/action_update_python_project","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/actions/patrick-kidger/action_update_python_project","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/actions/patrick-kidger/action_update_python_project/dependencies","status":null,"funding_links":["https://github.com/sponsors/patrick-kidger"],"critical":null,"issue_metadata":{"last_synced_at":"2025-03-17T20:09:58.136Z","issues_count":0,"pull_requests_count":1,"avg_time_to_close_issue":null,"avg_time_to_close_pull_request":19285.0,"issues_closed_count":0,"pull_requests_closed_count":1,"pull_request_authors_count":1,"issue_authors_count":0,"avg_comments_per_issue":null,"avg_comments_per_pull_request":4.0,"merged_pull_requests_count":1,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-kidger%2Faction_update_python_project/issues","maintainers":[],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/patrick-kidger%2Faction_update_python_project/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/patrick-kidger%2Faction_update_python_project/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/patrick-kidger%2Faction_update_python_project/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/patrick-kidger%2Faction_update_python_project/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/patrick-kidger%2Faction_update_python_project/codemeta","maintainers":[]}