public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Vikraman Choudhury" <vikraman.choudhury@gmail.com>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/gentoostats:master commit in: client/gentoostats/, client/
Date: Mon,  1 Aug 2011 22:24:40 +0000 (UTC)	[thread overview]
Message-ID: <8755eeaee5daad8a51ffab361ce2e01422272f69.vikraman@gentoo> (raw)

commit:     8755eeaee5daad8a51ffab361ce2e01422272f69
Author:     Vikraman Choudhury <vikraman.choudhury <AT> gmail <DOT> com>
AuthorDate: Mon Aug  1 22:23:54 2011 +0000
Commit:     Vikraman Choudhury <vikraman.choudhury <AT> gmail <DOT> com>
CommitDate: Mon Aug  1 22:23:54 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoostats.git;a=commit;h=8755eeae

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
 
-import sys
-import importlib
+import argparse
 
-actions = {
-        'list': 'gentoostats.list',
-        'search': 'gentooostats.search'
-        }
-
-def print_usage(actions):
-    print 'Usage:', sys.argv[0], '<action>'
-    print 'Available actions:'
-    for action in actions.keys():
-        print action
+from gentoostats import list
+#from gentoostats import search
 
 def main():
-    argc = len(sys.argv)
-    if argc == 1:
-        print_usage(actions)
-        sys.exit(1)
-    try:
-        loaded_module = importlib.import_module(actions[sys.argv[1]])
-        loaded_module.main(opts=sys.argv[2:])
-    except KeyError, ImportError:
-        sys.stderr.writelines('Unknown action')
-        sys.exit(1)
+    parser = argparse.ArgumentParser()
+    parser.add_argument('-s', '--server', default='soc.dev.gentoo.org')
+    parser.add_argument('-u', '--url', default='/gentoostats')
+
+    subparsers = parser.add_subparsers()
+
+    list.add_parser(subparsers)
+#    search.add_parser(subparsers)
 
+    args = parser.parse_args()
+    args.func(args)
 
 if __name__ == "__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 @@
 
-import sys
-import json
-import httplib
 import utils
 
-objects = {
-        '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 = 'soc.dev.gentoo.org'
-url = '/gentoostats'
-headers = {'Accept': 'application/json'}
-
-def print_usage(objects):
-    print 'Usage: list <object>'
-    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)
 
-def main(opts):
-    l = len(opts)
-    if l == 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 = utils.GET(server=server, url=url_base+url_extra, headers=headers)
-    data = utils.deserialize(get_data)
-    return data
-
-def list_arch(server, url, headers):
-    data = list(server, url, '/arch', headers)
+def add_parser(subparsers):
+    # TODO: add help and descriptions for all opts
+    list_parser = subparsers.add_parser('list')
+    list_subparsers = list_parser.add_subparsers()
+
+    objects = {
+            '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 = vars()[objects[obj][0]] = list_subparsers.add_parser(obj)
+        parser.set_defaults(func=objects[obj][1])
+
+    # need separate arguments for package
+    parser = vars()[objects['package'][0]]
+    parser.add_argument('-t', '--top', type=int)
+    parser.add_argument('-c', '--category')
+    parser.add_argument('-p', '--package')
+    parser.add_argument('-v', '--version')
+
+    # need separate arguments for use
+    parser = vars()[objects['use'][0]]
+    parser.add_argument('--use')
+
+def list_arch(args):
+    data = list(args.server, args.url, '/arch', utils.headers)
     pprint('Arch', data)
 
-def list_feature(server, url, headers):
-    data = list(server, url, '/feature', headers)
+def list_feature(args):
+    data = list(args.server, args.url, '/feature', utils.headers)
     pprint('Feature', data)
 
-def list_lang(server, url, headers):
-    data = list(server, url, '/lang', headers)
+def list_lang(args):
+    data = list(args.server, args.url, '/lang', utils.headers)
     pprint('Lang', data)
 
-def list_mirror(server, url, headers):
-    data = list(server, url, '/mirror', headers)
+def list_mirror(args):
+    data = list(args.server, args.url, '/mirror', utils.headers)
     pprint('Mirror', data)
 
-def list_repo(server, url, headers):
-    data = list(server, url, '/repo', headers)
+def list_repo(args):
+    data = list(args.server, args.url, '/repo', utils.headers)
     pprint('Repo', data)
 
-def list_cat(server, url, headers):
-    data = list(server, url, '/package', headers)
-    pprint('Category', data)
+def list_package(args):
+    url_top = ''
+    if args.top:
+        url_top = '?top=' + str(args.top)
+
+    title = 'Categories'
+    url_pkg = '/package'
+    if args.category:
+        title = 'Category: ' + args.category
+        url_pkg += '/' + args.category
+        if args.package:
+            title = 'Category-Package: ' + args.category + '/' + args.package
+            url_pkg += '/' + args.package
+            if args.version:
+                title = 'Category-Package-Version: ' + args.category + '/' + args.package + '-' + args.version
+                url_pkg += '-' + args.version
+
+    data = list(args.server, args.url, url_pkg + url_top, utils.headers)
+    pprint(title, data)
+
+def list_use(args):
+    url_use = '/use'
+    title = 'Useflags'
+    if args.use:
+        title = 'Useflag: ' + args.use
+        url_use += '/' + args.use
+
+    data = list(args.server, args.url, url_use, utils.headers)
+    pprint(title, data)
 
-def list_cp(server, url, headers):
-    data = list(server, url, '/package', headers)
-    pprint('Category/Package', data)
 
-def list_cpv(server, url, headers):
-    data = list(server, url, '/package', headers)
-    pprint('Category/Package-Version', data)
+def list(server, url_base, url_extra, headers):
+    get_data = utils.GET(server=server, url=url_base+url_extra, headers=headers)
+    data = 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
 
+headers = {'Accept': 'application/json'}
+
 def GET(server, url, headers, https=True):
     if https:
         conn = httplib.HTTPSConnection(server)



             reply	other threads:[~2011-08-01 22:24 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-01 22:24 Vikraman Choudhury [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-04-17 14:15 [gentoo-commits] proj/gentoostats:master commit in: client/gentoostats/, client/ Vikraman Choudhury
2011-08-21 23:15 Vikraman Choudhury
2011-08-01 23:04 Vikraman Choudhury
2011-08-01 22:24 Vikraman Choudhury
2011-07-25 12:35 Vikraman Choudhury
2011-06-23 15:14 Vikraman Choudhury

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8755eeaee5daad8a51ffab361ce2e01422272f69.vikraman@gentoo \
    --to=vikraman.choudhury@gmail.com \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox