facetted-interfaces/history/FIAM_v0.2_Draft6/tools/index_query.py
tegwick 1353267569 Establish FIAM repository governance baseline
Assistant: codex
Assistant-Model: gpt-5.6-luna
Assistant-Session: 01a087b0-7b1e-7531-8ef3-6525ebaf7ee7
2026-09-09 21:53:43 +02:00

33 lines
1.9 KiB
Python

from __future__ import annotations
import json
def zone_memberships_as_of(conn,member,at,zone_type=None):
# latest membership state per zone/member before time; exchange snapshots are append evidence,
# so membership exists if it has ever been asserted by the latest applicable source. For
# deployment-derived memberships this is tied to the entity version/identity tuple.
q='SELECT zone_id,zone_type,derived,MAX(snapshot_time) mt FROM zone_members WHERE member_id=? AND snapshot_time<=?'
p=[member,at]
if zone_type:q+=' AND zone_type=?';p.append(zone_type)
q+=' GROUP BY zone_id,zone_type,derived'
return [{'zone_id':r[0],'zone_type':r[1],'derived':bool(r[2])} for r in conn.execute(q,p).fetchall()]
def zones_by_type(conn,member,at):
out={}
for x in zone_memberships_as_of(conn,member,at):out.setdefault(x['zone_type'],[]).append(x['zone_id'])
for k in out:out[k]=sorted(set(out[k]))
return out
def entity_owner_as_of(conn,ref,at):
# entities are already working-set preferred; resources may still need owner projection.
r=conn.execute('SELECT kind,json,preferred_id FROM entity_versions WHERE entity_id=? AND snapshot_time<=? ORDER BY snapshot_time DESC LIMIT 1',(ref,at)).fetchone()
if not r:r=conn.execute('SELECT kind,json,preferred_id FROM entities WHERE entity_id=?',(ref,)).fetchone()
if not r:return ref
if r['kind']=='system-node':return r['preferred_id'] or ref
try:o=json.loads(r['json'])
except:return r['preferred_id'] or ref
if r['kind'] in ('information-resource','channel') and o.get('owner'):return o['owner']
return r['preferred_id'] or ref
def active_observation_scopes(conn,population_id,edge_key,at):
rows=conn.execute('SELECT DISTINCT observation_scope FROM topology_observation_intervals WHERE population_id=? AND edge_key=? AND valid_from<=? AND (closed_at IS NULL OR closed_at>?)',(population_id,edge_key,at,at)).fetchall()
return sorted({r[0] for r in rows})