From e117e9a2d75fb268fb6a89abaa0d6f1bfa11f01e Mon Sep 17 00:00:00 2001 From: "scherkus@chromium.org" Date: Thu, 10 Jan 2013 01:17:18 +0000 Subject: Add omahaproxy.py for accessing Chrome channel information from the command line. Review URL: https://codereview.chromium.org/11789004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@175962 0039d316-1c4b-4281-b951-d872f2087c98 --- tools/omahaproxy.py | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100755 tools/omahaproxy.py (limited to 'tools/omahaproxy.py') diff --git a/tools/omahaproxy.py b/tools/omahaproxy.py new file mode 100755 index 0000000..75bf43d --- /dev/null +++ b/tools/omahaproxy.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# Copyright (c) 2013 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. + +"""Chrome Version Tool + +Scrapes Chrome channel information and prints out the requested nugget of +information. +""" + +import json +import optparse +import os +import string +import sys +import urllib + +URL = 'https://omahaproxy.appspot.com/json' + + +def main(): + try: + data = json.load(urllib.urlopen(URL)) + except Exception as e: + print 'Error: could not load %s\n\n%s' % (URL, str(e)) + return 1 + + # Iterate to find out valid values for OS, channel, and field options. + oses = set() + channels = set() + fields = set() + + for os_versions in data: + oses.add(os_versions['os']) + + for version in os_versions['versions']: + for field in version: + if field == 'channel': + channels.add(version['channel']) + else: + fields.add(field) + + oses = sorted(oses) + channels = sorted(channels) + fields = sorted(fields) + + # Command line parsing fun begins! + usage = ('%prog [options]\n' + 'Print out information about a particular Chrome channel.') + parser = optparse.OptionParser(usage=usage) + + parser.add_option('-o', '--os', + choices=oses, + default='win', + help='The operating system of interest: %s ' + '[default: %%default]' % ', '.join(oses)) + parser.add_option('-c', '--channel', + choices=channels, + default='stable', + help='The channel of interest: %s ' + '[default: %%default]' % ', '.join(channels)) + parser.add_option('-f', '--field', + choices=fields, + default='version', + help='The field of interest: %s ' + '[default: %%default] ' % ', '.join(fields)) + (opts, args) = parser.parse_args() + + # Print out requested data if available. + for os_versions in data: + if os_versions['os'] != opts.os: + continue + + for version in os_versions['versions']: + if version['channel'] != opts.channel: + continue + + if opts.field not in version: + continue + + print version[opts.field] + return 0 + + print 'Error: unable to find %s for Chrome %s %s.' % ( + opts.field, opts.os, opts.channel) + return 1 + +if __name__ == '__main__': + sys.exit(main()) -- cgit v1.1