From 76006f39a0a4e4ee13bdad3ca5a4a9d6cf657f3a Mon Sep 17 00:00:00 2001 From: Jon Michael Aanes Date: Wed, 22 Jan 2025 18:19:05 +0100 Subject: [PATCH] Added form to add stuff --- package_tracking/__init__.py | 2 +- package_tracking/database.py | 3 +-- package_tracking/http.py | 42 +++++++++++++++++++++++++++++----- package_tracking/parcelsapp.py | 12 +++++----- 4 files changed, 44 insertions(+), 15 deletions(-) diff --git a/package_tracking/__init__.py b/package_tracking/__init__.py index 53b02b5..b6c9992 100644 --- a/package_tracking/__init__.py +++ b/package_tracking/__init__.py @@ -7,4 +7,4 @@ Use the [Parcels API](https://parcelsapp.com/). __all__ = ['__version__'] -from _version import __version__ +from ._version import __version__ diff --git a/package_tracking/database.py b/package_tracking/database.py index 441f320..43a704e 100644 --- a/package_tracking/database.py +++ b/package_tracking/database.py @@ -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: diff --git a/package_tracking/http.py b/package_tracking/http.py index 368459a..f26fe6a 100644 --- a/package_tracking/http.py +++ b/package_tracking/http.py @@ -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; +} @@ -94,12 +106,22 @@ a { + + """ -@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) diff --git a/package_tracking/parcelsapp.py b/package_tracking/parcelsapp.py index 68db0d5..9f0628b 100644 --- a/package_tracking/parcelsapp.py +++ b/package_tracking/parcelsapp.py @@ -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