Skip to content

Instantly share code, notes, and snippets.

@bdemetris
Created September 16, 2024 17:55
Show Gist options
  • Select an option

  • Save bdemetris/1778e65133141643e0d92efb5fcc6b55 to your computer and use it in GitHub Desktop.

Select an option

Save bdemetris/1778e65133141643e0d92efb5fcc6b55 to your computer and use it in GitHub Desktop.
generates a report for conference room bookings that belong to terminated users
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