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) |