def test_get_config_old_format(tmpdir): pypirc = os.path.join(str(tmpdir), ".pypirc") with open(pypirc, "w") as fp: fp.write(textwrap.dedent(""" [server-login] username:foo password:bar """)) try: settings.Settings( repository_name="pypi", sign=None, identity=None, username=None, password=None, comment=None, cert=None, client_cert=None, sign_with=None, config_file=pypirc, skip_existing=False, repository_url=None, verbose=False, ) except KeyError as err: assert err.args[0] == ( "Missing 'pypi' section from the configuration file\n" "or not a complete URL in --repository-url.\n" "Maybe you have a out-dated '{0}' format?\n" "more info: " "https://docs.python.org/distutils/packageindex.html#pypirc\n" ).format(pypirc)
def test_password_not_required_if_client_cert(entered_password): """Verify that if client_cert is provided then a password is not.""" test_client_cert = "/random/path" settings_obj = settings.Settings(username="******", client_cert=test_client_cert) assert not settings_obj.password assert settings_obj.client_cert == test_client_cert
def _settings(config=default_config, **settings_kwargs): config_file = write_config_file(config) settings_kwargs.setdefault("sign_with", None) settings_kwargs.setdefault("config_file", config_file) return settings.Settings(**settings_kwargs)
def test_deprecated_repo(tmpdir): with pytest.raises(exceptions.UploadToDeprecatedPyPIDetected) as err: pypirc = os.path.join(str(tmpdir), ".pypirc") dists = ["tests/fixtures/twine-1.5.0-py2.py3-none-any.whl"] with open(pypirc, "w") as fp: fp.write(textwrap.dedent(""" [pypi] repository: https://pypi.python.org/pypi/ username:foo password:bar """)) upload_settings = settings.Settings( repository_name="pypi", sign=None, identity=None, username=None, password=None, comment=None, cert=None, client_cert=None, sign_with=None, config_file=pypirc, skip_existing=False, repository_url=None, verbose=False, ) upload.upload(upload_settings, dists) assert err.args[0] == ( "You're trying to upload to the legacy PyPI site " "'https://pypi.python.org/pypi/'. " "Uploading to those sites is deprecated. \n " "The new sites are pypi.org and test.pypi.org. Try using " "https://upload.pypi.org/legacy/ " "(or https://test.pypi.org/legacy/) " "to upload your packages instead. " "These are the default URLs for Twine now. \n " "More at " "https://packaging.python.org/guides/migrating-to-pypi-org/ ." )
def test_password_not_required_if_client_cert(entered_password): """Don't set password when only client_cert is provided.""" test_client_cert = "/random/path" settings_obj = settings.Settings(username="******", client_cert=test_client_cert) assert not settings_obj.password assert settings_obj.client_cert == test_client_cert
def test_setup_logging(verbose, log_level): """Set log level based on verbose field.""" settings.Settings(verbose=verbose) logger = logging.getLogger("twine") assert logger.level == log_level
def _settings(pypirc_text=default_pypirc, **settings_kwargs): pypirc.write(textwrap.dedent(pypirc_text)) settings_kwargs.setdefault("sign_with", None) settings_kwargs.setdefault("config_file", str(pypirc)) return settings.Settings(**settings_kwargs)
def test_settings_transforms_repository_config(tmpdir): """Set repository config and defaults when .pypirc is provided.""" pypirc = os.path.join(str(tmpdir), ".pypirc") with open(pypirc, "w") as fp: fp.write( textwrap.dedent( """ [pypi] repository: https://upload.pypi.org/legacy/ username:username password:password """ ) ) s = settings.Settings(config_file=pypirc) assert s.repository_config["repository"] == "https://upload.pypi.org/legacy/" assert s.sign is False assert s.sign_with == "gpg" assert s.identity is None assert s.username == "username" assert s.password == "password" assert s.cacert is None assert s.client_cert is None assert s.disable_progress_bar is False
def test_no_password_prompt_if_client_cert_and_non_interactive(entered_password): """Don't prompt for password when client_cert is provided and non interactive.""" client_cert = "/random/path" settings_obj = settings.Settings( username="******", client_cert=client_cert, non_interactive=True ) assert not settings_obj.password
def test_successful_upload(tmpdir): pypirc = os.path.join(str(tmpdir), ".pypirc") dists = ["tests/fixtures/twine-1.5.0-py2.py3-none-any.whl"] with open(pypirc, "w") as fp: fp.write(textwrap.dedent(""" [pypi] username:foo password:bar """)) upload_settings = settings.Settings( repository_name="pypi", sign=None, identity=None, username=None, password=None, comment=None, cert=None, client_cert=None, sign_with=None, config_file=pypirc, skip_existing=False, repository_url=None, verbose=False, ) stub_response = pretend.stub( is_redirect=False, status_code=201, raise_for_status=lambda: None ) stub_repository = pretend.stub( upload=lambda package: stub_response, close=lambda: None ) upload_settings.create_repository = lambda: stub_repository result = upload.upload(upload_settings, dists) # Raising an exception or returning anything truthy would mean that the # upload has failed assert result is None
def test_client_cert_is_set_and_password_not_if_both_given(entered_password): """Verify that if both password and client_cert are given they are set""" client_cert = "/random/path" settings_obj = settings.Settings(username="******", password="******", client_cert=client_cert) assert not settings_obj.password assert settings_obj.client_cert == client_cert
def test_client_cert_and_password_both_set_if_given(): """Set password and client_cert when both are provided.""" client_cert = "/random/path" settings_obj = settings.Settings(username="******", password="******", client_cert=client_cert) assert settings_obj.password == "anything" assert settings_obj.client_cert == client_cert
def test_settings_transforms_repository_config(write_config_file): """Set repository config and defaults when .pypirc is provided.""" config_file = write_config_file(""" [pypi] repository: https://upload.pypi.org/legacy/ username:username password:password """) s = settings.Settings(config_file=config_file) assert s.repository_config[ "repository"] == "https://upload.pypi.org/legacy/" assert s.sign is False assert s.sign_with == "gpg" assert s.identity is None assert s.username == "username" assert s.password == "password" assert s.cacert is None assert s.client_cert is None assert s.disable_progress_bar is False
def test_settings_transforms_config(tmpdir): """Verify that the settings object transforms the passed in options.""" pypirc = os.path.join(str(tmpdir), ".pypirc") with open(pypirc, "w") as fp: fp.write( textwrap.dedent(""" [pypi] repository: https://upload.pypi.org/legacy/ username:username password:password """)) s = settings.Settings(config_file=pypirc) assert ( s.repository_config['repository'] == 'https://upload.pypi.org/legacy/') assert s.sign is False assert s.sign_with == 'gpg' assert s.identity is None assert s.username == 'username' assert s.password == 'password' assert s.cacert is None assert s.client_cert is None
def test_settings_takes_no_positional_arguments(): """Verify that the Settings initialization is kw-only.""" with pytest.raises(TypeError): settings.Settings('a', 'b', 'c')
def test_password_is_required_if_no_client_cert(client_cert, entered_password): """Set password when client_cert is not provided.""" settings_obj = settings.Settings(username="******", client_cert=client_cert) assert settings_obj.password == "entered pw"
def test_identity_requires_sign(): """Raise an exception when user provides identity but doesn't require sigining.""" with pytest.raises(exceptions.InvalidSigningConfiguration): settings.Settings(sign=False, identity="fakeid")
def test_settings_takes_no_positional_arguments(): """Raise an exception when Settings is initialized without keyword arguments.""" with pytest.raises(TypeError): settings.Settings("a", "b", "c")
def test_password_required_if_no_client_cert_and_non_interactive(): """Raise exception if no password or client_cert when non interactive.""" settings_obj = settings.Settings(username="******", non_interactive=True) with pytest.raises(exceptions.NonInteractive): settings_obj.password
def test_password_is_required_if_no_client_cert(client_cert, entered_password): """Verify that if client_cert is not provided then a password must be.""" settings_obj = settings.Settings(username="******", client_cert=client_cert) assert settings_obj.password == "entered pw"
def test_identity_requires_sign(): """Verify that if a user passes identity, we require sign=True.""" with pytest.raises(exceptions.InvalidSigningConfiguration): settings.Settings(sign=False, identity='fakeid')