Skip to content

Commit

Permalink
Implement visibility conditions
Browse files Browse the repository at this point in the history
  • Loading branch information
richaagarwal committed Nov 2, 2022
1 parent 8622fd7 commit 42da607
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 22 deletions.
5 changes: 4 additions & 1 deletion backend/api/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,10 @@ def collections() -> Response:

@app.route('/collections/<collection>')
def collection(collection: str) -> Response:
return get_collection(collection)
data = get_collection(collection)
if not data:
return app.make_response(("Collection does not exist", 404))
return data


@app.errorhandler(404)
Expand Down
61 changes: 40 additions & 21 deletions backend/api/collections.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import requests
import yaml

from api.model import get_plugin

COLLECTIONS_URL = "https://api.github.com/repos/chanzuckerberg/napari-hub-collections/contents/collections"
Expand All @@ -11,30 +12,48 @@ def get_collections():
collections = []
contents = list(resp.json())
for item in contents:
print(item)
slug = item.get("name").replace(".yml", "")
data = get_collection(slug, subset=True)
collections.append(data)
data = get_collection(slug, index_page=True)
if data:
collections.append(data)
return collections


def get_collection(slug, subset=False):
def get_collection(slug, index_page=False):
collection_url = "https://raw.githubusercontent.com/chanzuckerberg/napari-hub-collections/main/collections/{slug}.yml".format(slug=slug)
yaml_data = requests.get(collection_url).text
data = yaml.safe_load(yaml_data)
resp = requests.get(collection_url)
if resp.status_code == 404:
return None
data = yaml.safe_load(resp.text)
collection_visibility = data.get("visibility", "public")
if collection_visibility == "disabled":
return None
data["cover_image"] = IMAGES_BASE_URL + data.get("cover_image")
if subset:
return {
"title": data.get("title"),
"summary": data.get("summary"),
"cover_image": data.get("cover_image"),
"curator": data.get("curator"),
"symbol": slug
}
for collection_plugin in data["plugins"]:
plugin_name = collection_plugin["name"]
plugin = get_plugin(plugin_name)
collection_plugin["summary"] = plugin.get("summary", "No summary provided")
collection_plugin["authors"] = plugin.get("authors", [{"name": "No authors provided"}])
collection_plugin["display_name"] = plugin.get("display_name", "No display name provided")
return data
if index_page:
# Returning a subset of collection data for /collections
if collection_visibility == "public":
# Only include collections that are set to public
return {
"title": data.get("title"),
"summary": data.get("summary"),
"cover_image": data.get("cover_image"),
"curator": data.get("curator"),
"symbol": slug
}
return None
else:
# Returning full collection data for /collections/{collection}
plugins = []
for collection_plugin in data["plugins"]:
plugin_name = collection_plugin["name"]
plugin = get_plugin(plugin_name)
if plugin:
plugin_visibility = plugin.get("visibility")
if plugin_visibility == "public":
# Only include plugins that are set to public
collection_plugin["summary"] = plugin.get("summary")
collection_plugin["authors"] = plugin.get("authors")
collection_plugin["display_name"] = plugin.get("display_name")
plugins.append(collection_plugin)
data["plugins"] = plugins
return data

0 comments on commit 42da607

Please sign in to comment.