# 5X AWS Athena Client Authentication Library

This Python library provides a simple way to create an **AWS Athena client** using **AWS credentials**. It handles authentication seamlessly, allowing developers to focus on querying Athena.

- **Authentication Method:** AWS Credentials (Access Key and Secret Key)
- **Region Configuration:** Configurable AWS Region

---

## Installation

Install the package from PyPI using:

```bash
pip install 5x-aws-athena-auth-manager
```

---

## **Environment Variables**

This library relies on **environment variables** for authentication.

| Variable                      | Description           | Example                        |
| ----------------------------- | --------------------- | ------------------------------ |
| `FIVEX_ATHENA_AWS_ACCESS_KEY` | AWS Access Key ID     | `AKIA1234567890EXAMPLE`        |
| `FIVEX_ATHENA_AWS_SECRET_KEY` | AWS Secret Access Key | `wJalrXUtnFEMI/K7MDENG/123456` |
| `FIVEX_ATHENA_AWS_REGION`     | AWS Region            | `us-east-1`                    |

### **Example: Setting Environment Variables**

```bash
export FIVEX_ATHENA_AWS_ACCESS_KEY="your-access-key"
export FIVEX_ATHENA_AWS_SECRET_KEY="your-secret-key"
export FIVEX_ATHENA_AWS_REGION="your-aws-region"
```

---

## **Usage**

### **Import and Use in Python**

```python
from athena_auth import AthenaConnectionManager

try:
    manager = AthenaConnectionManager()
    client = manager.get_client()
    print("✅ Athena Client Created Successfully!")
except Exception as e:
    print(f"❌ Error: {e}")
```

---

## **Class Overview**

### **`AthenaConnectionManager`**

Creates and manages an **AWS Athena client** using environment variables.

### **How It Works**

✔ **Validates AWS credentials from environment variables**  
✔ **Creates a boto3 Athena client with proper configuration**  
✔ **Tests the connection to ensure credentials are valid**  
✔ **Implements comprehensive error handling for debugging**

---

## **Error Handling**

The library provides detailed error handling with specific exceptions:

| Exception         | Cause                                    |
| ----------------- | ---------------------------------------- |
| `ValueError`      | Missing or invalid credentials           |
| `ClientError`     | AWS API errors (invalid region, etc.)    |
| `ConnectionError` | Network or connectivity issues           |
| `Exception`       | Unexpected errors during client creation |

### **Example Error Handling**

```python
from athena_auth import AthenaConnectionManager
from botocore.exceptions import ClientError

try:
    manager = AthenaConnectionManager()
    client = manager.get_client()
except ValueError as e:
    print(f"❌ Configuration Error: {e}")
except ClientError as e:
    print(f"❌ AWS Client Error: {e}")
except ConnectionError as e:
    print(f"❌ Connection Error: {e}")
except Exception as e:
    print(f"❌ Unexpected Error: {e}")
```

---

## **Testing**

The library includes comprehensive test utilities:

### **Simple Test**

```python
# simple_test.py
from athena_auth import AthenaConnectionManager

def test_athena_connection():
    manager = AthenaConnectionManager()
    client = manager.get_client()
    response = client.list_work_groups(MaxResults=1)
    print("✅ Connection successful!")

if __name__ == "__main__":
    test_athena_connection()
```

### **Full Test Suite**

```python
# Run the complete test suite
python test.py
```

---

## **Dependencies**

Core dependencies required:

```text
boto3>=1.26.0
botocore>=1.29.0
```

---

## **Why Use This Library?**

✔ **Simplifies AWS Athena authentication** – No need to manage credentials manually  
✔ **Ensures proper credential validation** – Validates credentials before use  
✔ **Provides comprehensive error handling** – Clear, actionable error messages  
✔ **Includes testing utilities** – Easy to verify your setup  
✔ **Production-ready** – Used by 5X platform services

---

## **Contributing**

We welcome contributions! Please feel free to submit a Pull Request.

---

## **License**

MIT License - feel free to use this library in your projects!
