#54 Package versions
Merged 3 years ago by frantisekz. Opened 3 years ago by frantisekz.

@@ -61,6 +61,7 @@ 

      CACHE.register('packager-dashboard_user_data_static', dashboard_user_data_static)

      CACHE.register('packager-dashboard_bugs', dashboard.get_package_bugs)

      CACHE.register('packager-dashboard_pull_requests', dashboard.get_package_prs)

+     CACHE.register('packager-dashboard_package_versions', dashboard.get_package_versions)

  

  

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

@@ -38,8 +38,9 @@ 

  

      prs = dashboard_user_data_prs(user)

      bzs = dashboard_user_data_bzs(user)

+     package_versions = dashboard_user_data_pkg_versions(user)

  

-     return jsonify({'static_info': static_info, 'prs': prs, 'bzs': bzs})

+     return jsonify({'static_info': static_info, 'prs': prs, 'bzs': bzs, 'package_versions': package_versions})

  

  

  def dashboard_user_data_static(user):
@@ -68,6 +69,22 @@ 

      }

  

  

+ def dashboard_user_data_pkg_versions(user):

+     data = CACHE.async_get('packager-dashboard_user_data_static', 'low', user)

+     if data in [cache_utils.RefresherNotRegistered, cache_utils.AsyncRefreshInProgress]:

+         return {"status": 204, "data": None}

+ 

+     status = 200

+     package_versions = {}

+     for package in data["packages"]:

+         item = CACHE.async_get('packager-dashboard_package_versions', 'low', package)

+         if item not in [cache_utils.RefresherNotRegistered, cache_utils.AsyncRefreshInProgress]:

+             package_versions[package] = item

+         else:

+             package_versions[package] = {}

+             status = 202

+     return {"status": status, "data": package_versions}

+ 

  def dashboard_user_data_prs(user):

      data = CACHE.async_get('packager-dashboard_user_data_static', 'low', user)

      if data in [cache_utils.RefresherNotRegistered, cache_utils.AsyncRefreshInProgress]:
@@ -76,9 +93,9 @@ 

      status = 200

      pull_requests = {}

      for package in data["packages"]:

-         data = CACHE.async_get('packager-dashboard_pull_requests', 'low', package)

-         if data not in [cache_utils.RefresherNotRegistered, cache_utils.AsyncRefreshInProgress]:

-             pull_requests[package] = data

+         item = CACHE.async_get('packager-dashboard_pull_requests', 'low', package)

+         if item not in [cache_utils.RefresherNotRegistered, cache_utils.AsyncRefreshInProgress]:

+             pull_requests[package] = item

          else:

              pull_requests[package] = []

              status = 202
@@ -93,9 +110,9 @@ 

      status = 200

      bugzillas = {}

      for package in data["packages"]:

-         data = CACHE.async_get('packager-dashboard_bugs', 'low', package)

-         if data not in [cache_utils.RefresherNotRegistered, cache_utils.AsyncRefreshInProgress]:

-             bugzillas[package] = data

+         item = CACHE.async_get('packager-dashboard_bugs', 'low', package)

+         if item not in [cache_utils.RefresherNotRegistered, cache_utils.AsyncRefreshInProgress]:

+             bugzillas[package] = item

          else:

              bugzillas[package] = []

              status = 202

@@ -133,3 +133,4 @@ 

              plan_celery_refresh("medium", 'packager-dashboard_user_data_static', user)

              plan_celery_refresh("low", 'packager-dashboard_pull_requests', package)

              plan_celery_refresh("low", 'packager-dashboard_bugs', package)

+             plan_celery_refresh("low", 'packager-dashboard_package_versions', package)

file modified
+42 -1
@@ -109,7 +109,7 @@ 

      """

      releases = CACHE.get("fedora_releases")

      dist = dist.replace("~bootstrap", "")

-     if "el" in dist or "epel" in dist:

+     if "el" in dist or "epel" in dist.lower():

          return "EPEL %s" % dist[-1:]

      if int(dist[-2:]) == releases["rawhide"]:

          return "Fedora Rawhide"
@@ -335,6 +335,47 @@ 

          "combined": list(primary_packages | group_packages_list)  # Join sets of primary and group packages

      }

  

+ def get_package_versions(package):

+     versions = {}

+     releases = CACHE.get("fedora_releases")

+     for release in releases["values"][:-1]: # Skip Rawhide

+         versions[release_from_dist(str(release))] = {"stable": None, "testing": None}

+     # Append Rawhide in standardized naming format

+     versions["Fedora Rawhide"] = {"stable": None, "testing": None}

+     for release in app.config["EPEL_RELEASES"]:

+         versions[release_from_dist("el" + str(release))] = {"stable": None, "testing": None}

+ 

+     bodhi_versions = get_json("https://src.fedoraproject.org/_dg/bodhi_updates/rpms/%s" % package)

+     if not bodhi_versions:

+         # Return dictionary we've prepared above containing empty fields for each release

+         # versions = {"Fedora XX": {"stable": None, "testing": None}, "Fedora Rawhide": {"stable": None, "testing": None}...}

+         return versions

+     for release in bodhi_versions["updates"]:

+         # Exclude ELN for now

+         if "ELN" in release:

+             continue

+         formatted_release = release_from_dist(release)

+         try:

+             versions[formatted_release]["stable"] = bodhi_versions["updates"][release]["stable"]

+         except KeyError:

+             pass

+         try:

+             versions[formatted_release]["testing"] = bodhi_versions["updates"][release]["testing"]

+         except KeyError:

+             pass

+ 

+     # We need to query mdapi if we have None in Fedora stable values

+     for release in versions:

+         if "Fedora" in release and not versions[release]["stable"]:

+             if "Rawhide" in release:

+                 mdapi_response = get_json("https://mdapi.fedoraproject.org/%s/srcpkg/%s" % ("rawhide", package))

+             else:

+                 mdapi_response = get_json("https://mdapi.fedoraproject.org/%s/srcpkg/%s" % ("f" + release[-2:], package))

+             if not mdapi_response:

+                 continue

+             versions[release]["stable"] = package + "-" + mdapi_response["version"] + "-" + mdapi_response["release"]

+ 

+     return versions

  

  def get_updates(packages, raw_updates):

      """

rebased onto ef98210

3 years ago

rebased onto 0a55323

3 years ago

rebased onto 6f82c0a

3 years ago

Either add a comment explaining what the 'empty' value looks like, or return it explicitly.

I'm not sure it's a great idea to use data here. It works ("by accident") as expected, but I'd rather not seemingly change the variable that's being traversed in the for-cycle.

Is it possible to also use release_from_dist() here, or is this something completely different? Looks a bit confusing to have two different approaches for version 'namin' within 10 lines.

Apart of the comments above, LGTM

rebased onto faccb60

3 years ago

:thumbsup: LGTM thanks!

Pull-Request has been merged by frantisekz

3 years ago