{"id":50755601,"url":"https://github.com/sukramj/openccu-loom-types","last_synced_at":"2026-06-11T05:00:15.898Z","repository":{"id":360052283,"uuid":"1248428593","full_name":"SukramJ/openccu-loom-types","owner":"SukramJ","description":"Generated Pydantic v2 models and enum types for the openccu-loom REST + WebSocket contract","archived":false,"fork":false,"pushed_at":"2026-06-08T09:33:54.000Z","size":112,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-09T07:35:09.327Z","etag":null,"topics":["code-generation","home-assistant","homematic","homematicip","openapi","pydantic","python","rest-api","type-hints","websocket"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SukramJ.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-24T16:21:34.000Z","updated_at":"2026-06-07T18:21:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/SukramJ/openccu-loom-types","commit_stats":null,"previous_names":["sukramj/openccu-loom-types-py"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/SukramJ/openccu-loom-types","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SukramJ%2Fopenccu-loom-types","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SukramJ%2Fopenccu-loom-types/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SukramJ%2Fopenccu-loom-types/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SukramJ%2Fopenccu-loom-types/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SukramJ","download_url":"https://codeload.github.com/SukramJ/openccu-loom-types/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SukramJ%2Fopenccu-loom-types/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34183109,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["code-generation","home-assistant","homematic","homematicip","openapi","pydantic","python","rest-api","type-hints","websocket"],"created_at":"2026-06-11T05:00:14.076Z","updated_at":"2026-06-11T05:00:15.748Z","avatar_url":"https://github.com/SukramJ.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# openccu-loom-types-py\n\nGenerated Pydantic models + enum definitions for the openccu-loom\nREST + WebSocket contract. Sister-repo to the\n[openccu-loom daemon](https://github.com/SukramJ/openccu-loom);\npublishable as `openccu-loom-types` on PyPI.\n\n## What this package provides\n\n- `openccu_loom_types.enums` — every enum from the daemon's\n  `pkg/hmenum`. Each enum is a `str`-typed Python `Enum` whose values\n  match the wire strings the CCU emits. Source of truth:\n  `assets/schemas/enums.json` in the openccu-loom repo.\n- `openccu_loom_types.rest` — Pydantic models for the REST surface.\n  Generated from `assets/openapi.yaml` via `datamodel-code-generator`.\n- `openccu_loom_types.ws` — Pydantic models for the WebSocket\n  envelope + push payloads. Generated from the same OpenAPI document\n  (the WS envelope schemas live in `components.schemas` per ADR-0020).\n\n## Why this exists (asks.md C1 + C3)\n\nHigher-level clients (`py-openccu-loom-client`, the future\nhomematicip_local refactor) need stable typed bindings against the\ndaemon. Without a published types package each consumer would\nduplicate the model code and drift away from the daemon's wire\ncontract. This package is the single import every Python consumer\nshares — version-pinned and CI-rebuilt on every openccu-loom release.\n\n## Regeneration workflow\n\nSet `OPENCCU_LOOM_REPO` to a local checkout of the daemon repo\n(default: `../openccu-loom`):\n\n```sh\n# Step 1 — make sure the daemon repo's schema export is fresh:\nmake -C \"$OPENCCU_LOOM_REPO\" export-schemas\n\n# Step 2 — regenerate this package's models:\nmake generate\n```\n\nThe two-step split keeps the daemon repo authoritative; this package\nnever re-parses Go source.\n\n### Tooling required\n\n- Python \u003e= 3.11\n- `datamodel-code-generator` \u003e= 0.25 (for REST + WS Pydantic models)\n\nInstall both with `pip install -e '.[dev]'`.\n\n## Versioning\n\nThe package version (`pyproject.toml`) tracks the daemon's\n`api_version` (currently `1.0.0`). Minor bumps add fields without\nbreaking existing consumers; major bumps remove or rename payload\nfields, scopes, or capabilities — see ADR-0020 in the daemon repo\nfor the contract evolution policy.\n\n## What this package does NOT contain\n\n- HTTP / WebSocket transport — see `py-openccu-loom-client`\n  (when published) for the higher-level client.\n- Any business logic — types only.\n- Async helpers — types are framework-neutral.\n\n## License\n\nMIT. See [LICENSE](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsukramj%2Fopenccu-loom-types","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsukramj%2Fopenccu-loom-types","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsukramj%2Fopenccu-loom-types/lists"}