diff options
Diffstat (limited to 'deprecated/sheriff_rotation.py')
-rwxr-xr-x | deprecated/sheriff_rotation.py | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/deprecated/sheriff_rotation.py b/deprecated/sheriff_rotation.py new file mode 100755 index 00000000..f6873077 --- /dev/null +++ b/deprecated/sheriff_rotation.py @@ -0,0 +1,130 @@ +#!/usr/bin/python2 +# +# Copyright 2010 Google Inc. All Rights Reserved. +"""Script to rotate the weekly team sheriff. + +This script determines who the next sheriff is, updates the file +appropriately and sends out email notifying the team. +""" + +from __future__ import print_function + +__author__ = 'asharif@google.com (Ahmad Sharif)' + +import argparse +import datetime +import os +import sys + +from cros_utils import constants +from cros_utils import email_sender + + +class SheriffHandler(object): + """Main class for handling sheriff rotations.""" + + SHERIFF_FILE = os.path.join(constants.CROSTC_WORKSPACE, 'sheriffs.txt') + SUBJECT = 'You (%s) are the sheriff for the week: %s - %s' + BODY = ('Please see instructions here: ' + 'https://sites.google.com/a/google.com/chromeos-toolchain-team-home2' + '/home/sheriff-s-corner/sheriff-duties') + + def GetWeekInfo(self, day=datetime.datetime.today()): + """Return week_start, week_end.""" + + epoch = datetime.datetime.utcfromtimestamp(0) + delta_since_epoch = day - epoch + + abs_days = abs(delta_since_epoch.days) - 2 # To get it to start from Sat. + day_of_week = abs_days % 7 + + week_begin = day - datetime.timedelta(days=day_of_week) + week_end = day + datetime.timedelta(days=(6 - day_of_week)) + + strftime_format = '%A, %B %d %Y' + + return (week_begin.strftime(strftime_format), + week_end.strftime(strftime_format)) + + def GetCurrentSheriff(self): + """Return the current sheriff.""" + return self.ReadSheriffsAsList()[0] + + def ReadSheriffsAsList(self): + """Return the sheriff file contents.""" + contents = '' + with open(self.SHERIFF_FILE, 'r') as f: + contents = f.read() + return contents.splitlines() + + def WriteSheriffsAsList(self, to_write): + with open(self.SHERIFF_FILE, 'w') as f: + f.write('\n'.join(to_write)) + + def GetRotatedSheriffs(self, num_rotations=1): + """Return the sheriff file contents.""" + sheriff_list = self.ReadSheriffsAsList() + + new_sheriff_list = [] + num_rotations = num_rotations % len(sheriff_list) + new_sheriff_list = ( + sheriff_list[num_rotations:] + sheriff_list[:num_rotations]) + return new_sheriff_list + + def Email(self): + es = email_sender.EmailSender() + current_sheriff = self.GetCurrentSheriff() + week_start, week_end = self.GetWeekInfo() + subject = self.SUBJECT % (current_sheriff, week_start, week_end) + es.SendEmail([current_sheriff], + subject, + self.BODY, + email_from=os.path.basename(__file__), + email_cc=['c-compiler-chrome']) + + +def Main(argv): + parser = argparse.ArgumentParser() + parser.add_argument('-e', + '--email', + dest='email', + action='store_true', + help='Email the sheriff.') + parser.add_argument('-r', + '--rotate', + dest='rotate', + help='Print sheriffs after n rotations.') + parser.add_argument('-w', + '--write', + dest='write', + action='store_true', + default=False, + help='Wrote rotated contents to the sheriff file.') + + options = parser.parse_args(argv) + + sheriff_handler = SheriffHandler() + + current_sheriff = sheriff_handler.GetCurrentSheriff() + week_start, week_end = sheriff_handler.GetWeekInfo() + + print('Current sheriff: %s (%s - %s)' % (current_sheriff, week_start, + week_end)) + + if options.email: + sheriff_handler.Email() + + if options.rotate: + rotated_sheriffs = sheriff_handler.GetRotatedSheriffs(int(options.rotate)) + print('Rotated sheriffs (after %s rotations)' % options.rotate) + print('\n'.join(rotated_sheriffs)) + if options.write: + sheriff_handler.WriteSheriffsAsList(rotated_sheriffs) + print('Rotated sheriffs written to file.') + + return 0 + + +if __name__ == '__main__': + retval = Main(sys.argv[1:]) + sys.exit(retval) |