<commit_before>twine
=====

Twine is a utility for interacting with PyPI.

Currently it only supports uploading distributions.


Why Should I Use This?
----------------------

The biggest reason to use twine is that ``python setup.py upload`` uploads
files over plaintext. This means anytime you use it you expose your username
and password to a MITM attack. Twine uses only verified TLS to upload to PyPI
protecting your credentials from theft.

Secondly it allows you to precreate your distribution files.
``python setup.py upload`` only allows you to upload something that you've
created in the same command invocation. This means that you cannot test the
exact file you're going to upload to PyPI to ensure that it works before
uploading it.

Finally it allows you to pre-sign your files and pass the .asc files into
the command line invocation
(``twine upload twine-1.0.1.tar.gz twine-1.0.1.tar.gz.asc``). This enables you
to be assured that you're typing your gpg passphrase into gpg itself and not
anything else since *you* will be the one directly executing
``gpg --detach-sign -a <filename>``.


Features
--------

* Verified HTTPS Connections
* Uploading doesn't require executing setup.py
* Uploading files that have already been created, allowing testing of<commit_msg>Add citation for setup.py bug<commit_after>twine
=====

Twine is a utility for interacting with PyPI.

Currently it only supports uploading distributions.


Why Should I Use This?
----------------------

The biggest reason to use twine is that ``python setup.py upload`` `uploads
files over plaintext <https://bugs.python.org/issue12226>`_. 
This means anytime you use it you expose your username
and password to a MITM attack. Twine uses only verified TLS to upload to PyPI
protecting your credentials from theft.

Secondly it allows you to precreate your distribution files.
``python setup.py upload`` only allows you to upload something that you've
created in the same command invocation. This means that you cannot test the
exact file you're going to upload to PyPI to ensure that it works before
uploading it.

Finally it allows you to pre-sign your files and pass the .asc files into
the command line invocation
(``twine upload twine-1.0.1.tar.gz twine-1.0.1.tar.gz.asc``). This enables you
to be assured that you're typing your gpg passphrase into gpg itself and not
anything else since *you* will be the one directly executing
``gpg --detach-sign -a <filename>``.


Features
--------

* Verified HTTPS Connections
* Uploading doesn't require executing setup.py
* Uploading files that have already been created, allowing testing of
{'fraction_non_alphanumeric': 0.07980145093547156, 'fraction_numerical': 0.006491027109583811, 'mean_word_length': 3.897196261682243, 'pattern_counts': {'":': 0, '<': 6, '<?xml version=': 0, '>': 6, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6042991', 'n_tokens_mistral': 719, 'n_tokens_neox': 673, 'n_words': 378}