feat(app/view): improve cloudnes icons filter

This commit is contained in:
2024-07-26 11:37:10 +03:00
parent 848b6bd9ba
commit f711b2d77b
5 changed files with 58 additions and 24 deletions

View File

@@ -10,9 +10,14 @@ RUN poetry install --with app
FROM python:3.12-slim FROM python:3.12-slim
ENV PATH="/app/.venv/bin:$PATH" ENV PATH="/app/.venv/bin:$PATH"
WORKDIR /app WORKDIR /app
RUN apt update && apt install -y locales RUN apt update && \
RUN locale-gen ru_RU.UTF-8 && dpkg-reconfigure locales apt install -y locales && \
sed -i -e 's/# ru_RU.UTF-8 UTF-8/ru_RU.UTF-8 UTF-8/' /etc/locale.gen && \
dpkg-reconfigure --frontend=noninteractive locales
ENV LANG=ru_RU.UTF-8
ENV LC_ALL=ru_RU.UTF-8
COPY --from=builder /app ./ COPY --from=builder /app ./
COPY gismeteo gismeteo/ COPY gismeteo gismeteo/
COPY weather weather/
CMD ["uvicorn", "gismeteo.app:app", "--host", "0.0.0.0", "--port", "80"] CMD ["uvicorn", "weather.app:app", "--host", "0.0.0.0", "--port", "80"]

View File

@@ -23,11 +23,20 @@ def mount(app: FastAPI):
async def get_weather_default(location: str): async def get_weather_default(location: str):
return RedirectResponse(f"{location}/{datetime.date.today()}") return RedirectResponse(f"{location}/{datetime.date.today()}")
@app.get("/weather/{location}/mock", response_class=HTMLResponse)
async def get_weather_mock(request: Request):
response = MOCK_DATA.response
return templates.TemplateResponse(
request=request,
name="weather.html",
context={
"datetime": datetime,
"response": response,
},
)
@app.get("/weather/{location}/{date}", response_class=HTMLResponse) @app.get("/weather/{location}/{date}", response_class=HTMLResponse)
async def get_weather(request: Request, location: str, date: datetime.date): async def get_weather(request: Request, location: str, date: datetime.date):
if date == "mock":
response = MOCK_DATA.response
else:
response = await get_api().get_day(location, date) response = await get_api().get_day(location, date)
return templates.TemplateResponse( return templates.TemplateResponse(
request=request, request=request,

View File

@@ -12,17 +12,27 @@ def wind_direction_icon(wind_direction: str) -> str:
}.get(wind_direction, wind_direction) }.get(wind_direction, wind_direction)
def cloudness_icon(cloudness: str) -> str: def cloudness_icon(cloudness: str) -> list[str]:
return { icons = []
"Ясно": "☀️", values = {item.strip().lower() for item in cloudness.split(",")}
"Малооблачно, без осадков": "🌤️", if "дымка" in values:
"Облачно, без осадков": "", icons.append("🌫️")
"Малооблачно, небольшой дождь": "🌦️", values.remove("дымка")
"Пасмурно, без осадков": "☁️", icons = [
"Облачно, небольшой дождь": "🌧️", {
"Облачно, дождь": "🌧", frozenset(["ясно"]): "",
"Облачно, небольшой дождь, гроза": "", frozenset(["малооблачно", "без осадков"]): "🌤",
"Малооблачно, дождь": "🌦️", frozenset(["облачно", "без осадков"]): "",
"Пасмурно, небольшой дождь": "🌧", frozenset(["малооблачно", "небольшой дождь"]): "🌦",
"Облачно, дождь, гроза": "", frozenset(["пасмурно", "без осадков"]): "",
}.get(cloudness, cloudness) frozenset(["облачно", "небольшой дождь"]): "🌧️",
frozenset(["облачно", "дождь"]): "🌧️",
frozenset(["облачно", "небольшой дождь", "гроза"]): "⛈️",
frozenset(["малооблачно", "дождь"]): "🌦️",
frozenset(["пасмурно", "небольшой дождь"]): "🌧️",
frozenset(["облачно", "дождь", "гроза"]): "⛈️",
frozenset(["пасмурно", "дождь"]): "🌧️",
frozenset(["пасмурно", "дождь", "гроза"]): "⛈️",
}.get(frozenset(values), "|".join(values))
] + icons
return icons

View File

@@ -49,7 +49,15 @@ td {
background: rgba(0, 128, 255, 0.2); background: rgba(0, 128, 255, 0.2);
} }
.cloudness {
vertical-align: top;
}
.cloudness .icon { .cloudness .icon {
font-size: 1rem;
}
.cloudness .icon:first-child {
font-size: 2rem; font-size: 2rem;
} }

View File

@@ -44,7 +44,9 @@
<tr> <tr>
{% for value in response.values %} {% for value in response.values %}
<td class="cloudness"> <td class="cloudness">
<span class="icon">{{value.cloudness | cloudness_icon}}</span> {% for icon in value.cloudness | cloudness_icon %}
<div class="icon">{{icon}}</div>
{% endfor %}
</td> </td>
{% endfor %} {% endfor %}
</tr> </tr>