Skip to main content

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, the provider_tokens cache (get/set/clear_cached_token), and resolve_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.
  • tzlocal_tz()/now_local()/today_local() from OMI_TZ_OFFSET (hours, default +8).
  • urlsrequest_base_url() (honors X-Forwarded-Proto/Host). Imports flask lazily.
  • schedulermake_scheduler(ENABLED_ENV) → a guarded BackgroundScheduler (returns None when ENABLED_ENV=0, so extra gunicorn workers don't double-run). Imports apscheduler lazily.
  • llmcomplete(prompt, model='sonnet', backend='claude_cli'): backend-routed one-shot completion. Only claude_cli (the claude -p gateway) is wired today; Anthropic/OpenAI HTTP backends are a future add (the seam is in place). claude_text stays as the claude-cli shortcut.
  • agentdify_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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oh_my_common-0.2.0.tar.gz (8.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

oh_my_common-0.2.0-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

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

Hashes for oh_my_common-0.2.0.tar.gz
Algorithm Hash digest
SHA256 c048dca7dc20e4241b5929494fc2e8cac00a588f6502b9b6b25a7a8b2f74368a
MD5 610fa09b11b6c8a139e2a4bec5af1ede
BLAKE2b-256 f5d9be1f3b9b87ef356276883bc54706fd2e1081e557c91e2638a3913cb3a583

See more details on using hashes here.

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

Hashes for oh_my_common-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b0bb4334f8e4fc5a8061addb5ddb8ce1d29d4632fc305262b0ecfceec820eeed
MD5 d8ef497330258eeaf46984660ad2b50e
BLAKE2b-256 9a0cf49c9f694d1861d70eedf0b357140c0f17d0ef245e4fda53dbd3e2f7f991

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page