diff --git a/.github/workflows/cli-coverage.yml b/.github/workflows/cli-coverage.yml
new file mode 100644
index 0000000..5365a27
--- /dev/null
+++ b/.github/workflows/cli-coverage.yml
@@ -0,0 +1,40 @@
+name: test coverage
+
+on:
+ push:
+ branches: [master, dev]
+
+jobs:
+ cli-coverage-report:
+ strategy:
+ matrix:
+ python-version: [ "3.11" ]
+ os: [ ubuntu-latest ]
+ r: [ release ]
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v2
+
+ - uses: actions/setup-python@v1
+ with:
+ python-version: '3.10'
+
+ - name: Install test dependencies
+ run: if [ -f requirements/requirements-test.txt ]; then pip install -r requirements/requirements-test.txt; fi
+
+ - run: pip install .
+
+ - name: Run tests
+ run: coverage run -m pytest
+
+ - name: build coverage
+ run: coverage html -i
+
+ - run: smokeshow upload htmlcov
+ env:
+ SMOKESHOW_GITHUB_STATUS_DESCRIPTION: Coverage {coverage-percentage}
+ SMOKESHOW_GITHUB_COVERAGE_THRESHOLD: 80
+ SMOKESHOW_GITHUB_CONTEXT: coverage
+ SMOKESHOW_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ SMOKESHOW_GITHUB_PR_HEAD_SHA: ${{ github.event.pull_request.head.sha }}
+ SMOKESHOW_AUTH_KEY: ${{ secrets.SMOKESHOW_AUTH_KEY }}
\ No newline at end of file
diff --git a/.github/workflows/run-codecov.yml b/.github/workflows/run-codecov.yml
deleted file mode 100644
index 364eb68..0000000
--- a/.github/workflows/run-codecov.yml
+++ /dev/null
@@ -1,38 +0,0 @@
-name: Run codecov
-
-on:
- push:
- branches: [dev]
- pull_request:
- branches: [master]
-
-jobs:
- pytest:
- runs-on: ${{ matrix.os }}
- strategy:
- matrix:
- python-version: [3.11]
- os: [ubuntu-latest]
-
- steps:
- - uses: actions/checkout@v2
-
- - name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v2
- with:
- python-version: ${{ matrix.python-version }}
-
- - name: Install test dependencies
- run: if [ -f requirements/requirements-test.txt ]; then pip install -r requirements/requirements-test.txt; fi
-
- - name: Install package
- run: python -m pip install .
-
- - name: Run pytest tests
- run: pytest tests --cov=./ --cov-report=xml
-
- - name: Upload coverage to Codecov
- uses: codecov/codecov-action@v3
- with:
- file: ./coverage.xml
- name: py-${{ matrix.python-version }}-${{ matrix.os }}
\ No newline at end of file
diff --git a/README.md b/README.md
index 5e6f626..42bf9e8 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,38 @@
-# `PEPHubClient`
+
PEPHubClient
[![PEP compatible](https://pepkit.github.io/img/PEP-compatible-green.svg)](https://pepkit.github.io)
![Run pytests](https://github.com/pepkit/pephubclient/workflows/Run%20pytests/badge.svg)
-[![codecov](https://codecov.io/gh/pepkit/pephubclient/branch/dev/graph/badge.svg)](https://codecov.io/gh/pepkit/pephubclient)
-[![pypi-badge](https://img.shields.io/pypi/v/pephubclient)](https://pypi.org/project/pephubclient)
+[![pypi-badge](https://img.shields.io/pypi/v/pephubclient?color=%2334D058)](https://pypi.org/project/pephubclient)
+[![pypi-version](https://img.shields.io/pypi/pyversions/pephubclient.svg?color=%2334D058)](https://pypi.org/project/pephubclient)
+[![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pepkit/pephubclient.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pepkit/pephubclient)
+[![Github badge](https://img.shields.io/badge/source-github-354a75?logo=github)](https://github.com/pepkit/pephubclient)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
+
`PEPHubClient` is a tool to provide Python API and CLI for [PEPhub](https://pephub.databio.org).
-`pephubclient` features:
+
+---
+
+**Documentation**: https://pep.databio.org
+
+**Source Code**: https://github.com/pepkit/pephubclient
+
+---
+
+## Installation
+To install `pepdbagent` use this command:
+```
+pip install pephubclient
+```
+or install the latest version from the GitHub repository:
+```
+pip install git+https://github.com/pepkit/pephubclient.git
+```
+
+---
+
+### `pephubclient` features:
1) `push` (upload) projects)
2) `pull` (download projects)
@@ -17,7 +41,7 @@ The authorization process is based on pephub device authorization protocol.
To upload projects or to download private projects, user must be authorized through pephub.
If you want to use your own pephub instance, you can specify it by setting `PEPHUB_BASE_URL` environment variable.
-e.g. `export PEPHUB_BASE_URL=https://pephub.databio.org` (This is original pephub instance)
+e.g. `export PEPHUB_BASE_URL=https://pephub.databio.org/` (This is original pephub instance)
To login, use the `login` argument; to logout, use `logout`.
diff --git a/codecov.yml b/codecov.yml
deleted file mode 100644
index f0e5c72..0000000
--- a/codecov.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-ignore:
- - "*/cli.py"
- - "*/__main__.py"
- - "*/__init__.py"
- - "setup.py"
-
-coverage:
- status:
- project:
- default: false # disable the default status that measures entire project
- tests:
- paths:
- - "tests/"
- target: 70%
- source:
- paths:
- - "jupytext/"
- target: 70%
- patch:
- default:
- target: 70%
\ No newline at end of file
diff --git a/docs/changelog.md b/docs/changelog.md
index c0209da..71bbe7e 100644
--- a/docs/changelog.md
+++ b/docs/changelog.md
@@ -2,6 +2,10 @@
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html) and [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) format.
+## [0.4.1] - 2024-03-07
+### Fixed
+- Expired token error handling ([#17](https://github.com/pepkit/pephubclient/issues/17))
+
## [0.4.0] - 2024-02-12
### Added
- a parameter that points to where peps should be saved ([#32](https://github.com/pepkit/pephubclient/issues/32))
diff --git a/pephubclient/__init__.py b/pephubclient/__init__.py
index 4cdf008..0c45462 100644
--- a/pephubclient/__init__.py
+++ b/pephubclient/__init__.py
@@ -4,7 +4,7 @@
import coloredlogs
__app_name__ = "pephubclient"
-__version__ = "0.4.0"
+__version__ = "0.4.1"
__author__ = "Oleksandr Khoroshevskyi, Rafal Stepien"
diff --git a/pephubclient/helpers.py b/pephubclient/helpers.py
index 85979bf..e2f53f4 100644
--- a/pephubclient/helpers.py
+++ b/pephubclient/helpers.py
@@ -37,7 +37,7 @@ def send_request(
params: Optional[dict] = None,
json: Optional[dict] = None,
) -> requests.Response:
- return requests.request(
+ request_return = requests.request(
method=method,
url=url,
verify=False,
@@ -46,6 +46,15 @@ def send_request(
params=params,
json=json,
)
+ if request_return.status_code == 401:
+ if (
+ RequestManager.decode_response(request_return, output_json=True).get(
+ "detail"
+ )
+ == "JWT has expired"
+ ):
+ raise ResponseError("JWT has expired. Please log in again.")
+ return request_return
@staticmethod
def decode_response(
diff --git a/requirements/requirements-test.txt b/requirements/requirements-test.txt
index 241ddcd..ba8d468 100644
--- a/requirements/requirements-test.txt
+++ b/requirements/requirements-test.txt
@@ -6,4 +6,6 @@ pytest-mock
flake8
coveralls
pytest-cov
-pre-commit
\ No newline at end of file
+pre-commit
+coverage
+smokeshow
diff --git a/setup.py b/setup.py
index cdf8165..0b83253 100644
--- a/setup.py
+++ b/setup.py
@@ -49,6 +49,7 @@ def read_reqs(reqs_name):
keywords="project, bioinformatics, metadata",
url=f"https://github.com/databio/{PACKAGE}/",
author=AUTHOR,
+ author_email="khorosh@virginia.edu",
license="BSD2",
entry_points={
"console_scripts": [
@@ -56,7 +57,6 @@ def read_reqs(reqs_name):
],
},
package_data={PACKAGE: ["templates/*"]},
- scripts=None,
include_package_data=True,
test_suite="tests",
tests_require=read_reqs("test"),