Compare commits
2 commits
c7d589ce74
...
e56cf111e8
Author | SHA1 | Date | |
---|---|---|---|
Edward Betts | e56cf111e8 | ||
Edward Betts | 81d7d62620 |
|
@ -1,5 +1,6 @@
|
||||||
import configparser
|
import configparser
|
||||||
import json
|
import json
|
||||||
|
import operator
|
||||||
import os
|
import os
|
||||||
import typing
|
import typing
|
||||||
import warnings
|
import warnings
|
||||||
|
@ -96,12 +97,12 @@ def next_uk_fathers_day(input_date: date) -> date:
|
||||||
return fathers_day
|
return fathers_day
|
||||||
|
|
||||||
|
|
||||||
def get_next_timezone_transition(tz_name: str) -> datetime:
|
def get_next_timezone_transition(tz_name: str) -> date:
|
||||||
"""Datetime of the next time the clocks change."""
|
"""Datetime of the next time the clocks change."""
|
||||||
tz = pytz.timezone(tz_name)
|
tz = pytz.timezone(tz_name)
|
||||||
dt = next(t for t in tz._utc_transition_times if t > now)
|
dt = next(t for t in tz._utc_transition_times if t > now)
|
||||||
|
|
||||||
return typing.cast(datetime, dt)
|
return typing.cast(date, dt.date())
|
||||||
|
|
||||||
|
|
||||||
def get_next_bank_holiday() -> dict[str, date | str]:
|
def get_next_bank_holiday() -> dict[str, date | str]:
|
||||||
|
@ -276,9 +277,8 @@ def get_data() -> dict[str, str | object]:
|
||||||
"next_economist": next_economist(today),
|
"next_economist": next_economist(today),
|
||||||
"bank_holiday": get_next_bank_holiday(),
|
"bank_holiday": get_next_bank_holiday(),
|
||||||
"us_holiday": get_us_holiday(),
|
"us_holiday": get_us_holiday(),
|
||||||
"next_uk_general_election": next_uk_general_election,
|
# "next_uk_general_election": next_uk_general_election,
|
||||||
"next_us_presidential_election": next_us_presidential_election,
|
"next_us_presidential_election": next_us_presidential_election,
|
||||||
# "spacex": spacexdata.get_next_spacex_launch(limit=20),
|
|
||||||
"stock_markets": stock_markets(),
|
"stock_markets": stock_markets(),
|
||||||
"uk_clock_change": get_next_timezone_transition("Europe/London"),
|
"uk_clock_change": get_next_timezone_transition("Europe/London"),
|
||||||
"us_clock_change": get_next_timezone_transition("America/New_York"),
|
"us_clock_change": get_next_timezone_transition("America/New_York"),
|
||||||
|
@ -290,4 +290,24 @@ def get_data() -> dict[str, str | object]:
|
||||||
"rockets": thespacedevs.get_launches(rocket_dir, limit=40),
|
"rockets": thespacedevs.get_launches(rocket_dir, limit=40),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
skip = {"now", "gbpusd", "rockets", "stock_markets", "xmas_last_posting_dates"}
|
||||||
|
events = []
|
||||||
|
for key, value in reply.items():
|
||||||
|
if key in skip:
|
||||||
|
continue
|
||||||
|
if "holiday" in key:
|
||||||
|
assert isinstance(value, dict)
|
||||||
|
event = value
|
||||||
|
event["name"] = key
|
||||||
|
else:
|
||||||
|
event = {"name": key, "date": value}
|
||||||
|
events.append(event)
|
||||||
|
|
||||||
|
for key, value in xmas_last_posting_dates.items():
|
||||||
|
events.append({"name": f"xmas_last_{key}", "date": value})
|
||||||
|
|
||||||
|
events.sort(key=operator.itemgetter("date"))
|
||||||
|
|
||||||
|
reply["events"] = events
|
||||||
|
|
||||||
return reply
|
return reply
|
||||||
|
|
|
@ -1,12 +1,30 @@
|
||||||
|
{# vim: set ft=htmljinja
|
||||||
|
#}
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<title>Agenda</title>
|
<title>Agenda</title>
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
{% set event_labels = {
|
||||||
|
"next_economist": "The Economist",
|
||||||
|
"mothers_day": "Mothers' day",
|
||||||
|
"fathers_day": "Fathers' day",
|
||||||
|
"uk_financial_year_end": "End of financial year",
|
||||||
|
"bank_holiday": "UK bank holiday",
|
||||||
|
"us_holiday": "US holiday",
|
||||||
|
"uk_clock_change": "UK clock change",
|
||||||
|
"us_clock_change": "US clock change",
|
||||||
|
"next_us_presidential_election": "US pres. election",
|
||||||
|
"xmas_last_second": "Christmas last posting 2nd class",
|
||||||
|
"xmas_last_first": "Christmas last posting 1st class",
|
||||||
|
"xmas_day": "Christmas day",
|
||||||
|
}
|
||||||
|
%}
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<div class="container mt-2">
|
<div class="container mt-2">
|
||||||
|
@ -17,7 +35,7 @@
|
||||||
<li>GBPUSD: {{"{:,.3f}".format(gbpusd)}}</li>
|
<li>GBPUSD: {{"{:,.3f}".format(gbpusd)}}</li>
|
||||||
{# <li>lock down:
|
{# <li>lock down:
|
||||||
{{"{:.1f}".format(lockdown_days)}} days
|
{{"{:.1f}".format(lockdown_days)}} days
|
||||||
({{"{:.2f}".format(lockdown_days / 7)}} weeks) so far</li> #}
|
({{"{:.2f}".format(lockdown_days / 7)}} weeks) so far</li>
|
||||||
<li>The Economist: {{days(next_economist)}} (Thursday)</li>
|
<li>The Economist: {{days(next_economist)}} (Thursday)</li>
|
||||||
|
|
||||||
<li>Mothers' day:
|
<li>Mothers' day:
|
||||||
|
@ -43,17 +61,17 @@
|
||||||
{{us_holiday["title"]}}</li>
|
{{us_holiday["title"]}}</li>
|
||||||
|
|
||||||
<li>UK clock change:
|
<li>UK clock change:
|
||||||
{{days(uk_clock_change.date())}}
|
{{days(uk_clock_change)}}
|
||||||
{{uk_clock_change.strftime("%a, %d, %b %Y")}}</li>
|
{{uk_clock_change.strftime("%a, %d, %b %Y")}}</li>
|
||||||
|
|
||||||
<li>US clock change:
|
<li>US clock change:
|
||||||
{{days(us_clock_change.date())}}
|
{{days(us_clock_change)}}
|
||||||
{{us_clock_change.strftime("%a, %d, %b %Y")}}</li>
|
{{us_clock_change.strftime("%a, %d, %b %Y")}}</li>
|
||||||
|
|
||||||
{#
|
|
||||||
<li>general election:
|
<li>general election:
|
||||||
{{days(next_uk_general_election)}}
|
{{days(next_uk_general_election)}}
|
||||||
{{next_uk_general_election.strftime("%a, %d %b %Y")}}</li> #}
|
{{next_uk_general_election.strftime("%a, %d %b %Y")}}</li>
|
||||||
|
|
||||||
<li>US pres. election:
|
<li>US pres. election:
|
||||||
{{days(next_us_presidential_election)}}
|
{{days(next_us_presidential_election)}}
|
||||||
{{next_us_presidential_election.strftime("%a, %d %b %Y")}}</li>
|
{{next_us_presidential_election.strftime("%a, %d %b %Y")}}</li>
|
||||||
|
@ -70,9 +88,27 @@
|
||||||
{{days(xmas_day)}}
|
{{days(xmas_day)}}
|
||||||
{{xmas_day.strftime("%a, %d %b %Y")}}</li>
|
{{xmas_day.strftime("%a, %d %b %Y")}}</li>
|
||||||
|
|
||||||
|
#}
|
||||||
|
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<table class="table table-hover w-auto">
|
||||||
|
{% for event in events %}
|
||||||
|
<tr>
|
||||||
|
<td class="text-end">
|
||||||
|
{{event.date.strftime("%a, %d, %b %Y")}}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ event_labels[event.name] }}
|
||||||
|
{%- if "title" in event -%}: {{ event.title }}{% endif %}
|
||||||
|
</td>
|
||||||
|
<td class="text-end">
|
||||||
|
{{ days(event.date) }}
|
||||||
|
</td>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
<h3>Stock markets</h3>
|
<h3>Stock markets</h3>
|
||||||
{% for market in stock_markets %}
|
{% for market in stock_markets %}
|
||||||
<p>{{ market }}</p>
|
<p>{{ market }}</p>
|
||||||
|
@ -113,5 +149,7 @@
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<pre>{{ events | pprint }}</pre>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -25,7 +25,7 @@ def index() -> str:
|
||||||
return f"{delta.days:>5,d} days {delta.seconds // 3600:>2.0f} hours"
|
return f"{delta.days:>5,d} days {delta.seconds // 3600:>2.0f} hours"
|
||||||
|
|
||||||
def days(when: date) -> str:
|
def days(when: date) -> str:
|
||||||
return " today" if when == today else f"{(when - today).days:>5,d} days"
|
return "today" if when == today else f"{(when - today).days:,d} days"
|
||||||
|
|
||||||
return render_template("index.html", days=days, days_hours=days_hours, **data)
|
return render_template("index.html", days=days, days_hours=days_hours, **data)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue