py$(PYV): remove tox env folder $(@D)/.tox/py$(PYV) py$(PYV): commands[0]> python -m coverage run -m pytest ============================= test session starts ============================== platform sunos5 -- Python $(PYTHON_VERSION).X -- $(@D)/.tox/py$(PYV)/bin/python cachedir: .tox/py$(PYV)/.pytest_cache rootdir: $(@D) configfile: pytest.ini collecting ... collected 225 items tests/test_auth.py::test_get_username_keyring_defers_to_prompt PASSED tests/test_auth.py::test_get_username_keyring_not_installed_defers_to_prompt PASSED tests/test_auth.py::test_get_password_keyring_defers_to_prompt PASSED tests/test_auth.py::test_get_password_keyring_not_installed_defers_to_prompt PASSED tests/test_auth.py::test_no_password_defers_to_prompt PASSED tests/test_auth.py::test_empty_password_bypasses_prompt PASSED tests/test_auth.py::test_no_username_non_interactive_aborts PASSED tests/test_auth.py::test_no_password_non_interactive_aborts PASSED tests/test_auth.py::test_get_username_and_password_keyring_overrides_prompt PASSED tests/test_auth.py::test_get_username_keyring_missing_get_credentials_prompts PASSED tests/test_auth.py::test_get_username_keyring_missing_non_interactive_aborts PASSED tests/test_auth.py::test_get_password_keyring_missing_non_interactive_aborts PASSED tests/test_auth.py::test_get_username_keyring_runtime_error_logged PASSED tests/test_auth.py::test_get_password_keyring_runtime_error_logged PASSED tests/test_auth.py::test_get_username_keyring_key_error_logged PASSED tests/test_auth.py::test_get_password_keyring_key_error_logged PASSED tests/test_auth.py::test_logs_cli_values PASSED tests/test_auth.py::test_logs_config_values PASSED tests/test_auth.py::test_warns_for_empty_password[-Your password is empty] PASSED tests/test_auth.py::test_warns_for_empty_password[\x16-Your password contains control characters] PASSED tests/test_auth.py::test_warns_for_empty_password[entered\x16pw-Your password contains control characters] PASSED tests/test_auth.py::test_keyring_module PASSED tests/test_check.py::TestWarningStream::test_write_match PASSED tests/test_check.py::TestWarningStream::test_write_nomatch PASSED tests/test_check.py::TestWarningStream::test_str_representation PASSED tests/test_check.py::test_fails_no_distributions PASSED tests/test_check.py::test_warns_missing_description[False] PASSED tests/test_check.py::test_warns_missing_description[True] PASSED tests/test_check.py::test_fails_rst_syntax_error PASSED tests/test_check.py::test_fails_rst_no_content PASSED tests/test_check.py::test_passes_rst_description PASSED tests/test_check.py::test_passes_markdown_description[text/markdown] PASSED tests/test_check.py::test_passes_markdown_description[text/plain] PASSED tests/test_check.py::test_main PASSED tests/test_check.py::test_check_expands_glob PASSED tests/test_cli.py::test_dispatch_to_subcommand PASSED tests/test_cli.py::test_catches_enoent PASSED tests/test_commands.py::test_ensure_wheel_files_uploaded_first PASSED tests/test_commands.py::test_ensure_if_no_wheel_files PASSED tests/test_commands.py::test_find_dists_expands_globs PASSED tests/test_commands.py::test_find_dists_errors_on_invalid_globs PASSED tests/test_commands.py::test_find_dists_handles_real_files PASSED tests/test_commands.py::test_split_inputs PASSED tests/test_main.py::test_exception_handling PASSED tests/test_main.py::test_http_exception_handling PASSED tests/test_main.py::test_no_color_exception PASSED tests/test_package.py::test_sign_file PASSED tests/test_package.py::test_sign_file_with_identity PASSED tests/test_package.py::test_run_gpg_raises_exception_if_no_gpgs PASSED tests/test_package.py::test_run_gpg_raises_exception_if_not_using_gpg PASSED tests/test_package.py::test_run_gpg_falls_back_to_gpg2 PASSED tests/test_package.py::test_package_signed_name_is_correct PASSED tests/test_package.py::test_package_add_attestations PASSED tests/test_package.py::test_package_add_attestations_invalid_json PASSED tests/test_package.py::test_package_safe_name_is_correct[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ] PASSED tests/test_package.py::test_package_safe_name_is_correct[0123456789-0123456789] PASSED tests/test_package.py::test_package_safe_name_is_correct[!"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~--.-] PASSED tests/test_package.py::test_package_safe_name_is_correct[mosaik.SimConfig-mosaik.SimConfig] PASSED tests/test_package.py::test_package_safe_name_is_correct[mosaik$$$$.SimConfig-mosaik-.SimConfig] PASSED tests/test_package.py::test_metadata_keys_consistency PASSED tests/test_package.py::test_metadata_dictionary_values[None-None] PASSED tests/test_package.py::test_metadata_dictionary_values[None-gpg_signature1] PASSED tests/test_package.py::test_metadata_dictionary_values[attestation1-None] PASSED tests/test_package.py::test_metadata_dictionary_values[attestation1-gpg_signature1] PASSED tests/test_package.py::test_hash_manager PASSED tests/test_package.py::test_fips_hash_manager_md5 PASSED tests/test_package.py::test_fips_hash_manager_blake2[TypeError] PASSED tests/test_package.py::test_fips_hash_manager_blake2[ValueError] PASSED tests/test_package.py::test_fips_metadata_excludes_md5_and_blake2 PASSED tests/test_package.py::test_pkginfo_returns_no_metadata[unsupported Metadata-Version] PASSED tests/test_package.py::test_pkginfo_returns_no_metadata[invalid Version0] PASSED tests/test_package.py::test_pkginfo_returns_no_metadata[invalid Version1] PASSED tests/test_package.py::test_pkginfo_returns_no_metadata[missing Name and Version0] PASSED tests/test_package.py::test_pkginfo_returns_no_metadata[missing Name and Version1] PASSED tests/test_package.py::test_pkginfo_returns_no_metadata[missing Name0] PASSED tests/test_package.py::test_pkginfo_returns_no_metadata[missing Name1] PASSED tests/test_package.py::test_pkginfo_returns_no_metadata[missing Version0] PASSED tests/test_package.py::test_pkginfo_returns_no_metadata[missing Version1] PASSED tests/test_package.py::test_pkginfo_returns_no_metadata[unrecognized field] PASSED tests/test_package.py::test_malformed_from_file PASSED tests/test_package.py::test_package_from_sdist PASSED tests/test_package.py::test_package_from_unrecognized_file_error PASSED tests/test_package.py::test_setuptools_license_file[invalid License-File] PASSED tests/test_package.py::test_setuptools_license_file[valid License-File] PASSED tests/test_register.py::test_successful_register PASSED tests/test_register.py::test_exception_for_redirect PASSED tests/test_register.py::test_non_existent_package PASSED tests/test_register.py::test_values_from_env_pypi[pypi] PASSED tests/test_register.py::test_values_from_env_pypi[testpypi] PASSED tests/test_register.py::test_values_from_env_not_pypi PASSED tests/test_repository.py::test_gpg_signature_structure_is_preserved PASSED tests/test_repository.py::test_iterables_are_flattened PASSED tests/test_repository.py::test_all_metadata_fields_are_flattened PASSED tests/test_repository.py::test_set_client_certificate PASSED tests/test_repository.py::test_set_certificate_authority PASSED tests/test_repository.py::test_make_user_agent_string PASSED tests/test_repository.py::test_package_is_uploaded_404s PASSED tests/test_repository.py::test_package_is_uploaded_200s_with_no_releases PASSED tests/test_repository.py::test_package_is_uploaded_with_releases_using_cache PASSED tests/test_repository.py::test_package_is_uploaded_with_releases_not_using_cache PASSED tests/test_repository.py::test_package_is_uploaded_different_filenames PASSED tests/test_repository.py::test_package_is_registered PASSED tests/test_repository.py::test_disable_progress_bar_is_forwarded_to_rich[True] PASSED tests/test_repository.py::test_disable_progress_bar_is_forwarded_to_rich[False] PASSED tests/test_repository.py::test_upload_retry PASSED tests/test_repository.py::test_release_urls[package_meta0-https://upload.pypi.org/legacy/-release_urls0] PASSED tests/test_repository.py::test_release_urls[package_meta1-https://test.pypi.org/legacy/-release_urls1] PASSED tests/test_repository.py::test_release_urls[package_meta2-https://upload.pypi.org/legacy/-release_urls2] PASSED tests/test_repository.py::test_release_urls[package_meta3-https://upload.pypi.org/legacy/-release_urls3] PASSED tests/test_repository.py::test_release_urls[package_meta4-http://devpi.example.com-release_urls4] PASSED tests/test_repository.py::test_release_urls[package_meta5-https://upload.pypi.org/legacy/-release_urls5] PASSED tests/test_repository.py::test_package_is_uploaded_incorrect_repo_url PASSED tests/test_repository.py::test_logs_username_and_password[None-None-messages0] PASSED tests/test_repository.py::test_logs_username_and_password[--messages1] PASSED tests/test_repository.py::test_logs_username_and_password[username-password-messages2] PASSED tests/test_sdist.py::test_read_example[fixtures/twine-1.5.0.tar.gz] PASSED tests/test_sdist.py::test_read_example[fixtures/twine-1.6.5.tar.gz] PASSED tests/test_sdist.py::test_read_non_existent PASSED tests/test_sdist.py::test_formar_not_supported PASSED tests/test_sdist.py::test_read[tar.gz] PASSED tests/test_sdist.py::test_read[zip] PASSED tests/test_sdist.py::test_missing_pkg_info[tar.gz] PASSED tests/test_sdist.py::test_missing_pkg_info[zip] PASSED tests/test_sdist.py::test_invalid_pkg_info[tar.gz] PASSED tests/test_sdist.py::test_invalid_pkg_info[zip] PASSED tests/test_sdist.py::test_pkg_info_directory[tar.gz] PASSED tests/test_sdist.py::test_pkg_info_directory[zip] PASSED tests/test_sdist.py::test_pkg_info_not_regular_file PASSED tests/test_sdist.py::test_multiple_top_level[tar.gz] PASSED tests/test_sdist.py::test_multiple_top_level[zip] PASSED tests/test_sdist.py::test_py_version[fixtures/twine-1.5.0.tar.gz] PASSED tests/test_sdist.py::test_py_version[fixtures/twine-1.6.5.tar.gz] PASSED tests/test_settings.py::test_settings_takes_no_positional_arguments PASSED tests/test_settings.py::test_settings_transforms_repository_config_pypi PASSED tests/test_settings.py::test_settings_transforms_repository_config_non_pypi PASSED tests/test_settings.py::test_setup_logging[True-20] PASSED tests/test_settings.py::test_setup_logging[False-30] PASSED tests/test_settings.py::test_print_config_path_if_verbose[True] PASSED tests/test_settings.py::test_print_config_path_if_verbose[False] PASSED tests/test_settings.py::test_identity_requires_sign PASSED tests/test_settings.py::test_password_is_required_if_no_client_cert[None] PASSED tests/test_settings.py::test_password_is_required_if_no_client_cert[] PASSED tests/test_settings.py::test_client_cert_and_password_both_set_if_given PASSED tests/test_settings.py::test_password_required_if_no_client_cert_and_non_interactive PASSED tests/test_settings.py::test_no_password_prompt_if_client_cert_and_non_interactive PASSED tests/test_settings.py::TestArgumentParsing::test_non_interactive_flag PASSED tests/test_settings.py::TestArgumentParsing::test_non_interactive_environment PASSED tests/test_settings.py::TestArgumentParsing::test_attestations_flag PASSED tests/test_upload.py::test_make_package_pre_signed_dist PASSED tests/test_upload.py::test_make_package_unsigned_dist PASSED tests/test_upload.py::test_make_package_attestations_flagged_but_missing PASSED tests/test_upload.py::test_successs_prints_release_urls PASSED tests/test_upload.py::test_print_packages_if_verbose PASSED tests/test_upload.py::test_print_response_if_verbose PASSED tests/test_upload.py::test_success_with_pre_signed_distribution PASSED tests/test_upload.py::test_warns_potential_pgp_removal_on_3p_index PASSED tests/test_upload.py::test_exception_with_only_pre_signed_file PASSED tests/test_upload.py::test_success_when_gpg_is_run PASSED tests/test_upload.py::test_exception_for_http_status[False] PASSED tests/test_upload.py::test_exception_for_http_status[True] PASSED tests/test_upload.py::test_get_config_old_format PASSED tests/test_upload.py::test_deprecated_repo PASSED tests/test_upload.py::test_exception_for_redirect[https://test.pypi.org/legacy-https://test.pypi.org/legacy/-https://test.pypi.org/legacy.+https://test.pypi.org/legacy/.+\\nYour repository URL is missing a trailing slash] PASSED tests/test_upload.py::test_exception_for_redirect[https://test.pypi.org/legacy/-https://malicious.website.org/danger/-https://test.pypi.org/legacy/.+https://malicious.website.org/danger/.+\\nIf you trust these URLs] PASSED tests/test_upload.py::test_prints_skip_message_for_uploaded_package PASSED tests/test_upload.py::test_prints_skip_message_for_response PASSED tests/test_upload.py::test_skip_existing_skips_files_on_repository[pypi] PASSED tests/test_upload.py::test_skip_existing_skips_files_on_repository[nexus] PASSED tests/test_upload.py::test_skip_existing_skips_files_on_repository[nexus_new] PASSED tests/test_upload.py::test_skip_existing_skips_files_on_repository[pypiserver] PASSED tests/test_upload.py::test_skip_existing_skips_files_on_repository[artifactory_old] PASSED tests/test_upload.py::test_skip_existing_skips_files_on_repository[artifactory_new] PASSED tests/test_upload.py::test_skip_existing_skips_files_on_repository[gitlab_enterprise] PASSED tests/test_upload.py::test_skip_upload_doesnt_match[wrong_reason] PASSED tests/test_upload.py::test_skip_upload_doesnt_match[wrong_code] PASSED tests/test_upload.py::test_skip_upload_respects_skip_existing PASSED tests/test_upload.py::test_values_from_env_pypi[pypi] PASSED tests/test_upload.py::test_values_from_env_pypi[testpypi] PASSED tests/test_upload.py::test_values_from_env_non_pypi PASSED tests/test_upload.py::test_check_status_code_for_wrong_repo_url[https://upload.pypi.org/] PASSED tests/test_upload.py::test_check_status_code_for_wrong_repo_url[https://test.pypi.org/] PASSED tests/test_upload.py::test_check_status_code_for_wrong_repo_url[https://pypi.org/] PASSED tests/test_upload.py::test_upload_warns_attestations_non_pypi PASSED tests/test_utils.py::test_get_config PASSED tests/test_utils.py::test_get_config_no_distutils PASSED tests/test_utils.py::test_get_config_no_section PASSED tests/test_utils.py::test_get_config_override_pypi_url PASSED tests/test_utils.py::test_get_config_missing PASSED tests/test_utils.py::test_empty_userpass PASSED tests/test_utils.py::test_get_repository_config_missing PASSED tests/test_utils.py::test_get_repository_config_url_with_auth[https://user:pass@notexisting.python.org/pypi-expected_config0] PASSED tests/test_utils.py::test_get_repository_config_url_with_auth[https://auser:pass@pypi.proxy.local.repo.net:8443-expected_config1] PASSED tests/test_utils.py::test_sanitize_url[https://upload.pypi.org/legacy/-https://upload.pypi.org/legacy/] PASSED tests/test_utils.py::test_sanitize_url[https://user:pass@upload.pypi.org/legacy/-https://********@upload.pypi.org/legacy/] PASSED tests/test_utils.py::test_get_repository_config_with_invalid_url[ftp://test.pypi.org-scheme was required to be one of \\['http', 'https'\\]] PASSED tests/test_utils.py::test_get_repository_config_with_invalid_url[https:/-host was required but missing.] PASSED tests/test_utils.py::test_get_repository_config_with_invalid_url[//test.pypi.org-scheme was required but missing.] PASSED tests/test_utils.py::test_get_repository_config_with_invalid_url[foo.bar-host, scheme were required but missing.] PASSED tests/test_utils.py::test_get_repository_config_missing_repository PASSED tests/test_utils.py::test_get_repository_config_missing_file[pypi] PASSED tests/test_utils.py::test_get_repository_config_missing_file[missing-repository] PASSED tests/test_utils.py::test_get_config_deprecated_pypirc PASSED tests/test_utils.py::test_get_userpass_value[cli-config0-key-<lambda>-cli] PASSED tests/test_utils.py::test_get_userpass_value[None-config1-key-<lambda>-value] PASSED tests/test_utils.py::test_get_userpass_value[None-config2-key-<lambda>-fallback] PASSED tests/test_utils.py::test_default_to_environment_action[MY_PASSWORD-None-environ0-None] PASSED tests/test_utils.py::test_default_to_environment_action[MY_PASSWORD-None-environ1-foo] PASSED tests/test_utils.py::test_default_to_environment_action[URL-https://example.org-environ2-https://example.org] PASSED tests/test_utils.py::test_default_to_environment_action[URL-https://example.org-environ3-https://pypi.org] PASSED tests/test_utils.py::test_check_status_code_for_deprecated_pypi_url[https://pypi.python.org] PASSED tests/test_utils.py::test_check_status_code_for_deprecated_pypi_url[https://testpypi.python.org] PASSED tests/test_utils.py::test_check_status_code_for_missing_status_code[True-https://pypi.python.org] PASSED tests/test_utils.py::test_check_status_code_for_missing_status_code[True-https://testpypi.python.org] PASSED tests/test_utils.py::test_check_status_code_for_missing_status_code[False-https://pypi.python.org] PASSED tests/test_utils.py::test_check_status_code_for_missing_status_code[False-https://testpypi.python.org] PASSED tests/test_utils.py::test_get_file_size[3704-3.6 KB] PASSED tests/test_utils.py::test_get_file_size[1153433-1.1 MB] PASSED tests/test_utils.py::test_get_file_size[21412841-20.4 MB] PASSED tests/test_wheel.py::test_version_parsing PASSED tests/test_wheel.py::test_version_parsing_missing_pyver PASSED tests/test_wheel.py::test_find_metadata_files PASSED tests/test_wheel.py::test_read_valid PASSED tests/test_wheel.py::test_read_non_existent_wheel_file_name PASSED tests/test_wheel.py::test_read_invalid_wheel_extension PASSED tests/test_wheel.py::test_read_wheel_empty_metadata PASSED =============================== warnings summary =============================== ../../../../../../../..$(PYTHON_DIR)/vendor-packages/_pytest/config/__init__.py:831 $(PYTHON_DIR)/vendor-packages/_pytest/config/__init__.py:831: PytestAssertRewriteWarning: Module already imported so cannot be rewritten: socket self.import_plugin(import_spec, consider_entry_points=True) tests/test_auth.py::test_no_password_defers_to_prompt $(PYTHON_DIR)/vendor-packages/keyrings/alt/Gnome.py:27: DeprecationWarning: GnomeKeyring.get_default_keyring_sync is deprecated result = GnomeKeyring.get_default_keyring_sync()[0] -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ======== 225 passed, 2 warnings ======== py$(PYV): commands[1]> python -m coverage html Wrote HTML report to htmlcov/index.html py$(PYV): commands[2]> python -m coverage report --skip-covered --show-missing --fail-under 97 Name Stmts Miss Branch BrPart Cover Missing ---------------------------------------------------------------------- tests/helpers.py 31 1 10 1 95% 53 tests/test_auth.py 139 1 2 1 99% 98 tests/test_repository.py 115 0 6 1 99% 105->104 tests/test_upload.py 199 2 6 0 99% 311-312 tests/test_utils.py 87 1 2 0 99% 332 twine/__init__.py 14 1 2 1 88% 37 twine/auth.py 117 29 20 1 74% 78-129, 162, 182-186 twine/cli.py 41 3 6 2 89% 20, 86->89, 93-94 twine/commands/upload.py 80 1 34 1 98% 101 twine/distribution.py 6 2 0 0 67% 4, 8 twine/package.py 206 2 46 5 97% 254->252, 274->277, 308, 387->exit, 393 twine/repository.py 115 3 38 3 96% 60, 87->exit, 91->exit, 177, 229 twine/settings.py 82 4 4 0 95% 333-341 twine/utils.py 149 1 42 0 99% 356 twine/wheel.py 42 1 12 1 96% 53 ---------------------------------------------------------------------- TOTAL 2262 52 300 17 97% 17 files skipped due to complete coverage. py$(PYV): OK congratulations :)