Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-trustme for openSUSE:Factory checked in at 2021-05-12 19:31:21 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-trustme (Old) and /work/SRC/openSUSE:Factory/.python-trustme.new.2988 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-trustme" Wed May 12 19:31:21 2021 rev:7 rq:891896 version:0.7.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-trustme/python-trustme.changes 2020-03-27 00:21:18.164135395 +0100 +++ /work/SRC/openSUSE:Factory/.python-trustme.new.2988/python-trustme.changes 2021-05-12 19:31:29.647217547 +0200 @@ -1,0 +2,7 @@ +Sun May 9 17:12:48 UTC 2021 - Dirk M??ller <[email protected]> + +- update to 0.7.0: + - trustme can now be used a command line interface with ``python -m + trustme``. Get the help with ``python -m trustme --help``. + +------------------------------------------------------------------- Old: ---- trustme-0.6.0.tar.gz New: ---- trustme-0.7.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-trustme.spec ++++++ --- /var/tmp/diff_new_pack.5lnR6g/_old 2021-05-12 19:31:30.459213940 +0200 +++ /var/tmp/diff_new_pack.5lnR6g/_new 2021-05-12 19:31:30.463213923 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-trustme # -# Copyright (c) 2020 SUSE LLC +# Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,10 +19,10 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %bcond_without python2 Name: python-trustme -Version: 0.6.0 +Version: 0.7.0 Release: 0 Summary: Fake CA provider for Python tests -License: MIT OR Apache-2.0 +License: Apache-2.0 OR MIT URL: https://github.com/python-trio/trustme Source: https://files.pythonhosted.org/packages/source/t/trustme/trustme-%{version}.tar.gz BuildRequires: %{python_module cryptography} ++++++ trustme-0.6.0.tar.gz -> trustme-0.7.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trustme-0.6.0/PKG-INFO new/trustme-0.7.0/PKG-INFO --- old/trustme-0.6.0/PKG-INFO 2019-12-19 15:06:58.000000000 +0100 +++ new/trustme-0.7.0/PKG-INFO 2021-02-10 07:58:32.458999200 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: trustme -Version: 0.6.0 +Version: 0.7.0 Summary: #1 quality TLS certs while you wait, for the discerning tester Home-page: https://github.com/python-trio/trustme Author: Nathaniel J. Smith @@ -54,13 +54,15 @@ Cheat sheet =========== + Programmatic usage: + .. code-block:: python import trustme # ----- Creating certs ----- - # Look, you just created your own certificate authority! + # Look, you just created your certificate authority! ca = trustme.CA() # And now you issued a cert signed by this fake CA @@ -92,6 +94,26 @@ with ca.cert_pem.tempfile() as ca_temp_path: requests.get("https://...", verify=ca_temp_path) + Command line usage: + + .. code-block:: console + + $ # Certs may be generated from anywhere. Here's where we are: + $ pwd + /tmp + $ # ----- Creating certs ----- + $ python -m trustme + Generated a certificate for 'localhost', '127.0.0.1', '::1' + Configure your server to use the following files: + cert=/tmp/server.pem + key=/tmp/server.key + Configure your client to use the following files: + cert=/tmp/client.pem + $ # ----- Using certs ----- + $ gunicorn --keyfile server.key --certfile server.pem app:app + $ curl --cacert client.pem https://localhost:8000/ + Hello, world! + FAQ === @@ -100,17 +122,17 @@ **Why not just use self-signed certificates?** These are more realistic. You don't have to disable your certificate validation code - in your test suite, which is good, because you want to test what you + in your test suite, which is good because you want to test what you run in production, and you would *never* disable your certificate - validation code in production, right? Plus they're just as easy to + validation code in production, right? Plus, they're just as easy to work with. Actually easier, in many cases. - **What if I want to test how my code handles some really weird TLS + **What if I want to test how my code handles some bizarre TLS configuration?** Sure, I'm happy to extend the API to give more control over the generated certificates, at least as long as it doesn't turn into a second-rate re-export of everything in - `cryptography <https://cryptography.io>`__. (If you really need a - fully general X.509 library then they do a great job at that.) `Let's + `cryptography <https://cryptography.io>`__. (If you need a + fully general X.509 library, then they do a great job at that.) `Let's talk <https://github.com/python-trio/trustme/issues/new>`__, or send a PR. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trustme-0.6.0/README.rst new/trustme-0.7.0/README.rst --- old/trustme-0.6.0/README.rst 2019-12-19 15:04:58.000000000 +0100 +++ new/trustme-0.7.0/README.rst 2021-02-10 07:22:45.000000000 +0100 @@ -46,13 +46,15 @@ Cheat sheet =========== +Programmatic usage: + .. code-block:: python import trustme # ----- Creating certs ----- - # Look, you just created your own certificate authority! + # Look, you just created your certificate authority! ca = trustme.CA() # And now you issued a cert signed by this fake CA @@ -84,6 +86,26 @@ with ca.cert_pem.tempfile() as ca_temp_path: requests.get("https://...", verify=ca_temp_path) +Command line usage: + +.. code-block:: console + + $ # Certs may be generated from anywhere. Here's where we are: + $ pwd + /tmp + $ # ----- Creating certs ----- + $ python -m trustme + Generated a certificate for 'localhost', '127.0.0.1', '::1' + Configure your server to use the following files: + cert=/tmp/server.pem + key=/tmp/server.key + Configure your client to use the following files: + cert=/tmp/client.pem + $ # ----- Using certs ----- + $ gunicorn --keyfile server.key --certfile server.pem app:app + $ curl --cacert client.pem https://localhost:8000/ + Hello, world! + FAQ === @@ -92,16 +114,16 @@ **Why not just use self-signed certificates?** These are more realistic. You don't have to disable your certificate validation code -in your test suite, which is good, because you want to test what you +in your test suite, which is good because you want to test what you run in production, and you would *never* disable your certificate -validation code in production, right? Plus they're just as easy to +validation code in production, right? Plus, they're just as easy to work with. Actually easier, in many cases. -**What if I want to test how my code handles some really weird TLS +**What if I want to test how my code handles some bizarre TLS configuration?** Sure, I'm happy to extend the API to give more control over the generated certificates, at least as long as it doesn't turn into a second-rate re-export of everything in -`cryptography <https://cryptography.io>`__. (If you really need a -fully general X.509 library then they do a great job at that.) `Let's +`cryptography <https://cryptography.io>`__. (If you need a +fully general X.509 library, then they do a great job at that.) `Let's talk <https://github.com/python-trio/trustme/issues/new>`__, or send a PR. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trustme-0.6.0/docs/source/index.rst new/trustme-0.7.0/docs/source/index.rst --- old/trustme-0.6.0/docs/source/index.rst 2019-12-19 15:04:58.000000000 +0100 +++ new/trustme-0.7.0/docs/source/index.rst 2021-02-10 07:54:11.000000000 +0100 @@ -25,6 +25,75 @@ .. literalinclude:: trustme-trio-example.py +CLI reference +============= + +**All options:** + +.. code-block:: console + + $ python -m trustme --help + usage: trustme [-h] [-d DIR] [-i [IDENTITIES [IDENTITIES ...]]] + [--common-name COMMON_NAME] [-q] + + optional arguments: + -h, --help Show this help message and exit. + -d DIR, --dir DIR Directory where certificates and keys are written to. + Defaults to cwd. + -i [IDENTITIES [IDENTITIES ...]], --identities [IDENTITIES [IDENTITIES ...]] + Identities for the certificate. Defaults to 'localhost + 127.0.0.1 ::1'. + --common-name COMMON_NAME + Also sets the deprecated 'commonName' field. + -q, --quiet Doesn't print out helpful information for humans. + +**Default configuration:** + +.. code-block:: console + + $ cd /tmp/ + $ python -m trustme + Generated a certificate for 'localhost', '127.0.0.1', '::1' + Configure your server to use the following files: + cert=/tmp/server.pem + key=/tmp/server.key + Configure your client to use the following files: + cert=/tmp/client.pem + +**Designate different identities:** + +.. code-block:: console + + $ python -m trustme -i www.example.org example.org + Generated a certificate for 'www.example.org', 'example.org' + Configure your server to use the following files: + cert=/tmp/server.pem + key=/tmp/server.key + Configure your client to use the following files: + cert=/tmp/client.pem + +**Generate files into a directory:** + +.. code-block:: console + + $ mkdir /tmp/a + $ python -m trustme -d /tmp/a + Generated a certificate for 'localhost', '127.0.0.1', '::1' + Configure your server to use the following files: + cert=/tmp/a/server.pem + key=/tmp/a/server.key + Configure your client to use the following files: + cert=/tmp/a/client.pem + +**Configure certs for server/client:** + +.. code-block:: console + + $ gunicorn --keyfile /tmp/a/server.key --certfile /tmp/a/server.pem app:app + $ curl --cacert /tmp/a/client.pem https://localhost:8000 + Hello, world! + + API reference ============= @@ -50,6 +119,16 @@ .. towncrier release notes start +Trustme 0.7.0 (2021-02-10) +------------------------------ + +Features +~~~~~~~~ + +- trustme can now be used a command line interface with ``python -m + trustme``. Get the help with ``python -m trustme --help``. (`#265 <https://github.com/python-trio/trustme/issues/265>`__) + + Trustme 0.6.0 (2019-12-19) -------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trustme-0.6.0/pyproject.toml new/trustme-0.7.0/pyproject.toml --- old/trustme-0.6.0/pyproject.toml 1970-01-01 01:00:00.000000000 +0100 +++ new/trustme-0.7.0/pyproject.toml 2019-12-19 15:04:58.000000000 +0100 @@ -0,0 +1,19 @@ +[tool.towncrier] +# Usage: +# - PRs should drop a file like "issuenumber.feature" in newsfragments +# (or "bugfix", "doc", "removal", "misc"; misc gets no text, we can +# customize this) +# - At release time after bumping version number, run: towncrier +# (or towncrier --draft) +# - Make sure to use a version with the PRs mentioned below merged. +# You probably want https://github.com/hawkowl/towncrier/pull/69 too. +# Right now on my laptop it's +# PYTHONPATH=~/src/towncrier/src ~/src/towncrier/bin/towncrier +# with the merge-64-66-69 branch checked out. +package = "trustme" +filename = "docs/source/index.rst" +directory = "newsfragments" +# Requires https://github.com/hawkowl/towncrier/pull/64 +underlines = ["-", "~", "^"] +# Requires https://github.com/hawkowl/towncrier/pull/66 +issue_format = "`#{issue} <https://github.com/python-trio/trustme/issues/{issue}>`__" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trustme-0.6.0/test-requirements.txt new/trustme-0.7.0/test-requirements.txt --- old/trustme-0.6.0/test-requirements.txt 2019-12-19 15:04:58.000000000 +0100 +++ new/trustme-0.7.0/test-requirements.txt 2021-02-10 07:22:45.000000000 +0100 @@ -4,26 +4,66 @@ # # pip-compile test-requirements.in # -atomicwrites==1.3.0 # via pytest -attrs==19.3.0 # via pytest, service-identity -cffi==1.13.2 # via cryptography -coverage==5.0 # via pytest-cov -cryptography==2.8 +atomicwrites==1.4.0 + # via pytest +attrs==20.3.0 + # via + # pytest + # service-identity +cffi==1.14.4 + # via cryptography +coverage==5.4 + # via pytest-cov +cryptography==2.9.2 + # via + # -r test-requirements.in + # pyopenssl + # service-identity futures==3.1.1 -idna==2.8 -importlib-metadata==1.3.0 # via pytest + # via -r test-requirements.in +idna==2.10 + # via -r test-requirements.in +importlib-metadata==2.0.0 + # via pytest more-itertools==5.0.0 -packaging==19.2 # via pytest -pluggy==0.13.1 # via pytest -py==1.8.0 # via pytest -pyasn1-modules==0.2.7 # via service-identity -pyasn1==0.4.8 # via pyasn1-modules, service-identity -pycparser==2.19 # via cffi + # via + # -r test-requirements.in + # pytest +packaging==20.9 + # via pytest +pluggy==0.13.1 + # via pytest +py==1.10.0 + # via pytest +pyasn1-modules==0.2.8 + # via service-identity +pyasn1==0.4.8 + # via + # pyasn1-modules + # service-identity +pycparser==2.20 + # via cffi pyopenssl==19.1.0 -pyparsing==2.4.5 # via packaging -pytest-cov==2.8.1 + # via -r test-requirements.in +pyparsing==2.4.7 + # via packaging +pytest-cov==2.11.1 + # via -r test-requirements.in pytest==4.6.3 + # via + # -r test-requirements.in + # pytest-cov service-identity==18.1.0 -six==1.13.0 # via cryptography, more-itertools, packaging, pyopenssl, pytest -wcwidth==0.1.7 # via pytest -zipp==0.6.0 # via importlib-metadata + # via -r test-requirements.in +six==1.15.0 + # via + # cryptography + # more-itertools + # pyopenssl + # pytest +wcwidth==0.2.5 + # via pytest +zipp==1.2.0 + # via + # -r test-requirements.in + # importlib-metadata diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trustme-0.6.0/tests/test_cli.py new/trustme-0.7.0/tests/test_cli.py --- old/trustme-0.6.0/tests/test_cli.py 1970-01-01 01:00:00.000000000 +0100 +++ new/trustme-0.7.0/tests/test_cli.py 2021-02-10 07:22:45.000000000 +0100 @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- + +import subprocess +import sys + +import pytest + +from trustme._cli import main + + +def test_trustme_cli(tmpdir): + with tmpdir.as_cwd(): + main(argv=[]) + + assert tmpdir.join("server.key").check(exists=1) + assert tmpdir.join("server.pem").check(exists=1) + assert tmpdir.join("client.pem").check(exists=1) + + +def test_trustme_cli_e2e(tmpdir): + with tmpdir.as_cwd(): + rv = subprocess.call([sys.executable, "-m", "trustme"]) + assert rv == 0 + + assert tmpdir.join("server.key").check(exists=1) + assert tmpdir.join("server.pem").check(exists=1) + assert tmpdir.join("client.pem").check(exists=1) + + +def test_trustme_cli_directory(tmpdir): + subdir = tmpdir.mkdir("sub") + main(argv=["-d", str(subdir)]) + + assert subdir.join("server.key").check(exists=1) + assert subdir.join("server.pem").check(exists=1) + assert subdir.join("client.pem").check(exists=1) + + +def test_trustme_cli_directory_does_not_exist(tmpdir): + notdir = tmpdir.join("notdir") + with pytest.raises(ValueError, match="is not a directory"): + main(argv=["-d", str(notdir)]) + + +def test_trustme_cli_identities(tmpdir): + with tmpdir.as_cwd(): + main(argv=["-i", "example.org", "www.example.org"]) + + assert tmpdir.join("server.key").check(exists=1) + assert tmpdir.join("server.pem").check(exists=1) + assert tmpdir.join("client.pem").check(exists=1) + + +def test_trustme_cli_identities_empty(tmpdir): + with pytest.raises(ValueError, match="at least one identity"): + main(argv=["-i"]) + + +def test_trustme_cli_common_name(tmpdir): + with tmpdir.as_cwd(): + main(argv=["--common-name", "localhost"]) + + assert tmpdir.join("server.key").check(exists=1) + assert tmpdir.join("server.pem").check(exists=1) + assert tmpdir.join("client.pem").check(exists=1) + + +def test_trustme_cli_quiet(capsys, tmpdir): + with tmpdir.as_cwd(): + main(argv=["-q"]) + + assert tmpdir.join("server.key").check(exists=1) + assert tmpdir.join("server.pem").check(exists=1) + assert tmpdir.join("client.pem").check(exists=1) + + captured = capsys.readouterr() + assert not captured.out diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trustme-0.6.0/trustme/__main__.py new/trustme-0.7.0/trustme/__main__.py --- old/trustme-0.6.0/trustme/__main__.py 1970-01-01 01:00:00.000000000 +0100 +++ new/trustme-0.7.0/trustme/__main__.py 2021-02-10 07:22:45.000000000 +0100 @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- + +from ._cli import main + +main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trustme-0.6.0/trustme/_cli.py new/trustme-0.7.0/trustme/_cli.py --- old/trustme-0.6.0/trustme/_cli.py 1970-01-01 01:00:00.000000000 +0100 +++ new/trustme-0.7.0/trustme/_cli.py 2021-02-10 07:22:45.000000000 +0100 @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- + +import argparse +import os +import trustme +import sys + +# Python 2/3 annoyingness +try: + unicode +except NameError: # pragma: no cover + unicode = str + + +def main(argv=None): + if argv is None: + argv = sys.argv[1:] + + parser = argparse.ArgumentParser(prog="trustme") + parser.add_argument( + "-d", + "--dir", + default=os.getcwd(), + help="Directory where certificates and keys are written to. Defaults to cwd.", + ) + parser.add_argument( + "-i", + "--identities", + nargs="*", + default=("localhost", "127.0.0.1", "::1"), + help="Identities for the certificate. Defaults to 'localhost 127.0.0.1 ::1'.", + ) + parser.add_argument( + "--common-name", + nargs=1, + default=None, + help="Also sets the deprecated 'commonName' field (only for the first identity passed).", + ) + parser.add_argument( + "-q", + "--quiet", + action="store_true", + help="Doesn't print out helpful information for humans.", + ) + + args = parser.parse_args(argv) + cert_dir = args.dir + identities = [unicode(identity) for identity in args.identities] + common_name = unicode(args.common_name[0]) if args.common_name else None + quiet = args.quiet + + if not os.path.isdir(cert_dir): + raise ValueError("--dir={} is not a directory".format(cert_dir)) + if len(identities) < 1: + raise ValueError("Must include at least one identity") + + # Generate the CA certificate + ca = trustme.CA() + cert = ca.issue_cert(*identities, common_name=common_name) + + # Write the certificate and private key the server should use + server_key = os.path.join(cert_dir, "server.key") + server_cert = os.path.join(cert_dir, "server.pem") + cert.private_key_pem.write_to_path(path=server_key) + with open(server_cert, mode="w") as f: + f.truncate() + for blob in cert.cert_chain_pems: + blob.write_to_path(path=server_cert, append=True) + + # Write the certificate the client should trust + client_cert = os.path.join(cert_dir, "client.pem") + ca.cert_pem.write_to_path(path=client_cert) + + if not quiet: + idents = "', '".join(identities) + print("Generated a certificate for '{}'".format(idents)) + print("Configure your server to use the following files:") + print(" cert={}".format(server_cert)) + print(" key={}".format(server_key)) + print("Configure your client to use the following files:") + print(" cert={}".format(client_cert)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trustme-0.6.0/trustme/_version.py new/trustme-0.7.0/trustme/_version.py --- old/trustme-0.6.0/trustme/_version.py 2019-12-19 15:04:58.000000000 +0100 +++ new/trustme-0.7.0/trustme/_version.py 2021-02-10 07:54:32.000000000 +0100 @@ -1 +1 @@ -__version__ = "0.6.0" +__version__ = "0.7.0" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trustme-0.6.0/trustme.egg-info/PKG-INFO new/trustme-0.7.0/trustme.egg-info/PKG-INFO --- old/trustme-0.6.0/trustme.egg-info/PKG-INFO 2019-12-19 15:06:58.000000000 +0100 +++ new/trustme-0.7.0/trustme.egg-info/PKG-INFO 2021-02-10 07:58:31.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: trustme -Version: 0.6.0 +Version: 0.7.0 Summary: #1 quality TLS certs while you wait, for the discerning tester Home-page: https://github.com/python-trio/trustme Author: Nathaniel J. Smith @@ -54,13 +54,15 @@ Cheat sheet =========== + Programmatic usage: + .. code-block:: python import trustme # ----- Creating certs ----- - # Look, you just created your own certificate authority! + # Look, you just created your certificate authority! ca = trustme.CA() # And now you issued a cert signed by this fake CA @@ -92,6 +94,26 @@ with ca.cert_pem.tempfile() as ca_temp_path: requests.get("https://...", verify=ca_temp_path) + Command line usage: + + .. code-block:: console + + $ # Certs may be generated from anywhere. Here's where we are: + $ pwd + /tmp + $ # ----- Creating certs ----- + $ python -m trustme + Generated a certificate for 'localhost', '127.0.0.1', '::1' + Configure your server to use the following files: + cert=/tmp/server.pem + key=/tmp/server.key + Configure your client to use the following files: + cert=/tmp/client.pem + $ # ----- Using certs ----- + $ gunicorn --keyfile server.key --certfile server.pem app:app + $ curl --cacert client.pem https://localhost:8000/ + Hello, world! + FAQ === @@ -100,17 +122,17 @@ **Why not just use self-signed certificates?** These are more realistic. You don't have to disable your certificate validation code - in your test suite, which is good, because you want to test what you + in your test suite, which is good because you want to test what you run in production, and you would *never* disable your certificate - validation code in production, right? Plus they're just as easy to + validation code in production, right? Plus, they're just as easy to work with. Actually easier, in many cases. - **What if I want to test how my code handles some really weird TLS + **What if I want to test how my code handles some bizarre TLS configuration?** Sure, I'm happy to extend the API to give more control over the generated certificates, at least as long as it doesn't turn into a second-rate re-export of everything in - `cryptography <https://cryptography.io>`__. (If you really need a - fully general X.509 library then they do a great job at that.) `Let's + `cryptography <https://cryptography.io>`__. (If you need a + fully general X.509 library, then they do a great job at that.) `Let's talk <https://github.com/python-trio/trustme/issues/new>`__, or send a PR. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trustme-0.6.0/trustme.egg-info/SOURCES.txt new/trustme-0.7.0/trustme.egg-info/SOURCES.txt --- old/trustme-0.6.0/trustme.egg-info/SOURCES.txt 2019-12-19 15:06:58.000000000 +0100 +++ new/trustme-0.7.0/trustme.egg-info/SOURCES.txt 2021-02-10 07:58:31.000000000 +0100 @@ -4,6 +4,7 @@ LICENSE.MIT MANIFEST.in README.rst +pyproject.toml setup.cfg setup.py test-requirements.txt @@ -14,8 +15,11 @@ docs/source/trustme-trio-example.py docs/source/_static/.gitkeep docs/source/_templates/need-help.html +tests/test_cli.py tests/test_trustme.py trustme/__init__.py +trustme/__main__.py +trustme/_cli.py trustme/_version.py trustme.egg-info/PKG-INFO trustme.egg-info/SOURCES.txt
