Index: Tools/Scripts/webkitpy/common/net/sheriff_calendar.py |
diff --git a/Tools/Scripts/webkitpy/common/net/sheriff_calendar.py b/Tools/Scripts/webkitpy/common/net/sheriff_calendar.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5af9ef9b71fb44e7b3744292739f4f8c5bc470f8 |
--- /dev/null |
+++ b/Tools/Scripts/webkitpy/common/net/sheriff_calendar.py |
@@ -0,0 +1,56 @@ |
+# Copyright 2014 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+import re |
+import urllib2 |
+ |
+# FIXME: This probably belongs in config.py? |
+BLINK_SHERIFF_URL = ( |
+ 'http://build.chromium.org/p/chromium.webkit/sheriff_webkit.js') |
+ |
+ |
+# Does not support unicode or special characters. |
+VALID_EMAIL_REGEXP = re.compile(r'^[A-Za-z0-9\.&\'\+-/=_]+@' |
+ '[A-Za-z0-9\.-]+$') |
+ |
+ |
+def _complete_email(name): |
+ """If the name does not include '@', append '@chromium.org'.""" |
+ if '@' not in name: |
+ return name + '@chromium.org' |
+ return name |
+ |
+ |
+def _names_from_sheriff_js(sheriff_js): |
+ match = re.match(r'document.write\(\'(.*)\'\)', sheriff_js) |
+ emails_string = match.group(1) |
+ # Detect 'none (channel is sheriff)' text and ignore it. |
+ if 'channel is sheriff' in emails_string.lower(): |
+ return [] |
+ return map(str.strip, emails_string.split(',')) |
+ |
+ |
+def _email_is_valid(email): |
+ """Determines whether the given email address is valid.""" |
+ return VALID_EMAIL_REGEXP.match(email) is not None |
+ |
+ |
+def _filter_emails(emails): |
+ """Returns the given list with any invalid email addresses removed.""" |
+ rv = [] |
+ for email in emails: |
+ if _email_is_valid(email): |
+ rv.append(email) |
+ else: |
+ print 'WARNING: Not including %s (invalid email address)' % email |
+ return rv |
+ |
+ |
+def _emails_from_url(sheriff_url): |
+ sheriff_js = urllib2.urlopen(sheriff_url).read() |
+ return map(_complete_email, _names_from_sheriff_js(sheriff_js)) |
+ |
+ |
+def current_gardener_emails(): |
+ return _emails_from_url(BLINK_SHERIFF_URL) |