angee.platform.schema
GraphQL introspection surface for the Angee platform console.
One read-only console query reflects the composed runtime back to platform admins: platformExplorer walks the Django app registry for the composed addons, their concrete models, fields, and relation edges, and rolls up each addon's import-ledger count. The ledger listing itself is owned by the resources addon (resources.resourceLedger), which contributes its own section into the platform console. Reads here are gated on read over the table-less platform/explorer anchor (permissions.zed). The platform addon owns no data — it asks the owners (the app registry for schema shape, the resource ledger for the per-addon count) and projects their answers.
PlatformField
@strawberry.type
class PlatformField()One model field projected for the explorer.
PlatformModel
@strawberry.type
class PlatformModel()One concrete runtime model and its fields.
PlatformEdge
@strawberry.type
class PlatformEdge()A directed relation between two shown models.
PlatformAddon
@strawberry.type
class PlatformAddon()One composed addon with its model/field/resource rollups.
PlatformExplorerData
@strawberry.type
class PlatformExplorerData()The whole composed surface: addons, models, and relation edges.
PlatformQuery
@strawberry.type
class PlatformQuery()Read-only platform console introspection queries.
platform_explorer
@strawberry.field
def platform_explorer() -> PlatformExplorerData | NoneReturn the composed addons/models/edges for platform readers, else None.
platform_can_read
def platform_can_read() -> boolReturn whether the current actor may read the platform surface.
Shared with the resources addon, which gates its contributed ledger listing on the same platform-admin read so the whole console resolves for one role.
AddonNode
@strawberry_django.type(_Addon)
class AddonNode()Read-only projection of one composed/available addon (the reflection table).
Identity is the addon name (e.g. angee.iam) — the stable key the whole console cross-links on (the model/field pages filter by it) — not a sqid. The table is system-synced (post_migrate), so this resource is read-only.
id
@strawberry_django.field
def id() -> strReturn the addon name as the row identity.
PlatformModelRow
class PlatformModelRow(BaseModel)Computed platform-explorer model row (no Django table behind it).
The row-shape SSOT for the platform.Model Hasura resource. The strawberry PlatformModel keys by label and carries no id; the row adds an explicit id (= label) for by-pk addressing. The nested fields list stays a detail concern (it is the platform.Field resource, flattened), so it is dropped here in favour of the field_count/relation_count rollup.
PlatformFieldRow
class PlatformFieldRow(BaseModel)Computed platform-explorer field row, flattened across all models.
The row-shape SSOT for the platform.Field Hasura resource. The strawberry PlatformField is nested under one model; this row flattens every model's fields into one collection, carrying the owning model label and addon context plus a synthetic id (f"{model}.{name}") for by-pk addressing.
AddonInstallMutation
@strawberry.type
class AddonInstallMutation()Install/uninstall an addon by editing settings.yaml's INSTALLED_APPS.
Thin admin-gated edge over :class:~angee.platform.models.AddonManager, which owns the whole flow — validate the target, edit the one install source (settings.yaml) through the :class:~angee.platform.installer.AddonInstaller, refuse a forced (depended-on) addon, and re-run the reflection reconcile so the board shows the new pending state at once (the addon itself composes on the next angee dev boot). These resolvers only dispatch and relay the result's ok/summary.
install
@strawberry.mutation(permission_classes=_ADMIN_PERMISSION_CLASSES)
def install(addon: str) -> ActionResultInstall an addon root and report the manager's outcome.
uninstall
@strawberry.mutation(permission_classes=_ADMIN_PERMISSION_CLASSES)
def uninstall(addon: str) -> ActionResultUninstall an addon root and report the manager's outcome.
schemas
GraphQL contributions installed by the platform addon (console surface).