parent
							
								
									81d7d62620
								
							
						
					
					
						commit
						e56cf111e8
					
				| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
import configparser
 | 
			
		||||
import json
 | 
			
		||||
import operator
 | 
			
		||||
import os
 | 
			
		||||
import typing
 | 
			
		||||
import warnings
 | 
			
		||||
| 
						 | 
				
			
			@ -96,12 +97,12 @@ def next_uk_fathers_day(input_date: date) -> date:
 | 
			
		|||
    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."""
 | 
			
		||||
    tz = pytz.timezone(tz_name)
 | 
			
		||||
    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]:
 | 
			
		||||
| 
						 | 
				
			
			@ -276,9 +277,8 @@ def get_data() -> dict[str, str | object]:
 | 
			
		|||
        "next_economist": next_economist(today),
 | 
			
		||||
        "bank_holiday": get_next_bank_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,
 | 
			
		||||
        # "spacex": spacexdata.get_next_spacex_launch(limit=20),
 | 
			
		||||
        "stock_markets": stock_markets(),
 | 
			
		||||
        "uk_clock_change": get_next_timezone_transition("Europe/London"),
 | 
			
		||||
        "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),
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,5 @@
 | 
			
		|||
{# vim: set ft=htmljinja
 | 
			
		||||
#}
 | 
			
		||||
<!doctype html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<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">
 | 
			
		||||
</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>
 | 
			
		||||
 | 
			
		||||
  <div class="container mt-2">
 | 
			
		||||
| 
						 | 
				
			
			@ -17,7 +35,7 @@
 | 
			
		|||
    <li>GBPUSD: {{"{:,.3f}".format(gbpusd)}}</li>
 | 
			
		||||
    {# <li>lock down:
 | 
			
		||||
      {{"{:.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>Mothers' day:
 | 
			
		||||
| 
						 | 
				
			
			@ -43,17 +61,17 @@
 | 
			
		|||
      {{us_holiday["title"]}}</li>
 | 
			
		||||
 | 
			
		||||
    <li>UK clock change:
 | 
			
		||||
      {{days(uk_clock_change.date())}}
 | 
			
		||||
      {{days(uk_clock_change)}}
 | 
			
		||||
      {{uk_clock_change.strftime("%a, %d, %b %Y")}}</li>
 | 
			
		||||
 | 
			
		||||
    <li>US clock change:
 | 
			
		||||
      {{days(us_clock_change.date())}}
 | 
			
		||||
      {{days(us_clock_change)}}
 | 
			
		||||
      {{us_clock_change.strftime("%a, %d, %b %Y")}}</li>
 | 
			
		||||
 | 
			
		||||
    {#
 | 
			
		||||
    <li>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:
 | 
			
		||||
      {{days(next_us_presidential_election)}}
 | 
			
		||||
      {{next_us_presidential_election.strftime("%a, %d %b %Y")}}</li>
 | 
			
		||||
| 
						 | 
				
			
			@ -70,9 +88,27 @@
 | 
			
		|||
      {{days(xmas_day)}}
 | 
			
		||||
      {{xmas_day.strftime("%a, %d %b %Y")}}</li>
 | 
			
		||||
 | 
			
		||||
    #}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </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>
 | 
			
		||||
  {% for market in stock_markets %}
 | 
			
		||||
    <p>{{ market }}</p>
 | 
			
		||||
| 
						 | 
				
			
			@ -113,5 +149,7 @@
 | 
			
		|||
  </table>
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
<pre>{{ events | pprint }}</pre>
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ def index() -> str:
 | 
			
		|||
        return f"{delta.days:>5,d} days {delta.seconds // 3600:>2.0f} hours"
 | 
			
		||||
 | 
			
		||||
    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)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue