| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- import sys
- import typing
- import httpx
- def main():
- from_jwt, empire_uuid, to_jwt = sys.argv[1:]
- from_headers = {'Authorization': 'Bearer ' + from_jwt}
- with httpx.Client(headers=from_headers) as from_client:
- empire: typing.Sequence[EmpirePlan] = from_client.get('https://api.prunplanner.org/baseplanner/empire/' + empire_uuid).raise_for_status().json()
- shared: typing.Mapping[str, str] = {s['plan_uuid']: s['shared_uuid']
- for s in from_client.get('https://api.prunplanner.org/shared/list').raise_for_status().json()}
- for plan in empire:
- if plan['uuid'] not in shared:
- print('sharing', plan['uuid'], plan['name'])
- from_client.put('https://api.prunplanner.org/shared/baseplanner/' + plan['uuid']).raise_for_status()
- # refresh shared UUIDs
- shared: typing.Mapping[str, str] = {s['plan_uuid']: s['shared_uuid']
- for s in from_client.get('https://api.prunplanner.org/shared/list').raise_for_status().json()}
- to_client = httpx.Client(headers={'Authorization': 'Bearer ' + to_jwt})
- for plan in empire:
- print('cloning', plan['uuid'], plan['name'])
- shared_uuid = shared[plan['uuid']]
- to_client.put(f'https://api.prunplanner.org/shared/baseplanner/{shared_uuid}/clone').raise_for_status()
- cloned_plan, = (p for p in to_client.get('https://api.prunplanner.org/baseplanner/').raise_for_status().json() if p['name'].startswith('(Shared) '))
- rename_plan(to_client, cloned_plan['uuid'], plan['name'])
- def rename_plan(client: httpx.Client, uuid: str, new_name: str) -> None:
- plan = client.get('https://api.prunplanner.org/baseplanner/' + uuid).raise_for_status().json()
- plan['name'] = new_name
- plan.update(plan.pop('baseplanner_data'))
- del plan['empires']
- client.patch('https://api.prunplanner.org/baseplanner/' + uuid, json=plan).raise_for_status()
- class EmpirePlan(typing.TypedDict):
- uuid: str
- name: str
- if __name__ == '__main__':
- main()
|