55 lines
1.4 KiB
Python
55 lines
1.4 KiB
Python
from bottle import route, run, template
|
|
from . import parcelsapp
|
|
from . import database
|
|
|
|
PARCELSAPP_CLIENT: parcelsapp.ParcelsAppClient | None = None
|
|
|
|
TEMPLATE = '''
|
|
<doctype HTML>
|
|
<html>
|
|
<head>
|
|
<style type="text/css">
|
|
|
|
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<h1>My very own thingy</h1>
|
|
|
|
<main>
|
|
|
|
<div class="tracking-grid">
|
|
% for entry, tracking_data in tracking_results:
|
|
<div class="tracking-name"><a href="{{tracking_data.tracking_url}}">{{ entry.name }}/{{entry.number}}</a></div>
|
|
<div class="tracking-status">{{ tracking_data.status }}</div>
|
|
<div class="tracking-status">{{ tracking_data.latest_state().status }}</div>
|
|
<div class="tracking-status">{{ tracking_data.latest_state().date }}</div>
|
|
% end
|
|
</div>
|
|
|
|
</main>
|
|
|
|
</body>
|
|
</html>
|
|
'''
|
|
|
|
@route('/')
|
|
def index():
|
|
tracking_entries = database.get_tracking_numbers()
|
|
tracking_numbers = [e.number for e in tracking_entries]
|
|
|
|
tracking_results = PARCELSAPP_CLIENT.get_tracking_status(tracking_numbers)
|
|
|
|
tracking_results_by_id = {result.tracking_number: result for result in tracking_results}
|
|
|
|
derps = [(e, tracking_results_by_id.get(e.number)) for e in tracking_entries]
|
|
derps.sort(key=lambda x: x[1].latest_state().date)
|
|
|
|
return template(TEMPLATE, tracking_results=derps)
|
|
|
|
def initialize_server(parcelsapp_client: parcelsapp.ParcelsAppClient):
|
|
global PARCELSAPP_CLIENT
|
|
PARCELSAPP_CLIENT = parcelsapp_client
|
|
run(host='localhost', port=8080, debug=True)
|