Custom_graph / utils.py
Dingyi6's picture
Upload utils.py
24ba319
import traceback
from typing import Any
def print_with_line_number(message):
line_number = traceback.extract_stack()[-2][1]
line_length = 30 # Length of cutting line
print(f"\033[92mLine {line_number}\033[0m \033[92m{'=' * line_length}\033[0m")
print(f"{message}")
class HttpResponse:
def __init__(self, status: int, data: Any):
self.status = status
self.data = data
# async def get_url(
# url: str, type: Literal["string", "bytes", "json"] = "string"
# ) -> HttpResponse:
# """
# An async wrapper function for http requests that works in both regular Python and
# Pyodide.
# In Pyodide, it uses the pyodide.http.pyfetch() function, which is a wrapper for the
# JavaScript fetch() function. pyfetch() is asynchronous, so this whole function must
# also be async.
# In regular Python, it uses the urllib.request.urlopen() function.
# Args:
# url: The URL to download.
# type: How to parse the content. If "string", it returns the response as a
# string. If "bytes", it returns the response as a bytes object. If "json", it
# parses the reponse as JSON, then converts it to a Python object, usually a
# dictionary or list.
# Returns:
# A HttpResponse object
# """
# import sys
# if "pyodide" in sys.modules:
# import pyodide.http
# response = await pyodide.http.pyfetch(url)
# if type == "json":
# # .json() parses the response as JSON and converts to dictionary.
# data = await response.json()
# elif type == "string":
# # .string() returns the response as a string.
# data = await response.string()
# elif type == "bytes":
# # .bytes() returns the response as a byte object.
# data = await response.bytes()
# return HttpResponse(response.status, data)
# else:
# import urllib.request
# response = urllib.request.urlopen(url)
# if type == "json":
# data = json.loads(response.read().decode("utf-8"))
# elif type == "string":
# data = response.read().decode("utf-8")
# elif type == "bytes":
# data = response.read()
# return HttpResponse(response.status, data)
datafields = {
"cloudBase": "cloudBase(km)",
"cloudCeiling": "cloudCeiling(km)",
"dewPoint": "dewPoint(℃)",
"evapotranspiration": "evapotranspiration(mm)",
"freezingRainIntensity": "freezingRainIntensity(mm/hr)",
"humidity": "humidity(%)",
"iceAccumulation": "iceAccumulation(mm)",
"pressureSurfaceLevel": "pressureSurfaceLevel(hPa)",
"rainAccumulation": "rainAccumulation(mm)",
"rainIntensity": "rainIntensity(mm/hr)",
"sleetAccumulation": "sleetAccumulation(mm)",
"sleetIntensity": "sleetIntensity(mm/hr)",
"snowAccumulation": "snowAccumulation(mm)",
"snowDepth": "snowDepth(cm)",
"snowIntensity": "snowIntensity(mm/hr)",
"temperature": "temperature(℃)",
"temperatureApparent": "temperatureApparent(℃)",
"uvHealthConcern": "uvHealthConcern",
"uvIndex": "uvIndex",
"visibility": "visibility(km)",
"windDirection": "windDirection(°)",
"windGust": "windGust(m/s)",
"windSpeed": "windSpeed(m/s)"
}
weatherCode = {
"0": "Unknown",
"1000": "Clear, Sunny",
"1100": "Mostly Clear",
"1101": "Partly Cloudy",
"1102": "Mostly Cloudy",
"1001": "Cloudy",
"2000": "Fog",
"2100": "Light Fog",
"4000": "Drizzle",
"4001": "Rain",
"4200": "Light Rain",
"4201": "Heavy Rain",
"5000": "Snow",
"5001": "Flurries",
"5100": "Light Snow",
"5101": "Heavy Snow",
"6000": "Freezing Drizzle",
"6001": "Freezing Rain",
"6200": "Light Freezing Rain",
"6201": "Heavy Freezing Rain",
"7000": "Ice Pellets",
"7101": "Heavy Ice Pellets",
"7102": "Light Ice Pellets",
"8000": "Thunderstorm"
},
weatherCodeFullDay = {
"0": "Unknown",
"1000": "Clear, Sunny",
"1100": "Mostly Clear",
"1101": "Partly Cloudy",
"1102": "Mostly Cloudy",
"1001": "Cloudy",
"1103": "Partly Cloudy and Mostly Clear",
"2100": "Light Fog",
"2101": "Mostly Clear and Light Fog",
"2102": "Partly Cloudy and Light Fog",
"2103": "Mostly Cloudy and Light Fog",
"2106": "Mostly Clear and Fog",
"2107": "Partly Cloudy and Fog",
"2108": "Mostly Cloudy and Fog",
"2000": "Fog",
"4204": "Partly Cloudy and Drizzle",
"4203": "Mostly Clear and Drizzle",
"4205": "Mostly Cloudy and Drizzle",
"4000": "Drizzle",
"4200": "Light Rain",
"4213": "Mostly Clear and Light Rain",
"4214": "Partly Cloudy and Light Rain",
"4215": "Mostly Cloudy and Light Rain",
"4209": "Mostly Clear and Rain",
"4208": "Partly Cloudy and Rain",
"4210": "Mostly Cloudy and Rain",
"4001": "Rain",
"4211": "Mostly Clear and Heavy Rain",
"4202": "Partly Cloudy and Heavy Rain",
"4212": "Mostly Cloudy and Heavy Rain",
"4201": "Heavy Rain",
"5115": "Mostly Clear and Flurries",
"5116": "Partly Cloudy and Flurries",
"5117": "Mostly Cloudy and Flurries",
"5001": "Flurries",
"5100": "Light Snow",
"5102": "Mostly Clear and Light Snow",
"5103": "Partly Cloudy and Light Snow",
"5104": "Mostly Cloudy and Light Snow",
"5122": "Drizzle and Light Snow",
"5105": "Mostly Clear and Snow",
"5106": "Partly Cloudy and Snow",
"5107": "Mostly Cloudy and Snow",
"5000": "Snow",
"5101": "Heavy Snow",
"5119": "Mostly Clear and Heavy Snow",
"5120": "Partly Cloudy and Heavy Snow",
"5121": "Mostly Cloudy and Heavy Snow",
"5110": "Drizzle and Snow",
"5108": "Rain and Snow",
"5114": "Snow and Freezing Rain",
"5112": "Snow and Ice Pellets",
"6000": "Freezing Drizzle",
"6003": "Mostly Clear and Freezing drizzle",
"6002": "Partly Cloudy and Freezing drizzle",
"6004": "Mostly Cloudy and Freezing drizzle",
"6204": "Drizzle and Freezing Drizzle",
"6206": "Light Rain and Freezing Drizzle",
"6205": "Mostly Clear and Light Freezing Rain",
"6203": "Partly Cloudy and Light Freezing Rain",
"6209": "Mostly Cloudy and Light Freezing Rain",
"6200": "Light Freezing Rain",
"6213": "Mostly Clear and Freezing Rain",
"6214": "Partly Cloudy and Freezing Rain",
"6215": "Mostly Cloudy and Freezing Rain",
"6001": "Freezing Rain",
"6212": "Drizzle and Freezing Rain",
"6220": "Light Rain and Freezing Rain",
"6222": "Rain and Freezing Rain",
"6207": "Mostly Clear and Heavy Freezing Rain",
"6202": "Partly Cloudy and Heavy Freezing Rain",
"6208": "Mostly Cloudy and Heavy Freezing Rain",
"6201": "Heavy Freezing Rain",
"7110": "Mostly Clear and Light Ice Pellets",
"7111": "Partly Cloudy and Light Ice Pellets",
"7112": "Mostly Cloudy and Light Ice Pellets",
"7102": "Light Ice Pellets",
"7108": "Mostly Clear and Ice Pellets",
"7107": "Partly Cloudy and Ice Pellets",
"7109": "Mostly Cloudy and Ice Pellets",
"7000": "Ice Pellets",
"7105": "Drizzle and Ice Pellets",
"7106": "Freezing Rain and Ice Pellets",
"7115": "Light Rain and Ice Pellets",
"7117": "Rain and Ice Pellets",
"7103": "Freezing Rain and Heavy Ice Pellets",
"7113": "Mostly Clear and Heavy Ice Pellets",
"7114": "Partly Cloudy and Heavy Ice Pellets",
"7116": "Mostly Cloudy and Heavy Ice Pellets",
"7101": "Heavy Ice Pellets",
"8001": "Mostly Clear and Thunderstorm",
"8003": "Partly Cloudy and Thunderstorm",
"8002": "Mostly Cloudy and Thunderstorm",
"8000": "Thunderstorm"
},
weatherCodeDay = {
"0": "Unknown",
"10000": "Clear, Sunny",
"11000": "Mostly Clear",
"11010": "Partly Cloudy",
"11020": "Mostly Cloudy",
"10010": "Cloudy",
"11030": "Partly Cloudy and Mostly Clear",
"21000": "Light Fog",
"21010": "Mostly Clear and Light Fog",
"21020": "Partly Cloudy and Light Fog",
"21030": "Mostly Cloudy and Light Fog",
"21060": "Mostly Clear and Fog",
"21070": "Partly Cloudy and Fog",
"21080": "Mostly Cloudy and Fog",
"20000": "Fog",
"42040": "Partly Cloudy and Drizzle",
"42030": "Mostly Clear and Drizzle",
"42050": "Mostly Cloudy and Drizzle",
"40000": "Drizzle",
"42000": "Light Rain",
"42130": "Mostly Clear and Light Rain",
"42140": "Partly Cloudy and Light Rain",
"42150": "Mostly Cloudy and Light Rain",
"42090": "Mostly Clear and Rain",
"42080": "Partly Cloudy and Rain",
"42100": "Mostly Cloudy and Rain",
"40010": "Rain",
"42110": "Mostly Clear and Heavy Rain",
"42020": "Partly Cloudy and Heavy Rain",
"42120": "Mostly Cloudy and Heavy Rain",
"42010": "Heavy Rain",
"51150": "Mostly Clear and Flurries",
"51160": "Partly Cloudy and Flurries",
"51170": "Mostly Cloudy and Flurries",
"50010": "Flurries",
"51000": "Light Snow",
"51020": "Mostly Clear and Light Snow",
"51030": "Partly Cloudy and Light Snow",
"51040": "Mostly Cloudy and Light Snow",
"51220": "Drizzle and Light Snow",
"51050": "Mostly Clear and Snow",
"51060": "Partly Cloudy and Snow",
"51070": "Mostly Cloudy and Snow",
"50000": "Snow",
"51010": "Heavy Snow",
"51190": "Mostly Clear and Heavy Snow",
"51200": "Partly Cloudy and Heavy Snow",
"51210": "Mostly Cloudy and Heavy Snow",
"51100": "Drizzle and Snow",
"51080": "Rain and Snow",
"51140": "Snow and Freezing Rain",
"51120": "Snow and Ice Pellets",
"60000": "Freezing Drizzle",
"60030": "Mostly Clear and Freezing drizzle",
"60020": "Partly Cloudy and Freezing drizzle",
"60040": "Mostly Cloudy and Freezing drizzle",
"62040": "Drizzle and Freezing Drizzle",
"62060": "Light Rain and Freezing Drizzle",
"62050": "Mostly Clear and Light Freezing Rain",
"62030": "Partly Cloudy and Light Freezing Rain",
"62090": "Mostly Cloudy and Light Freezing Rain",
"62000": "Light Freezing Rain",
"62130": "Mostly Clear and Freezing Rain",
"62140": "Partly Cloudy and Freezing Rain",
"62150": "Mostly Cloudy and Freezing Rain",
"60010": "Freezing Rain",
"62120": "Drizzle and Freezing Rain",
"62200": "Light Rain and Freezing Rain",
"62220": "Rain and Freezing Rain",
"62070": "Mostly Clear and Heavy Freezing Rain",
"62020": "Partly Cloudy and Heavy Freezing Rain",
"62080": "Mostly Cloudy and Heavy Freezing Rain",
"62010": "Heavy Freezing Rain",
"71100": "Mostly Clear and Light Ice Pellets",
"71110": "Partly Cloudy and Light Ice Pellets",
"71120": "Mostly Cloudy and Light Ice Pellets",
"71020": "Light Ice Pellets",
"71080": "Mostly Clear and Ice Pellets",
"71070": "Partly Cloudy and Ice Pellets",
"71090": "Mostly Cloudy and Ice Pellets",
"70000": "Ice Pellets",
"71050": "Drizzle and Ice Pellets",
"71060": "Freezing Rain and Ice Pellets",
"71150": "Light Rain and Ice Pellets",
"71170": "Rain and Ice Pellets",
"71030": "Freezing Rain and Heavy Ice Pellets",
"71130": "Mostly Clear and Heavy Ice Pellets",
"71140": "Partly Cloudy and Heavy Ice Pellets",
"71160": "Mostly Cloudy and Heavy Ice Pellets",
"71010": "Heavy Ice Pellets",
"80010": "Mostly Clear and Thunderstorm",
"80030": "Partly Cloudy and Thunderstorm",
"80020": "Mostly Cloudy and Thunderstorm",
"80000": "Thunderstorm"
},
weatherCodeNight = {
"0": "Unknown",
"10001": "Clear",
"11001": "Mostly Clear",
"11011": "Partly Cloudy",
"11021": "Mostly Cloudy",
"10011": "Cloudy",
"11031": "Partly Cloudy and Mostly Clear",
"21001": "Light Fog",
"21011": "Mostly Clear and Light Fog",
"21021": "Partly Cloudy and Light Fog",
"21031": "Mostly Cloudy and Light Fog",
"21061": "Mostly Clear and Fog",
"21071": "Partly Cloudy and Fog",
"21081": "Mostly Cloudy and Fog",
"20001": "Fog",
"42041": "Partly Cloudy and Drizzle",
"42031": "Mostly Clear and Drizzle",
"42051": "Mostly Cloudy and Drizzle",
"40001": "Drizzle",
"42001": "Light Rain",
"42131": "Mostly Clear and Light Rain",
"42141": "Partly Cloudy and Light Rain",
"42151": "Mostly Cloudy and Light Rain",
"42091": "Mostly Clear and Rain",
"42081": "Partly Cloudy and Rain",
"42101": "Mostly Cloudy and Rain",
"40011": "Rain",
"42111": "Mostly Clear and Heavy Rain",
"42021": "Partly Cloudy and Heavy Rain",
"42121": "Mostly Cloudy and Heavy Rain",
"42011": "Heavy Rain",
"51151": "Mostly Clear and Flurries",
"51161": "Partly Cloudy and Flurries",
"51171": "Mostly Cloudy and Flurries",
"50011": "Flurries",
"51001": "Light Snow",
"51021": "Mostly Clear and Light Snow",
"51031": "Partly Cloudy and Light Snow",
"51041": "Mostly Cloudy and Light Snow",
"51221": "Drizzle and Light Snow",
"51051": "Mostly Clear and Snow",
"51061": "Partly Cloudy and Snow",
"51071": "Mostly Cloudy and Snow",
"50001": "Snow",
"51011": "Heavy Snow",
"51191": "Mostly Clear and Heavy Snow",
"51201": "Partly Cloudy and Heavy Snow",
"51211": "Mostly Cloudy and Heavy Snow",
"51101": "Drizzle and Snow",
"51081": "Rain and Snow",
"51141": "Snow and Freezing Rain",
"51121": "Snow and Ice Pellets",
"60001": "Freezing Drizzle",
"60031": "Mostly Clear and Freezing drizzle",
"60021": "Partly Cloudy and Freezing drizzle",
"60041": "Mostly Cloudy and Freezing drizzle",
"62041": "Drizzle and Freezing Drizzle",
"62061": "Light Rain and Freezing Drizzle",
"62051": "Mostly Clear and Light Freezing Rain",
"62031": "Partly cloudy and Light Freezing Rain",
"62091": "Mostly Cloudy and Light Freezing Rain",
"62001": "Light Freezing Rain",
"62131": "Mostly Clear and Freezing Rain",
"62141": "Partly Cloudy and Freezing Rain",
"62151": "Mostly Cloudy and Freezing Rain",
"60011": "Freezing Rain",
"62121": "Drizzle and Freezing Rain",
"62201": "Light Rain and Freezing Rain",
"62221": "Rain and Freezing Rain",
"62071": "Mostly Clear and Heavy Freezing Rain",
"62021": "Partly Cloudy and Heavy Freezing Rain",
"62081": "Mostly Cloudy and Heavy Freezing Rain",
"62011": "Heavy Freezing Rain",
"71101": "Mostly Clear and Light Ice Pellets",
"71111": "Partly Cloudy and Light Ice Pellets",
"71121": "Mostly Cloudy and Light Ice Pellets",
"71021": "Light Ice Pellets",
"71081": "Mostly Clear and Ice Pellets",
"71071": "Partly Cloudy and Ice Pellets",
"71091": "Mostly Cloudy and Ice Pellets",
"70001": "Ice Pellets",
"71051": "Drizzle and Ice Pellets",
"71061": "Freezing Rain and Ice Pellets",
"71151": "Light Rain and Ice Pellets",
"71171": "Rain and Ice Pellets",
"71031": "Freezing Rain and Heavy Ice Pellets",
"71131": "Mostly Clear and Heavy Ice Pellets",
"71141": "Partly Cloudy and Heavy Ice Pellets",
"71161": "Mostly Cloudy and Heavy Ice Pellets",
"71011": "Heavy Ice Pellets",
"80011": "Mostly Clear and Thunderstorm",
"80031": "Partly Cloudy and Thunderstorm",
"80021": "Mostly Cloudy and Thunderstorm",
"80001": "Thunderstorm"
}