Skip to content

Commit 1f620ca

Browse files
1.9.0 release
1 parent 1a4962b commit 1f620ca

10 files changed

+224
-30
lines changed

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
# Change Log
22
All notable changes to this project will be documented in this file.
3+
## 1.9.0 - 2025-07-07
4+
### Added
5+
- No change.
6+
7+
### Changed
8+
- 1.9.0 release
9+
- Update pods and notifications specs
10+
11+
### Removed
12+
- No change.
13+
314
## 1.8.5 - 2025-06-20
415
### Added
516
- No change.

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# tapipy - Tapis V3 Python SDK
2+
[![PyPI version](https://img.shields.io/pypi/v/tapipy.svg)](https://pypi.org/project/tapipy/)
3+
[![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/tapis-project/tapipy?label=git%20tag&sort=semver)](https://github.com/tapis-project/tapipy/tags)
24

35
Python library for interacting with an instance of the Tapis API Framework.
46

flake.nix

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
tapipyPython = python.withPackages (ps: [
1515
ps.requests
1616
ps.pip
17-
#ps.pyaml
18-
#ps.openapi-core
19-
#ps.atomicwrites
17+
ps.pyaml
18+
ps.openapi-core
19+
ps.atomicwrites
2020
]);
2121
commonPackages = [
2222
tapipyPython

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "tapipy"
3-
version = "1.8.5"
3+
version = "1.9.0"
44
description = "Python lib for interacting with an instance of the Tapis API Framework"
55
license = "BSD-4-Clause"
66
authors = ["Joe Stubbs <jstubbs@tacc.utexas.edu>"]

tapipy/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '1.8.5'
1+
__version__ = '1.9.0'

tapipy/resources/openapi_v3-notifications.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ openapi: 3.0.3
22
info:
33
title: Tapis Notifications API
44
description: The Tapis Notifications API provides for management of subscriptions and event publication
5-
version: '1.8.4'
5+
version: '1.8.1'
66
termsOfService: "https://tapis-project.org"
77
contact:
88
name: "Notifications API - CICSupport"

tapipy/resources/openapi_v3-pods.yml

Lines changed: 204 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ info:
2020
license:
2121
name: BSD 3.0
2222
url: https://github.com/tapis-project/pods_service
23-
version: 1.6.0
23+
version: 1.9.0
2424
paths:
2525
/traefik-config:
2626
get:
@@ -1322,6 +1322,61 @@ paths:
13221322
application/json:
13231323
schema:
13241324
$ref: '#/components/schemas/HTTPValidationError'
1325+
/pods/jupyter/ensure:
1326+
get:
1327+
tags:
1328+
- Jupyter
1329+
summary: Ensure user has a running Jupyter pod, useful for starting up coding
1330+
environment
1331+
description: 'Ensure the current user has a running Jupyter pod.
1332+
1333+
If not, create a new one named ''{username}jupyter'' from the base Jupyter
1334+
template.
1335+
1336+
Returns pod name and URL.'
1337+
operationId: ensure_jupyter_pod
1338+
responses:
1339+
'200':
1340+
description: Successful Response
1341+
content:
1342+
application/json:
1343+
schema:
1344+
title: Response Ensure Jupyter Pod
1345+
/pods/jupyter/{pod_id}/upload:
1346+
post:
1347+
tags:
1348+
- Jupyter
1349+
summary: Upload a document to the user's Jupyter pod
1350+
description: 'Upload a document to the user''s running Jupyter pod using the
1351+
Jupyter API.
1352+
1353+
Input: multipart form (file), and ''path'' (destination in Jupyter).'
1354+
operationId: upload_to_jupyter
1355+
parameters:
1356+
- required: true
1357+
schema:
1358+
type: string
1359+
title: Pod Id
1360+
name: pod_id
1361+
in: path
1362+
requestBody:
1363+
content:
1364+
multipart/form-data:
1365+
schema:
1366+
$ref: '#/components/schemas/Body_upload_to_jupyter'
1367+
required: true
1368+
responses:
1369+
'200':
1370+
description: Successful Response
1371+
content:
1372+
application/json:
1373+
schema: {}
1374+
'422':
1375+
description: Validation Error
1376+
content:
1377+
application/json:
1378+
schema:
1379+
$ref: '#/components/schemas/HTTPValidationError'
13251380
/pods:
13261381
get:
13271382
tags:
@@ -1702,6 +1757,39 @@ paths:
17021757
application/json:
17031758
schema:
17041759
$ref: '#/components/schemas/HTTPValidationError'
1760+
/pods/{pod_id}/upload_to_pod:
1761+
post:
1762+
tags:
1763+
- Pods
1764+
summary: Upload a file directly into the pod's filesystem
1765+
description: Upload a file to a specific path inside the pod using Kubernetes
1766+
exec/copy (chunked streaming, no temp file).
1767+
operationId: upload_to_pod
1768+
parameters:
1769+
- required: true
1770+
schema:
1771+
type: string
1772+
title: Pod Id
1773+
name: pod_id
1774+
in: path
1775+
requestBody:
1776+
content:
1777+
multipart/form-data:
1778+
schema:
1779+
$ref: '#/components/schemas/Body_upload_to_pod'
1780+
required: true
1781+
responses:
1782+
'200':
1783+
description: Successful Response
1784+
content:
1785+
application/json:
1786+
schema: {}
1787+
'422':
1788+
description: Validation Error
1789+
content:
1790+
application/json:
1791+
schema:
1792+
$ref: '#/components/schemas/HTTPValidationError'
17051793
/pods/{pod_id}/permissions/{user}:
17061794
delete:
17071795
tags:
@@ -1910,23 +1998,23 @@ paths:
19101998
\ 6) User logs in via browser, authorizes client, redirects to callback_url\
19111999
\ at https://tacc.tapis.io/v3/pods/fastapi/auth/callback?code=CodeHere\n \
19122000
\ 7) Callback url exchanges code for token, gets username from token, sets\
1913-
\ X-Tapis-Token and X-Tapis-Username cookies\n 8) User gets redirected back\
1914-
\ to https://fastapi.pods.tacc.tapis.io, Traefik starts forwardAuth, user\
1915-
\ at this point should be authenticated\n 9) Auth endpoint responds with\
1916-
\ 200, sets headers specified by networking stanza, and users gets to fastapi\
1917-
\ hello world response.\n\nusers can specify:\n - tapis_auth=True/False -\
1918-
\ Turns on auth\n - tapis_auth_response_headers - dict[str] - headers to set\
1919-
\ on response and their values\n - tapis_auth_allowed_users - list[str] -\
1920-
\ list of tapis users allowed to access pod\n - tapis_auth_return_path - str\
1921-
\ - uri to return to after auth, default is \"passthrough\", which we save\
1922-
\ in cookies(?) and return to. x-forwarded-host?\n\n - response headers need\
1923-
\ to be slightly modifiable to allow for different application requirements\n\
2001+
\ X-Tapis-Token cookies, sets response headers according to tapis_auth_response_headers\n\
2002+
\ 8) User gets redirected back to https://fastapi.pods.tacc.tapis.io/{tapis_auth_return_path},\
2003+
\ Traefik starts forwardAuth, user at this point should be authenticated\n\
2004+
\ 9) Auth endpoint responds with 200, sets headers specified by networking\
2005+
\ stanza, and users gets to fastapi hello world response.\n\nusers can specify:\n\
2006+
\ - tapis_auth=True/False - Turns on auth\n - tapis_auth_response_headers\
2007+
\ - dict[str] - headers to set on response and their values\n - tapis_auth_allowed_users\
2008+
\ - list[str] - list of tapis users allowed to access pod\n - tapis_auth_return_path\
2009+
\ - str - uri to return to after auth, default is \"passthrough\", which we\
2010+
\ save in cookies(?) and return to. x-forwarded-host?\n\n - response headers\
2011+
\ need to be slightly modifiable to allow for different application requirements\n\
19242012
\ - for example we have to pass username, but many apps require @email.bit,\
19252013
\ so user must be able to append to user.\n - tapis_auth_response_headers:\
1926-
\ {\"X-Tapis-Username\": \"<<tapisusername>>@tapis.io\", \"X-Tapis-Token\"\
1927-
: \"<<token>>\", \"OAUTH2_USERNAME_KEY\": \"username\"}\n\n - tapis_auth_allowed_users,\
1928-
\ checks username against .lower() of username list to make sure it's in list.\
1929-
\ otherwise deny"
2014+
\ {\"X-Tapis-Username\": \"<<tapisusername>>@tapis.io\", \"FROM\": \"pods\
2015+
\ auth endpoint from <<tenant>>.<<site>>\", \"OAUTH2_USERNAME_KEY\": \"username\"\
2016+
}\n\n - tapis_auth_allowed_users, checks username against .lower() of username\
2017+
\ list to make sure it's in list. otherwise deny"
19302018
operationId: pod_auth
19312019
parameters:
19322020
- required: true
@@ -1974,6 +2062,34 @@ paths:
19742062
$ref: '#/components/schemas/HTTPValidationError'
19752063
components:
19762064
schemas:
2065+
Body_upload_to_jupyter:
2066+
properties:
2067+
file:
2068+
type: string
2069+
format: binary
2070+
title: File
2071+
path:
2072+
type: string
2073+
title: Path
2074+
type: object
2075+
required:
2076+
- file
2077+
- path
2078+
title: Body_upload_to_jupyter
2079+
Body_upload_to_pod:
2080+
properties:
2081+
file:
2082+
type: string
2083+
format: binary
2084+
title: File
2085+
dest_path:
2086+
type: string
2087+
title: Dest Path
2088+
type: object
2089+
required:
2090+
- file
2091+
- dest_path
2092+
title: Body_upload_to_pod
19772093
Body_upload_to_volume:
19782094
properties:
19792095
file:
@@ -2260,6 +2376,7 @@ components:
22602376
format: date-time
22612377
title: Creation Ts
22622378
description: Time (UTC) that this image was created.
2379+
default: '2025-05-15T00:28:39.897690'
22632380
added_by:
22642381
type: string
22652382
title: Added By
@@ -3690,6 +3807,38 @@ components:
36903807
title: Tapis Auth Return Path
36913808
description: Path to redirect to when accessing the pod via Tapis auth.
36923809
default: /
3810+
cors_allow_origins:
3811+
items:
3812+
type: string
3813+
type: array
3814+
title: Cors Allow Origins
3815+
description: List of CORS allowed origins. ex. ['https://tacc.develop.tapis.io',
3816+
'https://tacc.tapis.io']
3817+
default: []
3818+
cors_allow_methods:
3819+
items:
3820+
type: string
3821+
type: array
3822+
title: Cors Allow Methods
3823+
description: List of CORS allowed methods. ex. ['GET', 'POST', 'PUT', 'DELETE']
3824+
default: []
3825+
cors_allow_headers:
3826+
items:
3827+
type: string
3828+
type: array
3829+
title: Cors Allow Headers
3830+
description: List of CORS allowed headers. ex. ['Content-Type', 'X-Tapis-Token']
3831+
default: []
3832+
cors_allow_credentials:
3833+
type: boolean
3834+
title: Cors Allow Credentials
3835+
description: Boolean to allow credentials to be sent with CORS requests.
3836+
default: false
3837+
cors_max_age:
3838+
type: integer
3839+
title: Cors Max Age
3840+
description: Max age of CORS preflight requests in seconds.
3841+
default: 100
36933842
tapis_ui_uri:
36943843
type: string
36953844
title: Tapis Ui Uri
@@ -3815,6 +3964,38 @@ components:
38153964
title: Tapis Auth Return Path
38163965
description: Path to redirect to when accessing the pod via Tapis auth.
38173966
default: /
3967+
cors_allow_origins:
3968+
items:
3969+
type: string
3970+
type: array
3971+
title: Cors Allow Origins
3972+
description: List of CORS allowed origins. ex. ['https://tacc.develop.tapis.io',
3973+
'https://tacc.tapis.io']
3974+
default: []
3975+
cors_allow_methods:
3976+
items:
3977+
type: string
3978+
type: array
3979+
title: Cors Allow Methods
3980+
description: List of CORS allowed methods. ex. ['GET', 'POST', 'PUT', 'DELETE']
3981+
default: []
3982+
cors_allow_headers:
3983+
items:
3984+
type: string
3985+
type: array
3986+
title: Cors Allow Headers
3987+
description: List of CORS allowed headers. ex. ['Content-Type', 'X-Tapis-Token']
3988+
default: []
3989+
cors_allow_credentials:
3990+
type: boolean
3991+
title: Cors Allow Credentials
3992+
description: Boolean to allow credentials to be sent with CORS requests.
3993+
default: false
3994+
cors_max_age:
3995+
type: integer
3996+
title: Cors Max Age
3997+
description: Max age of CORS preflight requests in seconds.
3998+
default: 100
38183999
tapis_ui_uri:
38194000
type: string
38204001
title: Tapis Ui Uri
@@ -3885,14 +4066,14 @@ components:
38854066
tags:
38864067
- name: Pods
38874068
description: Create and command pods.
3888-
- name: Credentials
3889-
description: Manage pod's credentials used.
3890-
- name: Logs
3891-
description: Manage pod logs.
3892-
- name: Permissions
3893-
description: Manage pod permissions. Grant specific TACC users **READ**, **USER**,
3894-
and **ADMIN** level permissions.
4069+
- name: Templates
4070+
description: Create and manage templated pod definitions for use in pod deployment.
38954071
- name: Volumes
38964072
description: Create and manage volumes.
38974073
- name: Snapshots
38984074
description: Create and manage snapshots.
4075+
- name: Images
4076+
description: Create and manage docker images available in the service.
4077+
- name: Permissions
4078+
description: Manage pod permissions. Grant specific TACC users **READ**, **USER**,
4079+
and **ADMIN** level permissions.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"actors": "W/\"790d47ac8c8c65e702080db8e564c154ee3ba420\"", "authenticator": "W/\"302a3da22a4ecd23a5b2b81e4b84d1388585833d\"", "meta": "W/\"e49bc20f1b1e3296278db40fdd6b33d92c44beea\"", "sk": "W/\"d013be0e593065162f0b7628e865cb50eecdd47f\"", "streams": "W/\"1455851696f5beb5a505b652506c24ad924aea81\"", "systems": "W/\"1e57ae8d96d36dc4702a7043c554f6fec444d15c\"", "tenants": "W/\"19937e762737fba432a63c8f32e824c182d2e973\"", "tokens": "W/\"ab429c47e75f628ae31c7e0ba77a8320604fc178\"", "pgrest": "W/\"6494d146379036fdd95de0ed7da22d1bec1335cd\"", "pods": "W/\"eb550a5865adf0c4aa2e0bf53f65529471a09d61\"", "jobs": "W/\"2d18000df0764cc5904f3c5647ac002ca4811513\"", "apps": "W/\"265c52b25e8dbbbe7972241666d507aca3069e26\"", "notifications": "W/\"f5797696245dad4e44e26b4027910266eee351ff\"", "files": "W/\"23d61f7f2adda1e3f65b32dec66431191d2ac6cf\"", "workflows": "W/\"58026f17e2d55c8209b7a27c88bdc52d09d6020e\"", "globus-proxy": "W/\"71f32672ab00802ff9a3b87e5c0754e7a4cd2279\""}
1+
{"actors": "W/\"790d47ac8c8c65e702080db8e564c154ee3ba420\"", "authenticator": "W/\"302a3da22a4ecd23a5b2b81e4b84d1388585833d\"", "meta": "W/\"e49bc20f1b1e3296278db40fdd6b33d92c44beea\"", "files": "W/\"23d61f7f2adda1e3f65b32dec66431191d2ac6cf\"", "sk": "W/\"d013be0e593065162f0b7628e865cb50eecdd47f\"", "streams": "W/\"1455851696f5beb5a505b652506c24ad924aea81\"", "systems": "W/\"1e57ae8d96d36dc4702a7043c554f6fec444d15c\"", "tenants": "W/\"19937e762737fba432a63c8f32e824c182d2e973\"", "tokens": "W/\"ab429c47e75f628ae31c7e0ba77a8320604fc178\"", "pgrest": "W/\"6494d146379036fdd95de0ed7da22d1bec1335cd\"", "pods": "W/\"eae1bbd5329ca101f403cd6b8e60199e2b1056cd\"", "jobs": "W/\"2d18000df0764cc5904f3c5647ac002ca4811513\"", "apps": "W/\"265c52b25e8dbbbe7972241666d507aca3069e26\"", "notifications": "W/\"f5797696245dad4e44e26b4027910266eee351ff\"", "globus-proxy": "W/\"71f32672ab00802ff9a3b87e5c0754e7a4cd2279\""}
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)