Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/batch operation #20

Merged
merged 9 commits into from
Apr 19, 2024
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.

## [Unreleased]
### Added
- `batch_upload` method added to `PyPIUploader`
### Changed
- `README.md` modified
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

- `Uploader` changed to `PyPIUploader`

## [0.1] - 2024-02-07
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
26 changes: 19 additions & 7 deletions reserver/reserver_obj.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,42 @@
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
Comment on lines +33 to +39
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Update the doc-string return: None.

"""
for name in names:
self.upload(name)


def upload(self, package_name):
"""
Upload a template package to pypi or test_pypi.

Expand Down
18 changes: 12 additions & 6 deletions tests/test_reserver.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,27 @@
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)
uploader.batch_upload("numpy", "scikit-learn")
assert True == True

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you accept my comment on returning True for upload_to_pypi, you can assert the output of that function here.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

again with the number of actual names reserved, I can handle associated test cases better and ok sure I will.
@sadrasabouri

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
Loading