Add filters for space launches
This commit is contained in:
parent
c41bcc3304
commit
b65d79cb63
|
@ -136,7 +136,7 @@ def summarize_launch(launch: Launch) -> Summary:
|
|||
"launch_provider": launch_provider,
|
||||
"launch_provider_abbrev": launch_provider_abbrev,
|
||||
"launch_provider_type": get_nested(launch, ["launch_service_provider", "type"]),
|
||||
"rocket": launch["rocket"]["configuration"]["full_name"],
|
||||
"rocket": launch["rocket"]["configuration"],
|
||||
"mission": launch.get("mission"),
|
||||
"mission_name": get_nested(launch, ["mission", "name"]),
|
||||
"pad_name": launch["pad"]["name"],
|
||||
|
@ -174,7 +174,10 @@ def get_launches(
|
|||
existing.sort(reverse=True)
|
||||
|
||||
if refresh or not existing or (now - existing[0][0]).seconds > ttl:
|
||||
return next_launch_api(rocket_dir, limit=limit)
|
||||
try:
|
||||
return next_launch_api(rocket_dir, limit=limit)
|
||||
except Exception:
|
||||
pass # fallback to cached version
|
||||
|
||||
f = existing[0][1]
|
||||
|
||||
|
|
|
@ -6,7 +6,40 @@
|
|||
<div class="container-fluid mt-2">
|
||||
<h1>Space launches</h1>
|
||||
|
||||
{% for launch in rockets %}
|
||||
<h4>Filters</h4>
|
||||
|
||||
<p>Mission type:
|
||||
|
||||
{% if request.args.type %}<a href="{{ request.path }}">🗙</a>{% endif %}
|
||||
|
||||
{% for t in mission_types | sort %}
|
||||
{% if t == request.args.type %}
|
||||
<strong>{{ t }}</strong>
|
||||
{% else %}
|
||||
<a href="?type={{ t }}" class="text-nowrap">
|
||||
{{ t }}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if not loop.last %} | {% endif %}
|
||||
{% endfor %}
|
||||
</p>
|
||||
|
||||
<p>Vehicle:
|
||||
{% if request.args.rocket %}<a href="{{ request.path }}">🗙</a>{% endif %}
|
||||
|
||||
{% for r in rockets | sort %}
|
||||
{% if r == request.args.rockets %}
|
||||
<strong>{{ r }}</strong>
|
||||
{% else %}
|
||||
<a href="?rocket={{ r }}" class="text-nowrap">
|
||||
{{ r }}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if not loop.last %} | {% endif %}
|
||||
{% endfor %}
|
||||
</p>
|
||||
|
||||
{% for launch in launches %}
|
||||
{% set highlight =" bg-primary-subtle" if launch.slug in config.FOLLOW_LAUNCHES else "" %}
|
||||
{% set country = get_country(launch.country_code) %}
|
||||
<div class="row{{highlight}}">
|
||||
|
@ -24,7 +57,7 @@
|
|||
<div class="col">
|
||||
<div>
|
||||
{{ country.flag }}
|
||||
{{ launch.rocket }}
|
||||
{{ launch.rocket.full_name }}
|
||||
–
|
||||
<strong>{{launch.mission.name }}</strong>
|
||||
–
|
||||
|
|
28
web_view.py
28
web_view.py
|
@ -145,10 +145,34 @@ def launch_list() -> str:
|
|||
now = datetime.now()
|
||||
data_dir = app.config["DATA_DIR"]
|
||||
rocket_dir = os.path.join(data_dir, "thespacedevs")
|
||||
rockets = agenda.thespacedevs.get_launches(rocket_dir, limit=100)
|
||||
launches = agenda.thespacedevs.get_launches(rocket_dir, limit=100)
|
||||
|
||||
mission_type_filter = flask.request.args.get("type")
|
||||
rocket_filter = flask.request.args.get("rocket")
|
||||
|
||||
mission_types = {
|
||||
launch["mission"]["type"] for launch in launches if launch["mission"]
|
||||
}
|
||||
|
||||
rockets = {launch["rocket"]["full_name"] for launch in launches}
|
||||
|
||||
launches = [
|
||||
launch
|
||||
for launch in launches
|
||||
if (
|
||||
not mission_type_filter
|
||||
or (launch["mission"] and launch["mission"]["type"] == mission_type_filter)
|
||||
)
|
||||
and (not rocket_filter or launch["rocket"]["full_name"] == rocket_filter)
|
||||
]
|
||||
|
||||
return flask.render_template(
|
||||
"launches.html", rockets=rockets, now=now, get_country=agenda.get_country
|
||||
"launches.html",
|
||||
launches=launches,
|
||||
rockets=rockets,
|
||||
now=now,
|
||||
get_country=agenda.get_country,
|
||||
mission_types=mission_types,
|
||||
)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue