From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1Qo0un-0003nh-Ki for garchives@archives.gentoo.org; Mon, 01 Aug 2011 22:24:49 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id E39D621C063; Mon, 1 Aug 2011 22:24:41 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 9AF5021C063 for ; Mon, 1 Aug 2011 22:24:41 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 011CE2AC011 for ; Mon, 1 Aug 2011 22:24:41 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id 52C3545EF1 for ; Mon, 1 Aug 2011 22:24:40 +0000 (UTC) From: "Vikraman Choudhury" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Vikraman Choudhury" Message-ID: <8755eeaee5daad8a51ffab361ce2e01422272f69.vikraman@gentoo> Subject: [gentoo-commits] proj/gentoostats:master commit in: client/gentoostats/, client/ X-VCS-Repository: proj/gentoostats X-VCS-Files: client/gentoostats-cli client/gentoostats/list.py client/gentoostats/utils.py X-VCS-Directories: client/gentoostats/ client/ X-VCS-Committer: vikraman X-VCS-Committer-Name: Vikraman Choudhury X-VCS-Revision: 8755eeaee5daad8a51ffab361ce2e01422272f69 Date: Mon, 1 Aug 2011 22:24:40 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: X-Archives-Hash: 56b079b0d36c2c1da8608298a8ab3d91 commit: 8755eeaee5daad8a51ffab361ce2e01422272f69 Author: Vikraman Choudhury gmail com> AuthorDate: Mon Aug 1 22:23:54 2011 +0000 Commit: Vikraman Choudhury gmail com> CommitDate: Mon Aug 1 22:23:54 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/gentoostats.g= it;a=3Dcommit;h=3D8755eeae reworked gentoostats-cli code --- client/gentoostats-cli | 35 ++++------- client/gentoostats/list.py | 139 +++++++++++++++++++++++--------------= ------ client/gentoostats/utils.py | 2 + 3 files changed, 89 insertions(+), 87 deletions(-) diff --git a/client/gentoostats-cli b/client/gentoostats-cli index c8a5222..6a237fc 100755 --- a/client/gentoostats-cli +++ b/client/gentoostats-cli @@ -1,31 +1,22 @@ #!/usr/bin/env python =20 -import sys -import importlib +import argparse =20 -actions =3D { - 'list': 'gentoostats.list', - 'search': 'gentooostats.search' - } - -def print_usage(actions): - print 'Usage:', sys.argv[0], '' - print 'Available actions:' - for action in actions.keys(): - print action +from gentoostats import list +#from gentoostats import search =20 def main(): - argc =3D len(sys.argv) - if argc =3D=3D 1: - print_usage(actions) - sys.exit(1) - try: - loaded_module =3D importlib.import_module(actions[sys.argv[1]]) - loaded_module.main(opts=3Dsys.argv[2:]) - except KeyError, ImportError: - sys.stderr.writelines('Unknown action') - sys.exit(1) + parser =3D argparse.ArgumentParser() + parser.add_argument('-s', '--server', default=3D'soc.dev.gentoo.org'= ) + parser.add_argument('-u', '--url', default=3D'/gentoostats') + + subparsers =3D parser.add_subparsers() + + list.add_parser(subparsers) +# search.add_parser(subparsers) =20 + args =3D parser.parse_args() + args.func(args) =20 if __name__ =3D=3D "__main__": main() diff --git a/client/gentoostats/list.py b/client/gentoostats/list.py index 3cf60cf..6ee62cb 100644 --- a/client/gentoostats/list.py +++ b/client/gentoostats/list.py @@ -1,84 +1,93 @@ =20 -import sys -import json -import httplib import utils =20 -objects =3D { - 'arch': 'list_arch', - 'feature': 'list_feature', - 'lang': 'list_lang', - 'mirror': 'list_mirror', - 'repo': 'list_repo', - 'cat': 'list_cat', - 'cp': 'list_cp', - 'cpv': 'list_cpv' - } - -server =3D 'soc.dev.gentoo.org' -url =3D '/gentoostats' -headers =3D {'Accept': 'application/json'} - -def print_usage(objects): - print 'Usage: list ' - print 'Available objects:' - for obj in objects.keys(): - print obj - def pprint(title, object): - print title + # TODO: write a custom pretty printer here import pprint + print title pprint.pprint(object) =20 -def main(opts): - l =3D len(opts) - if l =3D=3D 0: - print_usage(objects) - sys.exit(1) - - if opts[0] not in objects: - sys.stderr.write('Unknown object') - sys.exit(1) - - try: - globals()[objects[opts[0]]](server, url, headers) - except KeyError: - sys.stderr.write('Unimplemented') - sys.exit(1) - -def list(server, url_base, url_extra, headers): - get_data =3D utils.GET(server=3Dserver, url=3Durl_base+url_extra, he= aders=3Dheaders) - data =3D utils.deserialize(get_data) - return data - -def list_arch(server, url, headers): - data =3D list(server, url, '/arch', headers) +def add_parser(subparsers): + # TODO: add help and descriptions for all opts + list_parser =3D subparsers.add_parser('list') + list_subparsers =3D list_parser.add_subparsers() + + objects =3D { + 'arch': ['parser_arch', list_arch], + 'feature': ['parser_feature', list_feature], + 'lang': ['parser_lang', list_lang], + 'mirror': ['parser_mirror', list_mirror], + 'repo': ['parser_repo', list_repo], + 'package': ['parser_package', list_package], + 'use': ['parser_use', list_use] + } + for obj in objects.keys(): + parser =3D vars()[objects[obj][0]] =3D list_subparsers.add_parse= r(obj) + parser.set_defaults(func=3Dobjects[obj][1]) + + # need separate arguments for package + parser =3D vars()[objects['package'][0]] + parser.add_argument('-t', '--top', type=3Dint) + parser.add_argument('-c', '--category') + parser.add_argument('-p', '--package') + parser.add_argument('-v', '--version') + + # need separate arguments for use + parser =3D vars()[objects['use'][0]] + parser.add_argument('--use') + +def list_arch(args): + data =3D list(args.server, args.url, '/arch', utils.headers) pprint('Arch', data) =20 -def list_feature(server, url, headers): - data =3D list(server, url, '/feature', headers) +def list_feature(args): + data =3D list(args.server, args.url, '/feature', utils.headers) pprint('Feature', data) =20 -def list_lang(server, url, headers): - data =3D list(server, url, '/lang', headers) +def list_lang(args): + data =3D list(args.server, args.url, '/lang', utils.headers) pprint('Lang', data) =20 -def list_mirror(server, url, headers): - data =3D list(server, url, '/mirror', headers) +def list_mirror(args): + data =3D list(args.server, args.url, '/mirror', utils.headers) pprint('Mirror', data) =20 -def list_repo(server, url, headers): - data =3D list(server, url, '/repo', headers) +def list_repo(args): + data =3D list(args.server, args.url, '/repo', utils.headers) pprint('Repo', data) =20 -def list_cat(server, url, headers): - data =3D list(server, url, '/package', headers) - pprint('Category', data) +def list_package(args): + url_top =3D '' + if args.top: + url_top =3D '?top=3D' + str(args.top) + + title =3D 'Categories' + url_pkg =3D '/package' + if args.category: + title =3D 'Category: ' + args.category + url_pkg +=3D '/' + args.category + if args.package: + title =3D 'Category-Package: ' + args.category + '/' + args.= package + url_pkg +=3D '/' + args.package + if args.version: + title =3D 'Category-Package-Version: ' + args.category += '/' + args.package + '-' + args.version + url_pkg +=3D '-' + args.version + + data =3D list(args.server, args.url, url_pkg + url_top, utils.header= s) + pprint(title, data) + +def list_use(args): + url_use =3D '/use' + title =3D 'Useflags' + if args.use: + title =3D 'Useflag: ' + args.use + url_use +=3D '/' + args.use + + data =3D list(args.server, args.url, url_use, utils.headers) + pprint(title, data) =20 -def list_cp(server, url, headers): - data =3D list(server, url, '/package', headers) - pprint('Category/Package', data) =20 -def list_cpv(server, url, headers): - data =3D list(server, url, '/package', headers) - pprint('Category/Package-Version', data) +def list(server, url_base, url_extra, headers): + get_data =3D utils.GET(server=3Dserver, url=3Durl_base+url_extra, he= aders=3Dheaders) + data =3D utils.deserialize(get_data) + return data diff --git a/client/gentoostats/utils.py b/client/gentoostats/utils.py index ae520f2..98f8375 100644 --- a/client/gentoostats/utils.py +++ b/client/gentoostats/utils.py @@ -2,6 +2,8 @@ import json import httplib =20 +headers =3D {'Accept': 'application/json'} + def GET(server, url, headers, https=3DTrue): if https: conn =3D httplib.HTTPSConnection(server)