update_companies.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from __future__ import annotations
  2. import json
  3. import tomllib
  4. import httpx
  5. def main() -> None:
  6. with open('config.toml', 'rb') as f:
  7. config = tomllib.load(f)
  8. fio_api_key = config['fio_api_key']
  9. with open('www/data/knownCompanies.json', 'r') as f:
  10. companies = json.load(f)
  11. usernames = frozenset(v['Username'] for v in companies.values())
  12. all_users: frozenset[str] = frozenset(
  13. httpx.get('https://rest.fnar.net/user/allusers', headers={'Authorization': fio_api_key}).raise_for_status().json())
  14. new_users = all_users - usernames
  15. print(len(new_users), 'new users')
  16. try:
  17. for username in new_users:
  18. response = httpx.get('https://rest.fnar.net/user/' + username)
  19. if response.status_code in (204, 404):
  20. print(username, 'not found')
  21. continue
  22. response.raise_for_status()
  23. fio_user = response.json()
  24. assert username.casefold() == fio_user['UserName'].casefold(), f'{username} != {fio_user["UserName"]}'
  25. known_user = {'Username': username, 'CompanyId': fio_user['CompanyId']}
  26. if corp := fio_user.get('CorporationCode'):
  27. known_user['Corporation'] = corp
  28. print(known_user)
  29. companies[fio_user['CompanyId']] = known_user
  30. finally:
  31. with open('www/data/knownCompanies.json', 'w') as f:
  32. json.dump(companies, f)
  33. if __name__ == '__main__':
  34. main()