Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
dab0d06
Move from pip to uv
ScriptSmith Dec 23, 2025
bd961da
Upgrade to Django 5
ScriptSmith Jan 5, 2026
cdaa410
Use new method_decrator decorator
ScriptSmith Jan 5, 2026
c536613
Use new STORAGES setting
ScriptSmith Jan 5, 2026
d842bd7
Update deprecated selenium selectors
ScriptSmith Jan 5, 2026
610ca62
Use non-naive timezone-aware times now that USE_TZ=true is the default
ScriptSmith Jan 5, 2026
2a130cf
Remove unused helper function
ScriptSmith Jan 5, 2026
2e38779
Replace logout link with form + POST, as GET is deprecated
ScriptSmith Jan 5, 2026
1a3d5be
Add django-simple-history migrations
ScriptSmith Jan 5, 2026
fc64979
Fix logout
ScriptSmith Jan 5, 2026
56a23e2
Update test zips
ScriptSmith Jan 5, 2026
6893152
Fix circular dependency
ScriptSmith Jan 5, 2026
25cbbc4
Add logout functionality to auth
ScriptSmith Jan 6, 2026
580b8c2
Timezone-aware patient model tests
ScriptSmith Jan 6, 2026
c903e7b
Lint fixes
ScriptSmith Jan 6, 2026
fb306a0
Wait for login/out
ScriptSmith Jan 6, 2026
ae26e67
Wait for two-factor redirect
ScriptSmith Jan 9, 2026
0087697
Update xnat client
ScriptSmith Jan 9, 2026
bc9fe82
Update selenium
ScriptSmith Jan 9, 2026
c5a558a
Re-order waits for 2fa
ScriptSmith Jan 9, 2026
80ea3cc
Fix selenium issues and remove aloe_webdriver
ScriptSmith Jan 15, 2026
b769834
Silence error logs during tests
ScriptSmith Jan 15, 2026
0b90095
Allow testing a single feature
ScriptSmith Jan 15, 2026
7da86bf
Fix lint issue
ScriptSmith Jan 15, 2026
93eaf81
Exclude nose dependency
ScriptSmith Jan 16, 2026
89498d9
Upgrade pycountry and aws-xray-sdk
ScriptSmith Jan 16, 2026
ea991a2
Remove extra printing in e2e tests
ScriptSmith Jan 16, 2026
a39aecd
Update countries and states
ScriptSmith Jan 16, 2026
f7a841b
Update test zips
ScriptSmith Jan 16, 2026
d36768d
Remove version field from docker-compose files
ScriptSmith Jan 16, 2026
ee9d47e
Update authors
ScriptSmith Jan 16, 2026
21987da
Bump werkzeug
ScriptSmith Jan 16, 2026
69dcafb
Bump werkzeug
ScriptSmith Jan 16, 2026
a1c8d00
Merge origin/next_release and rename migrations to be after 0066_pati…
ScriptSmith Jan 19, 2026
3a97ae0
Update test zips
ScriptSmith Jan 19, 2026
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
2 changes: 2 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
.git
.venv
__pycache__
virt_*
docs
*.pyc
Expand Down
2 changes: 1 addition & 1 deletion clients/xnat/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
## Generate an OpenAPI client from the xnat spec
1. Run the openapi generator tool:
```shell
docker run --rm -v $(pwd):/local openapitools/openapi-generator-cli:v7.4.0 generate -i /local/spec/xnat-api.yaml -g python -o /local/generated
docker run --rm -v $(pwd):/local openapitools/openapi-generator-cli:v7.18.0 generate -i /local/spec/xnat-api.yaml -g python -o /local/generated
```
20 changes: 8 additions & 12 deletions clients/xnat/generated/.github/workflows/python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,32 +7,28 @@ name: openapi_client Python package

on: [push, pull_request]

permissions:
contents: read

jobs:
build:

runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
if [ -f test-requirements.txt ]; then pip install -r test-requirements.txt; fi
- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
pip install -r requirements.txt
pip install -r test-requirements.txt
- name: Test with pytest
run: |
pytest
pytest --cov=openapi_client
12 changes: 6 additions & 6 deletions clients/xnat/generated/.gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,6 @@ stages:
- pip install -r test-requirements.txt
- pytest --cov=openapi_client

pytest-3.7:
extends: .pytest
image: python:3.7-alpine
pytest-3.8:
extends: .pytest
image: python:3.8-alpine
pytest-3.9:
extends: .pytest
image: python:3.9-alpine
Expand All @@ -29,3 +23,9 @@ pytest-3.10:
pytest-3.11:
extends: .pytest
image: python:3.11-alpine
pytest-3.12:
extends: .pytest
image: python:3.12-alpine
pytest-3.13:
extends: .pytest
image: python:3.13-alpine
8 changes: 0 additions & 8 deletions clients/xnat/generated/.openapi-generator/FILES
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
.github/workflows/python.yml
.gitignore
.gitlab-ci.yml
.openapi-generator-ignore
.travis.yml
README.md
docs/DataExperimentsExperimentIdScansGet200Response.md
Expand Down Expand Up @@ -34,11 +33,4 @@ setup.cfg
setup.py
test-requirements.txt
test/__init__.py
test/test_data_experiments_experiment_id_scans_get200_response.py
test/test_data_experiments_experiment_id_scans_get200_response_result_set.py
test/test_data_experiments_experiment_id_scans_get200_response_result_set_result_inner.py
test/test_data_projects_project_id_subjects_subject_id_experiments_get200_response.py
test/test_data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set.py
test/test_data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set_result_inner.py
test/test_default_api.py
tox.ini
2 changes: 1 addition & 1 deletion clients/xnat/generated/.openapi-generator/VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
7.4.0
7.18.0
6 changes: 3 additions & 3 deletions clients/xnat/generated/.travis.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# ref: https://docs.travis-ci.com/user/languages/python
language: python
python:
- "3.7"
- "3.8"
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13"
# uncomment the following if needed
#- "3.11-dev" # 3.11 development branch
#- "3.13-dev" # 3.13 development branch
#- "nightly" # nightly build
# command to install dependencies
install:
Expand Down
4 changes: 2 additions & 2 deletions clients/xnat/generated/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ This Python package is automatically generated by the [OpenAPI Generator](https:

- API version: 1.0.0
- Package version: 1.0.0
- Generator version: 7.4.0
- Generator version: 7.18.0
- Build package: org.openapitools.codegen.languages.PythonClientCodegen

## Requirements.

Python 3.7+
Python 3.9+

## Installation & Usage
### pip install
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ print(DataExperimentsExperimentIdScansGet200Response.to_json())
# convert the object into a dict
data_experiments_experiment_id_scans_get200_response_dict = data_experiments_experiment_id_scans_get200_response_instance.to_dict()
# create an instance of DataExperimentsExperimentIdScansGet200Response from a dict
data_experiments_experiment_id_scans_get200_response_form_dict = data_experiments_experiment_id_scans_get200_response.from_dict(data_experiments_experiment_id_scans_get200_response_dict)
data_experiments_experiment_id_scans_get200_response_from_dict = DataExperimentsExperimentIdScansGet200Response.from_dict(data_experiments_experiment_id_scans_get200_response_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ print(DataExperimentsExperimentIdScansGet200ResponseResultSet.to_json())
# convert the object into a dict
data_experiments_experiment_id_scans_get200_response_result_set_dict = data_experiments_experiment_id_scans_get200_response_result_set_instance.to_dict()
# create an instance of DataExperimentsExperimentIdScansGet200ResponseResultSet from a dict
data_experiments_experiment_id_scans_get200_response_result_set_form_dict = data_experiments_experiment_id_scans_get200_response_result_set.from_dict(data_experiments_experiment_id_scans_get200_response_result_set_dict)
data_experiments_experiment_id_scans_get200_response_result_set_from_dict = DataExperimentsExperimentIdScansGet200ResponseResultSet.from_dict(data_experiments_experiment_id_scans_get200_response_result_set_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ print(DataExperimentsExperimentIdScansGet200ResponseResultSetResultInner.to_json
# convert the object into a dict
data_experiments_experiment_id_scans_get200_response_result_set_result_inner_dict = data_experiments_experiment_id_scans_get200_response_result_set_result_inner_instance.to_dict()
# create an instance of DataExperimentsExperimentIdScansGet200ResponseResultSetResultInner from a dict
data_experiments_experiment_id_scans_get200_response_result_set_result_inner_form_dict = data_experiments_experiment_id_scans_get200_response_result_set_result_inner.from_dict(data_experiments_experiment_id_scans_get200_response_result_set_result_inner_dict)
data_experiments_experiment_id_scans_get200_response_result_set_result_inner_from_dict = DataExperimentsExperimentIdScansGet200ResponseResultSetResultInner.from_dict(data_experiments_experiment_id_scans_get200_response_result_set_result_inner_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ print(DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200Response.to_json())
# convert the object into a dict
data_projects_project_id_subjects_subject_id_experiments_get200_response_dict = data_projects_project_id_subjects_subject_id_experiments_get200_response_instance.to_dict()
# create an instance of DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200Response from a dict
data_projects_project_id_subjects_subject_id_experiments_get200_response_form_dict = data_projects_project_id_subjects_subject_id_experiments_get200_response.from_dict(data_projects_project_id_subjects_subject_id_experiments_get200_response_dict)
data_projects_project_id_subjects_subject_id_experiments_get200_response_from_dict = DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200Response.from_dict(data_projects_project_id_subjects_subject_id_experiments_get200_response_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ print(DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200ResponseResultSet.t
# convert the object into a dict
data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set_dict = data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set_instance.to_dict()
# create an instance of DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200ResponseResultSet from a dict
data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set_form_dict = data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set.from_dict(data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set_dict)
data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set_from_dict = DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200ResponseResultSet.from_dict(data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ print(DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200ResponseResultSetRe
# convert the object into a dict
data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set_result_inner_dict = data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set_result_inner_instance.to_dict()
# create an instance of DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200ResponseResultSetResultInner from a dict
data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set_result_inner_form_dict = data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set_result_inner.from_dict(data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set_result_inner_dict)
data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set_result_inner_from_dict = DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200ResponseResultSetResultInner.from_dict(data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set_result_inner_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

Expand Down
6 changes: 0 additions & 6 deletions clients/xnat/generated/docs/DefaultApi.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ Method | HTTP request | Description
# **data_experiments_experiment_id_scans_get**
> DataExperimentsExperimentIdScansGet200Response data_experiments_experiment_id_scans_get(experiment_id, format=format)



Get A Listing Of Scans From An Image Session

### Example
Expand Down Expand Up @@ -92,8 +90,6 @@ Name | Type | Description | Notes
# **data_projects_project_id_subjects_subject_id_experiments_get**
> DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200Response data_projects_project_id_subjects_subject_id_experiments_get(project_id, subject_id, format=format)



Get a list of experiments

### Example
Expand Down Expand Up @@ -174,8 +170,6 @@ Name | Type | Description | Notes
# **data_services_auth_put**
> data_services_auth_put()



Logs in and returns the authentication cookie

### Example
Expand Down
53 changes: 37 additions & 16 deletions clients/xnat/generated/openapi_client/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,45 @@

__version__ = "1.0.0"

# Define package exports
__all__ = [
"DefaultApi",
"ApiResponse",
"ApiClient",
"Configuration",
"OpenApiException",
"ApiTypeError",
"ApiValueError",
"ApiKeyError",
"ApiAttributeError",
"ApiException",
"DataExperimentsExperimentIdScansGet200Response",
"DataExperimentsExperimentIdScansGet200ResponseResultSet",
"DataExperimentsExperimentIdScansGet200ResponseResultSetResultInner",
"DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200Response",
"DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200ResponseResultSet",
"DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200ResponseResultSetResultInner",
]

# import apis into sdk package
from openapi_client.api.default_api import DefaultApi
from openapi_client.api.default_api import DefaultApi as DefaultApi

# import ApiClient
from openapi_client.api_response import ApiResponse
from openapi_client.api_client import ApiClient
from openapi_client.configuration import Configuration
from openapi_client.exceptions import OpenApiException
from openapi_client.exceptions import ApiTypeError
from openapi_client.exceptions import ApiValueError
from openapi_client.exceptions import ApiKeyError
from openapi_client.exceptions import ApiAttributeError
from openapi_client.exceptions import ApiException
from openapi_client.api_response import ApiResponse as ApiResponse
from openapi_client.api_client import ApiClient as ApiClient
from openapi_client.configuration import Configuration as Configuration
from openapi_client.exceptions import OpenApiException as OpenApiException
from openapi_client.exceptions import ApiTypeError as ApiTypeError
from openapi_client.exceptions import ApiValueError as ApiValueError
from openapi_client.exceptions import ApiKeyError as ApiKeyError
from openapi_client.exceptions import ApiAttributeError as ApiAttributeError
from openapi_client.exceptions import ApiException as ApiException

# import models into sdk package
from openapi_client.models.data_experiments_experiment_id_scans_get200_response import DataExperimentsExperimentIdScansGet200Response
from openapi_client.models.data_experiments_experiment_id_scans_get200_response_result_set import DataExperimentsExperimentIdScansGet200ResponseResultSet
from openapi_client.models.data_experiments_experiment_id_scans_get200_response_result_set_result_inner import DataExperimentsExperimentIdScansGet200ResponseResultSetResultInner
from openapi_client.models.data_projects_project_id_subjects_subject_id_experiments_get200_response import DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200Response
from openapi_client.models.data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set import DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200ResponseResultSet
from openapi_client.models.data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set_result_inner import DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200ResponseResultSetResultInner
from openapi_client.models.data_experiments_experiment_id_scans_get200_response import DataExperimentsExperimentIdScansGet200Response as DataExperimentsExperimentIdScansGet200Response
from openapi_client.models.data_experiments_experiment_id_scans_get200_response_result_set import DataExperimentsExperimentIdScansGet200ResponseResultSet as DataExperimentsExperimentIdScansGet200ResponseResultSet
from openapi_client.models.data_experiments_experiment_id_scans_get200_response_result_set_result_inner import DataExperimentsExperimentIdScansGet200ResponseResultSetResultInner as DataExperimentsExperimentIdScansGet200ResponseResultSetResultInner
from openapi_client.models.data_projects_project_id_subjects_subject_id_experiments_get200_response import DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200Response as DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200Response
from openapi_client.models.data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set import DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200ResponseResultSet as DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200ResponseResultSet
from openapi_client.models.data_projects_project_id_subjects_subject_id_experiments_get200_response_result_set_result_inner import DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200ResponseResultSetResultInner as DataProjectsProjectIdSubjectsSubjectIdExperimentsGet200ResponseResultSetResultInner

34 changes: 21 additions & 13 deletions clients/xnat/generated/openapi_client/api/default_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,9 @@ def _data_experiments_experiment_id_scans_get_serialize(
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[str, str] = {}
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None

# process the path parameters
Expand All @@ -285,11 +287,12 @@ def _data_experiments_experiment_id_scans_get_serialize(


# set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)


# authentication setting
Expand Down Expand Up @@ -556,7 +559,9 @@ def _data_projects_project_id_subjects_subject_id_experiments_get_serialize(
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[str, str] = {}
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None

# process the path parameters
Expand All @@ -575,11 +580,12 @@ def _data_projects_project_id_subjects_subject_id_experiments_get_serialize(


# set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)


# authentication setting
Expand Down Expand Up @@ -807,7 +813,9 @@ def _data_services_auth_put_serialize(
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[str, str] = {}
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None

# process the path parameters
Expand Down
Loading