Compare commits
9 Commits
f00f674da0
...
main
Author | SHA1 | Date | |
---|---|---|---|
cb610ae248 | |||
76aa1195ef | |||
a7d085e607 | |||
124ed868a5 | |||
eb59499fa8 | |||
4093a744ff | |||
a8d418045e | |||
b75ee88825 | |||
5545ca75e8 |
25
Makefile
Normal file
25
Makefile
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
default: build
|
||||||
|
.PHONY: build install-tools install-dep init clean
|
||||||
|
|
||||||
|
init: install-dep install-tools
|
||||||
|
|
||||||
|
build:
|
||||||
|
@uvx pyinstaller --hidden-import=yaml --hidden-import=yaml.loader --paths=.venv/lib/python3.13/site-packages/ --onefile ./main.py
|
||||||
|
|
||||||
|
install-tools:
|
||||||
|
@uv tool install flake8
|
||||||
|
@uv tool install black
|
||||||
|
@uv tool install pyinstaller
|
||||||
|
|
||||||
|
install-dep:
|
||||||
|
@uv sync
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@rm -r ./dist ./build
|
||||||
|
|
||||||
|
install:
|
||||||
|
ifeq ($(USER), root)
|
||||||
|
@cp ./dist/main /usr/local/bin/meteo
|
||||||
|
else
|
||||||
|
@cp ./dist/main ~/.local/bin/meteo
|
||||||
|
endif
|
128
main.py
128
main.py
@@ -3,11 +3,11 @@
|
|||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
import locale
|
import locale
|
||||||
import pprint
|
|
||||||
import argparse
|
import argparse
|
||||||
import requests
|
import requests
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from sty import fg
|
||||||
from meteo.config import Config
|
from meteo.config import Config
|
||||||
|
|
||||||
YR_NO_URL = "https://api.met.no/weatherapi/locationforecast/2.0/"
|
YR_NO_URL = "https://api.met.no/weatherapi/locationforecast/2.0/"
|
||||||
@@ -32,7 +32,7 @@ def load_args():
|
|||||||
|
|
||||||
|
|
||||||
def ask_api(latitude: float, longitude: float, altitude: int) -> dict:
|
def ask_api(latitude: float, longitude: float, altitude: int) -> dict:
|
||||||
""" """
|
""" interrege l'API de https://yr.no """
|
||||||
url = f"{YR_NO_URL}compact.json?lat={latitude}&lon={longitude}&altitude={altitude}"
|
url = f"{YR_NO_URL}compact.json?lat={latitude}&lon={longitude}&altitude={altitude}"
|
||||||
headers = {"User-Agent": "DaikoMete/0.1 daiko@daiko.fr"}
|
headers = {"User-Agent": "DaikoMete/0.1 daiko@daiko.fr"}
|
||||||
response = requests.get(url, headers=headers)
|
response = requests.get(url, headers=headers)
|
||||||
@@ -44,11 +44,112 @@ def ask_api(latitude: float, longitude: float, altitude: int) -> dict:
|
|||||||
return json.loads(response.text)
|
return json.loads(response.text)
|
||||||
|
|
||||||
|
|
||||||
|
def display_full(data):
|
||||||
|
""" Affiche les informations météo complètes """
|
||||||
|
locale.setlocale(locale.LC_TIME, "fr_FR.utf8")
|
||||||
|
cur_date = datetime.fromisoformat("1970-01-01T00:00:00Z").date()
|
||||||
|
|
||||||
|
for infos in data["properties"]["timeseries"]:
|
||||||
|
new_date = datetime.fromisoformat(infos["time"])
|
||||||
|
|
||||||
|
if new_date.date() > cur_date:
|
||||||
|
print(new_date.strftime("%A, %d. %B %Y"))
|
||||||
|
cur_date = new_date.date()
|
||||||
|
|
||||||
|
time = new_date.strftime("%H:%M")
|
||||||
|
|
||||||
|
temperature = coloring_temperature(
|
||||||
|
infos["data"]["instant"]["details"]["air_temperature"]
|
||||||
|
)
|
||||||
|
|
||||||
|
wind_speed = infos["data"]["instant"]["details"]["wind_speed"]
|
||||||
|
|
||||||
|
wind_dir = display_wind_direction(
|
||||||
|
infos["data"]["instant"]["details"]["wind_from_direction"]
|
||||||
|
)
|
||||||
|
|
||||||
|
icon_str = ''
|
||||||
|
if "next_12_hours" in infos["data"]:
|
||||||
|
icon_str = infos["data"]["next_12_hours"]["summary"]["symbol_code"]
|
||||||
|
if "next_6_hours" in infos["data"]:
|
||||||
|
icon_str = infos["data"]["next_6_hours"]["summary"]["symbol_code"]
|
||||||
|
if "next_1_hours" in infos["data"]:
|
||||||
|
icon_str = infos["data"]["next_1_hours"]["summary"]["symbol_code"]
|
||||||
|
icon = display_icon(icon_str)
|
||||||
|
|
||||||
|
humidity = infos["data"]["instant"]["details"]["relative_humidity"]
|
||||||
|
print(f" {time} : {icon} {temperature}° / {humidity}% / {wind_dir} {wind_speed} m/s")
|
||||||
|
|
||||||
|
|
||||||
|
def display_wind_direction(degrees: float) -> str:
|
||||||
|
""" Retourne une fleche indicant la direction du vent"""
|
||||||
|
if 22.5 <= degrees < 67.5:
|
||||||
|
return '↙'
|
||||||
|
|
||||||
|
if 67.5 <= degrees < 112.5:
|
||||||
|
return '←'
|
||||||
|
|
||||||
|
if 112.5 <= degrees < 157.5:
|
||||||
|
return '↖'
|
||||||
|
|
||||||
|
if 157.5 <= degrees < 202.5:
|
||||||
|
return '↑'
|
||||||
|
|
||||||
|
if 202.5 <= degrees < 247.5:
|
||||||
|
return '↗'
|
||||||
|
|
||||||
|
if 247.5 <= degrees < 292.5:
|
||||||
|
return '→'
|
||||||
|
|
||||||
|
if 292.5 <= degrees < 337.5:
|
||||||
|
return '↘'
|
||||||
|
|
||||||
|
return '↓'
|
||||||
|
|
||||||
|
|
||||||
|
def display_icon(string: str) -> str:
|
||||||
|
""" """
|
||||||
|
# https://www.nerdfonts.com/cheat-sheet
|
||||||
|
t = {
|
||||||
|
'clearsky_day': fg.yellow + '' + fg.rs,
|
||||||
|
'clearsky_night': '',
|
||||||
|
'cloudy': '',
|
||||||
|
'fog': '',
|
||||||
|
'lightrain': '',
|
||||||
|
'heavyrain': '',
|
||||||
|
'partlycloudy_night': '',
|
||||||
|
'partlycloudy_day': '',
|
||||||
|
'rain': '',
|
||||||
|
'lightrainshowers_night': '',
|
||||||
|
'lightrainshowers_day':'',
|
||||||
|
'fair_day': fg.yellow + '' + fg.rs,
|
||||||
|
'fair_night': '',
|
||||||
|
}
|
||||||
|
|
||||||
|
if string in t:
|
||||||
|
return t[string]
|
||||||
|
|
||||||
|
return string
|
||||||
|
|
||||||
|
def coloring_temperature(temperature: float) -> str:
|
||||||
|
""" A partir de la température retourne une chaine de caractères colorisée """
|
||||||
|
|
||||||
|
temp_limit = [40, 30, 25, 20, 10, 0]
|
||||||
|
color = [fg.magenta, fg.red, fg(255, 150, 50), fg.yellow, '', fg.cyan]
|
||||||
|
|
||||||
|
for key, limit in enumerate(temp_limit):
|
||||||
|
if temperature >= limit:
|
||||||
|
return color[key] + str(temperature) + fg.rs
|
||||||
|
|
||||||
|
return fg.blue + str(temperature) + fg.rs
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
"""Fonction principale"""
|
"""Fonction principale"""
|
||||||
|
|
||||||
args = load_args()
|
args = load_args()
|
||||||
config_file = Path(args["config"])
|
config_file = Path(args["config"])
|
||||||
|
|
||||||
if not config_file.is_file():
|
if not config_file.is_file():
|
||||||
print(f"{config_file} n'est pas un fichier.")
|
print(f"{config_file} n'est pas un fichier.")
|
||||||
os._exit(1)
|
os._exit(1)
|
||||||
@@ -60,26 +161,13 @@ def main():
|
|||||||
print(f"{args['location']} n'est pas configuré.")
|
print(f"{args['location']} n'est pas configuré.")
|
||||||
os._exit(1)
|
os._exit(1)
|
||||||
|
|
||||||
response = ask_api(
|
api_response = ask_api(
|
||||||
latitude = location['latitude'],
|
latitude=location["latitude"],
|
||||||
longitude = location['longitude'],
|
longitude=location["longitude"],
|
||||||
altitude = location['altitude'],
|
altitude=location["altitude"],
|
||||||
)
|
)
|
||||||
|
|
||||||
locale.setlocale(locale.LC_TIME, "fr_FR.utf8")
|
display_full(api_response)
|
||||||
cur_date = datetime.fromisoformat("1970-01-01T00:00:00Z").date()
|
|
||||||
|
|
||||||
for time in response["properties"]["timeseries"]:
|
|
||||||
new_date = datetime.fromisoformat(time["time"])
|
|
||||||
|
|
||||||
if new_date.date() > cur_date:
|
|
||||||
print(new_date.strftime("%A, %d. %B %Y"))
|
|
||||||
cur_date = new_date.date()
|
|
||||||
|
|
||||||
cur_hour = new_date.strftime("%H:%M")
|
|
||||||
cur_temp = time["data"]["instant"]["details"]["air_temperature"]
|
|
||||||
cur_humidity = time["data"]["instant"]["details"]["relative_humidity"]
|
|
||||||
print(f" {cur_hour} : {cur_temp}° / {cur_humidity}%")
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
38
main.spec
Normal file
38
main.spec
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# -*- mode: python ; coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
a = Analysis(
|
||||||
|
['main.py'],
|
||||||
|
pathex=['.venv/lib/python3.13/site-packages/'],
|
||||||
|
binaries=[],
|
||||||
|
datas=[],
|
||||||
|
hiddenimports=['yaml', 'yaml.loader'],
|
||||||
|
hookspath=[],
|
||||||
|
hooksconfig={},
|
||||||
|
runtime_hooks=[],
|
||||||
|
excludes=[],
|
||||||
|
noarchive=False,
|
||||||
|
optimize=0,
|
||||||
|
)
|
||||||
|
pyz = PYZ(a.pure)
|
||||||
|
|
||||||
|
exe = EXE(
|
||||||
|
pyz,
|
||||||
|
a.scripts,
|
||||||
|
a.binaries,
|
||||||
|
a.datas,
|
||||||
|
[],
|
||||||
|
name='main',
|
||||||
|
debug=False,
|
||||||
|
bootloader_ignore_signals=False,
|
||||||
|
strip=False,
|
||||||
|
upx=True,
|
||||||
|
upx_exclude=[],
|
||||||
|
runtime_tmpdir=None,
|
||||||
|
console=True,
|
||||||
|
disable_windowed_traceback=False,
|
||||||
|
argv_emulation=False,
|
||||||
|
target_arch=None,
|
||||||
|
codesign_identity=None,
|
||||||
|
entitlements_file=None,
|
||||||
|
)
|
@@ -9,10 +9,8 @@ dependencies = [
|
|||||||
"pycurl>=7.45.6",
|
"pycurl>=7.45.6",
|
||||||
"pyyaml>=6.0.2",
|
"pyyaml>=6.0.2",
|
||||||
"requests>=2.32.4",
|
"requests>=2.32.4",
|
||||||
|
"sty>=1.0.6",
|
||||||
]
|
]
|
||||||
|
|
||||||
[dependency-groups]
|
[dependency-groups]
|
||||||
dev = [
|
dev = []
|
||||||
"black>=25.1.0",
|
|
||||||
"flake8>=7.3.0",
|
|
||||||
]
|
|
||||||
|
140
uv.lock
generated
140
uv.lock
generated
@@ -2,26 +2,6 @@ version = 1
|
|||||||
revision = 3
|
revision = 3
|
||||||
requires-python = ">=3.13"
|
requires-python = ">=3.13"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "black"
|
|
||||||
version = "25.1.0"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
dependencies = [
|
|
||||||
{ name = "click" },
|
|
||||||
{ name = "mypy-extensions" },
|
|
||||||
{ name = "packaging" },
|
|
||||||
{ name = "pathspec" },
|
|
||||||
{ name = "platformdirs" },
|
|
||||||
]
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/94/49/26a7b0f3f35da4b5a65f081943b7bcd22d7002f5f0fb8098ec1ff21cb6ef/black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666", size = 649449, upload-time = "2025-01-29T04:15:40.373Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/98/87/0edf98916640efa5d0696e1abb0a8357b52e69e82322628f25bf14d263d1/black-25.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f0b18a02996a836cc9c9c78e5babec10930862827b1b724ddfe98ccf2f2fe4f", size = 1650673, upload-time = "2025-01-29T05:37:20.574Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/52/e5/f7bf17207cf87fa6e9b676576749c6b6ed0d70f179a3d812c997870291c3/black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3", size = 1453190, upload-time = "2025-01-29T05:37:22.106Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e3/ee/adda3d46d4a9120772fae6de454c8495603c37c4c3b9c60f25b1ab6401fe/black-25.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:030b9759066a4ee5e5aca28c3c77f9c64789cdd4de8ac1df642c40b708be6171", size = 1782926, upload-time = "2025-01-29T04:18:58.564Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/cc/64/94eb5f45dcb997d2082f097a3944cfc7fe87e071907f677e80788a2d7b7a/black-25.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18", size = 1442613, upload-time = "2025-01-29T04:19:27.63Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/09/71/54e999902aed72baf26bca0d50781b01838251a462612966e9fc4891eadd/black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717", size = 207646, upload-time = "2025-01-29T04:15:38.082Z" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "certifi"
|
name = "certifi"
|
||||||
version = "2025.8.3"
|
version = "2025.8.3"
|
||||||
@@ -62,41 +42,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload-time = "2025-08-09T07:57:26.864Z" },
|
{ url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload-time = "2025-08-09T07:57:26.864Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "click"
|
|
||||||
version = "8.2.1"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
dependencies = [
|
|
||||||
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
|
||||||
]
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload-time = "2025-05-20T23:19:49.832Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload-time = "2025-05-20T23:19:47.796Z" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "colorama"
|
|
||||||
version = "0.4.6"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "flake8"
|
|
||||||
version = "7.3.0"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
dependencies = [
|
|
||||||
{ name = "mccabe" },
|
|
||||||
{ name = "pycodestyle" },
|
|
||||||
{ name = "pyflakes" },
|
|
||||||
]
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/9b/af/fbfe3c4b5a657d79e5c47a2827a362f9e1b763336a52f926126aa6dc7123/flake8-7.3.0.tar.gz", hash = "sha256:fe044858146b9fc69b551a4b490d69cf960fcb78ad1edcb84e7fbb1b4a8e3872", size = 48326, upload-time = "2025-06-20T19:31:35.838Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl", hash = "sha256:b9696257b9ce8beb888cdbe31cf885c90d31928fe202be0889a7cdafad32f01e", size = 57922, upload-time = "2025-06-20T19:31:34.425Z" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "idna"
|
name = "idna"
|
||||||
version = "3.10"
|
version = "3.10"
|
||||||
@@ -106,15 +51,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" },
|
{ url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "mccabe"
|
|
||||||
version = "0.7.0"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/e7/ff/0ffefdcac38932a54d2b5eed4e0ba8a408f215002cd178ad1df0f2806ff8/mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", size = 9658, upload-time = "2022-01-24T01:14:51.113Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e", size = 7350, upload-time = "2022-01-24T01:14:49.62Z" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "meteo"
|
name = "meteo"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@@ -124,12 +60,7 @@ dependencies = [
|
|||||||
{ name = "pycurl" },
|
{ name = "pycurl" },
|
||||||
{ name = "pyyaml" },
|
{ name = "pyyaml" },
|
||||||
{ name = "requests" },
|
{ name = "requests" },
|
||||||
]
|
{ name = "sty" },
|
||||||
|
|
||||||
[package.dev-dependencies]
|
|
||||||
dev = [
|
|
||||||
{ name = "black" },
|
|
||||||
{ name = "flake8" },
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.metadata]
|
[package.metadata]
|
||||||
@@ -138,58 +69,11 @@ requires-dist = [
|
|||||||
{ name = "pycurl", specifier = ">=7.45.6" },
|
{ name = "pycurl", specifier = ">=7.45.6" },
|
||||||
{ name = "pyyaml", specifier = ">=6.0.2" },
|
{ name = "pyyaml", specifier = ">=6.0.2" },
|
||||||
{ name = "requests", specifier = ">=2.32.4" },
|
{ name = "requests", specifier = ">=2.32.4" },
|
||||||
|
{ name = "sty", specifier = ">=1.0.6" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.metadata.requires-dev]
|
[package.metadata.requires-dev]
|
||||||
dev = [
|
dev = []
|
||||||
{ name = "black", specifier = ">=25.1.0" },
|
|
||||||
{ name = "flake8", specifier = ">=7.3.0" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "mypy-extensions"
|
|
||||||
version = "1.1.0"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "packaging"
|
|
||||||
version = "25.0"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pathspec"
|
|
||||||
version = "0.12.1"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "platformdirs"
|
|
||||||
version = "4.3.8"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362, upload-time = "2025-05-07T22:47:42.121Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567, upload-time = "2025-05-07T22:47:40.376Z" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pycodestyle"
|
|
||||||
version = "2.14.0"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/11/e0/abfd2a0d2efe47670df87f3e3a0e2edda42f055053c85361f19c0e2c1ca8/pycodestyle-2.14.0.tar.gz", hash = "sha256:c4b5b517d278089ff9d0abdec919cd97262a3367449ea1c8b49b91529167b783", size = 39472, upload-time = "2025-06-20T18:49:48.75Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl", hash = "sha256:dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d", size = 31594, upload-time = "2025-06-20T18:49:47.491Z" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pycurl"
|
name = "pycurl"
|
||||||
@@ -205,15 +89,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/b3/54/2c252485aac80150aef1de69b95fa7885b74e3ae1911b67b962e07e8b9aa/pycurl-7.45.6-cp313-cp313-win_amd64.whl", hash = "sha256:f0198ebcda8686b3a0c66d490a687fa5fd466f8ecc2f20a0ed0931579538ae3d", size = 3132790, upload-time = "2025-03-07T03:40:06.709Z" },
|
{ url = "https://files.pythonhosted.org/packages/b3/54/2c252485aac80150aef1de69b95fa7885b74e3ae1911b67b962e07e8b9aa/pycurl-7.45.6-cp313-cp313-win_amd64.whl", hash = "sha256:f0198ebcda8686b3a0c66d490a687fa5fd466f8ecc2f20a0ed0931579538ae3d", size = 3132790, upload-time = "2025-03-07T03:40:06.709Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pyflakes"
|
|
||||||
version = "3.4.0"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/45/dc/fd034dc20b4b264b3d015808458391acbf9df40b1e54750ef175d39180b1/pyflakes-3.4.0.tar.gz", hash = "sha256:b24f96fafb7d2ab0ec5075b7350b3d2d2218eab42003821c06344973d3ea2f58", size = 64669, upload-time = "2025-06-20T18:45:27.834Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl", hash = "sha256:f742a7dbd0d9cb9ea41e9a24a918996e8170c799fa528688d40dd582c8265f4f", size = 63551, upload-time = "2025-06-20T18:45:26.937Z" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyyaml"
|
name = "pyyaml"
|
||||||
version = "6.0.2"
|
version = "6.0.2"
|
||||||
@@ -246,6 +121,15 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload-time = "2025-06-09T16:43:05.728Z" },
|
{ url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload-time = "2025-06-09T16:43:05.728Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sty"
|
||||||
|
version = "1.0.6"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/76/6a/aad1817e60f07e5ebc111affee15d4dff9d324981005310566c40f08786c/sty-1.0.6.tar.gz", hash = "sha256:d43ecb71b7bad0b56d622cb219d0be303c16fcb4143b84d1465ded22e29baa00", size = 12217, upload-time = "2023-11-27T13:57:12.931Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ec/89/22b3b7f25f67d04690e3b565ca89062a6e7afb1e7124342d5b5b22e8f014/sty-1.0.6-py3-none-any.whl", hash = "sha256:2b1eba187b3961644f797f97177f939c109c916d3d3a2cb6784454d1f1ce4983", size = 12553, upload-time = "2023-11-27T13:57:11.4Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "urllib3"
|
name = "urllib3"
|
||||||
version = "2.5.0"
|
version = "2.5.0"
|
||||||
|
Reference in New Issue
Block a user