Added form to add stuff
This commit is contained in:
parent
96440c225a
commit
76006f39a0
|
@ -7,4 +7,4 @@ Use the [Parcels API](https://parcelsapp.com/).
|
||||||
|
|
||||||
__all__ = ['__version__']
|
__all__ = ['__version__']
|
||||||
|
|
||||||
from _version import __version__
|
from ._version import __version__
|
||||||
|
|
|
@ -10,7 +10,6 @@ class TrackingNumberEntry:
|
||||||
assert ' ' not in self.number
|
assert ' ' not in self.number
|
||||||
assert '\t' not in self.number
|
assert '\t' not in self.number
|
||||||
assert '\n' not in self.number
|
assert '\n' not in self.number
|
||||||
assert ' ' not in self.name
|
|
||||||
assert '\t' not in self.name
|
assert '\t' not in self.name
|
||||||
assert '\n' 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 = f.read().split('\n')
|
||||||
|
|
||||||
lines = [line.split(' ') for line in lines if len(line) > 0]
|
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:
|
def add_tracking_number(tracking_number: TrackingNumberEntry) -> None:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from bottle import route, run, template
|
import bottle
|
||||||
|
|
||||||
from . import database, parcelsapp
|
from . import database, parcelsapp
|
||||||
|
|
||||||
|
@ -72,6 +72,18 @@ body {
|
||||||
a {
|
a {
|
||||||
color:black;
|
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>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -94,12 +106,22 @@ a {
|
||||||
|
|
||||||
</main>
|
</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>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
@route('/')
|
@bottle.route('/')
|
||||||
def index():
|
def index():
|
||||||
tracking_entries = database.get_tracking_numbers()
|
tracking_entries = database.get_tracking_numbers()
|
||||||
tracking_numbers = [e.number for e in tracking_entries]
|
tracking_numbers = [e.number for e in tracking_entries]
|
||||||
|
@ -110,13 +132,21 @@ def index():
|
||||||
result.tracking_number: result for result in tracking_results
|
result.tracking_number: result for result in tracking_results
|
||||||
}
|
}
|
||||||
|
|
||||||
derps = [(e, tracking_results_by_id.get(e.number)) for e in tracking_entries]
|
tracking_results_with_name = [(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.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):
|
def initialize_server(parcelsapp_client: parcelsapp.ParcelsAppClient):
|
||||||
global PARCELSAPP_CLIENT
|
global PARCELSAPP_CLIENT
|
||||||
PARCELSAPP_CLIENT = parcelsapp_client
|
PARCELSAPP_CLIENT = parcelsapp_client
|
||||||
run(host='localhost', port=8080, debug=True)
|
bottle.run(host='localhost', port=8080, debug=True)
|
||||||
|
|
|
@ -38,12 +38,13 @@ class ParcelInfo:
|
||||||
|
|
||||||
class ParcelsAppClient:
|
class ParcelsAppClient:
|
||||||
def __init__(self, api_key: str):
|
def __init__(self, api_key: str):
|
||||||
|
assert api_key is not None, 'Missing API Key'
|
||||||
self.api_key = api_key
|
self.api_key = api_key
|
||||||
|
|
||||||
def _request_json(self, method: str, url: str, **kwargs) -> dict:
|
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(
|
response = requests.request(
|
||||||
method=method, url=URL_TRACKING, json=request_json_data,
|
method=method, url=url, json=request_json_data,
|
||||||
)
|
)
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
json_data = response.json()
|
json_data = response.json()
|
||||||
|
@ -53,7 +54,7 @@ class ParcelsAppClient:
|
||||||
return json_data
|
return json_data
|
||||||
|
|
||||||
def check_tracking_status(self, uuid: str) -> dict:
|
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)
|
json_data = self._request_json('GET', URL_TRACKING, uuid=uuid)
|
||||||
if json_data['done']:
|
if json_data['done']:
|
||||||
logger.info('Tracking complete')
|
logger.info('Tracking complete')
|
||||||
|
@ -65,12 +66,11 @@ class ParcelsAppClient:
|
||||||
|
|
||||||
def _get_tracking_status_to_json(self, tracking_ids: list[str]) -> dict:
|
def _get_tracking_status_to_json(self, tracking_ids: list[str]) -> dict:
|
||||||
shipments = [
|
shipments = [
|
||||||
{'trackingId': id, 'language': 'en', 'country': target_country}
|
{'trackingId': tracking_id, 'country': target_country}
|
||||||
for id in tracking_ids
|
for tracking_id in tracking_ids
|
||||||
]
|
]
|
||||||
|
|
||||||
# Initiate tracking request
|
# Initiate tracking request
|
||||||
|
|
||||||
json_data = self._request_json('POST', URL_TRACKING, shipments=shipments)
|
json_data = self._request_json('POST', URL_TRACKING, shipments=shipments)
|
||||||
if json_data.get('done'):
|
if json_data.get('done'):
|
||||||
return json_data
|
return json_data
|
||||||
|
|
Loading…
Reference in New Issue
Block a user