Skip to content

Commit

Permalink
Renamed and reformatted the imported script.
Browse files Browse the repository at this point in the history
Updated project dependencies.
  • Loading branch information
mgcam committed Apr 24, 2024
1 parent 675c895 commit 9e6b1da
Show file tree
Hide file tree
Showing 6 changed files with 173 additions and 115 deletions.
2 changes: 2 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
[flake8]
max-line-length = 100
extend-select = B950
extend-ignore = E203, E501, E701
ignore = E251, E265, E261, E302, W503
per-file-ignores = __init__.py:F401
6 changes: 5 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,14 @@ jobs:
run: |
poetry run pytest
- name: Run import checker
run: |
poetry run isort --check .
- name: Run code style checker
run: |
poetry run flake8
- name: Run code formatter
run: |
poetry run black --check src
poetry run black --check src tests
114 changes: 0 additions & 114 deletions pow

This file was deleted.

5 changes: 5 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,12 @@ license = "GPL-3.0-or-later"

[tool.poetry.dependencies]
python = "^3.10"
requests = "^2.31.0"

[tool.poetry.dev-dependencies]
black = "^22.3.0"
flake8 = "^4.0.1"
flake8-bugbear = "^18.2.0"
pytest = "^7.1.1"
isort = { version = "^5.10.1", extras = ["colors"] }

Expand All @@ -26,6 +28,9 @@ build-backend = "poetry.core.masonry.api"
[tool.isort]
profile = "black"

[tool.black]
line_length = 100

[tool.pytest.ini_options]
addopts = [
"--import-mode=importlib",
Expand Down
160 changes: 160 additions & 0 deletions src/npg_porch_cli/npg_porch_client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
#!/usr/bin/env python3

# Copyright (C) 2022, 2024 Genome Research Ltd.
#
# Author: Jennifer Liddle <[email protected]>
#
# npg_porch_client is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 3 of the License, or (at your option) any
# later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program. If not, see <http://www.gnu.org/licenses/>.

import argparse

import requests

# Certification file for https requests
# if we don't have one, we can set certfile = False
certfile = (
"/usr/share/ca-certificates/sanger.ac.uk/Genome_Research_Ltd_Certificate_Authority-cert.pem"
)

# tokens from Porch
admin_headers = {"Authorization": "Bearer a"}
pipeline_headers = {"Authorization": "Bearer b"}

# Command line arguments
parser = argparse.ArgumentParser(description="Pipeline Orchestration Wrapper")
parser.add_argument("--baseurl", type=str, help="base URL")
parser.add_argument("--pipeline_url", type=str, help="Pipeline git project URL")
parser.add_argument("--pipeline_version", type=str, help="Pipeline version")
parser.add_argument("--pipeline", type=str, help="pipeline name")
parser.add_argument("--idrun", type=int, help="id_run")
parser.add_argument("--sample", type=str, help="sample name")
parser.add_argument("--study", type=str, help="study ID")
parser.add_argument(
"--status",
type=str,
help="new status to set",
default="DONE",
choices=["PENDING", "CLAIMED", "RUNNING", "DONE", "FAILED", "CANCELLED"],
)
parser.add_argument(
"command",
type=str,
help="command to send to npg_porch",
choices=["list", "plist", "register", "add", "claim", "update"],
)
args = parser.parse_args()

if args.command == "list":
response = requests.get(args.baseurl + "/tasks", verify=certfile, headers=pipeline_headers)
if not response.ok:
print(f'"{response.reason}" received from {response.url}')
exit(1)

x = response.json()
for p in x:
if p["pipeline"]["name"] == args.pipeline:
print(f"{p['task_input']}\t{p['status']}")

if args.command == "plist":
response = requests.get(args.baseurl + "/pipelines", verify=certfile, headers=admin_headers)
if not response.ok:
print(f'"{response.reason}" received from {response.url}')
exit(1)

x = response.json()
pipelines = {}
for p in x:
pname = p["name"]
if pname not in pipelines:
print(pname)
pipelines[pname] = 1

if args.command == "register":
data = {
"name": args.pipeline,
"uri": args.pipeline_url,
"version": args.pipeline_version,
}
response = requests.post(
args.baseurl + "/pipelines", json=data, verify=certfile, headers=admin_headers
)
if not response.ok:
print(f'"{response.reason}" received from {response.url}')
exit(1)

print(response.json())

if args.command == "add":
data = {
"pipeline": {
"name": args.pipeline,
"uri": args.pipeline_url,
"version": args.pipeline_version,
},
"task_input": {
"id_run": args.idrun,
"sample": args.sample,
"id_study": args.study,
},
}
response = requests.post(
args.baseurl + "/tasks", json=data, verify=certfile, headers=pipeline_headers
)
if not response.ok:
print(f'"{response.reason}" received from {response.url}')
exit(1)

print(response.json())

if args.command == "claim":
data = {
"name": args.pipeline,
"uri": args.pipeline_url,
"version": args.pipeline_version,
}
response = requests.post(
args.baseurl + "/tasks/claim",
json=data,
verify=certfile,
headers=pipeline_headers,
)
if not response.ok:
print(f'"{response.reason}" received from {response.url}')
exit(1)

print(response.json())

if args.command == "update":
data = {
"pipeline": {
"name": args.pipeline,
"uri": args.pipeline_url,
"version": args.pipeline_version,
},
"task_input": {
"id_run": args.idrun,
"sample": args.sample,
"id_study": args.study,
},
"status": args.status,
}
response = requests.put(
args.baseurl + "/tasks", json=data, verify=certfile, headers=pipeline_headers
)
if not response.ok:
print(f'"{response.reason}" received from {response.url}')
exit(1)

print(data)
print(response.json())
1 change: 1 addition & 0 deletions tests/test_api.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import npg_porch_cli.api as porchApi


def test_addition():

assert porchApi.add_two(1, 2) == 3

0 comments on commit 9e6b1da

Please sign in to comment.