diff --git a/CHANGELOG.md b/CHANGELOG.md index ee53aba..0d247ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] ### Added +- `batch_upload` method added to `PyPIUploader` ### Changed +- `Uploader` changed to `PyPIUploader` - `README.md` modified ## [0.1] - 2024-02-07 ### Added diff --git a/reserver/__init__.py b/reserver/__init__.py index 2e2ac3c..2e01bba 100644 --- a/reserver/__init__.py +++ b/reserver/__init__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- """Reserver modules.""" from .reserver_param import RESERVER_VERSION -from .reserver_obj import Uploader +from .reserver_obj import PyPIUploader __version__ = RESERVER_VERSION diff --git a/reserver/reserver_obj.py b/reserver/reserver_obj.py index b8d52b8..d12dec8 100644 --- a/reserver/reserver_obj.py +++ b/reserver/reserver_obj.py @@ -7,30 +7,49 @@ from subprocess import check_output, CalledProcessError from re import sub -class Uploader: +class PyPIUploader: """ - The Reserver Uploader class reserves a package name by uploading a template repo to pypi account. + The Reserver PyPIUploader class reserves a package name by uploading a template repo to pypi account. - >>> uploader = Uploader(API_TOKEN, is_test_pypi_account = True) # API_TOKEN refers to pypi(or test pypi)'s account api. + >>> uploader = PyPIUploader(API_TOKEN, is_test_pypi_account = True) # API_TOKEN refers to pypi(or test pypi)'s account api. >>> uploader.upload_to_pypi(PACKAGE_NAME) # uploads package to the given test pypi account. """ def __init__(self, api_token, test_pypi=False): """ - Initialize the Reserver Uploader instance. + Initialize the Reserver PyPIUploader instance. :param api_token: pypi account's api token :type api_token: str :param test_pypi: indicates the given api_token is for a test.pypi account or not. :type test_pypi: bool - :return: an instance of the Reserver Uploader + :return: an instance of the Reserver PyPIUploader """ self.username = "__token__" self.password = api_token self.test_pypi = test_pypi - - def upload_to_pypi(self, package_name): + + def batch_upload(self, *names): + """ + Upload batch of package names to PyPI. + + :param names: packages' names + :type names: vararg + :return: None + """ + reserved_successfully = 0 + for name in names: + if isinstance(name, list): + reserved_successfully += self.batch_upload(*name) + else: + is_reserved = self.upload(name) + if is_reserved: + reserved_successfully += 1 + return reserved_successfully + + + def upload(self, package_name): """ Upload a template package to pypi or test_pypi. diff --git a/tests/test_reserver.py b/tests/test_reserver.py index ee02f75..ca0a789 100644 --- a/tests/test_reserver.py +++ b/tests/test_reserver.py @@ -1,21 +1,26 @@ -from reserver import Uploader +from reserver import PyPIUploader from reserver.reserver_func import get_random_name import os test_pypi_token = os.environ.get("TEST_PYPI_PASSWORD") def test_package_exists(): # test reserved name - uploader = Uploader(test_pypi_token, test_pypi= True) - assert uploader.upload_to_pypi("numpy") == False + uploader = PyPIUploader(test_pypi_token, test_pypi= True) + assert uploader.upload("numpy") == False + +def test_batch_packages_names(): + # test batch of package names + uploader = PyPIUploader(test_pypi_token, test_pypi= True) + assert uploader.batch_upload("numpy", "scikit-learn") == 0 def test_valid_package_invalid_credentials(): # test not reserved name -> wrong credentials wrong_pypi_token = "pypi-wrong-api-token" - uploader = Uploader(wrong_pypi_token, test_pypi= True) - assert uploader.upload_to_pypi(get_random_name()) == False + uploader = PyPIUploader(wrong_pypi_token, test_pypi= True) + assert uploader.upload(get_random_name()) == False def test_valid_package_valid_credentials(): # test not reserved name -> correct credentials - # uploader = Uploader(test_pypi_token, test_pypi= True) + # uploader = PyPIUploader(test_pypi_token, test_pypi= True) # uploader.upload_to_pypi(get_random_name()) assert True == True \ No newline at end of file