parent
							
								
									81d7d62620
								
							
						
					
					
						commit
						e56cf111e8
					
				| 
						 | 
					@ -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,3 +1,5 @@
 | 
				
			||||||
 | 
					{# vim: set ft=htmljinja
 | 
				
			||||||
 | 
					#}
 | 
				
			||||||
<!doctype html>
 | 
					<!doctype html>
 | 
				
			||||||
<html lang="en">
 | 
					<html lang="en">
 | 
				
			||||||
<head>
 | 
					<head>
 | 
				
			||||||
| 
						 | 
					@ -7,6 +9,22 @@
 | 
				
			||||||
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" 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