Created
September 16, 2024 17:55
-
-
Save bdemetris/1778e65133141643e0d92efb5fcc6b55 to your computer and use it in GitHub Desktop.
generates a report for conference room bookings that belong to terminated users
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from google.oauth2 import service_account | |
| from googleapiclient.discovery import build | |
| import datetime | |
| import csv | |
| SCOPES = ['https://www.googleapis.com/auth/calendar', | |
| 'https://www.googleapis.com/auth/admin.directory.user', | |
| 'https://www.googleapis.com/auth/admin.directory.resource.calendar' | |
| ] | |
| KEY_FILE = 'credentials-prod.json' | |
| DELEGATE = 'bdemetris-admin@flexport.com' | |
| def create_credential(): | |
| credentials = service_account.Credentials.from_service_account_file( | |
| filename=KEY_FILE, | |
| scopes=SCOPES | |
| ) | |
| return credentials.with_subject(DELEGATE) | |
| def create_cal_service(credentials): | |
| return build('calendar', 'v3', credentials=credentials) | |
| def create_admin_service(credentials): | |
| return build('admin', 'directory_v1', credentials=credentials) | |
| def get_terminated_users(service): | |
| results = ( | |
| service.users().list( | |
| customer="my_customer", | |
| query="isSuspended=true", | |
| maxResults=500) | |
| .execute() | |
| ) | |
| users = results.get("users", []) | |
| token = results['nextPageToken'] | |
| while token: | |
| results = (service.users().list( | |
| customer="my_customer", | |
| query="isSuspended=true", | |
| pageToken=token, | |
| maxResults=500 | |
| ).execute() | |
| ) | |
| users += results.get("users") | |
| token = results.get('nextPageToken', None) | |
| print("getting users " + str(len(users))) | |
| emails = [] | |
| for user in users: | |
| emails.append(user['primaryEmail']) | |
| return emails | |
| def get_calendar_events(service, calendar): | |
| request = ( | |
| service.events() | |
| .list( | |
| calendarId=calendar, | |
| maxResults=500, | |
| singleEvents=True, | |
| orderBy="startTime", | |
| ) | |
| ) | |
| events = [] | |
| while request is not None: | |
| events_doc = request.execute() | |
| events += events_doc.get('items', []) | |
| print('finding events ' + str(len(events))) | |
| request = ( | |
| service.events() | |
| .list_next(request, events_doc) | |
| ) | |
| return events | |
| def get_resource_room_calendars(service): | |
| request = ( | |
| service.resources().calendars() | |
| .list( | |
| customer="my_customer" | |
| ) | |
| ) | |
| calendars = [] | |
| while request is not None: | |
| calendars_doc = request.execute() | |
| calendars += calendars_doc.get('items', []) | |
| request = service.resources().calendars().list_next(request, calendars_doc) | |
| resource_emails = [] | |
| for calendar in calendars: | |
| resource_emails.append(calendar['resourceEmail']) | |
| return resource_emails | |
| def main(): | |
| creds = create_credential() | |
| cal_service = create_cal_service(creds) | |
| admin_service = create_admin_service(creds) | |
| # get all of the resource room calendars | |
| print('getting all calendars') | |
| calendars = get_resource_room_calendars(admin_service) | |
| print('found ' + str(len(calendars)) + ' calendars') | |
| cal_start_amount = len(calendars) | |
| cal_amount = cal_start_amount | |
| # get terminated users | |
| print('getting all terminated employees') | |
| termed_user_emails = get_terminated_users(admin_service) | |
| print('found ' + str(len(termed_user_emails)) + ' terminated employees') | |
| # open a csv for writing results | |
| with open('results.csv', 'w') as csvfile: | |
| file_writer = csv.writer(csvfile) | |
| file_writer.writerow([ | |
| 'calendar', 'id', 'organizer' | |
| ]) | |
| # loop through calendars. geting all events for that calendar | |
| for calendar in calendars: | |
| try: | |
| print('inspecting calendar', calendar, '{}/{}'.format(str(cal_amount), str(cal_start_amount))) | |
| events = get_calendar_events(cal_service, calendar) | |
| # loop through each calendar's events. | |
| # check if these events belong to terminated users | |
| for event in events: | |
| id = event['id'] | |
| organizer = event['organizer']['email'] | |
| if organizer in termed_user_emails: | |
| file_writer.writerow([ | |
| calendar, id, organizer | |
| ]) | |
| cal_amount = cal_amount - 1 | |
| except: | |
| file_writer.writerow( | |
| calendar, 'error' | |
| ) | |
| cal_amount = cal_amount - 1 | |
| pass | |
| if __name__ == '__main__': | |
| main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment