Spaces:
Runtime error
Runtime error
| # if __package__ is None and __name__ == "__main__": | |
| # from os.path import sep | |
| # *_, __package__, _ = __file__.split(sep) | |
| from box.timer import Timer # Single Use | |
| timer = Timer() | |
| from box.color import Code # Multi-Use | |
| from box.error import handler # Single Use | |
| # from .ic import ic, ib # Multi-Use, import time: 70ms - 110ms | |
| from box.reltools import rel2abs, read, write | |
| from box.db import db_init | |
| DATA_PATH = rel2abs("data/countries.json") | |
| DB_PATH = rel2abs("data/download_epochs.db") | |
| def init(): | |
| import os | |
| os.makedirs(rel2abs("data"), exist_ok=True) | |
| if not os.path.exists(DATA_PATH): | |
| write({}, DATA_PATH) | |
| connection = db_init(DB_PATH) | |
| cursor = connection.cursor() | |
| cursor.execute("CREATE TABLE IF NOT EXISTS download_epoch (name TEXT, epoch INTEGER);") | |
| connection.commit() | |
| connection.close() | |
| def get_countries(): | |
| init() | |
| import time | |
| connection = db_init(DB_PATH) | |
| cursor = connection.cursor() | |
| download_epoch = cursor.execute("SELECT epoch FROM download_epoch WHERE name = 'countries'").fetchone() | |
| current_epoch = int(time.time()) | |
| one_month_in_seconds = 60 * 60 * 24 * 30 | |
| use_cache = download_epoch is not None and current_epoch - download_epoch[0] < one_month_in_seconds | |
| if __name__ == "__main__": | |
| print(f"{use_cache = }") | |
| if use_cache: | |
| table = read(DATA_PATH) | |
| return table | |
| from box.get import aget | |
| import json | |
| urls = ["https://raw.githubusercontent.com/samayo/country-json/master/src/country-by-population.json", | |
| "https://raw.githubusercontent.com/samayo/country-json/master/src/country-by-capital-city.json"] | |
| responses = aget(urls, cache=False) | |
| dictionaries = [ json.loads(response) for response in responses ] | |
| dicts_1, dicts_2 = dictionaries | |
| # dicts_1: [ { "country": ..., "population": ... } ] | |
| # dicts_2: [ { "country": ..., "city": ... } ] | |
| # dicts_3: [ { "country": ..., "population": ..., "city": ... } ] | |
| dicts_3 = [] | |
| for dict_1 in dicts_1: | |
| for dict_2 in dicts_2: | |
| if dict_1["country"] == dict_2["country"]: | |
| dict_3 = dict_1.copy() | |
| dict_3.update(dict_2) | |
| dicts_3.append(dict_3) | |
| break | |
| # sort on population | |
| dicts_3.sort(key=lambda dict_3: dict_3["population"], reverse=True) | |
| top_20 = dicts_3[:20] | |
| write(top_20, DATA_PATH) | |
| cursor.execute("INSERT OR REPLACE INTO download_epoch (name, epoch) VALUES ('countries', ?);", (current_epoch,)) | |
| connection.commit() | |
| return top_20 | |
| def main(): | |
| from box.ic import ic | |
| Countries = get_countries() | |
| ic(Countries) | |
| from rich import print, inspect | |
| from box.ic import ib | |
| from datetime import datetime | |
| # ib(datetime) | |
| # inspect(datetime | |
| Countries = get_countries() | |
| if __name__ == "__main__": | |
| with handler(): | |
| main() | |