Skip to content

AWS API Reference

This section provides the API reference documentation for AWS FOCUS workflow endpoints, auto-generated from docstrings.

Interactive Documentation

Swagger UI

  • URL: /docs
  • Features: Request/response testing, parameter exploration

ReDoc

  • URL: /redoc
  • Features: Sidebar navigation, endpoint discovery

AWS Endpoints Reference

Run AWS FOCUS workflow using POST body.

Request Body Parameters: - command (str, optional): "configure" or "download" (default: "configure") - profile (str, optional): AWS profile name (default: "default") - region (str, optional): AWS region (default: "us-east-1") - stack_name (str, optional): CloudFormation stack name (default: "CID-DataExports-Source") - granularity (str, optional): FOCUS time granularity for configure only ("HOURLY", "DAILY", "MONTHLY"; default: "MONTHLY")

Source code in src/api/main.py
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
@app.post("/aws/focus/run")
async def aws_focus_run_post(request: Request):
    """
    Run AWS FOCUS workflow using POST body.

    Request Body Parameters:
    - command (str, optional): "configure" or "download" (default: "configure")
    - profile (str, optional): AWS profile name (default: "default")
    - region (str, optional): AWS region (default: "us-east-1")
    - stack_name (str, optional): CloudFormation stack name (default: "CID-DataExports-Source")
    - granularity (str, optional): FOCUS time granularity for configure only
      ("HOURLY", "DAILY", "MONTHLY"; default: "MONTHLY")
    """
    try:
        try:
            body = await request.json()
        except Exception:
            body = {}

        command = body.get("command", "configure")
        profile = body.get("profile", "default")
        region = body.get("region", "us-east-1")
        stack_name = body.get("stack_name", "CID-DataExports-Source")
        granularity = body.get("granularity", "MONTHLY")

        if command == "configure":
            stack_result = deploy_focus_stack(
                stack_name=stack_name,
                profile_name=profile,
                region=region,
                focus_time_granularity=granularity,
            )
            return {
                "success": True,
                "command": command,
                "message": "AWS FOCUS stack configured successfully",
                "result": stack_result,
            }

        if command == "download":
            files = download_parquet_files(
                profile_name=profile,
                region=region,
                stack_name=stack_name,
            )
            return {
                "success": True,
                "command": command,
                "message": "AWS FOCUS parquet files downloaded successfully",
                "total_files": len(files),
                "files": files,
            }

        return JSONResponse(
            {
                "error": True,
                "message": "Invalid command. Use 'configure' or 'download'.",
            },
            status_code=400,
        )

    except ValueError as e:
        return JSONResponse(
            {"error": True, "message": str(e)},
            status_code=400,
        )
    except Exception as e:
        print(f"Error running AWS FOCUS command: {str(e)}")
        return JSONResponse(
            {"error": True, "message": f"Error running AWS FOCUS command: {str(e)}"},
            status_code=500,
        )

Run AWS FOCUS workflow using query parameters.

Query Parameters: - command (str): "configure" or "download" - profile (str): AWS profile name - region (str): AWS region - stack_name (str): CloudFormation stack name - granularity (str): FOCUS time granularity for configure only

Source code in src/api/main.py
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
@app.get("/aws/focus/run")
async def aws_focus_run_get(
    command: str = "configure",
    profile: str = "default",
    region: str = "us-east-1",
    stack_name: str = "CID-DataExports-Source",
    granularity: str = "MONTHLY",
):
    """
    Run AWS FOCUS workflow using query parameters.

    Query Parameters:
    - command (str): "configure" or "download"
    - profile (str): AWS profile name
    - region (str): AWS region
    - stack_name (str): CloudFormation stack name
    - granularity (str): FOCUS time granularity for configure only
    """
    try:
        if command == "configure":
            stack_result = deploy_focus_stack(
                stack_name=stack_name,
                profile_name=profile,
                region=region,
                focus_time_granularity=granularity,
            )
            return {
                "success": True,
                "command": command,
                "message": "AWS FOCUS stack configured successfully",
                "result": stack_result,
            }

        if command == "download":
            files = download_parquet_files(
                profile_name=profile,
                region=region,
                stack_name=stack_name,
            )
            return {
                "success": True,
                "command": command,
                "message": "AWS FOCUS parquet files downloaded successfully",
                "total_files": len(files),
                "files": files,
            }

        return JSONResponse(
            {
                "error": True,
                "message": "Invalid command. Use 'configure' or 'download'.",
            },
            status_code=400,
        )

    except ValueError as e:
        return JSONResponse(
            {"error": True, "message": str(e)},
            status_code=400,
        )
    except Exception as e:
        print(f"Error running AWS FOCUS command: {str(e)}")
        return JSONResponse(
            {"error": True, "message": f"Error running AWS FOCUS command: {str(e)}"},
            status_code=500,
        )

Authentication

  • AWS CLI configured with profiles
  • Credentials in ~/.aws/credentials
  • IAM permissions for CloudFormation, S3, and FOCUS export resources

Rate Limiting

AWS service quotas apply (CloudFormation, S3, and billing data export services).