Compare commits

..

No commits in common. "187214cfa1c76168f0f51580f714e8e9e2461d8b" and "164a93cd88ff7fb5c3a60d301a3599e6334d55b4" have entirely different histories.

4 changed files with 28 additions and 117 deletions

View file

@ -2,9 +2,11 @@
"""Check if conference websites are live."""
import configparser
import os
import re
import smtplib
import typing
import warnings
from datetime import date
from email.mime.text import MIMEText
@ -13,10 +15,16 @@ from email.utils import formatdate, make_msgid
import requests
import yaml
from requests.adapters import HTTPAdapter
from urllib3.exceptions import InsecureRequestWarning
from urllib3.util.url import parse_url
from urllib3.exceptions import InsecureRequestWarning # type: ignore
from urllib3.util.url import parse_url # type: ignore
from conference import LiveConference, config, load_yaml
class LiveConference(typing.TypedDict):
"""Live conference."""
conference: str
year: int
live: date
class AbsoluteDNSAdapter(HTTPAdapter):
@ -28,7 +36,6 @@ class AbsoluteDNSAdapter(HTTPAdapter):
# Append a dot to the hostname if it's not already there.
hostname = parsed_url.host
assert hostname
if not hostname.endswith("."):
hostname += "."
@ -43,6 +50,16 @@ class AbsoluteDNSAdapter(HTTPAdapter):
return super().send(request, **kwargs)
config_file_path = os.path.expanduser(
os.path.join(
os.getenv("XDG_CONFIG_HOME", "~/.config"), "conference-check", "config"
)
)
config = configparser.ConfigParser()
config.read(os.path.expanduser(config_file_path))
# Suppress only the single InsecureRequestWarning from urllib3
warnings.filterwarnings("ignore", category=InsecureRequestWarning)
@ -78,7 +95,6 @@ not_here_list = [
"Wikimedia Error",
"The page you requested could not be found",
"Ooops! Could Not Find It",
"OpenStreetMap Authentication Proxy",
]
@ -128,6 +144,13 @@ def send_mail(subject: str, body: str) -> None:
s.quit()
def load_yaml(name: str) -> typing.Any:
"""Load YAML."""
filename = os.path.expanduser(config["data"][name])
assert os.path.exists(filename)
return yaml.safe_load(open(filename))
def check_conference_web_site(name: str, src_url: str, year: int) -> bool:
"""Check if an individual web site is live."""
assert "{year}" in src_url

View file

@ -1,34 +0,0 @@
"""Conference classes and functions."""
import configparser
import os
import typing
from datetime import date
import yaml
config_file_path = os.path.expanduser(
os.path.join(
os.getenv("XDG_CONFIG_HOME", "~/.config"), "conference-check", "config"
)
)
assert os.path.exists(config_file_path)
config = configparser.ConfigParser()
config.read(os.path.expanduser(config_file_path))
class LiveConference(typing.TypedDict, total=False):
"""Live conference."""
conference: str
year: int
live: date
url: str | None
def load_yaml(name: str) -> typing.Any:
"""Load YAML."""
filename = os.path.expanduser(config["data"][name])
assert os.path.exists(filename)
return yaml.safe_load(open(filename))

View file

@ -1,53 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Conference check</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #212529;
text-align: left;
background-color: #fff;
}
h1 {
font-size: 2.5rem;
font-weight: 500;
margin-top: 0;
margin-bottom: 0.5rem;
}
a {
color: #0d6efd;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.text-right {
text-align: right;
}
</style>
</head>
<body>
<h1>Conference check</h1>
<p>Date when website went live.</p>
<table>
{% for l in live %}
<td class="text-right">
{{ l.live.strftime("%a, %d %b %Y") }}
🌍🎉
</td>
<td>
<a href="{{ l.url }}">{{ l.conference }} {{ l.year }}</a>
</td>
</tr>
{% endfor %}
</table>
</body>
</html>

View file

@ -1,25 +0,0 @@
#!/usr/bin/python3
"""When conference websites appeared."""
import flask
from conference import LiveConference, load_yaml
app = flask.Flask(__name__)
app.debug = False
@app.route("/")
async def index() -> str:
"""Index page."""
conferences = load_yaml("conferences")
live: list[LiveConference] = load_yaml("live")
for c in live:
c["url"] = conferences[c["conference"]].format(year=c["year"])
return flask.render_template("index.html", live=live, conferences=conferences)
if __name__ == "__main__":
app.run(host="0.0.0.0")