Compare commits

...
5 Commits
Author SHA1 Message Date
shmyga 86879a3219 ci(version): 0.6.1 2026-08-30 16:04:58 +03:00
shmyga aa0d5a7a41 feat(gismeteo): change gismeteo values merging mode 2026-08-30 16:04:43 +03:00
shmyga bec48e3289 ci(version): 0.6.0 2026-08-28 10:14:35 +03:00
shmyga d8ee66480c build(docker): optimize docker build 2026-08-28 10:13:58 +03:00
shmyga 9f5c43ce92 fix(yandexweather): fix yandexweather parser 2026-08-28 10:13:05 +03:00
7 changed files with 30 additions and 13 deletions
+4 -2
View File
@@ -27,11 +27,13 @@ ENV PATH="/app/.venv/bin:$PATH"
WORKDIR /app
ENV TZ="Europe/Moscow"
COPY --from=builder /app ./
RUN .venv/bin/playwright install chromium --with-deps --only-shell
COPY --from=node-builder /app/dist ./static/dist
COPY gallery gallery/
COPY --from=builder --parents locales/**/*.mo ./
RUN .venv/bin/playwright install chromium --with-deps --only-shell
CMD ["uvicorn", "gallery.main:app", "--host", "0.0.0.0", "--port", "80", "--log-config", "gallery/logging.yaml"]
+3 -1
View File
@@ -41,7 +41,9 @@ class GismeteoApi(WeatherApi):
# group values by 3 hours
if len(values) > 8:
n = 3
values = [merge_weather_values(values[i].date, values[i : i + n]) for i in range(0, len(values), n)]
values = [
merge_weather_values(values[i].date, values[i : i + n], "average") for i in range(0, len(values), n)
]
return WeatherResponse(
location=location or "n/a",
date=date,
+5 -3
View File
@@ -37,11 +37,13 @@ def parse_sky(sky: str) -> Sky:
elif sky == "пасмурно":
cloudness = Cloudness.MAINLY_CLOUDY
elif sky == "небольшой дождь":
precipitation = Precipitation.RAIN
elif sky == "дождь":
precipitation = Precipitation.SMALL_RAIN
elif sky == "дождь":
precipitation = Precipitation.RAIN
elif sky == "ливень":
precipitation = Precipitation.SHOWER
else:
logger.warning("unknown sky value: %s:", sky)
logger.warning("unknown sky value: %s", sky)
return Sky(
cloudness=cloudness,
precipitation=precipitation,
+14 -3
View File
@@ -1,8 +1,11 @@
import datetime
import statistics
from typing import Literal
from .model import Cloudness, Precipitation, Sky, WeatherValue, WindDirectionDeg
MergeMode = Literal["interval", "average"]
def build_weather_value(date: datetime.datetime) -> WeatherValue:
return WeatherValue(
@@ -23,7 +26,15 @@ def build_weather_value(date: datetime.datetime) -> WeatherValue:
)
def merge_weather_values(date: datetime.datetime, values: list[WeatherValue]) -> WeatherValue:
def _merge_values(values: list[int], mode: MergeMode) -> list[int]:
return [max(values), min(values)] if mode == "interval" else [round(sum(values) / len(values))]
def merge_weather_values(
date: datetime.datetime,
values: list[WeatherValue],
mode: MergeMode = "interval",
) -> WeatherValue:
result = build_weather_value(date)
temperatures = []
pressures = []
@@ -44,8 +55,8 @@ def merge_weather_values(date: datetime.datetime, values: list[WeatherValue]) ->
cloudnesses.append(value.sky.cloudness)
precipitations.append(value.sky.precipitation)
precipitation += value.precipitation
result.temperature = [max(temperatures), min(temperatures)]
result.pressure = [max(pressures), min(pressures)]
result.temperature = _merge_values(temperatures, mode)
result.pressure = _merge_values(pressures, mode)
result.humidity = round(statistics.mean(humidities))
result.wind_speed = round(statistics.mean(wind_speeds))
result.wind_gust = round(statistics.mean(wind_gusts))
+1 -1
View File
@@ -1,7 +1,7 @@
[project]
name = "gallery"
description = ""
version = "0.5.4"
version = "0.6.1"
readme = "README.md"
authors = [{ name = "shmyga", email = "shmyga.z@gmail.com" }]
requires-python = '>=3.14,<4.0'
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "gallery",
"version": "0.5.4",
"version": "0.6.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "gallery",
"version": "0.5.4",
"version": "0.6.1",
"license": "ISC",
"dependencies": {
"@popperjs/core": "^2.11.8",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "gallery",
"version": "0.5.4",
"version": "0.6.1",
"type": "module",
"scripts": {
"build": "webpack --mode production",