from __future__ import annotations import json import tomllib import typing import httpx def main() -> None: with open('config.toml', 'rb') as f: config = tomllib.load(f) fio_api_key = config['fio_api_key'] with open('www/data/knownCompanies.json', 'r') as f: companies: dict = json.load(f) usernames = {co['Username'].casefold(): co_id for co_id, co in companies.items() if co['Username'] is not None} all_companies: list[FIOCompany] = httpx.get('https://rest.fnar.net/company/all', headers={'Authorization': fio_api_key}).raise_for_status().json() all_companies.sort(key=lambda co: co['Timestamp']) # duplicate usernames appear due to COLIQs try: for company in all_companies: username = company['UserName'] if username is None: print(company['CompanyId'], 'has no username:', company) continue old_co_id = usernames.get(username.casefold()) if old_co_id is not None and old_co_id != company['CompanyId']: print(username, 'previously known as', old_co_id) companies.pop(old_co_id, None) known_company = {'Username': username} if corp := company.get('CorporationCode'): known_company['Corporation'] = corp if known_company == companies.get(company['CompanyId']): print(username, 'had no change') else: print(known_company) companies[company['CompanyId']] = known_company finally: with open('www/data/knownCompanies.json', 'w') as f: json.dump(companies, f) class FIOCompany(typing.TypedDict): CompanyId: str UserName: str | None CorporationCode: str | None Timestamp: str if __name__ == '__main__': main()