1
0

Added form to add stuff
All checks were successful
Run Python tests (through Pytest) / Test (push) Successful in 25s
Verify Python project can be installed, loaded and have version checked / Test (push) Successful in 22s

This commit is contained in:
Jon Michael Aanes 2025-01-22 18:19:05 +01:00
parent 96440c225a
commit 76006f39a0
4 changed files with 44 additions and 15 deletions

View File

@ -7,4 +7,4 @@ Use the [Parcels API](https://parcelsapp.com/).
__all__ = ['__version__']
from _version import __version__
from ._version import __version__

View File

@ -10,7 +10,6 @@ class TrackingNumberEntry:
assert ' ' not in self.number
assert '\t' not in self.number
assert '\n' not in self.number
assert ' ' not in self.name
assert '\t' not in self.name
assert '\n' not in self.name
@ -23,7 +22,7 @@ def get_tracking_numbers() -> list[TrackingNumberEntry]:
lines = f.read().split('\n')
lines = [line.split(' ') for line in lines if len(line) > 0]
return [TrackingNumberEntry(line[0], line[1]) for line in lines]
return [TrackingNumberEntry(line[0], ' '.join(line[1:])) for line in lines]
def add_tracking_number(tracking_number: TrackingNumberEntry) -> None:

View File

@ -1,4 +1,4 @@
from bottle import route, run, template
import bottle
from . import database, parcelsapp
@ -72,6 +72,18 @@ body {
a {
color:black;
}
.add-number-form {
display: grid;
grid-template: auto 1fr;
max-width: 300px;
grid-gap: 2px;
margin: auto;
}
.add-number-form .add {
grid-column: 1 / 3;
}
</style>
</head>
<body>
@ -94,12 +106,22 @@ a {
</main>
<footer>
<form action="/add" method="POST" class="add-number-form">
<label for="name">Name</label>
<input type="text" name="name" id="name" required />
<label for="tracking-number">Number</label>
<input type="text" name="tracking-number" id="tracking-number" required />
<input class="add" type="submit" value="Add Tracking Number!" />
</form>
</footer>
</body>
</html>
"""
@route('/')
@bottle.route('/')
def index():
tracking_entries = database.get_tracking_numbers()
tracking_numbers = [e.number for e in tracking_entries]
@ -110,13 +132,21 @@ def index():
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, reverse=True)
tracking_results_with_name = [(e, tracking_results_by_id.get(e.number)) for e in tracking_entries]
tracking_results_with_name.sort(key=lambda x: x[1].latest_state().date, reverse=True)
return template(TEMPLATE, tracking_results=derps)
return bottle.template(TEMPLATE, tracking_results=tracking_results_with_name)
@bottle.route('/add', method='POST')
def add():
number: str = bottle.request.forms['tracking-number']
name: str = bottle.request.forms['name']
database.add_tracking_number(database.TrackingNumberEntry(number, name))
return bottle.redirect('/')
def initialize_server(parcelsapp_client: parcelsapp.ParcelsAppClient):
global PARCELSAPP_CLIENT
PARCELSAPP_CLIENT = parcelsapp_client
run(host='localhost', port=8080, debug=True)
bottle.run(host='localhost', port=8080, debug=True)

View File

@ -38,12 +38,13 @@ class ParcelInfo:
class ParcelsAppClient:
def __init__(self, api_key: str):
assert api_key is not None, 'Missing API Key'
self.api_key = api_key
def _request_json(self, method: str, url: str, **kwargs) -> dict:
request_json_data = {'apiKey': self.api_key, **kwargs}
request_json_data = {'apiKey': self.api_key, 'language': 'en', **kwargs}
response = requests.request(
method=method, url=URL_TRACKING, json=request_json_data,
method=method, url=url, json=request_json_data,
)
response.raise_for_status()
json_data = response.json()
@ -53,7 +54,7 @@ class ParcelsAppClient:
return json_data
def check_tracking_status(self, uuid: str) -> dict:
"""Function to check tracking status with UUID"""
"""Function to check tracking status with UUID."""
json_data = self._request_json('GET', URL_TRACKING, uuid=uuid)
if json_data['done']:
logger.info('Tracking complete')
@ -65,12 +66,11 @@ class ParcelsAppClient:
def _get_tracking_status_to_json(self, tracking_ids: list[str]) -> dict:
shipments = [
{'trackingId': id, 'language': 'en', 'country': target_country}
for id in tracking_ids
{'trackingId': tracking_id, 'country': target_country}
for tracking_id in tracking_ids
]
# Initiate tracking request
json_data = self._request_json('POST', URL_TRACKING, shipments=shipments)
if json_data.get('done'):
return json_data