feat(app/view): improve cloudnes icons filter
This commit is contained in:
11
Dockerfile
11
Dockerfile
@@ -10,9 +10,14 @@ RUN poetry install --with app
|
||||
FROM python:3.12-slim
|
||||
ENV PATH="/app/.venv/bin:$PATH"
|
||||
WORKDIR /app
|
||||
RUN apt update && apt install -y locales
|
||||
RUN locale-gen ru_RU.UTF-8 && dpkg-reconfigure locales
|
||||
RUN apt update && \
|
||||
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 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"]
|
||||
|
||||
@@ -23,11 +23,20 @@ def mount(app: FastAPI):
|
||||
async def get_weather_default(location: str):
|
||||
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)
|
||||
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)
|
||||
return templates.TemplateResponse(
|
||||
request=request,
|
||||
|
||||
@@ -12,17 +12,27 @@ def wind_direction_icon(wind_direction: str) -> str:
|
||||
}.get(wind_direction, wind_direction)
|
||||
|
||||
|
||||
def cloudness_icon(cloudness: str) -> str:
|
||||
return {
|
||||
"Ясно": "☀️",
|
||||
"Малооблачно, без осадков": "🌤️",
|
||||
"Облачно, без осадков": "⛅",
|
||||
"Малооблачно, небольшой дождь": "🌦️",
|
||||
"Пасмурно, без осадков": "☁️",
|
||||
"Облачно, небольшой дождь": "🌧️",
|
||||
"Облачно, дождь": "🌧️",
|
||||
"Облачно, небольшой дождь, гроза": "⛈️",
|
||||
"Малооблачно, дождь": "🌦️",
|
||||
"Пасмурно, небольшой дождь": "🌧️",
|
||||
"Облачно, дождь, гроза": "⛈️",
|
||||
}.get(cloudness, cloudness)
|
||||
def cloudness_icon(cloudness: str) -> list[str]:
|
||||
icons = []
|
||||
values = {item.strip().lower() for item in cloudness.split(",")}
|
||||
if "дымка" in values:
|
||||
icons.append("🌫️")
|
||||
values.remove("дымка")
|
||||
icons = [
|
||||
{
|
||||
frozenset(["ясно"]): "☀️",
|
||||
frozenset(["малооблачно", "без осадков"]): "🌤️",
|
||||
frozenset(["облачно", "без осадков"]): "⛅",
|
||||
frozenset(["малооблачно", "небольшой дождь"]): "🌦️",
|
||||
frozenset(["пасмурно", "без осадков"]): "☁️",
|
||||
frozenset(["облачно", "небольшой дождь"]): "🌧️",
|
||||
frozenset(["облачно", "дождь"]): "🌧️",
|
||||
frozenset(["облачно", "небольшой дождь", "гроза"]): "⛈️",
|
||||
frozenset(["малооблачно", "дождь"]): "🌦️",
|
||||
frozenset(["пасмурно", "небольшой дождь"]): "🌧️",
|
||||
frozenset(["облачно", "дождь", "гроза"]): "⛈️",
|
||||
frozenset(["пасмурно", "дождь"]): "🌧️",
|
||||
frozenset(["пасмурно", "дождь", "гроза"]): "⛈️",
|
||||
}.get(frozenset(values), "|".join(values))
|
||||
] + icons
|
||||
return icons
|
||||
|
||||
@@ -49,7 +49,15 @@ td {
|
||||
background: rgba(0, 128, 255, 0.2);
|
||||
}
|
||||
|
||||
.cloudness {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.cloudness .icon {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.cloudness .icon:first-child {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,9 @@
|
||||
<tr>
|
||||
{% for value in response.values %}
|
||||
<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>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
|
||||
Reference in New Issue
Block a user