AFFECTOR / source /engine /session_identity.py
will-taggart's picture
Stage standalone documentation, technical paper, and source for signed release
f592f80 verified
Raw History Blame Contribute Delete
1.41 kB
"""Stable analysis identities and distinct, readable save names."""
from datetime import datetime, timezone
import re
import uuid
def timestamp():
return datetime.now(timezone.utc).isoformat()
def session_identity(title, saved=None):
saved = saved if isinstance(saved, dict) else {}
identity = saved.get('session_id')
try:
identity = str(uuid.UUID(identity))
except (ValueError, TypeError, AttributeError):
identity = str(uuid.uuid4())
created = saved.get('created_at')
try:
date = datetime.fromisoformat(created)
if date.tzinfo is None: date = date.replace(tzinfo=timezone.utc)
except (ValueError, TypeError):
date = datetime.now(timezone.utc)
created = date.isoformat()
name = saved.get('session_name')
if not isinstance(name, str) or not name.strip():
title = ' '.join(str(title).split())[:70] or 'Untitled text'
name = f"{title} — {date.astimezone().strftime('%Y-%m-%d %H:%M:%S %Z')} — {identity[:8]}"
return {'session_id': identity, 'session_name': name, 'created_at': created}
def session_filename(identity, saved_at):
name = re.sub(r'[^\w .-]+', '-', identity['session_name']).strip(' .-').encode('utf-8')[:140].decode('utf-8', errors='ignore')
date = datetime.fromisoformat(saved_at).astimezone()
return f"{name} — saved {date.strftime('%Y-%m-%d_%H-%M-%S-%f%z')}.json"