{"id":18084948,"url":"https://github.com/jwodder/qypi","last_synced_at":"2025-10-06T18:51:52.904Z","repository":{"id":39352166,"uuid":"86402360","full_name":"jwodder/qypi","owner":"jwodder","description":"Query PyPI from the command line","archived":false,"fork":false,"pushed_at":"2025-09-08T13:15:22.000Z","size":153,"stargazers_count":13,"open_issues_count":9,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-08T15:21:25.072Z","etag":null,"topics":["available-on-pypi","packages","pip","pypi","python","search","warehouse"],"latest_commit_sha":null,"homepage":null,"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/jwodder.png","metadata":{"files":{"readme":"README.rst","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":"2017-03-28T01:44:27.000Z","updated_at":"2025-09-08T13:15:24.000Z","dependencies_parsed_at":"2023-10-03T22:22:07.483Z","dependency_job_id":"e6e06479-1eb4-4b33-93db-430e2cb66176","html_url":"https://github.com/jwodder/qypi","commit_stats":{"total_commits":120,"total_committers":1,"mean_commits":120.0,"dds":0.0,"last_synced_commit":"b50212edb3a406357443b08e60845b1de7c6a726"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/jwodder/qypi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwodder%2Fqypi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwodder%2Fqypi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwodder%2Fqypi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwodder%2Fqypi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jwodder","download_url":"https://codeload.github.com/jwodder/qypi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwodder%2Fqypi/sbom","scorecard":{"id":381389,"data":{"date":"2025-08-11","repo":{"name":"github.com/jwodder/qypi","commit":"c7df14be29ed5d42598d80458a7afe1b21fea1ac"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.5,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":4,"reason":"5 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/jwodder/qypi/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/jwodder/qypi/test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/jwodder/qypi/test.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:44","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   2 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":0,"reason":"Found 0/20 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.6.1 not signed: https://api.github.com/repos/jwodder/qypi/releases/237066132","Warn: release artifact v0.6.0 not signed: https://api.github.com/repos/jwodder/qypi/releases/43869339","Warn: release artifact v0.5.0 not signed: https://api.github.com/repos/jwodder/qypi/releases/17440535","Warn: release artifact v0.4.1 not signed: https://api.github.com/repos/jwodder/qypi/releases/6388802","Warn: release artifact v0.4.0 not signed: https://api.github.com/repos/jwodder/qypi/releases/6304536","Warn: release artifact v0.6.1 does not have provenance: https://api.github.com/repos/jwodder/qypi/releases/237066132","Warn: release artifact v0.6.0 does not have provenance: https://api.github.com/repos/jwodder/qypi/releases/43869339","Warn: release artifact v0.5.0 does not have provenance: https://api.github.com/repos/jwodder/qypi/releases/17440535","Warn: release artifact v0.4.1 does not have provenance: https://api.github.com/repos/jwodder/qypi/releases/6388802","Warn: release artifact v0.4.0 does not have provenance: https://api.github.com/repos/jwodder/qypi/releases/6304536"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 15 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T15:32:01.124Z","repository_id":39352166,"created_at":"2025-08-18T15:32:01.124Z","updated_at":"2025-08-18T15:32:01.124Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278663381,"owners_count":26024389,"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-10-06T02:00:05.630Z","response_time":65,"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"}},"keywords":["available-on-pypi","packages","pip","pypi","python","search","warehouse"],"created_at":"2024-10-31T15:08:45.059Z","updated_at":"2025-10-06T18:51:52.898Z","avatar_url":"https://github.com/jwodder.png","language":"Python","readme":"|repostatus| |ci-status| |coverage| |pyversions| |license|\n\n.. |repostatus| image:: https://www.repostatus.org/badges/latest/active.svg\n    :target: https://www.repostatus.org/#active\n    :alt: Project Status: Active — The project has reached a stable, usable\n          state and is being actively developed.\n\n.. |ci-status| image:: https://github.com/jwodder/qypi/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/jwodder/qypi/actions/workflows/test.yml\n    :alt: CI Status\n\n.. |coverage| image:: https://codecov.io/gh/jwodder/qypi/branch/master/graph/badge.svg\n    :target: https://codecov.io/gh/jwodder/qypi\n\n.. |pyversions| image:: https://img.shields.io/pypi/pyversions/qypi.svg\n    :target: https://pypi.org/project/qypi/\n\n.. |license| image:: https://img.shields.io/github/license/jwodder/qypi.svg?maxAge=2592000\n    :target: https://opensource.org/licenses/MIT\n    :alt: MIT License\n\n`GitHub \u003chttps://github.com/jwodder/qypi\u003e`_\n| `PyPI \u003chttps://pypi.org/project/qypi/\u003e`_\n| `Issues \u003chttps://github.com/jwodder/qypi/issues\u003e`_\n| `Changelog \u003chttps://github.com/jwodder/qypi/blob/master/CHANGELOG.md\u003e`_\n\n``qypi`` is a command-line client for querying \u0026 searching `the Python Package\nIndex \u003chttps://pypi.org\u003e`_ for Python package information and outputting JSON\n(with some minor opinionated changes to the output data structures; see the\nexamples below).\n\n\nInstallation\n============\n``qypi`` requires Python 3.10 or higher.  Just use version 6.0 or higher of `pip\n\u003chttps://pip.pypa.io\u003e`_ for Python 3 (You have pip, right?) to install ``qypi``\nand its dependencies::\n\n    python3 -m pip install qypi\n\n\nUsage\n=====\n\n::\n\n    qypi [-i|--index-url \u003cURL\u003e] \u003ccommand\u003e [\u003coptions\u003e] [\u003carguments\u003e]\n\nGlobal Option\n-------------\n\n-i URL, --index-url URL\n                        Query the Python package server at the given URL, which\n                        must support both the XML-RPC_ and JSON_ APIs.  By\n                        default, ``qypi`` queries `PyPI (Warehouse)\n                        \u003chttps://pypi.org\u003e`_ at ``https://pypi.org/pypi``.\n\n.. _XML-RPC: https://warehouse.readthedocs.io/api-reference/xml-rpc/\n.. _JSON: https://warehouse.readthedocs.io/api-reference/json/\n\nList Packages\n-------------\n\n``list``\n^^^^^^^^\n\n::\n\n    qypi list\n\nList all packages registered on PyPI, one per line, in the order that they are\nreturned by the API.  ``list`` and ``readme`` are the only subcommands that do\nnot output JSON.\n\n``search``\n^^^^^^^^^^\n\n::\n\n    qypi search [--and|--or] [--packages|--releases] \u003cterm\u003e ...\n\nSearch PyPI for packages or package releases matching the given search terms.\nSearch terms consist of a field name and a value separated by a colon; a term\nwithout a colon searches the ``description`` field.  As documented `here\n\u003chttps://warehouse.readthedocs.io/api-reference/xml-rpc/\u003e`_, the supported\nsearchable fields are:\n\n- ``name``\n- ``version``\n- ``author``\n- ``author_email``\n- ``maintainer``\n- ``maintainer_email``\n- ``home_page`` (aliases: ``homepage`` and ``url``)\n- ``license``\n- ``summary``\n- ``description`` (aliases: ``long_description`` and ``readme``)\n- ``keywords`` (alias: ``keyword``)\n- ``platform``\n- ``download_url``\n\nAll other fields are ignored.\n\nMultiple search terms referring to the same field are combined with logical OR.\nSearch terms on different fields are combined according to whether ``--and`` or\n``--or`` is specified on the command line; the default behavior is ``--and``.\n\nBy default, ``search`` lists every matching release for every package, even if\nthe same package has multiple matching releases.  To list no more than one\nrelease (specifically, the highest-versioned) per package, specify the\n``-p``/``--packages`` option on the command line.  ``-r``/``--releases``\nrestores the default behavior.\n\n``browse``\n^^^^^^^^^^\n\n::\n\n    qypi browse [-f|--file \u003cfile\u003e] [--packages|--releases] \u003cclassifier\u003e ...\n\nList packages or package releases with the given `trove classifiers\n\u003chttps://pypi.org/pypi?%3Aaction=list_classifiers\u003e`_.  Because trove\nclassifiers are not the most command-line friendly thing in the world, they may\noptionally be read from a file, one classifier per line.  Any further\nclassifiers listed on the command line will be added to the file's list.\n\nBy default, ``browse`` lists every matching release for every package, even if\nthe same package has multiple matching releases.  To list no more than one\nrelease (specifically, the highest-versioned) per package, specify the\n``-p``/``--packages`` option on the command line.  ``-r``/``--releases``\nrestores the default behavior.\n\n``owned``\n^^^^^^^^^\n\n::\n\n    qypi owned \u003cuser\u003e ...\n\nList packages owned or maintained by the given PyPI users\n\n\nPackage Information\n-------------------\n\n``releases``\n^^^^^^^^^^^^\n\n::\n\n    qypi releases \u003cpackage\u003e ...\n\nList the released versions for the given packages in PEP 440 order\n\nExample::\n\n    $ qypi releases qypi\n    {\n        \"qypi\": [\n            {\n                \"is_prerelease\": false,\n                \"release_date\": \"2017-04-02T03:07:42\",\n                \"release_url\": \"https://pypi.org/project/qypi/0.1.0\",\n                \"version\": \"0.1.0\"\n            },\n            {\n                \"is_prerelease\": false,\n                \"release_date\": \"2017-04-02T03:32:44\",\n                \"release_url\": \"https://pypi.org/project/qypi/0.1.0.post1\",\n                \"version\": \"0.1.0.post1\"\n            }\n        ]\n    }\n\nA release's release date is the time at which its first file was uploaded.  If\nthere are no files associated with a release, its release date will be\n``null``.\n\n``owner``\n^^^^^^^^^\n\n::\n\n    qypi owner \u003cpackage\u003e ...\n\nList the PyPI users that own and/or maintain the given packages\n\nExample::\n\n    $ qypi owner requests\n    {\n        \"requests\": [\n            {\n                \"role\": \"Owner\",\n                \"user\": \"graffatcolmingov\"\n            },\n            {\n                \"role\": \"Owner\",\n                \"user\": \"kennethreitz\"\n            },\n            {\n                \"role\": \"Owner\",\n                \"user\": \"Lukasa\"\n            },\n            {\n                \"role\": \"Maintainer\",\n                \"user\": \"graffatcolmingov\"\n            },\n            {\n                \"role\": \"Maintainer\",\n                \"user\": \"Lukasa\"\n            },\n            {\n                \"role\": \"Maintainer\",\n                \"user\": \"nateprewitt\"\n            }\n        ]\n    }\n\nRelease Information\n-------------------\nThese subcommands show information about individual package releases/versions\nand share the same command-line options and argument syntax.\n\nArguments of the form ``package==version`` (e.g., ``qypi info qypi==0.1.0``)\nalways refer to the given version of the given package.\n\nArguments that are just a package name refer to (by default) the\nhighest-numbered non-prerelease version of the package.  This can be changed\nwith the following options:\n\n-A, --all-versions      Show information for all versions of each package (in\n                        PEP 440 order, excluding prereleases unless ``--pre``\n                        is given)\n\n--latest-version        Show information for only the latest version of each\n                        package; this is the default\n\n--newest                Define \"latest version\" to mean the most recently\n                        released version.  Release dates are based on file\n                        upload times; releases without file uploads are thus\n                        ignored.\n\n--highest               Define \"latest version\" to mean the highest-numbered\n                        version; this is the default.\n\n--pre                   Include prerelease \u0026 development versions\n\n--no-pre                Don't include prerelease \u0026 development versions; this\n                        is the default.\n\n``info``\n^^^^^^^^\n\n::\n\n    qypi info [\u003coptions\u003e] [--description] [--trust-downloads] \u003cpackage[==version]\u003e ...\n\nShow basic information about the given package releases.\n\nBy default, (long) descriptions are omitted because they can be *very* long,\nand it is recommended that you view them with the ``readme`` subcommand\ninstead; use the ``--description`` option to include them anyway.\n\nBy default, download counts are omitted because `the feature is currently\nbroken \u0026 unreliable \u003chttps://github.com/pypa/pypi-legacy/issues/396\u003e`_; use the\n``--trust-downloads`` option if you want to see the values anyway.\n\nExample::\n\n    $ qypi info qypi\n    [\n        {\n            \"bugtrack_url\": null,\n            \"classifiers\": [\n                \"Development Status :: 4 - Beta\",\n                \"Environment :: Console\",\n                \"Intended Audience :: Developers\",\n                \"Intended Audience :: Information Technology\",\n                \"License :: OSI Approved :: MIT License\",\n                \"Programming Language :: Python :: 3\",\n                \"Programming Language :: Python :: 3.4\",\n                \"Programming Language :: Python :: 3.5\",\n                \"Programming Language :: Python :: 3.6\",\n                \"Programming Language :: Python :: 3 :: Only\",\n                \"Topic :: Software Development :: Libraries :: Python Modules\",\n                \"Topic :: System :: Software Distribution\"\n            ],\n            \"docs_url\": null,\n            \"download_url\": null,\n            \"keywords\": \"pypi warehouse search packages pip\",\n            \"license\": \"MIT\",\n            \"name\": \"qypi\",\n            \"people\": [\n                {\n                    \"email\": \"qypi@varonathe.org\",\n                    \"name\": \"John Thorvald Wodder II\",\n                    \"role\": \"author\"\n                }\n            ],\n            \"platform\": null,\n            \"project_url\": \"https://pypi.org/project/qypi/\",\n            \"release_date\": \"2017-04-02T03:32:44\",\n            \"release_url\": \"https://pypi.org/project/qypi/0.1.0.post1/\",\n            \"requires_python\": \"~=3.4\",\n            \"summary\": \"Query PyPI from the command line\",\n            \"url\": \"https://github.com/jwodder/qypi\",\n            \"version\": \"0.1.0.post1\"\n        }\n    ]\n\n``readme``\n^^^^^^^^^^\n\n::\n\n    qypi readme [\u003coptions\u003e] \u003cpackage[==version]\u003e ...\n\nDisplay the given package releases' (long) descriptions in a pager one at a\ntime.  ``list`` and ``readme`` are the only subcommands that do not output\nJSON.\n\n``files``\n^^^^^^^^^\n\n::\n\n    qypi files [\u003coptions\u003e] [--trust-downloads] \u003cpackage[==version]\u003e ...\n\nList files available for download for the given package releases.  Download\ncounts are omitted because `the feature is currently broken \u0026 unreliable\n\u003chttps://github.com/pypa/pypi-legacy/issues/396\u003e`_; use the\n``--trust-downloads`` option if you want to see the values anyway.\n\nExample::\n\n    $ qypi files qypi\n    [\n        {\n            \"files\": [\n                {\n                    \"comment_text\": \"\",\n                    \"digests\": {\n                        \"md5\": \"58863d77e19bf4aa1ae85026cc1ff0f6\",\n                        \"sha256\": \"5946a4557550479af90278e5418cd2c32a2626936075078a4c7096be52d43078\"\n                    },\n                    \"filename\": \"qypi-0.1.0.post1-py3-none-any.whl\",\n                    \"has_sig\": true,\n                    \"md5_digest\": \"58863d77e19bf4aa1ae85026cc1ff0f6\",\n                    \"packagetype\": \"bdist_wheel\",\n                    \"python_version\": \"py3\",\n                    \"size\": 13590,\n                    \"upload_time\": \"2017-04-02T03:32:44\",\n                    \"url\": \"https://files.pythonhosted.org/packages/f9/3f/6b184713e79da15cd451f0dab91864633175242f4d321df0cacdd2dc8300/qypi-0.1.0.post1-py3-none-any.whl\"\n                },\n                {\n                    \"comment_text\": \"\",\n                    \"digests\": {\n                        \"md5\": \"bfd357b3df2c2f1cbb6d23ff7c61fbb9\",\n                        \"sha256\": \"c99eea315455cf9fde722599ab67eeefdff5c184bb3861a7fd82f8a9387c252d\"\n                    },\n                    \"filename\": \"qypi-0.1.0.post1.tar.gz\",\n                    \"has_sig\": true,\n                    \"md5_digest\": \"bfd357b3df2c2f1cbb6d23ff7c61fbb9\",\n                    \"packagetype\": \"sdist\",\n                    \"python_version\": \"source\",\n                    \"size\": 8975,\n                    \"upload_time\": \"2017-04-02T03:32:46\",\n                    \"url\": \"https://files.pythonhosted.org/packages/0e/49/3056ee68b44c8eab4d4698b52ae4d18c0db92c80abc312894c02c4722621/qypi-0.1.0.post1.tar.gz\"\n                }\n            ],\n            \"name\": \"qypi\",\n            \"version\": \"0.1.0.post1\"\n        }\n    ]\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwodder%2Fqypi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjwodder%2Fqypi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwodder%2Fqypi/lists"}