Skip to content

Commit 0989dad

Browse files
committed
Improve templates fetching logic and filtering
1 parent 5b3aa27 commit 0989dad

File tree

1 file changed

+26
-28
lines changed

1 file changed

+26
-28
lines changed

reflex/utils/templates.py

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -245,49 +245,47 @@ def fetch_app_templates(version: str) -> dict[str, Template]:
245245
"""
246246

247247
def get_release_by_tag(tag: str) -> dict | None:
248-
response = net.get(constants.Reflex.RELEASES_URL)
248+
url = f"{constants.Reflex.RELEASES_URL}/tags/v{tag}"
249+
response = net.get(url)
250+
if response.status_code == 404:
251+
return None
249252
response.raise_for_status()
250-
releases = response.json()
251-
for release in releases:
252-
if release["tag_name"] == f"v{tag}":
253-
return release
254-
return None
253+
return response.json()
255254

256255
release = get_release_by_tag(version)
257256
if release is None:
258257
console.warn(f"No templates known for version {version}")
259258
return {}
260259

261-
assets = release.get("assets", [])
262-
asset = next((a for a in assets if a["name"] == "templates.json"), None)
263-
if asset is None:
260+
asset_map = {
261+
a["name"]: a["browser_download_url"] for a in release.get("assets", [])
262+
}
263+
264+
templates_url = asset_map.get("templates.json")
265+
if not templates_url:
264266
console.warn(f"Templates metadata not found for version {version}")
265267
return {}
266-
templates_url = asset["browser_download_url"]
267268

268-
templates_data = net.get(templates_url, follow_redirects=True).json()["templates"]
269+
templates_data = (
270+
net.get(templates_url, follow_redirects=True).json().get("templates", [])
271+
)
269272

270-
for template in templates_data:
271-
if template["name"] == "blank":
272-
template["code_url"] = ""
273-
continue
274-
template["code_url"] = next(
275-
(
276-
a["browser_download_url"]
277-
for a in assets
278-
if a["name"] == f"{template['name']}.zip"
279-
),
280-
None,
281-
)
273+
known_fields = {f.name for f in dataclasses.fields(Template)}
282274

283275
filtered_templates = {}
284-
for tp in templates_data:
285-
if tp["hidden"] or tp["code_url"] is None:
276+
for template in templates_data:
277+
code_url = (
278+
""
279+
if template["name"] == "blank"
280+
else asset_map.get(f"{template['name']}.zip")
281+
)
282+
if template["hidden"] or code_url is None:
286283
continue
287-
known_fields = {f.name for f in dataclasses.fields(Template)}
288-
filtered_templates[tp["name"]] = Template(**{
289-
k: v for k, v in tp.items() if k in known_fields
284+
filtered_templates[template["name"]] = Template(**{
285+
k: v for k, v in template.items() if k in known_fields
290286
})
287+
filtered_templates[template["name"]].code_url = code_url
288+
291289
return filtered_templates
292290

293291

0 commit comments

Comments
 (0)