49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
import datetime
|
|
import dateutil.parser
|
|
import json
|
|
|
|
from platypush.backend.http.request import JsonHttpRequest
|
|
from platypush.message.event.http.ota.booking import NewReservationEvent
|
|
|
|
|
|
class GetReservationUpdates(JsonHttpRequest):
|
|
""" Gets the reservation updates """
|
|
def __init__(self, hotel_id, token, *args, **kwargs):
|
|
self.hotel_id = hotel_id
|
|
self.token = token
|
|
self.seen_entries = set()
|
|
self.last_update = None
|
|
|
|
args = {
|
|
'method': 'get',
|
|
'url': 'https://hub-api.booking.com/v1/hotels/{}/reservations'.format(self.hotel_id),
|
|
'headers': { 'X-Booking-Auth-Token': self.token },
|
|
'params': { 'updatedSince': datetime.date.today().isoformat() }
|
|
}
|
|
|
|
super().__init__(args=args, **kwargs)
|
|
|
|
|
|
def get_new_items(self, response):
|
|
response = response.json()
|
|
entries = []
|
|
|
|
for entry in response:
|
|
update_timestamp = dateutil.parser.parse(entry['updateDate'])
|
|
last_update_timestamp = dateutil.parser.parse(self.last_update['updateDate']) \
|
|
if self.last_update else None
|
|
|
|
if self.last_update is None \
|
|
or (update_timestamp > last_update_timestamp
|
|
and not (
|
|
entry['booker']['email'] == self.last_update['booker']['email']
|
|
and entry['status'] == self.last_update['status'])):
|
|
self.last_update = entry
|
|
entries.append(entry)
|
|
|
|
return NewReservationEvent(dict(self), entries)
|
|
|
|
|
|
# vim:sw=4:ts=4:et:
|
|
|