copy_empire.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import sys
  2. import typing
  3. import httpx
  4. def main():
  5. from_jwt, empire_uuid, to_jwt = sys.argv[1:]
  6. from_headers = {'Authorization': 'Bearer ' + from_jwt}
  7. with httpx.Client(headers=from_headers) as from_client:
  8. empire: typing.Sequence[EmpirePlan] = from_client.get('https://api.prunplanner.org/baseplanner/empire/' + empire_uuid).raise_for_status().json()
  9. shared: typing.Mapping[str, str] = {s['plan_uuid']: s['shared_uuid']
  10. for s in from_client.get('https://api.prunplanner.org/shared/list').raise_for_status().json()}
  11. for plan in empire:
  12. if plan['uuid'] not in shared:
  13. print('sharing', plan['uuid'], plan['name'])
  14. from_client.put('https://api.prunplanner.org/shared/baseplanner/' + plan['uuid']).raise_for_status()
  15. # refresh shared UUIDs
  16. shared: typing.Mapping[str, str] = {s['plan_uuid']: s['shared_uuid']
  17. for s in from_client.get('https://api.prunplanner.org/shared/list').raise_for_status().json()}
  18. to_client = httpx.Client(headers={'Authorization': 'Bearer ' + to_jwt})
  19. for plan in empire:
  20. print('cloning', plan['uuid'], plan['name'])
  21. shared_uuid = shared[plan['uuid']]
  22. to_client.put(f'https://api.prunplanner.org/shared/baseplanner/{shared_uuid}/clone').raise_for_status()
  23. cloned_plan, = (p for p in to_client.get('https://api.prunplanner.org/baseplanner/').raise_for_status().json() if p['name'].startswith('(Shared) '))
  24. rename_plan(to_client, cloned_plan['uuid'], plan['name'])
  25. def rename_plan(client: httpx.Client, uuid: str, new_name: str) -> None:
  26. plan = client.get('https://api.prunplanner.org/baseplanner/' + uuid).raise_for_status().json()
  27. plan['name'] = new_name
  28. plan.update(plan.pop('baseplanner_data'))
  29. del plan['empires']
  30. client.patch('https://api.prunplanner.org/baseplanner/' + uuid, json=plan).raise_for_status()
  31. class EmpirePlan(typing.TypedDict):
  32. uuid: str
  33. name: str
  34. if __name__ == '__main__':
  35. main()