A more readable configuration for the calendar plugin.

The old type configuration
(`platypush.plugins.calendar.name.CalendarNamePlugin`) is a bit clunky.

Instead, since the type will always be a plugin, we should encourage
the use of `calendar.name` directly to identify the type.
This commit is contained in:
Fabio Manganiello 2023-10-01 01:09:15 +02:00
parent 966a6ce29e
commit 5ca3757834
Signed by untrusted user: blacklight
GPG key ID: D90FBA7F76362774
2 changed files with 24 additions and 14 deletions

View file

@ -301,11 +301,11 @@ backend.http:
# # Installing the dependencies: pip install 'platypush[ical,google]' # # Installing the dependencies: pip install 'platypush[ical,google]'
# calendar: # calendar:
# calendars: # calendars:
# - type: platypush.plugins.google.calendar.GoogleCalendarPlugin # - type: google.calendar
# - type: platypush.plugins.calendar.ical.CalendarIcalPlugin # - type: calendar.ical
# url: https://www.facebook.com/events/ical/upcoming/?uid=your_user_id&key=your_key # url: https://www.facebook.com/events/ical/upcoming/?uid=your_user_id&key=your_key
# - type: platypush.plugins.calendar.ical.CalendarIcalPlugin # - type: calendar.ical
# url: http://riemann/nextcloud/remote.php/dav/public-calendars/9JBWHR7iioM88Y4D?export # url: https://my.nextcloud.org/remote.php/dav/public-calendars/id?export
### ###
### ###

View file

@ -5,6 +5,7 @@ import importlib
from abc import ABCMeta, abstractmethod from abc import ABCMeta, abstractmethod
from platypush.context import get_plugin
from platypush.plugins import Plugin, action from platypush.plugins import Plugin, action
@ -32,10 +33,10 @@ class CalendarPlugin(Plugin, CalendarInterface):
calendars: calendars:
# Use the Google Calendar integration # Use the Google Calendar integration
- type: platypush.plugins.google.calendar.GoogleCalendarPlugin - type: google.calendar
# Import the Facebook events calendar via iCal URL # Import the Facebook events calendar via iCal URL
- type: platypush.plugins.calendar.ical.IcalCalendarPlugin - type: calendar.ical
url: https://www.facebook.com/ical/u.php?uid=USER_ID&key=FB_KEY url: https://www.facebook.com/ical/u.php?uid=USER_ID&key=FB_KEY
""" """
@ -44,17 +45,24 @@ class CalendarPlugin(Plugin, CalendarInterface):
self.calendars = [] self.calendars = []
for calendar in calendars: for calendar in calendars:
if 'type' not in calendar: cal_type = calendar.pop('type', None)
if cal_type is None:
self.logger.warning( self.logger.warning(
"Invalid calendar with no type specified: {}".format(calendar) "Invalid calendar with no type specified: %s", calendar
) )
continue continue
cal_type = calendar.pop('type') try:
# New `calendar.name` format
cal_plugin = get_plugin(cal_type).__class__
except Exception:
# Legacy `platypush.plugins.calendar.name.CalendarNamePlugin` format
module_name = '.'.join(cal_type.split('.')[:-1]) module_name = '.'.join(cal_type.split('.')[:-1])
class_name = cal_type.split('.')[-1] class_name = cal_type.split('.')[-1]
module = importlib.import_module(module_name) module = importlib.import_module(module_name)
self.calendars.append(getattr(module, class_name)(**calendar)) cal_plugin = getattr(module, class_name)
self.calendars.append(cal_plugin(**calendar))
@action @action
def get_upcoming_events(self, max_results=10): def get_upcoming_events(self, max_results=10):
@ -105,7 +113,9 @@ class CalendarPlugin(Plugin, CalendarInterface):
cal_events = calendar.get_upcoming_events().output or [] cal_events = calendar.get_upcoming_events().output or []
events.extend(cal_events) events.extend(cal_events)
except Exception as e: except Exception as e:
self.logger.warning('Could not retrieve events: {}'.format(str(e))) self.logger.warning(
'Could not retrieve events from calendar %s: %s', calendar, e
)
events = sorted( events = sorted(
events, events,