Shared runtime for the oh-my-* Flask services: settings DB, Claude CLI gateway, timezone, base-url, scheduler.
Project description
oh-my-common
Shared runtime for the oh-my-* Flask services. Extracted so each split-out
service (oh-my-rss / oh-my-msg / oh-my-write) shares one implementation instead
of drifting copies. Per the split design, each service keeps its own
settings DB — this package is the code layer, not a shared store.
Modules
settings— SQLite settings client + secret resolution.get_setting/put_setting/get_all, theprovider_tokenscache (get/set/clear_cached_token), andresolve_secret(key, env_key)with precedence service-namespace >global> env. Convenience:resolve_claude_token(),resolve_openai_key(). Config via env:SETTINGS_DB(path),OMI_SERVICE_NS(this service's namespace, e.g.clipboard).claude— Claude CLI gateway:resolve_claude_bin,claude_text,run_claude_capture,gate_ai,claude_status,extract_json,estimate_tokens,estimate_cost,MODEL_PRICING. Flask-free.tz—local_tz()/now_local()/today_local()fromOMI_TZ_OFFSET(hours, default +8).urls—request_base_url()(honorsX-Forwarded-Proto/Host). Imports flask lazily.scheduler—make_scheduler(ENABLED_ENV)→ a guardedBackgroundScheduler(returnsNonewhenENABLED_ENV=0, so extra gunicorn workers don't double-run). Imports apscheduler lazily.llm—complete(prompt, model='sonnet', backend='claude_cli'): backend-routed one-shot completion. Onlyclaude_cli(theclaude -pgateway) is wired today; Anthropic/OpenAI HTTP backends are a future add (the seam is in place).claude_textstays as the claude-cli shortcut.agent—dify_run(inputs, query, ...): shared client for a self-hosted Dify app (blocking). Creds (dify_url/dify_key) from per-service settings or args. Returns{connected, result|error}. Consolidates the hand-rolled Dify calls that lived in service route code.
Usage
import os
os.environ.setdefault('OMI_SERVICE_NS', 'clipboard')
from oh_my_common import get_setting, claude_text, resolve_openai_key, now_local
key, src = resolve_openai_key()
text = claude_text('Summarize: ...', model='sonnet')
Install
pip install oh-my-common # core (stdlib only)
pip install 'oh-my-common[flask,scheduler]' # + request_base_url + make_scheduler
Distribution into Docker services is TBD — see the migration plan. Options: publish to a registry, vendor into each monorepo, or a git dependency.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file oh_my_common-0.2.0.tar.gz.
File metadata
- Download URL: oh_my_common-0.2.0.tar.gz
- Upload date:
- Size: 8.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c048dca7dc20e4241b5929494fc2e8cac00a588f6502b9b6b25a7a8b2f74368a
|
|
| MD5 |
610fa09b11b6c8a139e2a4bec5af1ede
|
|
| BLAKE2b-256 |
f5d9be1f3b9b87ef356276883bc54706fd2e1081e557c91e2638a3913cb3a583
|
File details
Details for the file oh_my_common-0.2.0-py3-none-any.whl.
File metadata
- Download URL: oh_my_common-0.2.0-py3-none-any.whl
- Upload date:
- Size: 9.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0bb4334f8e4fc5a8061addb5ddb8ce1d29d4632fc305262b0ecfceec820eeed
|
|
| MD5 |
d8ef497330258eeaf46984660ad2b50e
|
|
| BLAKE2b-256 |
9a0cf49c9f694d1861d70eedf0b357140c0f17d0ef245e4fda53dbd3e2f7f991
|