Python client library for LNPI Grid API
Project description
GridAPI Python Client
A comprehensive Python client library for interacting with the Grid API, providing type-safe, intuitive access to research studies, medical imaging data, and workflow management.
Features
- 🚀 Type-safe interactions with all Grid API endpoints
- 🏗️ Intuitive resource management with proper abstractions
- 📊 Comprehensive CRUD operations for all data models
- 🔍 Advanced querying and filtering capabilities
- 🔐 Robust authentication handling
- ⚡ Async support for high-performance applications
- 📚 Excellent developer experience with proper error handling
Installation
From PyPI (when published)
pip install gridapi
From Source
git clone https://github.com/kelvinlim/gridapi.git
cd gridapi
pip install -e .
With Optional Dependencies
# For CLI functionality
pip install gridapi[cli]
# For async support
pip install gridapi[async]
# For development
pip install gridapi[dev]
# All features
pip install gridapi[all]
Windows Standalone Executable
For users who don't want to install Python:
- Download: Get the pre-built executable from releases
- Windows:
gridapi-windows.exe - macOS:
gridapi-macos - Linux:
gridapi-linux
- Windows:
- Configure: Create a
grid_tokenfile with your API credentials - Run: Execute the executable directly from command line
See WINDOWS_BUILD.md for detailed instructions on building cross-platform executables. See DEPLOYMENT.md for information about automated releases and deployment.
Releases
Latest Release
Download the latest release from GitHub Releases:
- Windows:
gridapi-windows.exe - macOS:
gridapi-macos - Linux:
gridapi-linux
Release Process
Releases are automatically created when version tags are pushed:
git tag v1.0.0
git push origin v1.0.0
This triggers GitHub Actions to:
- Build executables for all platforms
- Create a GitHub release with downloadable assets
- Generate checksums for verification
Quick Start
Using grid_token file (Recommended)
Create a grid_token file in your project directory:
grid_token=your-api-token-here
base_url=https://api.grid.example.com
Then use it in your code:
from pathlib import Path
from gridapi import GridAPIClient
# Load config from grid_token file
config_path = Path("grid_token")
config = {}
if config_path.exists():
with open(config_path, 'r') as f:
for line in f:
if '=' in line:
key, value = line.strip().split('=', 1)
config[key] = value
# Initialize client
client = GridAPIClient(
base_url=config.get('base_url', 'https://api.grid.example.com'),
token=config.get('grid_token')
)
# Create a study
study = client.grid.studies.create({
"description": "Clinical Trial Study",
"investigator": "Dr. Jane Smith",
"status": 1
})
# List studies with filtering
studies = client.grid.studies.list(
investigator="Dr. Smith",
status=1
)
# Access nested resources
events = client.grid.studies(study.id).events.list()
API Categories
Grid API
- Studies: Research study management
- Datatypes: Data type definitions
- Subjects: Study participants
- Events: Study events and details
- Procedures: Study procedures
Image API
- Acquisitions: Image acquisition data
- Actions: Image processing actions
- Scanner Types: Scanner configurations
- Raw Data: Raw image data management
Taskflow API
- Measures: Study measures
- Participants: Workflow participants
Advanced Usage
Complex Filtering
# Advanced querying
studies = client.grid.studies.list(
search="clinical trial",
ordering="-created_at",
status__gte=1
)
# Nested resource operations
subject = client.grid.studies(123).subjects(456).get()
contacts = client.grid.studies(123).subjects(456).contacts.list()
Async Support
import asyncio
from gridapi import AsyncGridAPIClient
async def main():
client = AsyncGridAPIClient(
base_url="https://api.grid.example.com",
token="your-api-token"
)
studies = await client.grid.studies.list()
return studies
# Run async code
studies = asyncio.run(main())
Examples
Check out the examples directory for comprehensive usage examples:
examples/simple_example.py- Basic usage with grid_token fileexamples/basic_usage.py- Common operations and patternsexamples/advanced_usage.py- Complex queries and advanced featuresexamples/cli_usage.py- Command-line interface examplesexamples/event_details_example.py- Event details functionality examples
All examples use the grid_token file for configuration, making them easy to run.
CLI Usage
The CLI automatically reads configuration from a grid_token file and provides comprehensive access to all GridAPI resources:
# Create configuration file
echo "grid_token=your-api-token-here" > grid_token
echo "base_url=https://your-api-url.com" >> grid_token
# Study management
gridapi studies list # List all studies
gridapi studies get 100 # Get study details
gridapi studies create --description "Test Study" --investigator "Dr. Test"
# Study resources
gridapi studies subjects 100 # List subjects for study 100
gridapi studies procedures 100 # List procedures for study 100
gridapi studies events 100 # List events for study 100
gridapi studies event-details 100 10000 # List details for event 10000
gridapi studies subject-contacts 100 1000 # List contacts for subject 1000
# Image management
gridapi actions list # List all image actions
gridapi actions list --status completed # List completed actions
# Output formats
gridapi studies subjects 100 --format json # JSON output
gridapi studies subjects 100 --format table # Table output (default)
# Configuration
gridapi config # Show current configuration
gridapi --help # Show help
CLI Features
- Automatic Configuration: Reads from
grid_tokenfile by default - Multiple Output Formats: Table (default) and JSON output
- Comprehensive Coverage: Access to all study resources and nested data
- Command Overrides: Override config file with command-line options
- Rich Output: Beautiful tables with colors and formatting
- Error Handling: Clear error messages and validation
Authentication
The GridAPI client supports multiple authentication methods:
# Token authentication
client = GridAPIClient(
base_url="https://api.grid.example.com",
token="your-api-token"
)
# Cookie authentication
client = GridAPIClient(
base_url="https://api.grid.example.com",
session_id="your-session-id"
)
Error Handling
from gridapi.exceptions import GridAPIError, ValidationError
try:
study = client.grid.studies.create(invalid_data)
except ValidationError as e:
print(f"Validation error: {e}")
except GridAPIError as e:
print(f"API error: {e}")
Contributing
Contributions are welcome! Please read our contributing guidelines and submit pull requests to our GitHub repository.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lnpi_gridapi-1.0.7.tar.gz.
File metadata
- Download URL: lnpi_gridapi-1.0.7.tar.gz
- Upload date:
- Size: 36.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cbcc844d7518e61676c3808459f62a1a1aff94298754e071d1d9a58c6b944a03
|
|
| MD5 |
eef7ef97f6b688d14697f129d513b41b
|
|
| BLAKE2b-256 |
ea3ba783a1842af7700e38ee15c34f076a5869baef838487674ca74cd939e93c
|
File details
Details for the file lnpi_gridapi-1.0.7-py3-none-any.whl.
File metadata
- Download URL: lnpi_gridapi-1.0.7-py3-none-any.whl
- Upload date:
- Size: 29.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
05d8b1b9311880787ccf8539be197ab2d90f76308270e0c06974f441f1482323
|
|
| MD5 |
e24a41ee448b701d6747e55f52f05859
|
|
| BLAKE2b-256 |
de49fa3e316f6c55823d0fa62ef21b94d0d5f859c4c2dbcdc53a4f998d739474
|