Source code for ulaval_notify.api.notifications
from requests import Request
from pkg_resources import resource_filename
from .constants import BASE_URL
[docs]def create_request(session_manager):
return Request(
'GET',
NotificationManager.notification_route,
params={
'idutilisateurmpo': session_manager.user_details.user_id,
'statutpublication': 'PUBLIE'
},
headers={
'Accept': 'application/json, text/plain, */*'
}
)
[docs]class NotificationManager:
notification_route = '{base_url}/communication/v1/messagesimportants'.format(
base_url=BASE_URL
)
def __init__(self, session_manager, callback, create_request):
self._session_manager = session_manager
self._callback = callback
self._seen_notifications = set()
self._create_request = create_request
[docs] def check_notifications(self):
response = self._session_manager.send(self._create_request(self._session_manager))
if not response:
return
self._display_notifications(
notification for notification
in response.get('messagesImportants', ())
if notification.get('idMessageImportant')
not in self._seen_notifications
)
def _display_notifications(self, notifications):
for notification in notifications:
self._seen_notifications.add(
notification.get('idMessageImportant')
)
self._callback(notification)
[docs]def send_linux_notification(notification):
import notify2
notify2.init('ulaval-notify')
notification = notify2.Notification(
'New notification',
'{message}'.format(message=notification.get('messageHtml')),
resource_filename('ulaval_notify', 'resources/images/ulaval-logo.png')
)
notification.show()
[docs]def find_appropriate_notification_callback(platform_name):
notification_callbacks_by_platform_name = {
'linux': send_linux_notification
}
notification_callback = send_linux_notification
for platform, callback in notification_callbacks_by_platform_name.items():
if platform_name.startswith(platform):
notification_callback = callback
return notification_callback