From 4e449a28efaeddfe474000a7da023e1abafc595b Mon Sep 17 00:00:00 2001 From: Sachin Kamath Date: Jun 04 2016 15:00:37 +0000 Subject: Added interactive mode and removed renundant code --- diff --git a/main.py b/main.py index 0ba867b..d6faa8f 100644 --- a/main.py +++ b/main.py @@ -1,23 +1,13 @@ -from __future__ import absolute_import from __future__ import print_function -import argparse +from __future__ import absolute_import + +import os import fedmsg +import argparse import fedmsg.meta from stats import stats from output import draw -import os - - -def dependency_check(): - # Without fedmsg-meta, the program will not display the human readable log - return_val = os.system('rpm -q python2-fedmsg-meta-fedora-infrastructure >> \ - /dev/null') - if(return_val != 0): - print("[!] Please install \'python2-fedmsg-meta-fedora-infrastructure\' \ - package to continue.") - return False - else: - return True +from termcolor import colored def main(): @@ -27,35 +17,45 @@ def main(): # Argument Parser initialization parser = argparse.ArgumentParser(description='Fedora GSoC stats gatherer') - parser.add_argument('--user', '-u', help='FAS username', required=True) + parser.add_argument('--user', '-u', help='FAS username') parser.add_argument('--weeks', '-w', help='Time in weeks', default=1) parser.add_argument('--mode', '-m', help="Type of Output", default='text') parser.add_argument('--output', '-o', help="Output name", default='stats') + parser.add_argument('--interactive', '-i', help="Enable interactive mode", + action='store_true') args = parser.parse_args() - # Check if the user has fedmsg-meta package installed - dependency_check() - # Object inits and argument processing userstats = stats() output = draw() - userstats.values['user'] = str(args.user) - userstats.values['delta'] = int(args.weeks) * 604800 - output.mode = args.mode - output.filename = args.output + + if args.interactive: + userstats.values['user'] = str(raw_input("Enter FAS Username : ")) + userstats.values['delta'] = 604800 * int(raw_input("Number of weeks stats \ +required for : ")) + output.mode = str(raw_input("Type of output : ")) + output.filename = str(raw_input("Output file : ")) + elif args.user is None: + print(colored("[!] ", 'red') + "FAS Username is required.") + return 1 + else: + userstats.values['user'] = str(args.user) + userstats.values['delta'] = int(args.weeks) * 604800 + output.mode = args.mode + output.filename = args.output # For json and text output, we need the JSON rather than the categories - if args.mode.lower() == 'svg' or args.mode.lower() == 'png': + if output.mode == 'svg' or output.mode == 'png': out_obj = userstats.return_categories() # To handle user with no activity - if len(out_obj): + if len(out_obj) == 0: print ('[!] No activity found for user ' + str(args.user)) - return + return 1 elif args.mode.lower() == 'json' or args.mode.lower() == 'text': out_obj = userstats.return_json() if out_obj['total'] == 0: print ('[!] No activity found for user ' + str(args.user)) - return + return 1 title = "Category distribution for user " + str(args.user) output.show_output(out_obj, title) diff --git a/stats.py b/stats.py index 5be5521..50e43bb 100644 --- a/stats.py +++ b/stats.py @@ -4,6 +4,7 @@ import fedmsg import fedmsg.meta import json import requests +from collections import Counter class stats: @@ -18,17 +19,17 @@ class stats: def return_json(self): print('[*] Grabbing datagrepper values..') response = requests.get(self.baseurl, params=self.values) - unicode_json = response.json() + unicode_json = json.loads(response.text) return unicode_json def return_categories(self): - categories = dict() + cat_list = list() + categories = Counter() unicode_json = self.return_json() print("[*] Identifying Categories..") for activity in unicode_json['raw_messages']: - category = activity['topic'].split('.')[3] - if category in list(categories.keys()): + # Split the topic using . param , extract the 4th word and append + cat_list.append(activity['topic'].split('.')[3]) + for category in cat_list: categories[category] += 1 - else: - categories[category] = 1 return categories