Metadata-Version: 2.4
Name: calethia
Version: 0.2.1
Summary: Calethia SDK for writing compliance policies as code
Author-email: Calethia <support@calethia.ai>
License-Expression: LicenseRef-FSL-1.1-ALv2
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
License-File: LICENSE.md
License-File: NOTICE.md
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: aws
Requires-Dist: boto3>=1.34.0; extra == "aws"
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-api-python-client; extra == "gcp"
Requires-Dist: google-auth; 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"
Provides-Extra: gitlab
Requires-Dist: requests; extra == "gitlab"
Provides-Extra: okta
Requires-Dist: requests; extra == "okta"
Provides-Extra: cloudflare
Requires-Dist: requests; extra == "cloudflare"
Provides-Extra: google-workspace
Requires-Dist: google-api-python-client; extra == "google-workspace"
Requires-Dist: google-auth; extra == "google-workspace"
Provides-Extra: gmail
Requires-Dist: google-api-python-client; extra == "gmail"
Requires-Dist: google-auth; extra == "gmail"
Provides-Extra: resend
Requires-Dist: requests; extra == "resend"
Provides-Extra: bloomfire
Requires-Dist: requests; extra == "bloomfire"
Provides-Extra: pulumi
Requires-Dist: requests; extra == "pulumi"
Provides-Extra: all
Requires-Dist: boto3>=1.34.0; extra == "all"
Requires-Dist: PyGithub>=2.0.0; extra == "all"
Requires-Dist: snowflake-connector-python>=3.0.0; extra == "all"
Requires-Dist: google-api-python-client; extra == "all"
Requires-Dist: google-auth; extra == "all"
Requires-Dist: google-cloud-compute; extra == "all"
Requires-Dist: google-cloud-container; extra == "all"
Requires-Dist: google-cloud-functions; extra == "all"
Requires-Dist: google-cloud-iam; extra == "all"
Requires-Dist: google-cloud-kms; extra == "all"
Requires-Dist: google-cloud-logging; extra == "all"
Requires-Dist: google-cloud-resource-manager; extra == "all"
Requires-Dist: requests; extra == "all"
Dynamic: license-file

# 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

## License

Source-available under the [Functional Source License 1.1 with an Apache 2.0 Future
License](LICENSE.md) (FSL-1.1-ALv2). Copyright 2026 Calethia.

In short:

- **You may** read, run, modify, and redistribute this SDK for any purpose except a
  *Competing Use* — reselling it, or shipping it inside a commercial product or service
  that substitutes for Calethia. Internal use at your company, non-commercial education,
  and non-commercial research are all expressly permitted.
- **Your policies are yours.** FSL carries no copyleft or share-alike obligation.
  Importing `calethia` does not encumber the policy code you write against it — keep it,
  relicense it, or take it elsewhere.
- **Every version becomes Apache-2.0** on the second anniversary of its release, so you
  can keep running your compliance checks indefinitely, with or without an account.

FSL is *source-available*, not an OSI-approved open source license. The SDK is provided
**as is**, without warranties, and Calethia's liability is limited — see the Disclaimer
section of [LICENSE.md](LICENSE.md). It assists with compliance verification; it does not
guarantee a passing audit. Third-party dependency licenses are inventoried in
[NOTICE.md](NOTICE.md).
