Metadata-Version: 2.4
Name: calethia
Version: 0.2.0
Summary: Calethia SDK for writing compliance policies as code
Author-email: Calethia <support@calethia.ai>
License: Proprietary
Keywords: compliance,security,policy,soc2,cis
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Typing :: Typed
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: boto3>=1.34.0
Requires-Dist: requests>=2.31.0
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: moto>=5.0.0; extra == "dev"
Provides-Extra: validation
Requires-Dist: jsonschema>=4.0.0; extra == "validation"
Provides-Extra: github
Requires-Dist: PyGithub>=2.0.0; extra == "github"
Provides-Extra: snowflake
Requires-Dist: snowflake-connector-python>=3.0.0; extra == "snowflake"
Provides-Extra: gcp
Requires-Dist: google-cloud-compute; extra == "gcp"
Requires-Dist: google-cloud-container; extra == "gcp"
Requires-Dist: google-cloud-functions; extra == "gcp"
Requires-Dist: google-cloud-iam; extra == "gcp"
Requires-Dist: google-cloud-kms; extra == "gcp"
Requires-Dist: google-cloud-logging; extra == "gcp"
Requires-Dist: google-cloud-resource-manager; extra == "gcp"

# Calethia SDK

Python SDK for writing compliance policies as code.

## Installation

```bash
pip install calethia
```

## Quick Start

```python
from calethia import policy, Severity
from calethia.aws import iam
from calethia.frameworks import SOC2, CIS_AWS

@policy(
    id="aws.iam.mfa_required",
    name="IAM Users Have MFA",
    severity=Severity.HIGH,
    frameworks=[SOC2("CC6.1"), CIS_AWS("1.10")],
)
def check_mfa(ctx: iam.Context) -> iam.Result:
    """Ensure all IAM users with console access have MFA enabled."""
    users = ctx.list_users()

    for user in users:
        if user.has_console_access and not user.mfa_enabled:
            ctx.fail(user.to_resource(), "User has console access but no MFA")
        else:
            ctx.pass_(user.to_resource())

    return ctx.result()
```

## Features

- Decorator-based policy definition
- Type-safe framework control mappings
- AWS context with managed boto3 clients
- Full IDE autocomplete support
