aboutsummaryrefslogtreecommitdiff
path: root/deprecated/sheriff_rotation.py
diff options
context:
space:
mode:
Diffstat (limited to 'deprecated/sheriff_rotation.py')
-rwxr-xr-xdeprecated/sheriff_rotation.py130
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)