| Latest Release |
|
| PyPI Downloads |
|
| Nanohub Tutorial |
|
pip install nanohub-remote
import nanohubremote as nr
# Option 1: OAuth Password Grant (requires web application)
auth_data = {
'client_id': 'XXXXXXXX',
'client_secret': 'XXXXXXXX',
'grant_type': 'password',
'username': 'your_username',
'password': 'your_password'
}
# Option 2: Personal Access Token (recommended)
auth_data = {
'grant_type': 'personal_token',
'token': 'your_personal_token'
}
# to get username and password, register on nanohub.org (https://nanohub.org/register/)
# to get client id and secret, create a web application (https://nanohub.org/developer/api/applications/new), use "https://127.0.0.1" as Redirect URL
# to get a personal token, go to https://nanohub.org/developer/api/tokens
# Create a session
session = nr.Session(auth_data)
# Or use as a context manager (recommended - automatically cleans up resources)
with nr.Session(auth_data) as session:
# Your code here
passThe Session class supports advanced configuration options:
session = nr.Session(
auth_data,
url="https://nanohub.org/api", # Custom API URL
timeout=10, # Request timeout in seconds (default: 5)
max_retries=5, # Maximum retries for failed requests (default: 3)
pool_connections=20, # Connection pool size (default: 10)
pool_maxsize=20 # Max pool size (default: 10)
)The Session class provides methods for all standard HTTP verbs:
with nr.Session(auth_data) as session:
# GET request
response = session.requestGet('tools/list')
tools = response.json()
# POST request with form data
response = session.requestPost('endpoint', data={'key': 'value'})
# POST request with JSON
response = session.requestPost('endpoint', json={'key': 'value'})
# PUT request
response = session.requestPut('resource/123', json={'status': 'updated'})
# DELETE request
response = session.requestDelete('resource/123')
# PATCH request
response = session.requestPatch('resource/123', json={'field': 'new_value'})- Connection Pooling: Reuses HTTP connections for better performance
- Automatic Retries: Automatically retries failed requests (configurable)
- Token Management: Handles OAuth token refresh automatically
- Context Manager: Use
withstatement for automatic resource cleanup - Persistent Headers: Headers are maintained across all requests
# Install development dependencies
pip install -r requirements-dev.txt
# Run all tests
pytest
# Run with coverage
pytest --cov=nanohubremote --cov-report=html
# Run specific test file
pytest tests/test_session.pySee tests/README.md for detailed testing documentation.
TOOLNAME = '' # valid Nanoohub tool name e.g. pntoy
tool = nr.Tool(auth_data)
# Get Available input parameters
params = tool.getToolParameters(TOOLNAME)
# Submit a simulation experiment
job_id = tool.submitTool(params)
# Check Status
status = tool.checkStatus(job_id['job_id'])
# Get Results
results = tool.getResults(job_id['job_id'])
# Submit an wait for results
results = tool.submitTool(params, wait_results=True)TOOLNAME = '' # valid Nanoohub tool name e.g. pntoy
s2l = nr.Sim2L(auth_data)
# Get Available input parameters
params = s2l.getToolParameters(TOOLNAME)
# Submit a simulation experiment
job_id = s2l.submitTool(params)
# Check Status
status = s2l.checkStatus(job_id['job_id'])
# Get Results
results = s2l.getResults(job_id['job_id'])
# Submit an wait for results
results = s2l.submitTool(params, wait_results=True)