semvec/pypi-packages huggingface dataset:
urich 0.1.3
Async DDD framework for microservices on Starlette
Requires Python: >=3.12
Keywords: asgi, ddd, microservices, starlette, cqrs

# Urich

Async DDD framework for microservices on Starlette.

**Documentation:** [kashn9sh.github.io/urich](https://kashn9sh.github.io/urich) · **Contributing:** [CONTRIBUTING.md](CONTRIBUTING.md) · **Community & promotion:** [docs/community.md](https://kashn9sh.github.io/urich/community/)

The application is composed from module objects via `app.register(module)` — similar to FastAPI with routers, but one consistent style for domain, events, RPC and discovery.

## Idea

- **One object = one building block:** DomainModule, EventBusModule, OutboxModule, DiscoveryModule, RpcModule. All configured via fluent API and attached with `app.register(module)`.
- **DDD:** Bounded context as DomainModule with `.aggregate()`, `.repository()`, `.command()`, `.query()`, `.on_event()`. Commands and queries get HTTP routes automatically.
- **No lock-in:** Protocols (EventBus, ServiceDiscovery, RpcTransport) in core; implementations (Redis, Consul, HTTP+JSON) supplied by the user or optional out-of-the-box adapters.

## Install

```bash
pip install urich
# CLI for generating skeletons:
pip install "urich[cli]"
```

## Quick start

```python
from urich import Application
from urich.ddd import DomainModule

# One object = full bounded context
from orders.module import orders_module

app = Application()
app.register(orders_module)

# Run: python -m uvicorn main:app --reload  (or: pip install uvicorn && uvicorn main:app --reload)
```

Routes by convention: `POST /orders/commands/create_order`, `GET /orders/queries/get_order`.

## OpenAPI / Swagger

After registering all modules, call `app.openapi(title="My API", version="0.1.0")`. Then:

- **GET /openapi.json** — OpenAPI 3.0 spec
- **GET /docs** — Swagger UI

```python
app = Application()
# ... app.register(module) ...
app.openapi(title="My API", version="0.1.0")
```

## CLI

```bash
urich create-app myapp
cd myapp
urich add-context orders --dir .
urich add-aggregate orders Order --dir .
# In main.py: from orders.module import orders_module; app.register(orders_module)
```

## Module structure (DomainModule)

- **domain** — aggregate (AggregateRoot), domain events (DomainEvent).
- **application** — commands/queries (Command/Query), handlers (one per command/query).
- **infrastructure** — repository interface and implementation (e.g. in-memory for prototypes).
- **module.py** — one object `DomainModule("orders").aggregate(...).repository(...).command(...).query(...).on_event(...)`; register in the app with `app.register(orders_module)`.

## Other modules

- **EventBusModule** — `.adapter(impl)` or `.in_memory()`; in container as EventBus.
- **OutboxModule** — `.storage(...)` and `.publisher(...)`; contracts in core.
- **DiscoveryModule** — `.static({"svc": "http://..."})` or `.adapter(impl)`; ServiceDiscovery protocol.
- **RpcModule** — `.server(path="/rpc")` and `.client(discovery=..., transport=...)`; optional JsonHttpRpcTransport (requires httpx).

Full composition example: `examples/ecommerce/main.py`.
simple-memo 0.1.0
A simple, MIT-licensed CLI for Apple Notes & Reminders on macOS
Requires Python: >=3.9
Keywords: apple-notes, cli, macos, productivity, reminders

# simple-memo

A simple, MIT-licensed CLI for Apple Notes & Reminders on macOS.

Use it from the terminal, scripts, or AI agents — no restrictions.

## Install

```bash
# pip / pipx
pip install simple-memo
# or
pipx install simple-memo

# Homebrew (coming soon)
# brew install inkolin/tap/simple-memo
```

## Notes

```bash
simple-memo list                          # List all notes
simple-memo list -f Work                  # List notes in a folder
simple-memo folders                       # List all folders
simple-memo read "Meeting Notes"          # Read a note (Markdown)
simple-memo create "Title" "Body text"    # Create a note
simple-memo create -i                     # Create in $EDITOR
simple-memo create "Title" -f Work        # Create in specific folder
echo "piped" | simple-memo create "Title" # Create from stdin
simple-memo edit "Meeting Notes"          # Edit in $EDITOR
simple-memo append "Title" "More text"    # Append to a note
simple-memo move "Title" "Archive"        # Move to folder (creates if needed)
simple-memo search "keyword"              # Search by content/title
simple-memo search --fzf                  # Interactive fuzzy search (requires fzf)
simple-memo delete "Old Note"             # Delete a note
simple-memo count                         # Count total notes
simple-memo export                        # Export all to ~/Desktop/simple-memo-export/
simple-memo export -o ./backup            # Export to custom directory
simple-memo export --html                 # Export as HTML instead of Markdown
simple-memo mkfolder "Projects"           # Create a folder
simple-memo rmfolder "Old Stuff"          # Delete a folder
```

## Reminders

```bash
simple-memo rem list                      # List non-completed reminders
simple-memo rem list -a                   # List all (including completed)
simple-memo rem add "Buy milk"            # Create reminder (no due date)
simple-memo rem add "Meeting" -d 2025-03-01 -t 14:00  # With due date
simple-memo rem done "Buy milk"           # Mark as completed
simple-memo rem edit "Meeting" --new-title "Team sync"  # Rename
simple-memo rem edit "Meeting" --new-date "2025-03-05 10:00"  # Reschedule
simple-memo rem delete "Old reminder"     # Delete
```

## Why?

Existing Apple Notes CLI tools use restrictive licenses that prohibit AI usage.
`simple-memo` is MIT-licensed — use it however you want, including with AI agents, commercial products, and automation scripts.

## Requirements

- macOS (uses AppleScript to talk to Apple Notes & Reminders)
- Python 3.9+
- Optional: [fzf](https://github.com/junegunn/fzf) for interactive search

## License

MIT — see [LICENSE](LICENSE)