diff --git a/setup.py b/setup.py index 320ba62..62cd02b 100644 --- a/setup.py +++ b/setup.py @@ -32,5 +32,10 @@ setuptools.setup( 'pytz', 'PyYAML>=3.13' ], - scripts=['manage-calendars.py', 'sync-calendar.py'] + entry_points={ + "console_scripts": [ + "sync-ics2gcal = sync_ics2gcal.sync_calendar:main", + "manage-ics2gcal = sync_ics2gcal.manage_calendars:main", + ] + } ) \ No newline at end of file diff --git a/manage-calendars.py b/sync_ics2gcal/manage_calendars.py similarity index 95% rename from manage-calendars.py rename to sync_ics2gcal/manage_calendars.py index 591a029..b1236a2 100644 --- a/manage-calendars.py +++ b/sync_ics2gcal/manage_calendars.py @@ -1,104 +1,104 @@ -import argparse -import datetime -import logging.config - -import yaml -from pytz import utc - -from sync_ics2gcal import GoogleCalendar, GoogleCalendarService - - -def parse_args(): - parser = argparse.ArgumentParser( - description="manage google calendars in service account") - command_subparsers = parser.add_subparsers(help='command', dest='command') - command_subparsers.add_parser('list', help='list calendars') - parser_create = command_subparsers.add_parser( - 'create', help='create calendar') - parser_create.add_argument( - 'summary', action='store', help='new calendar summary') - parser_create.add_argument('--timezone', action='store', - default=None, required=False, help='new calendar timezone') - parser_create.add_argument( - '--public', default=False, action='store_true', help='make calendar public') - parser_add_owner = command_subparsers.add_parser( - 'add_owner', help='add owner to calendar') - parser_add_owner.add_argument('id', action='store', help='calendar id') - parser_add_owner.add_argument( - 'owner_email', action='store', help='new owner email') - parser_remove = command_subparsers.add_parser( - 'remove', help='remove calendar') - parser_remove.add_argument( - 'id', action='store', help='calendar id to remove') - parser_rename = command_subparsers.add_parser( - 'rename', help='rename calendar') - parser_rename.add_argument( - 'id', action='store', help='calendar id') - parser_rename.add_argument( - 'summary', action='store', help='new summary') - - args = parser.parse_args() - if args.command is None: - parser.print_usage() - return args - - -def load_config(): - with open('config.yml', 'r', encoding='utf-8') as f: - result = yaml.safe_load(f) - return result - - -def list_calendars(service): - response = service.calendarList().list(fields='items(id,summary)').execute() - for calendar in response.get('items'): - print('{summary}: {id}'.format_map(calendar)) - - -def create_calendar(service, summary, timezone, public): - calendar = GoogleCalendar(service, None) - calendar.create(summary, timezone) - if public: - calendar.make_public() - print('{}: {}'.format(summary, calendar.calendarId)) - - -def add_owner(service, id, owner_email): - calendar = GoogleCalendar(service, id) - calendar.add_owner(owner_email) - print('to {} added owner: {}'.format(id, owner_email)) - - -def remove_calendar(service, id): - calendar = GoogleCalendar(service, id) - calendar.delete() - print('removed: {}'.format(id)) - -def rename_calendar(service, id, summary): - calendar = {'summary': summary} - service.calendars().patch(body=calendar, calendarId=id).execute() - print('{}: {}'.format(summary, id)) - -def main(): - args = parse_args() - config = load_config() - - if 'logging' in config: - logging.config.dictConfig(config['logging']) - - srv_acc_file = config['service_account'] - service = GoogleCalendarService.from_srv_acc_file(srv_acc_file) - - if 'list' == args.command: - list_calendars(service) - elif 'create' == args.command: - create_calendar(service, args.summary, args.timezone, args.public) - elif 'add_owner' == args.command: - add_owner(service, args.id, args.owner_email) - elif 'remove' == args.command: - remove_calendar(service, args.id) - elif 'rename' == args.command: - rename_calendar(service, args.id, args.summary) - -if __name__ == '__main__': - main() +import argparse +import datetime +import logging.config + +import yaml +from pytz import utc + +from . import GoogleCalendar, GoogleCalendarService + + +def parse_args(): + parser = argparse.ArgumentParser( + description="manage google calendars in service account") + command_subparsers = parser.add_subparsers(help='command', dest='command') + command_subparsers.add_parser('list', help='list calendars') + parser_create = command_subparsers.add_parser( + 'create', help='create calendar') + parser_create.add_argument( + 'summary', action='store', help='new calendar summary') + parser_create.add_argument('--timezone', action='store', + default=None, required=False, help='new calendar timezone') + parser_create.add_argument( + '--public', default=False, action='store_true', help='make calendar public') + parser_add_owner = command_subparsers.add_parser( + 'add_owner', help='add owner to calendar') + parser_add_owner.add_argument('id', action='store', help='calendar id') + parser_add_owner.add_argument( + 'owner_email', action='store', help='new owner email') + parser_remove = command_subparsers.add_parser( + 'remove', help='remove calendar') + parser_remove.add_argument( + 'id', action='store', help='calendar id to remove') + parser_rename = command_subparsers.add_parser( + 'rename', help='rename calendar') + parser_rename.add_argument( + 'id', action='store', help='calendar id') + parser_rename.add_argument( + 'summary', action='store', help='new summary') + + args = parser.parse_args() + if args.command is None: + parser.print_usage() + return args + + +def load_config(): + with open('config.yml', 'r', encoding='utf-8') as f: + result = yaml.safe_load(f) + return result + + +def list_calendars(service): + response = service.calendarList().list(fields='items(id,summary)').execute() + for calendar in response.get('items'): + print('{summary}: {id}'.format_map(calendar)) + + +def create_calendar(service, summary, timezone, public): + calendar = GoogleCalendar(service, None) + calendar.create(summary, timezone) + if public: + calendar.make_public() + print('{}: {}'.format(summary, calendar.calendarId)) + + +def add_owner(service, id, owner_email): + calendar = GoogleCalendar(service, id) + calendar.add_owner(owner_email) + print('to {} added owner: {}'.format(id, owner_email)) + + +def remove_calendar(service, id): + calendar = GoogleCalendar(service, id) + calendar.delete() + print('removed: {}'.format(id)) + +def rename_calendar(service, id, summary): + calendar = {'summary': summary} + service.calendars().patch(body=calendar, calendarId=id).execute() + print('{}: {}'.format(summary, id)) + +def main(): + args = parse_args() + config = load_config() + + if 'logging' in config: + logging.config.dictConfig(config['logging']) + + srv_acc_file = config['service_account'] + service = GoogleCalendarService.from_srv_acc_file(srv_acc_file) + + if 'list' == args.command: + list_calendars(service) + elif 'create' == args.command: + create_calendar(service, args.summary, args.timezone, args.public) + elif 'add_owner' == args.command: + add_owner(service, args.id, args.owner_email) + elif 'remove' == args.command: + remove_calendar(service, args.id) + elif 'rename' == args.command: + rename_calendar(service, args.id, args.summary) + +if __name__ == '__main__': + main() diff --git a/sync-calendar.py b/sync_ics2gcal/sync_calendar.py similarity index 93% rename from sync-calendar.py rename to sync_ics2gcal/sync_calendar.py index f0e07cf..37f5805 100644 --- a/sync-calendar.py +++ b/sync_ics2gcal/sync_calendar.py @@ -1,53 +1,52 @@ -import yaml - -import dateutil.parser -import datetime -import logging -import logging.config -from sync_ics2gcal import ( - CalendarConverter, - GoogleCalendarService, - GoogleCalendar, - CalendarSync -) - - -def load_config(): - with open('config.yml', 'r', encoding='utf-8') as f: - result = yaml.safe_load(f) - return result - - -def get_start_date(date_str): - result = datetime.datetime(1,1,1) - if 'now' == date_str: - result = datetime.datetime.utcnow() - else: - result = dateutil.parser.parse(date_str) - return result - - -def main(): - config = load_config() - - if 'logging' in config: - logging.config.dictConfig(config['logging']) - - calendarId = config['calendar']['google_id'] - ics_filepath = config['calendar']['source'] - srv_acc_file = config['service_account'] - - start = get_start_date(config['start_from']) - - converter = CalendarConverter() - converter.load(ics_filepath) - - service = GoogleCalendarService.from_srv_acc_file(srv_acc_file) - gcalendar = GoogleCalendar(service, calendarId) - - sync = CalendarSync(gcalendar, converter) - sync.prepare_sync(start) - sync.apply() - -if __name__ == '__main__': - main() +import yaml + +import dateutil.parser +import datetime +import logging +import logging.config +from . import ( + CalendarConverter, + GoogleCalendarService, + GoogleCalendar, + CalendarSync +) + +def load_config(): + with open('config.yml', 'r', encoding='utf-8') as f: + result = yaml.safe_load(f) + return result + + +def get_start_date(date_str): + result = datetime.datetime(1,1,1) + if 'now' == date_str: + result = datetime.datetime.utcnow() + else: + result = dateutil.parser.parse(date_str) + return result + + +def main(): + config = load_config() + + if 'logging' in config: + logging.config.dictConfig(config['logging']) + + calendarId = config['calendar']['google_id'] + ics_filepath = config['calendar']['source'] + srv_acc_file = config['service_account'] + + start = get_start_date(config['start_from']) + + converter = CalendarConverter() + converter.load(ics_filepath) + + service = GoogleCalendarService.from_srv_acc_file(srv_acc_file) + gcalendar = GoogleCalendar(service, calendarId) + + sync = CalendarSync(gcalendar, converter) + sync.prepare_sync(start) + sync.apply() + +if __name__ == '__main__': + main()