magpie/scripts/migrate_sessions.py
Alan Weinstock e9b4cdd88e feat: link_url variants, team accounts, session layout, menagerie route (#18 #19)
#19 — link_url on campaign variants (migration 019)
- ADD COLUMN link_url TEXT on campaign_variants
- create_variant, upsert_variant, update_variant all carry link_url
- RedditClient.post() supports kind=link when link_url set + body empty
- RedditPostStrategy passes link_url from extra dict
- poster.py merges link_url from variant into extra (same as slug/tags)
- API VariantCreate/VariantUpdate schemas include link_url
- CampaignDetail: link_url field in Add Variant form with copy button;
  link_url shown in variant list with clickable link + copy button
- Variant button disabled if neither body nor link_url is set

#18 — Multi-user team accounts (migrations 020-022)
- 020: team_accounts table (display_name, platform, username, session_file)
- 021: opportunities.assigned_to + post_as FK → team_accounts
- 022: posts.posted_by_account_id FK → team_accounts
- Store: list/get/get_by_username/create_team_account, assign_opportunity
- API: GET/POST /api/v1/team; POST /api/v1/team/{id}/assign
- config.py: sessions_dir added; reddit_session_file now points to
  sessions/alan_reddit.json (backward compat path kept)
- scripts/migrate_sessions.py: one-shot move session.json →
  sessions/alan_reddit.json + creates placeholder files for future accounts
- manage.sh: build (VITE_BASE_URL=/magpie/ npm build), serve (static),
  migrate-sessions subcommands added; login updated to new session path
- Caddy: @magpie_no_session gate + handle /magpie/api* and /magpie*
  blocks added to menagerie.circuitforge.tech site block
2026-05-27 15:31:58 -07:00

53 lines
1.6 KiB
Python

#!/usr/bin/env python3
"""
One-time migration: moves the legacy session.json to the new sessions/ directory.
Safe to run multiple times (idempotent).
Usage: conda run -n cf python scripts/migrate_sessions.py
"""
from __future__ import annotations
import shutil
import sys
from pathlib import Path
DATA_DIR = Path.home() / ".local" / "share" / "magpie"
OLD_SESSION = DATA_DIR / "session.json"
SESSIONS_DIR = DATA_DIR / "sessions"
NEW_SESSION = SESSIONS_DIR / "alan_reddit.json"
def main() -> None:
SESSIONS_DIR.mkdir(parents=True, exist_ok=True)
print(f"Sessions directory: {SESSIONS_DIR}")
if NEW_SESSION.exists():
print(f" alan_reddit.json already exists — nothing to move")
elif OLD_SESSION.exists():
shutil.copy2(OLD_SESSION, NEW_SESSION)
print(f" Copied {OLD_SESSION}{NEW_SESSION}")
# Leave the original in place during rollout; remove manually once confirmed
print(f" NOTE: {OLD_SESSION} left in place. Remove manually after confirming.")
else:
print(f" No session.json found at {OLD_SESSION} — may need to run ./manage.sh login")
print("\nPlaceholder files created for future accounts (empty — fill in when ready):")
placeholders = [
"xander_reddit.json",
"neon_reddit.json",
"cf_reddit.json",
"cf_bluesky.json",
"cf_mastodon.json",
]
for name in placeholders:
path = SESSIONS_DIR / name
if not path.exists():
path.touch()
print(f" Created {path}")
else:
print(f" {name} already exists — skipping")
if __name__ == "__main__":
main()