11""" Python wrapper for the PostNL API """
22
3- import logging
43from datetime import datetime , timedelta
4+ import re
5+
56import requests
67
78BASE_URL = 'https://jouw.postnl.nl'
1718 'user-agent' : 'PostNL/1 CFNetwork/889.3 Darwin/17.2.0' ,
1819}
1920
21+
22+ class UnauthorizedException (Exception ):
23+ pass
24+
25+
2026class PostNL_API (object ):
2127 """ Interface class for the PostNL API """
2228
@@ -39,10 +45,10 @@ def __init__(self, user, password):
3945 data = response .json ()
4046
4147 except Exception :
42- raise (Exception )
48+ raise (UnauthorizedException () )
4349
4450 if 'error' in data :
45- raise Exception (data ['error' ])
51+ raise UnauthorizedException (data ['error' ])
4652
4753 self ._access_token = data ['access_token' ]
4854 self ._refresh_token = data ['refresh_token' ]
@@ -70,10 +76,25 @@ def _refresh_access_token(self):
7076 response = requests .request (
7177 'POST' , AUTHENTICATE_URL , data = payload , headers = DEFAULT_HEADER )
7278
73- data = response .json () # TODO Add error handling
79+ data = response .json ()
7480
7581 self ._access_token = data ['access_token' ]
7682
83+ def parse_datetime (self , text , dateFormat = '%d-%m-%Y' , timeFormat = '%H:%M' ):
84+
85+ def parse_date (date ):
86+ return datetime .strptime (date .group (1 )
87+ .replace (' ' , '' )[:- 6 ], '%Y-%m-%dT%H:%M:%S' ).strftime (dateFormat )
88+
89+ def parse_time (date ):
90+ return datetime .strptime (date .group (1 )
91+ .replace (' ' , '' )[:- 6 ], '%Y-%m-%dT%H:%M:%S' ).strftime (timeFormat )
92+
93+ text = re .sub (r'{(?:Date|dateAbs):(.*?)}' , parse_date , text )
94+ text = re .sub (r'{(?:time):(.*?)}' , parse_time , text )
95+
96+ return text
97+
7798 def get_shipments (self ):
7899 """ Retrieve shipments """
79100
@@ -156,7 +177,7 @@ def validate_letters(self):
156177
157178 def get_letters (self ):
158179 """ Retrieve letters """
159-
180+
160181 self ._is_token_expired ()
161182
162183 headers = {
@@ -237,7 +258,7 @@ def get_relevant_letters(self):
237258 expected_delivery_date = datetime .strptime (
238259 letter ['expectedDeliveryDate' ][:19 ], "%Y-%m-%dT%H:%M:%S" )
239260
240- if expected_delivery_date .date () = = datetime .today ().date ():
261+ if expected_delivery_date .date () > = datetime .today ().date ():
241262 relevant_letters .append (letter )
242263
243264 return relevant_letters
0 commit comments