forked from platypush/platypush
Added Booking.com endpoints automation
This commit is contained in:
parent
959296b15a
commit
b1f42c22ae
9 changed files with 74 additions and 5 deletions
|
@ -6,6 +6,7 @@ from threading import Thread
|
||||||
from platypush.bus import Bus
|
from platypush.bus import Bus
|
||||||
from platypush.backend import Backend
|
from platypush.backend import Backend
|
||||||
from platypush.backend.http.request import HttpRequest
|
from platypush.backend.http.request import HttpRequest
|
||||||
|
from platypush.message.request import Request
|
||||||
|
|
||||||
|
|
||||||
class HttpPollBackend(Backend):
|
class HttpPollBackend(Backend):
|
||||||
|
|
|
@ -39,6 +39,9 @@ class HttpRequest(object):
|
||||||
else:
|
else:
|
||||||
raise RuntimeError('{} is neither a dictionary nor an HttpRequest')
|
raise RuntimeError('{} is neither a dictionary nor an HttpRequest')
|
||||||
|
|
||||||
|
if 'timeout' not in self.args.kwargs:
|
||||||
|
self.args.kwargs['timeout'] = self.timeout
|
||||||
|
|
||||||
self.request_args = {
|
self.request_args = {
|
||||||
'method': self.args.method, 'url': self.args.url, **self.args.kwargs
|
'method': self.args.method, 'url': self.args.url, **self.args.kwargs
|
||||||
}
|
}
|
||||||
|
@ -53,8 +56,13 @@ class HttpRequest(object):
|
||||||
response = method(self.args.url, *self.args.args, **self.args.kwargs)
|
response = method(self.args.url, *self.args.args, **self.args.kwargs)
|
||||||
new_items = self.get_new_items(response)
|
new_items = self.get_new_items(response)
|
||||||
|
|
||||||
if new_items and not is_first_call and self.bus:
|
if isinstance(new_items, HttpEvent):
|
||||||
|
event = new_items
|
||||||
|
new_items = event.args['response']
|
||||||
|
else:
|
||||||
event = HttpEvent(dict(self), new_items)
|
event = HttpEvent(dict(self), new_items)
|
||||||
|
|
||||||
|
if new_items and not is_first_call and self.bus:
|
||||||
self.bus.post(event)
|
self.bus.post(event)
|
||||||
|
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
|
|
0
platypush/backend/http/request/ota/__init__.py
Normal file
0
platypush/backend/http/request/ota/__init__.py
Normal file
47
platypush/backend/http/request/ota/booking/__init__.py
Normal file
47
platypush/backend/http/request/ota/booking/__init__.py
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
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):
|
||||||
|
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:
|
||||||
|
|
0
platypush/message/event/http/ota/__init__.py
Normal file
0
platypush/message/event/http/ota/__init__.py
Normal file
9
platypush/message/event/http/ota/booking/__init__.py
Normal file
9
platypush/message/event/http/ota/booking/__init__.py
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
from platypush.message.event.http import HttpEvent
|
||||||
|
|
||||||
|
class NewReservationEvent(HttpEvent):
|
||||||
|
def __init__(self, request, response, *args, **kwargs):
|
||||||
|
super().__init__(request=request, response=response, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
# vim:sw=4:ts=4:et:
|
||||||
|
|
|
@ -131,7 +131,6 @@ class LoopProcedure(Procedure):
|
||||||
|
|
||||||
for item in iterable:
|
for item in iterable:
|
||||||
context[self.iterator_name] = item
|
context[self.iterator_name] = item
|
||||||
# print('**** context[{}]: {}, iterable type: {}'.format(self.iterator_name, item, type(iterable)))
|
|
||||||
response = super().execute(n_tries, **context)
|
response = super().execute(n_tries, **context)
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
|
@ -31,9 +31,13 @@ google-assistant-sdk[samples]
|
||||||
google-assistant-library
|
google-assistant-library
|
||||||
|
|
||||||
# Flic buttons support
|
# Flic buttons support
|
||||||
git+https://github.com/50ButtonsEach/fliclib-linux-hci
|
# It doesn't come with a pip package nor a setup.py,
|
||||||
|
# follow the instructions on github to get the flicd daemon
|
||||||
|
# running, set up the buttons you want to use, and then
|
||||||
|
# enable backend.button.flic in your configuration.
|
||||||
|
# git+https://github.com/50ButtonsEach/fliclib-linux-hci
|
||||||
|
|
||||||
# text2speech plugin: mplayer package
|
# text2speech plugin: mplayer system package
|
||||||
|
|
||||||
# Video support on RaspberryPi: omxplayer package
|
# Video support on RaspberryPi: omxplayer system package
|
||||||
|
|
||||||
|
|
1
setup.py
1
setup.py
|
@ -73,6 +73,7 @@ setup(
|
||||||
'Support for OMXPlayer plugin': ['omxplayer'],
|
'Support for OMXPlayer plugin': ['omxplayer'],
|
||||||
'Support for YouTube in the OMXPlayer plugin': ['youtube-dl'],
|
'Support for YouTube in the OMXPlayer plugin': ['youtube-dl'],
|
||||||
'Support for Google Assistant': ['google-assistant-library'],
|
'Support for Google Assistant': ['google-assistant-library'],
|
||||||
|
'Support for most of the HTTP poll backends': ['python-dateutil'],
|
||||||
# 'Support for Flic buttons': ['git+ssh://git@github.com/50ButtonsEach/fliclib-linux-hci']
|
# 'Support for Flic buttons': ['git+ssh://git@github.com/50ButtonsEach/fliclib-linux-hci']
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue