A federated analysis framework for Trusted Research Environments (TREs) using object-oriented design.
First, set up your environment variables:
# Copy the example environment file
cp env.example .env
# Edit .env with your actual values
nano .env # or use your preferred editorAll variables in env.example are required. Here's what you need to configure:
# Authentication
5STES_TOKEN=your_jwt_token_here
5STES_PROJECT=your_project_name
# TES (Task Execution Service) Configuration
TES_BASE_URL=http://your-tes-endpoint:5034/v1/tasks
TES_DOCKER_IMAGE=harbor.your-registry.com/your-image:tag
# MinIO Configuration
MINIO_STS_ENDPOINT=http://your-minio-endpoint:9000/sts
MINIO_ENDPOINT=your-minio-endpoint:9000
MINIO_OUTPUT_BUCKET=your-output-bucket-name# Install dependencies
pip install -r requirements.txt
# Or using poetry
poetry installfrom analysis_orchestrator import AnalysisOrchestrator
from analytics_tes import AnalyticsTES
from analysis_runner import AnalysisRunner
from string import Template
import os
# Will use 5STES_PROJECT from environment and 5STES_TOKEN from environment
analytics_tes = AnalyticsTES()
orchestrator = AnalysisOrchestrator(tes_client=analytics_tes)
analysis_runner = AnalysisRunner(tes_client=analytics_tes)
sql_schema = os.getenv("postgresSchema", "public")
# Define your own SQL query
query_template = Template("""WITH user_query AS (
SELECT value_as_number FROM $sql_schema.measurement
WHERE measurement_concept_id = 21490742
AND value_as_number IS NOT NULL
)
SELECT
COUNT(value_as_number) AS n,
SUM(value_as_number) AS total
FROM user_query;""")
custom_query = query_template.safe_substitute(schema=sql_schema)
# Run the analysis
result = analysis_runner.run_analysis(
analysis_type="mean",
task_name="DEMO: mean analysis test",
user_query=custom_query,
tres=["Nottingham","Nottingham 2"]
)
print(f"Analysis result: {result}")