Skip to content
This repository was archived by the owner on Nov 6, 2025. It is now read-only.

Commit ece7bb0

Browse files
eavanvalkenburgiMicknl
authored andcommitted
Integrated and extended @peternijssen version (#10) (#11)
* Added objects. Validate letters. Add distributions * small fixes in package and letter, added relevant method and black formatted * refined classes, added to changelog and updated test_nl...
1 parent 1cc274c commit ece7bb0

10 files changed

Lines changed: 307 additions & 263 deletions

File tree

.gitignore

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,13 @@ venv.bak/
9999
/site
100100

101101
# mypy
102-
.mypy_cache/
102+
.mypy_cache/
103+
104+
# intellij
105+
.idea/
106+
107+
# vscode
108+
.vscode/
109+
110+
#test script
111+
test.py

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](http://keepachangelog.com/)
55
and this project adheres to [Semantic Versioning](http://semver.org/).
66

7+
## 1.2.0 - 2019-08-08
8+
### Added
9+
- Created packages and letters classes
10+
- Isoformat parsed datetime for delivery and planned dates
11+
- Added properties for is_delivered and delivery_today
12+
- Renamed methods to get_X with X: deliveries, distributions and letters
13+
714
## 1.0.2 - 2018-05-28
815
### Fixed
916
- Traceback when no deliveryDate is found in shipment

README.md

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,29 @@ from postnl_api import PostNL_API
1919
# Login using your jouw.postnl.nl credentials
2020
postnl = PostNL_API('email@domain.com', 'password')
2121

22-
# Get relevant shipments
23-
shipments = postnl.get_relevant_shipments()
22+
# Get relevant deliveries
23+
print("Getting relevant deliveries")
24+
rel_deliveries = postnl.get_relevant_deliveries()
25+
for delivery in rel_deliveries:
26+
print(delivery.debug_string)
27+
28+
# Get relevant deliveries
29+
print("Getting all deliveries")
30+
all_deliveries = postnl.get_deliveries()
31+
for delivery in all_deliveries:
32+
print(delivery.debug_string)
33+
34+
# Get relevant deliveries
35+
print("Getting all distributions (sent packages)")
36+
distributions = postnl.get_distributions()
37+
for distribution in distributions:
38+
print(distribution.debug_string)
2439

25-
for shipment in shipments:
26-
name = shipment['settings']['title']
27-
status = shipment['status']['formatted']['short']
28-
status = postnl.parse_datetime(status, '%d-%m-%Y', '%H:%M')
29-
30-
print (shipment['key'] + ' ' + name + ' ' + status)
31-
3240
# Get letters
41+
print("Getting all letters, if that function is turned on")
3342
letters = postnl.get_letters()
34-
print (letters)
43+
for letter in letters:
44+
print(letter.debug_string)
3545
```
3646

3747
## Miscellaneous

postnl_api/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
from postnl_api.postnl_api import PostNL_API, UnauthorizedException
1+
from .postnl_api import PostNL_API, UnauthorizedException

postnl_api/items/__init__.py

Whitespace-only changes.

postnl_api/items/letter.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from datetime import datetime
2+
3+
4+
class Letter(object):
5+
def __init__(self, data, documents):
6+
self.id = data.get("barcode")
7+
self.delivery_date = datetime.fromisoformat(data.get("expectedDeliveryDate"))
8+
self.status_message = None
9+
self.image = None
10+
11+
if data.get("phase") is not None:
12+
self.status_message = data.get("phase").get("message")
13+
14+
if len(documents.get("documents")) > 0:
15+
self.image = documents.get("documents")[0].get("link") + "?type=png"
16+
17+
def __str__(self):
18+
return f"{self.id} {self.status_message} {self.delivery_date.date()}"

postnl_api/items/package.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from datetime import datetime
2+
3+
4+
class Package(object):
5+
def __init__(self, data):
6+
self.id = data.get("key")
7+
self.name = data.get("title")
8+
self.type = data.get("settings").get("box")
9+
self.status = data.get("status").get("deliveryStatus")
10+
self.status_message = data.get("status").get("phase").get("message")
11+
self.delivery_date = datetime.fromisoformat(
12+
data.get("status").get("delivery").get("deliveryDate")
13+
)
14+
self.planned_date = None
15+
self.planned_from = None
16+
self.planned_to = None
17+
if (
18+
data.get("status").get("enroute") is not None
19+
and data.get("status").get("enroute").get("timeframe") is not None
20+
):
21+
self.planned_date = datetime.fromisoformat(
22+
data.get("status").get("enroute").get("timeframe").get("date")
23+
)
24+
self.planned_from = (
25+
data.get("status").get("enroute").get("timeframe").get("from")
26+
)
27+
self.planned_to = (
28+
data.get("status").get("enroute").get("timeframe").get("to")
29+
)
30+
self.url = data.get("status").get("webUrl")
31+
32+
@property
33+
def is_delivered(self):
34+
return self.status == "Delivered"
35+
36+
@property
37+
def delivery_today(self):
38+
return self.delivery_date.date() == datetime.today().date()
39+
40+
def __str__(self):
41+
return f"{self.id} {self.name} {self.type} {self.status} {self.status_message} {self.delivery_date.date()} {self.planned_date} {self.planned_from} {self.planned_to}"

0 commit comments

Comments
 (0)