# Python

### Installation

To install the `ConnectFramework` Python SDK, use the following command:

```bash
pip install connectframework
```

### Usage

Before using any functions, initialize the SDK with your API key.

#### Initializing the SDK

```python
from connectframework import ConnectFramework

# Initialize the SDK with your API key
ConnectFramework.initialize(api_key="your_api_key_here")
```

***

### User Authentication

#### Logging in with a Unique ID and Email

Logs in the user using a unique ID and an email. If `unique_id` is `None`, a new one is generated automatically. Returns true if email was accepted and an OTP code was sent to the email.

```python
ConnectFramework.login(unique_id=None, email="user@example.com")
```

#### Submitting an OTP Code

If the login process requires an OTP (One-Time Password), this function submits the OTP code for verification.

```python
def otp_callback(success: bool):
    if success:
        print("OTP verified successfully, user logged in.")
    else:
        print("OTP verification failed.")

ConnectFramework.submit_otp(email="user@example.com", otp_code="123456", callback=otp_callback)
```

#### Logging Out

Logs out the user entirely.

```python
ConnectFramework.logout()
```

#### Checking if User is Connected

Returns `True` if the user is logged in and running the Connect.ai desktop client.

```python
is_connected = ConnectFramework.is_connected()
print(f"User is connected: {is_connected}")
```

***

### Analytics Tracking

#### Logging an Event

Logs an analytics event with a category and action.

```python
ConnectFramework.log_event(category="user_action", action="button_click")
```

#### Logging an Event with Additional Data

Logs an analytics event with a category, action, label, and numerical value.

```python
ConnectFramework.log_event_with_details(
    category="user_action",
    action="purchase",
    label="premium_upgrade",
    value=29.99
)
```

***

### Summary

| Method                                                                         | Description                                                                |
| ------------------------------------------------------------------------------ | -------------------------------------------------------------------------- |
| `initialize(api_key: str)`                                                     | Initializes the SDK with an API key.                                       |
| \`login(unique\_id: str                                                        | None, email: str, callback: Callable\[\[bool], None])\`                    |
| `submit_otp(email: str, otp_code: str, callback: Callable[[bool], None])`      | Submits an OTP code for verification.                                      |
| `logout()`                                                                     | Logs out the user.                                                         |
| `is_connected() -> bool`                                                       | Returns `True` if the user is logged in and running the Connect.ai client. |
| `log_event(category: str, action: str)`                                        | Logs an analytics event with a category and action.                        |
| `log_event_with_details(category: str, action: str, label: str, value: float)` | Logs an analytics event with additional details.                           |

For more details, refer to the official API documentation.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.connect.ai/sdk-integration-guides/python.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
