# Syncause Python SDK Installation Guide ### Add `syncause_tracer` as a Project Dependency Your task is to **identify the project's dependency management system** and add `syncause_tracer` as a dependency in a **safe, idempotent, and non-destructive way**. Do NOT modify lock files unless explicitly instructed. --- ### 1. Identify the Dependency File (Priority Order) Detect the dependency system in the following order: 1. `pyproject.toml` - `[tool.poetry.dependencies]` → Poetry - `[project.dependencies]` → PEP 621 (pip / uv / pdm) 2. `requirements.txt` 3. `setup.py` / `setup.cfg` (legacy, fallback only) If multiple systems exist: - Prefer `pyproject.toml` - Do NOT add the dependency to more than one file --- ### 2. Add Dependency Based on the Detected System #### A. Using `requirements.txt` Append the following line **if it does not already exist** and install the dependency: ```text https://github.com/Syncause/syncause-sdk/releases/download/syncause_tracer_v0.2.7/syncause_tracer-0.2.7-py3-none-any.whl ``` Rules: - Avoid duplicate entries - Preserve file formatting and comments - Do NOT reorder existing dependencies --- #### B. Using `pyproject.toml` (Poetry) Add the dependency under `[tool.poetry.dependencies]` and install the dependency: ```toml [tool.poetry.dependencies] syncause_tracer = { url = "https://github.com/Syncause/syncause-sdk/releases/download/syncause_tracer_v0.2.7/syncause_tracer-0.2.7-py3-none-any.whl" } ``` Rules: - Do NOT remove or modify existing dependencies - Do NOT add a duplicate if it already exists - Do NOT update `poetry.lock` --- #### C. Using `pyproject.toml` (PEP 621: pip / uv / pdm) Add the dependency under `[project.dependencies]` and install the dependency: ```toml [project] dependencies = [ "syncause_tracer @ https://github.com/Syncause/syncause-sdk/releases/download/syncause_tracer_v0.2.7/syncause_tracer-0.2.7-py3-none-any.whl" ] ``` Rules: - Preserve existing dependency order - Ensure valid TOML syntax - Do NOT touch lock files (e.g. `pdm.lock`, `uv.lock`) --- ### 3. Validation Rules Before applying changes: - Confirm the dependency is not already present - Ensure the file is writable - Ensure no syntax errors are introduced After applying changes: - Only the selected dependency file should be modified If no supported dependency file is found: - Report that manual installation is required - Do NOT create new dependency files ### Locate the Project Entry Point Your task is to **identify the correct project entry file** where application-level initialization code should be executed **exactly once at startup**. Do NOT guess. Follow the rules below in order. ------------------------------------------------------------------------ ### 1. Definition of "Entry Point" The entry point is the Python file that: - Is executed when the application starts - Creates or launches the web application - Runs before request handling begins - Is suitable for global initialization code Only need one entry point. ------------------------------------------------------------------------ ### 2. Framework-Specific Identification Rules (Priority Order) #### Django Identify the entry point in the following order: 1. `manage.py` (for development / CLI startup) 2. `project/wsgi.py` (WSGI deployment) 3. `project/asgi.py` (ASGI deployment) ------------------------------------------------------------------------ #### FastAPI Identify the file that: - Creates a `FastAPI()` instance - Is referenced by `uvicorn` (e.g. `uvicorn main:app`) Common filenames: - `main.py` - `app.py` Typical patterns: ``` python app = FastAPI() ``` or ``` python def create_app(): app = Flask(__name__) return app ``` ------------------------------------------------------------------------ #### Flask Identify the file that: - Creates a `Flask(__name__)` application - Or uses an application factory (`create_app()`) Common patterns: ``` python app = Flask(__name__) ``` ------------------------------------------------------------------------ ### 3. Generic Python Projects (Fallback) If no known framework is detected: 1. Look for: - `main.py` - `app.py` - A file referenced by `__main__` 2. Prefer files containing: - `if __name__ == "__main__":` - A `main()` function that starts the program 3. **Location Priority**: - **Prefer scripts located at the project root** over those in subdirectories. - Select the "most top-level" entry script available. ------------------------------------------------------------------------ ### 4. Validation Rules Before selecting a file: - Ensure it is executed only once at startup - Ensure it is NOT: - A settings/config-only file - A model, router, or utility module - Imported repeatedly by other modules If multiple candidates exist: - Choose the one most directly responsible Action: Inject Initialization Code Insert the following initialization code at the top of the identified entry file. Placement Logic: To prevent syntax errors, you must determine the correct insertion point by following these priority rules: Scan for Headers: Skip past any Shebang (#!) or Encoding lines (# -*- ...). Scan for Metadata: Skip past any Module Docstrings ("""...""") or Copyright/License comment blocks. Scan for Future Imports: Skip past any from __future__ imports. INSERT HERE: Place the code immediately after the above elements. Before Standard Imports: Ensure the code is placed before any standard library or third-party imports (e.g., import os). Code to Insert: ``` python from syncause_tracer import initialize initialize( api_key="{apiKey}", app_name="{appName}", project_id="{projectId}" ) ```