semvec/pypi-packages huggingface dataset:
calm-client 0.1.0
Async Python client for Calm.com internal API
Requires Python: >=3.12
Keywords: api, async, calm, client, meditation

# Calm Client (Python)

[![CI](https://github.com/dcode/python-calm-client/actions/workflows/ci.yml/badge.svg)](https://github.com/dcode/python-calm-client/actions/workflows/ci.yml)
[![PyPI](https://img.shields.io/pypi/v/calm-client.svg)](https://pypi.org/project/calm-client/)
[![Python](https://img.shields.io/pypi/pyversions/calm-client.svg)](https://pypi.org/project/calm-client/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

Async Python client and CLI for the internal Calm.com API. Browse the catalog,
search for content, and stream audio — all from your terminal.

## Features

- **CLI + TUI** — Browse, search, and play Calm content from the terminal
- **Async API** — Fully async Python client built on `httpx`
- **Type Safe** — Comprehensive Pydantic models with `py.typed` support
- **Audio Playback** — Stream meditation and sleep audio via `mpv`
- **Auth** — Email/password login with automatic token refresh

## Installation

### CLI (recommended)

Use [pipx](https://pipx.pypa.io/) to install the CLI in an isolated environment
with zero hassle — no virtualenv management needed:

```bash
# Core CLI (login, search, whoami)
pipx install calm-client

# Full CLI with audio playback (play, browse)
pipx install 'calm-client[player]'
```

### Library

If you want to use `calm-client` as a Python library in your own project:

```bash
pip install calm-client
```

## Requirements

- **Python 3.12+** - for modern typing, async, and f-strings

- **mpv** — Required for `calm play` and `calm browse` audio features

    ```bash
    # Ubuntu/Debian
    sudo apt install mpv

    # macOS
    brew install mpv

    # Arch
    sudo pacman -S mpv
    ```

## Quick Start (CLI)

```bash
# 1. Login
calm login

# 2. Browse interactively
calm browse

# 3. Or search and play directly
calm search "Sleep Stories"
calm play <program_id>
```

## Quick Start (Python)

```python
import asyncio
from calm_client import CalmClient


async def main():
    async with CalmClient() as client:
        # Authenticate
        await client.login("email@example.com", "password")

        # Get the Sleep feed
        feed = await client.get_feed("sleep")
        print(f"Found {len(feed.items)} items")

        # Search
        results = await client.search("Rain")
        print(f"Found {len(results.items)} results")


if __name__ == "__main__":
    asyncio.run(main())
```

## Documentation

- [**CLI Reference**](docs/cli.md) — Commands, options, and TUI controls
- [**Library Reference**](docs/library.md) — Python API, classes, and models

## Development

See [CONTRIBUTING.md](CONTRIBUTING.md) for the full development setup.

```bash
# Quick start
uv sync --all-extras --all-groups
uv run hatch test
uv run hatch fmt
```

## License

[MIT](LICENSE)
pydal 20260216.1
pyDAL is a Database Abstraction Layer. It generates queries for SQlite, PotsgreSQL, MySQL, and other backends. It was originally part of the web2py frameworks but it is now an independent project. Example: db.define_table("thing",Field("name")) and db.thing.insert(name="Pizza")
Requires Python: >=3.7

# pyDAL

[![pip version](https://img.shields.io/pypi/v/pydal.svg?style=flat-square)](https://pypi.python.org/pypi/pydal)
[![master-test](https://github.com/web2py/pydal/actions/workflows/run_test.yaml/badge.svg)](https://github.com/web2py/pydal/actions/workflows/run_test.yaml)
[![Coverage Status](https://img.shields.io/codecov/c/github/web2py/pydal.svg?style=flat-square)](https://codecov.io/github/web2py/pydal)
[![API Docs Status](https://readthedocs.org/projects/pydal/badge/?version=latest&style=flat-square)](http://pydal.rtfd.org/)

pyDAL is a pure Python Database Abstraction Layer.

It dynamically generates the SQL/noSQL in realtime using the specified dialect for the database backend, so that you do not have to write SQL code or learn different SQL dialects (the term SQL is used generically), and your code will be portable among different types of databases.
What makes pyDAL different from most of the other DALs is the syntax: it maps records to python dictionaries, which is simpler and closer to SQL. Other famous frameworks instead strictly rely on an Object Relational Mapping (ORM) like the Django ORM or the SQL Alchemy ORM, that maps tables to Python classes and rows to Objects.

Historically pyDAL comes from the original web2py's DAL, with the aim of being compatible with any Python program. However, pyDAL nowadays is an indipendent package that can be used in any Python 3.7+ context.

## Installation

You can install pyDAL using `pip`:

```bash
pip install pyDAL
```

## Usage and Documentation

Here is a quick example:

```pycon
>>> from pydal import DAL, Field
>>> db = DAL('sqlite://storage.db')
>>> db.define_table('thing', Field('name'))
>>> db.thing.insert(name='Chair')
>>> query = db.thing.name.startswith('C')
>>> rows = db(query).select()
>>> print rows[0].name
Chair
>>> db.commit()
```

The complete updated documentation is available on [the py4web manual](https://py4web.com/_documentation/static/en/chapter-07.html)

## What's in the box?

A little *taste* of pyDAL features:

* Transactions
* Aggregates
* Inner Joins
* Outer Joins
* Nested Selects

## Which databases are supported?

pyDAL supports the following databases:

* SQLite
* MySQL
* PostgreSQL
* MSSQL
* FireBird
* Oracle
* DB2
* Ingres
* Sybase
* Informix
* Teradata
* Cubrid
* SAPDB
* IMAP
* MongoDB
* Google Firestore

## License

pyDAL is released under the BSD-3c License.  For further details, please check the `LICENSE` file.