#12 Karma: Provide also release specific endpoints for karma
Merged 3 years ago by frantisekz. Opened 3 years ago by frantisekz.

file modified
+3 -5
@@ -70,11 +70,9 @@ 

      print("Refreshing DB Cache")

      app.config['MAX_DB_AGE'] = 0

      app.config['FORCE_CACHED_DATA'] = False

-     db_utils.refresh_data("get_actions", controllers.main.get_actions())

-     db_utils.refresh_data("api_v1_landing_page", controllers.main.get_landing_page_data())

-     db_utils.refresh_data("api_v1_libkarma",

-         libkarma.get_updates(schedule.current_stable(), schedule.current_devel())

-     )

+     db_utils.refresh_data("get_actions", controllers.main.get_actions()),

+     db_utils.refresh_data("api_v1_landing_page", controllers.main.api_v1_landing_page()),

+     db_utils.refresh_data("api_v1_libkarma", controllers.main.api_v1_libkarma('all'))

  

  def main():

      possible_commands = ['init_db', 'generate_config', 'upgrade_db', 'sync']

file modified
+52 -47
@@ -17,69 +17,73 @@ 

  # Authors:

  #    Josef Skladanka <jskladan@redhat.com>

  

- from oraculum import app, cache, login_manager, oidc

- from oraculum.data_providers import PROVIDERS

- from oraculum.utils import fedocal, schedule, blockerbugs, meetbot, db_utils, libkarma

- 

- from flask_login import UserMixin, login_required, \

-     login_user, logout_user, current_user

- 

- import flask

- from flask import request, url_for, jsonify, redirect

- from werkzeug.contrib.cache import SimpleCache

- 

  import json

  import os

  import re

  import urllib

  import itertools

- import re

  import requests

  

+ import flask

+ 

+ from flask_login import UserMixin, login_required, \

+     login_user, logout_user, current_user

+ from flask import request, url_for, jsonify, redirect

+ 

+ from oraculum import app, login_manager, oidc

+ from oraculum.data_providers import PROVIDERS

+ from oraculum.utils import fedocal, schedule, blockerbugs, meetbot, db_utils, libkarma

+ 

  # FIXME: move somewhere else?

  class User(UserMixin):

      def __init__(self, email):

          self.id = email

          self.email = email

  

- 

- # FIXME: Move this into a proper config file

- CACHE_TIMEOUT = 3600

- # MAX_DB_AGE defined in oraculum.utils.db_utils

- 

- @app.route('/api/v1/libkarma')

- def api_v1_libkarma():

-     cached = db_utils.get_db_data("api_v1_libkarma")

+ @app.route('/api/v1/libkarma/<release>', methods=['GET'])

+ def route_api_v1_libkarma(release):

+     data = api_v1_libkarma(release)

+     if data:

+         return jsonify(data)

+     return jsonify({'error': 'Release %s not found' % release}), 404

+ 

+ def api_v1_libkarma(release):

+     landing_page = api_v1_landing_page()

+     current_releases = [str(i) for i in [(landing_page["stable"] - 1), landing_page["stable"], landing_page["devel"]]]

+     if release in current_releases:

+         return get_updates_for_release(release)

+     if release.lower() == 'all':

+         updates = {}

+         for single_release in current_releases:

+             app.logger.debug("Appending updates for release: %s" % single_release)

+             updates["F" + single_release] = get_updates_for_release(single_release)

+         return updates

+     return None

+ 

+ def get_updates_for_release(release):

+     cached = db_utils.get_db_data("api_v1_libkarma_F" + release)

      if cached:

-         return jsonify(cached)

-     karma = libkarma.get_updates(schedule.current_stable(), schedule.current_devel(), app.logger)

-     db_utils.refresh_data("api_v1_libkarma", karma)

-     return jsonify(karma)

- 

- def get_landing_page_data():

-     mtgs = fedocal.get_qa_meetings()

-     last_qa_meeting = meetbot.get_last_qa_meeting()

