# Execute Python Code Endpoint ## 1. Overview The `/v1/code/execute/python` endpoint allows users to execute Python code on the server. This endpoint is part of the version 1.0 API structure defined in `app.py`. It is designed to provide a secure and controlled environment for executing Python code, with features like input validation, output capturing, and timeout handling. ## 2. Endpoint **URL Path:** `/v1/code/execute/python` **HTTP Method:** `POST` ## 3. Request ### Headers - `x-api-key` (required): The API key for authentication. ### Body Parameters The request body must be a JSON object with the following properties: - `code` (string, required): The Python code to be executed. - `timeout` (integer, optional): The maximum execution time in seconds, between 1 and 300. Default is 30 seconds. - `webhook_url` (string, optional): The URL to receive the execution result via a webhook. - `id` (string, optional): A unique identifier for the request. The `validate_payload` directive in the routes file enforces the following JSON schema for the request body: ```json { "type": "object", "properties": { "code": {"type": "string"}, "timeout": {"type": "integer", "minimum": 1, "maximum": 300}, "webhook_url": {"type": "string", "format": "uri"}, "id": {"type": "string"} }, "required": ["code"], "additionalProperties": False } ``` ### Example Request **Request Payload:** ```json { "code": "print('Hello, World!')", "timeout": 10, "webhook_url": "https://example.com/webhook", "id": "unique-request-id" } ``` **cURL Command:** ```bash curl -X POST \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"code": "print('Hello, World!')", "timeout": 10, "webhook_url": "https://example.com/webhook", "id": "unique-request-id"}' \ http://your-api-endpoint/v1/code/execute/python ``` ## 4. Response ### Success Response The success response follows the general response format defined in `app.py`. Here's an example: ```json { "endpoint": "/v1/code/execute/python", "code": 200, "id": "unique-request-id", "job_id": "generated-job-id", "response": { "result": null, "stdout": "Hello, World!\n", "stderr": "", "exit_code": 0 }, "message": "success", "pid": 12345, "queue_id": 1234567890, "run_time": 0.123, "queue_time": 0.0, "total_time": 0.123, "queue_length": 0, "build_number": "1.0.0" } ``` ### Error Responses #### Missing or Invalid Parameters **Status Code:** 400 Bad Request ```json { "error": "Missing or invalid parameters", "stdout": "", "exit_code": 400 } ``` #### Execution Error **Status Code:** 400 Bad Request ```json { "error": "Error message from the executed code", "stdout": "Output from the executed code", "exit_code": 400 } ``` #### Execution Timeout **Status Code:** 408 Request Timeout ```json { "error": "Execution timed out after 10 seconds" } ``` #### Internal Server Error **Status Code:** 500 Internal Server Error ```json { "error": "An internal server error occurred", "stdout": "", "stderr": "", "exit_code": 500 } ``` ## 5. Error Handling The endpoint handles various types of errors, including: - Missing or invalid parameters (400 Bad Request) - Execution errors, such as syntax errors or exceptions (400 Bad Request) - Execution timeout (408 Request Timeout) - Internal server errors (500 Internal Server Error) The main application context (`app.py`) also includes error handling for queue overload (429 Too Many Requests) and other general errors. ## 6. Usage Notes - The executed code runs in a sandboxed environment, with limited access to system resources. - The code execution is limited to a maximum of 300 seconds (5 minutes) by default, but this can be adjusted using the `timeout` parameter. - The execution result, including stdout, stderr, and the return value, is captured and returned in the response. - If a `webhook_url` is provided, the execution result will also be sent to the specified webhook. ## 7. Common Issues - Attempting to execute code that accesses restricted resources or performs disallowed operations may result in an execution error. - Long-running or resource-intensive code may trigger the execution timeout. - Providing an invalid `webhook_url` will prevent the execution result from being delivered to the specified webhook. ## 8. Best Practices - Always validate and sanitize user input to prevent code injection attacks. - Set an appropriate timeout value based on the expected execution time of the code. - Monitor the execution logs for any errors or unexpected behavior. - Implement rate limiting or queue management to prevent abuse or overload of the endpoint. - Consider implementing additional security measures, such as code sandboxing or whitelisting/blacklisting certain operations or modules.