"""Internal demonstration: deterministic ordering of replayed events.""" from datetime import datetime, timezone def normalize_events(events): seen = {} for event in events: if not isinstance(event, dict): raise ValueError('Each event must be an object') key, at, kind = (event.get(k) for k in ('id','at','type')) if not all(isinstance(v,str) and v.strip() for v in (key,at,kind)): raise ValueError('id, at and type must be non-empty strings') try: stamp = datetime.fromisoformat(at.replace('Z','+00:00')) if stamp.tzinfo is None or stamp.utcoffset() is None: raise ValueError('A timezone offset is required') stamp = stamp.astimezone(timezone.utc) except (ValueError, OverflowError) as error: raise ValueError('Invalid timestamp') from error value = (stamp, kind) if key in seen and seen[key] != value: raise ValueError('Conflicting duplicate id: ' + key) seen[key] = value return [{'id': key, 'at': stamp.isoformat(timespec='microseconds').replace('+00:00','Z'), 'type': kind} for key, (stamp, kind) in sorted(seen.items(), key=lambda pair:(pair[1][0],pair[0]))]