-     sched = schedule.get_schedule()

-     blockers = blockerbugs.get_blockerbugs()

-     stable = schedule.current_stable()

-     devel = schedule.current_devel()

-     resp = {

-         'meetings': mtgs,

-         'last_qa_meeting': last_qa_meeting,

-         'schedule': sched,

-         'blockerbugs': blockers,

-         'stable': stable,

-         'devel': devel,

-     }

-     return resp

- 

+         return cached

+     karma = libkarma.get_updates(release, app.logger)

+     db_utils.refresh_data("api_v1_libkarma_F" + release, karma)

+     return karma

  

  @app.route('/api/v1/landing_page')

+ def route_api_v1_landing_page():

+     return jsonify(api_v1_landing_page())

+ 

  def api_v1_landing_page():

      cached = db_utils.get_db_data("api_v1_landing_page")

      if cached:

-         return jsonify(cached)

-     resp = get_landing_page_data()

+         return cached

+     resp = {

+         'meetings': fedocal.get_qa_meetings(),

+         'last_qa_meeting': meetbot.get_last_qa_meeting(),

+         'schedule': schedule.get_schedule(),

+         'blockerbugs': blockerbugs.get_blockerbugs(),

+         'stable': schedule.current_stable(),

+         'devel': schedule.current_devel(),

+     }

      db_utils.refresh_data("api_v1_landing_page", resp)

      return resp

  
@@ -103,13 +107,14 @@ 

  

  

  @app.route('/api/v1/actions')

+ def route_api_v1_actions():

+     return jsonify(api_v1_actions())

+ 

  def api_v1_actions():

      provider = request.args.get('provider')

      tags = request.args.get('tags')

  

-     resp = {'actions': get_actions(provider, tags)}

-     return jsonify(resp)

- 

+     return {'actions': get_actions(provider, tags)}

  

  @app.route('/api/v1/actions/providers')

  def api_v1_actions_providers():

file modified
+4 -7
@@ -37,17 +37,14 @@ 

  

      return updates

  

- def get_updates(current_stable, current_devel, logger=None):

-     updates = {}

+ def get_updates(release, logger=None):

      bc = BodhiClient(username="oraculum",

                           useragent="Fedora Easy Karma/GIT",

                           retries=3)

  

-     releases = [(current_stable - 1), current_stable, current_devel]

-     for release in releases:

-         updates["F" + str(release)] = query_bodhi(bc, release, False, logger)

-         updates_pending = query_bodhi(bc, release, True, logger)

-         updates["F" + str(release)].extend(updates_pending)

+     updates = query_bodhi(bc, release, False, logger)

+     updates_pending = query_bodhi(bc, release, True, logger)

+     updates.extend(updates_pending)

  

      return updates

  

no initial comment

wouldn't karma = api_v1_libkarma().get_json() work? Not sure, just asking.

1 new commit added

  • Refactor api_v1_libkarma and api_v1_landing_page a little
3 years ago

1 new commit added

  • Few improvements
3 years ago

1 new commit added

  • Moar fixez
3 years ago

1 new commit added

  • Moar improvements
3 years ago

2 new commits added

  • Fix sync
  • More cleaning of libkarma
3 years ago

1 new commit added

  • Purge get_current_releases
3 years ago

1 new commit added

  • Missing comma
3 years ago

1 new commit added

  • Handle errors in API-friendly way
3 years ago

1 new commit added

  • Sync refactor
3 years ago

1 new commit added

  • Pretty api_v1_libkarma
3 years ago

1 new commit added

  • Purge forgotten import
3 years ago

1 new commit added

  • Moar prettyness
3 years ago

1 new commit added

  • route_api_v1_libkarma() reshuffle
3 years ago

1 new commit added

  • Tweaks
3 years ago

1 new commit added

  • all endpoint fix
3 years ago

1 new commit added

  • How about now
3 years ago

rebased onto 0658b0b

3 years ago

Pull-Request has been merged by frantisekz

3 years ago