Home | History | Annotate | Download | only in site_utils
      1 #!/usr/bin/env python
      2 # Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 #
      6 # This utility allows for easy update to chromium os tree status, with proper
      7 # password protected authorization.
      8 #
      9 # Example usage:
     10 # ./set_tree_status.py [options] "a quoted space separated message."
     11 
     12 import getpass
     13 import optparse
     14 import os
     15 import sys
     16 import urllib
     17 
     18 CHROMEOS_STATUS_SERVER = 'https://chromiumos-status.appspot.com'
     19 
     20 
     21 def get_status():
     22     response = urllib.urlopen(CHROMEOS_STATUS_SERVER + '/current?format=raw')
     23     return response.read()
     24 
     25 
     26 def get_pwd():
     27     password_file = os.path.join('/home', getpass.getuser(),
     28                                  '.status_password.txt')
     29     if os.path.isfile(password_file):
     30         return open(password_file, 'r').read().strip()
     31     return getpass.getpass()
     32 
     33 
     34 def post_status(force, message):
     35     if not force:
     36         status = get_status()
     37         if 'tree is closed' in status.lower():
     38             print >> sys.stderr, 'Tree is already closed for some other reason.'
     39             print >> sys.stderr, status
     40             return -1
     41     data = {
     42         'message': message,
     43         'username': getpass.getuser(),
     44         'password': get_pwd(),
     45     }
     46     urllib.urlopen(CHROMEOS_STATUS_SERVER + '/status', urllib.urlencode(data))
     47     return 0
     48 
     49 
     50 if __name__ == '__main__':
     51     parser = optparse.OptionParser("%prog [options] quoted_message")
     52     parser.add_option('--noforce',
     53                       dest='force', action='store_false',
     54                       default=True,
     55                       help='Dont force to close tree if it is already closed.')
     56     options, args = parser.parse_args()
     57     if not args:
     58         print >> sys.stderr, 'missing tree close message.'
     59     sys.exit(post_status(options.force, args[0]))
     60