Skip to content

Commit

Permalink
Feature/batch operation (#20)
Browse files Browse the repository at this point in the history
* add `batch_upload_to_pypi` to `reserver_obj.py`

* add `test_batch_packages_names` testcase

* `CHANGELOG.md` updated

* apply renamings

* `CHANGELOG.md` updated

* update testcases

* enhance `batch_upload` functionality

* `CHANGELOG.md` updated

* enhance `batch_upload` testcase
  • Loading branch information
AHReccese authored Apr 19, 2024
1 parent de5a7f9 commit 76e7b37
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 14 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion reserver/__init__.py
Original file line number Diff line number Diff line change
@@ -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
33 changes: 26 additions & 7 deletions reserver/reserver_obj.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
17 changes: 11 additions & 6 deletions tests/test_reserver.py
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 76e7b37

Please sign in to comment.