From 62cd826f89fcbcd686d7bbdd9abe41ebcdd1c8dc Mon Sep 17 00:00:00 2001 From: Josef Skladanka Date: Oct 03 2018 12:06:45 +0000 Subject: New action format --- diff --git a/.gitignore b/.gitignore index 44bd4d5..0e4cc61 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ *.py[cod] # Misc -.vscode/ \ No newline at end of file +.vscode/ +*.swp diff --git a/oraculum/controllers/main.py b/oraculum/controllers/main.py index 168d9d0..e12cc3a 100644 --- a/oraculum/controllers/main.py +++ b/oraculum/controllers/main.py @@ -57,53 +57,63 @@ def api_v0_yumrepoinfo(): return jsonify({'status': 'WIP'}) +ACTION_TIMES = { + "few hours": 3, + "half a day": 12, + "couple of days": 72, + } -def Action(name, skill, tags, duration, description=None): +def Action(name, tags, duration, provider, extra_data): return { 'name': name, - 'skill': skill, 'tags': tags, 'duration': duration, - 'description': description + 'provider': provider, + 'extra_data': extra_data, } +DATA = { + 'data': [ + {'duration': 72, + 'extra_data': {'ticket_url': 'https://pagure.io/pungi/issue/976', 'project_info': 'Pungi is a random tool'}, + 'name': 'pungi: Deprecate bootable option', + 'provider': 'easyfix', + 'tags': ['Bash', 'Python', 'Programming']}, + {'duration': 72, + 'extra_data': {'ticket_url': 'https://pagure.io/taskotron/libtaskotron/issue/354', 'project_info': 'Taskotron has to die!'}, + 'name': "taskotron/libtaskotron: create_report_directive: improve rendering when there's no artifact, cover with unit tests", + 'provider': 'easyfix', + 'tags': ['Bash', 'Python', 'Programming']}, + {'duration': 72, + 'extra_data': {'ticket_url': 'https://pagure.io/fedora-hubs/issue/120', 'project_info': 'Fedora hubs died long time ago'}, + 'name': 'fedora-hubs: Enhance populate scripts to copy more data from FAS', + 'provider': 'easyfix', + 'tags': ['JavaScript', 'HTML', 'Bash', 'Python', 'Programming']}, + {'duration': 3, + 'extra_data': {'testcase_url': 'http://foo.bar'}, + 'name': 'Release Validation - Basic Installation (x86_64)', + 'provider': 'fedora_manual_testing', + 'tags': ['Testing', 'Release Validation', 'QA', 'x86_64', 'KDE'], + {'duration': 3, + 'extra_data': {'testcase_url': 'http://foo.bar'}, + 'name': 'Release Validation - Basic Installation (ARM)', + 'provider': 'fedora_manual_testing', + 'tags': ['Testing', 'Release Validation', 'QA', 'ARM', 'XFCE'], + ] +} + +@app.route('/api/v0/actions') +def api_v0_actions(): + return jsonify(DATA) + + +@app.route('/api/v0/actions/filter') +def api_v0_actions_filter(): + all_data = api_v0_actions().get_json()['data'] # ... -@app.route('/api/v0/fakedata') -def api_v0_fakedata(): - resp = { - 'data': [ - Action('Contribute to blockerbugs app - backend', ['programming'], ['python'], 72), - Action('Easyfix in libtaskotron', ['programming'], ['python'], 72), - Action('Easyfix in taskotron-trigger', ['programming'], ['python'], 72), - Action('Make ResultsDB faster', ['programming'], ['python', 'sql'], 9999), - Action('Blockerbugs app frontend', ['programming'], ['html', 'js', 'css'], 48), - Action('Test Fedora - release validation', ['testing'], ['english'], 2), - Action('Ask Fedora: Some topic', ['general help'], ['natural'], 1), - Action('Ask Fedora: Some other topic', ['general help'], ['natural'], 1), - Action('Ask Fedora: Dogs vs. cats?', ['general help'], ['natural'], 1), - Action('Participate in blocker bug meeting', ['general help'], ['english'], 3), - Action('Participate in QA meeting', ['general help'], ['english'], 1), - Action('Check fixes for accepted blocker bugs', ['testing', 'debugging'], ['natural'], 2), - Action('Give karma to updates', ['testing', 'debugging'], ['natural'], 1), - Action('Develop tests in OpenQA', ['testing', 'programming'], ['natural', 'perl'], 7*24), - Action('Check failed tests in OpenQA', ['testing', 'debugging'], ['natural'], 7*24), - Action('Test Fedora on ARM board', ['testing', 'debugging'], ['natural'], 2), - ] - } - return jsonify(resp) - - -@app.route('/api/v0/fakedata/filter') -def api_v0_fakedata_filter(): - all_data = api_v0_fakedata().get_json()['data'] # ... - - skill = request.args.get('skill') tags = request.args.get('tags') duration = request.args.get('duration') - if skill: - all_data = list(filter(lambda d: skill in d['skill'], all_data)) - if tags: print('filtering tags') all_data = list(filter(lambda d: tag in d['tags'], all_data)) @@ -117,12 +127,11 @@ def api_v0_fakedata_filter(): } return jsonify(resp) -@app.route('/api/v0/fakedata/filtered_tags') -def api_v0_fakedata_filtered_tags(): - filtered_data = api_v0_fakedata_filter().get_json()['data'] +@app.route('/api/v0/actions/filtered_tags') +def api_v0_actions_filtered_tags(): + filtered_data = api_v0_actions_filter().get_json()['data'] resp = { - 'skill': list(set(itertools.chain(*[d['skill'] for d in filtered_data]))), 'tags': list(set(itertools.chain(*[d['tags'] for d in filtered_data]))), 'duration': list(set([d['duration'] for d in filtered_data])), } diff --git a/oraculum/data_providers/easyfix.py b/oraculum/data_providers/easyfix.py index c96f8b0..9ee5235 100644 --- a/oraculum/data_providers/easyfix.py +++ b/oraculum/data_providers/easyfix.py @@ -12,7 +12,7 @@ import collections import time from oraculum.config import EASYFIX_CACHE_PROJECTINFO, EASYFIX_CACHE_TICKETS -from oraculum.controllers.main import Action +from oraculum.controllers.main import Action, ACTION_TIMES def parse_easyfix_page(): q = requests.get("https://fedoraproject.org/easyfix/index.html") @@ -61,6 +61,7 @@ def clone_repo(repo): def score_lexers(repo_dir): lexers = {} + running_score = [0, 0] for root, dirs, files in os.walk(repo_dir, topdown=True, followlinks=False): # ignore 'hidden' files and symlinks files = [f for f in files if not f[0] == '.' and not os.path.islink(os.path.join(root, f))] @@ -79,8 +80,10 @@ def score_lexers(repo_dir): continue score = lexers.get(lexer, [0, 0]) - score[0] += 1 - score[1] += os.path.getsize(os.path.join(root, f)) + score[0] += os.path.getsize(os.path.join(root, f)) + score[1] += 1 + running_score[0] += score[0] + running_score[1] += score[1] lexers[lexer] = score[:] return collections.OrderedDict([(l, lexers[l]) for l in sorted(lexers, key=lexers.get, reverse=True)]) @@ -130,12 +133,16 @@ def get_actions(): p.update(data) project_info[p['url']] = data for t in p['tickets']: + tags=filter_content_types(p['content_types']) + if not tags: + continue + tags.append('Programming') actions.append(Action( - name="Easyfix in %s: %s" % (p['name'], t['title']), - skill="programming", - tags=filter_content_types(p['content_types']), - duration=72, #FIXME - description=t['description'], + name="%s: %s" % (p['name'], t['title']), + tags=tags, + duration=ACTION_TIMES['couple of days'], + provider="easyfix", + extra_data={"ticket_url": t['url']}, ) )