def handle(self): from poetry.masonry.publishing.publisher import Publisher publisher = Publisher(self.poetry, self.output) # Building package first, if told if self.option("build"): if publisher.files: if not self.confirm( "There are <info>{}</info> files ready for publishing. " "Build anyway?".format(len(publisher.files)) ): self.line_error("<error>Aborted!</error>") return 1 self.call("build") files = publisher.files if not files: self.line_error( "<error>No files to publish. " "Run poetry build first or use the --build option.</error>" ) return 1 self.line("") publisher.publish( self.option("repository"), self.option("username"), self.option("password") )
def test_publish_can_publish_to_given_repository(fixture_dir, mocker, config): uploader_auth = mocker.patch( "poetry.masonry.publishing.uploader.Uploader.auth") uploader_upload = mocker.patch( "poetry.masonry.publishing.uploader.Uploader.upload") poetry = Factory().create_poetry(fixture_dir("sample_project")) poetry._config = config poetry.config.merge({ "repositories": { "my-repo": { "url": "http://foo.bar" } }, "http-basic": { "my-repo": { "username": "******", "password": "******" } }, }) publisher = Publisher(poetry, NullIO()) publisher.publish("my-repo", None, None) assert [("foo", "bar")] == uploader_auth.call_args assert [ ("http://foo.bar", ), { "cert": None, "client_cert": None }, ] == uploader_upload.call_args
def handle(self): from poetry.masonry.publishing.publisher import Publisher publisher = Publisher(self.poetry, self.output) # Building package first, if told if self.option('build'): if publisher.files: if not self.confirm( 'There are <info>{}</info> files ready for publishing. ' 'Build anyway?'.format(len(publisher.files)) ): self.line_error('<error>Aborted!</error>') return 1 self.call('build') files = publisher.files if not files: self.line_error( '<error>No files to publish. ' 'Run poetry build first or use the --build option.</error>' ) return 1 self.line('') publisher.publish( self.option('repository'), self.option('username'), self.option('password') )
def test_publish_uses_client_cert(fixture_dir, mocker, config): client_cert = "path/to/client.pem" uploader_upload = mocker.patch( "poetry.masonry.publishing.uploader.Uploader.upload") poetry = Factory().create_poetry(fixture_dir("sample_project")) poetry._config = config poetry.config.merge({ "repositories": { "foo": { "url": "https://foo.bar" } }, "certificates": { "foo": { "client-cert": client_cert } }, }) publisher = Publisher(poetry, NullIO()) publisher.publish("foo", None, None) assert [ ("https://foo.bar", ), { "cert": None, "client_cert": Path(client_cert) }, ] == uploader_upload.call_args
def test_publish_publishes_to_pypi_by_default(fixture_dir, mocker, config): uploader_auth = mocker.patch( "poetry.masonry.publishing.uploader.Uploader.auth") uploader_upload = mocker.patch( "poetry.masonry.publishing.uploader.Uploader.upload") poetry = Factory().create_poetry(fixture_dir("sample_project")) poetry._config = config poetry.config.merge( {"http-basic": { "pypi": { "username": "******", "password": "******" } }}) publisher = Publisher(poetry, NullIO()) publisher.publish(None, None, None) assert [("foo", "bar")] == uploader_auth.call_args assert [ ("https://upload.pypi.org/legacy/", ), { "cert": None, "client_cert": None }, ] == uploader_upload.call_args
def handle(self): # Building package first, unless told otherwise if not self.option('no-build'): self.call('build') self.line('') publisher = Publisher(self.poetry, self.output) publisher.publish(self.option('repository'))
def handle(self): from poetry.masonry.publishing.publisher import Publisher # Building package first, unless told otherwise if not self.option('no-build'): self.call('build') self.line('') publisher = Publisher(self.poetry, self.output) publisher.publish(self.option('repository'), self.option('username'), self.option('password'))
def test_publish_raises_error_for_undefined_repository(fixture_dir, mocker, config): poetry = Factory().create_poetry(fixture_dir("sample_project")) poetry._config = config poetry.config.merge( {"http-basic": { "my-repo": { "username": "******", "password": "******" } }}) publisher = Publisher(poetry, NullIO()) with pytest.raises(RuntimeError): publisher.publish("my-repo", None, None)
def test_publish_uses_token_if_it_exists(fixture_dir, mocker, config): uploader_auth = mocker.patch( "poetry.masonry.publishing.uploader.Uploader.auth") uploader_upload = mocker.patch( "poetry.masonry.publishing.uploader.Uploader.upload") poetry = Factory().create_poetry(fixture_dir("sample_project")) poetry._config = config poetry.config.merge({"pypi-token": {"pypi": "my-token"}}) publisher = Publisher(poetry, NullIO()) publisher.publish(None, None, None) assert [("__token__", "my-token")] == uploader_auth.call_args assert [ ("https://upload.pypi.org/legacy/", ), { "cert": None, "client_cert": None }, ] == uploader_upload.call_args
def test_publish_read_from_environment_variable(fixture_dir, environ, mocker, config): os.environ["POETRY_REPOSITORIES_FOO_URL"] = "https://foo.bar" os.environ["POETRY_HTTP_BASIC_FOO_USERNAME"] = "******" os.environ["POETRY_HTTP_BASIC_FOO_PASSWORD"] = "******" uploader_auth = mocker.patch( "poetry.masonry.publishing.uploader.Uploader.auth") uploader_upload = mocker.patch( "poetry.masonry.publishing.uploader.Uploader.upload") poetry = Factory().create_poetry(fixture_dir("sample_project")) publisher = Publisher(poetry, NullIO()) publisher.publish("foo", None, None) assert [("bar", "baz")] == uploader_auth.call_args assert [ ("https://foo.bar", ), { "cert": None, "client_cert": None }, ] == uploader_upload.call_args