Gentoo Archives: gentoo-commits

From: Vikraman Choudhury <vikraman.choudhury@×××××.com>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/gentoostats:master commit in: client/gentoostats/, client/
Date: Mon, 01 Aug 2011 22:24:49
Message-Id: 8755eeaee5daad8a51ffab361ce2e01422272f69.vikraman@gentoo
1 commit: 8755eeaee5daad8a51ffab361ce2e01422272f69
2 Author: Vikraman Choudhury <vikraman.choudhury <AT> gmail <DOT> com>
3 AuthorDate: Mon Aug 1 22:23:54 2011 +0000
4 Commit: Vikraman Choudhury <vikraman.choudhury <AT> gmail <DOT> com>
5 CommitDate: Mon Aug 1 22:23:54 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoostats.git;a=commit;h=8755eeae
7
8 reworked gentoostats-cli code
9
10 ---
11 client/gentoostats-cli | 35 ++++-------
12 client/gentoostats/list.py | 139 +++++++++++++++++++++++--------------------
13 client/gentoostats/utils.py | 2 +
14 3 files changed, 89 insertions(+), 87 deletions(-)
15
16 diff --git a/client/gentoostats-cli b/client/gentoostats-cli
17 index c8a5222..6a237fc 100755
18 --- a/client/gentoostats-cli
19 +++ b/client/gentoostats-cli
20 @@ -1,31 +1,22 @@
21 #!/usr/bin/env python
22
23 -import sys
24 -import importlib
25 +import argparse
26
27 -actions = {
28 - 'list': 'gentoostats.list',
29 - 'search': 'gentooostats.search'
30 - }
31 -
32 -def print_usage(actions):
33 - print 'Usage:', sys.argv[0], '<action>'
34 - print 'Available actions:'
35 - for action in actions.keys():
36 - print action
37 +from gentoostats import list
38 +#from gentoostats import search
39
40 def main():
41 - argc = len(sys.argv)
42 - if argc == 1:
43 - print_usage(actions)
44 - sys.exit(1)
45 - try:
46 - loaded_module = importlib.import_module(actions[sys.argv[1]])
47 - loaded_module.main(opts=sys.argv[2:])
48 - except KeyError, ImportError:
49 - sys.stderr.writelines('Unknown action')
50 - sys.exit(1)
51 + parser = argparse.ArgumentParser()
52 + parser.add_argument('-s', '--server', default='soc.dev.gentoo.org')
53 + parser.add_argument('-u', '--url', default='/gentoostats')
54 +
55 + subparsers = parser.add_subparsers()
56 +
57 + list.add_parser(subparsers)
58 +# search.add_parser(subparsers)
59
60 + args = parser.parse_args()
61 + args.func(args)
62
63 if __name__ == "__main__":
64 main()
65
66 diff --git a/client/gentoostats/list.py b/client/gentoostats/list.py
67 index 3cf60cf..6ee62cb 100644
68 --- a/client/gentoostats/list.py
69 +++ b/client/gentoostats/list.py
70 @@ -1,84 +1,93 @@
71
72 -import sys
73 -import json
74 -import httplib
75 import utils
76
77 -objects = {
78 - 'arch': 'list_arch',
79 - 'feature': 'list_feature',
80 - 'lang': 'list_lang',
81 - 'mirror': 'list_mirror',
82 - 'repo': 'list_repo',
83 - 'cat': 'list_cat',
84 - 'cp': 'list_cp',
85 - 'cpv': 'list_cpv'
86 - }
87 -
88 -server = 'soc.dev.gentoo.org'
89 -url = '/gentoostats'
90 -headers = {'Accept': 'application/json'}
91 -
92 -def print_usage(objects):
93 - print 'Usage: list <object>'
94 - print 'Available objects:'
95 - for obj in objects.keys():
96 - print obj
97 -
98 def pprint(title, object):
99 - print title
100 + # TODO: write a custom pretty printer here
101 import pprint
102 + print title
103 pprint.pprint(object)
104
105 -def main(opts):
106 - l = len(opts)
107 - if l == 0:
108 - print_usage(objects)
109 - sys.exit(1)
110 -
111 - if opts[0] not in objects:
112 - sys.stderr.write('Unknown object')
113 - sys.exit(1)
114 -
115 - try:
116 - globals()[objects[opts[0]]](server, url, headers)
117 - except KeyError:
118 - sys.stderr.write('Unimplemented')
119 - sys.exit(1)
120 -
121 -def list(server, url_base, url_extra, headers):
122 - get_data = utils.GET(server=server, url=url_base+url_extra, headers=headers)
123 - data = utils.deserialize(get_data)
124 - return data
125 -
126 -def list_arch(server, url, headers):
127 - data = list(server, url, '/arch', headers)
128 +def add_parser(subparsers):
129 + # TODO: add help and descriptions for all opts
130 + list_parser = subparsers.add_parser('list')
131 + list_subparsers = list_parser.add_subparsers()
132 +
133 + objects = {
134 + 'arch': ['parser_arch', list_arch],
135 + 'feature': ['parser_feature', list_feature],
136 + 'lang': ['parser_lang', list_lang],
137 + 'mirror': ['parser_mirror', list_mirror],
138 + 'repo': ['parser_repo', list_repo],
139 + 'package': ['parser_package', list_package],
140 + 'use': ['parser_use', list_use]
141 + }
142 + for obj in objects.keys():
143 + parser = vars()[objects[obj][0]] = list_subparsers.add_parser(obj)
144 + parser.set_defaults(func=objects[obj][1])
145 +
146 + # need separate arguments for package
147 + parser = vars()[objects['package'][0]]
148 + parser.add_argument('-t', '--top', type=int)
149 + parser.add_argument('-c', '--category')
150 + parser.add_argument('-p', '--package')
151 + parser.add_argument('-v', '--version')
152 +
153 + # need separate arguments for use
154 + parser = vars()[objects['use'][0]]
155 + parser.add_argument('--use')
156 +
157 +def list_arch(args):
158 + data = list(args.server, args.url, '/arch', utils.headers)
159 pprint('Arch', data)
160
161 -def list_feature(server, url, headers):
162 - data = list(server, url, '/feature', headers)
163 +def list_feature(args):
164 + data = list(args.server, args.url, '/feature', utils.headers)
165 pprint('Feature', data)
166
167 -def list_lang(server, url, headers):
168 - data = list(server, url, '/lang', headers)
169 +def list_lang(args):
170 + data = list(args.server, args.url, '/lang', utils.headers)
171 pprint('Lang', data)
172
173 -def list_mirror(server, url, headers):
174 - data = list(server, url, '/mirror', headers)
175 +def list_mirror(args):
176 + data = list(args.server, args.url, '/mirror', utils.headers)
177 pprint('Mirror', data)
178
179 -def list_repo(server, url, headers):
180 - data = list(server, url, '/repo', headers)
181 +def list_repo(args):
182 + data = list(args.server, args.url, '/repo', utils.headers)
183 pprint('Repo', data)
184
185 -def list_cat(server, url, headers):
186 - data = list(server, url, '/package', headers)
187 - pprint('Category', data)
188 +def list_package(args):
189 + url_top = ''
190 + if args.top:
191 + url_top = '?top=' + str(args.top)
192 +
193 + title = 'Categories'
194 + url_pkg = '/package'
195 + if args.category:
196 + title = 'Category: ' + args.category
197 + url_pkg += '/' + args.category
198 + if args.package:
199 + title = 'Category-Package: ' + args.category + '/' + args.package
200 + url_pkg += '/' + args.package
201 + if args.version:
202 + title = 'Category-Package-Version: ' + args.category + '/' + args.package + '-' + args.version
203 + url_pkg += '-' + args.version
204 +
205 + data = list(args.server, args.url, url_pkg + url_top, utils.headers)
206 + pprint(title, data)
207 +
208 +def list_use(args):
209 + url_use = '/use'
210 + title = 'Useflags'
211 + if args.use:
212 + title = 'Useflag: ' + args.use
213 + url_use += '/' + args.use
214 +
215 + data = list(args.server, args.url, url_use, utils.headers)
216 + pprint(title, data)
217
218 -def list_cp(server, url, headers):
219 - data = list(server, url, '/package', headers)
220 - pprint('Category/Package', data)
221
222 -def list_cpv(server, url, headers):
223 - data = list(server, url, '/package', headers)
224 - pprint('Category/Package-Version', data)
225 +def list(server, url_base, url_extra, headers):
226 + get_data = utils.GET(server=server, url=url_base+url_extra, headers=headers)
227 + data = utils.deserialize(get_data)
228 + return data
229
230 diff --git a/client/gentoostats/utils.py b/client/gentoostats/utils.py
231 index ae520f2..98f8375 100644
232 --- a/client/gentoostats/utils.py
233 +++ b/client/gentoostats/utils.py
234 @@ -2,6 +2,8 @@
235 import json
236 import httplib
237
238 +headers = {'Accept': 'application/json'}
239 +
240 def GET(server, url, headers, https=True):
241 if https:
242 conn = httplib.HTTPSConnection(server)