From 0989dadad86b3fc08e2ad926f9b87a3249fdf5e6 Mon Sep 17 00:00:00 2001 From: HellAmbro Date: Thu, 25 Dec 2025 00:37:26 +0100 Subject: [PATCH 1/3] Improve templates fetching logic and filtering --- reflex/utils/templates.py | 54 +++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/reflex/utils/templates.py b/reflex/utils/templates.py index 23e6f42f2bd..51fc2659820 100644 --- a/reflex/utils/templates.py +++ b/reflex/utils/templates.py @@ -245,49 +245,47 @@ def fetch_app_templates(version: str) -> dict[str, Template]: """ def get_release_by_tag(tag: str) -> dict | None: - response = net.get(constants.Reflex.RELEASES_URL) + url = f"{constants.Reflex.RELEASES_URL}/tags/v{tag}" + response = net.get(url) + if response.status_code == 404: + return None response.raise_for_status() - releases = response.json() - for release in releases: - if release["tag_name"] == f"v{tag}": - return release - return None + return response.json() release = get_release_by_tag(version) if release is None: console.warn(f"No templates known for version {version}") return {} - assets = release.get("assets", []) - asset = next((a for a in assets if a["name"] == "templates.json"), None) - if asset is None: + asset_map = { + a["name"]: a["browser_download_url"] for a in release.get("assets", []) + } + + templates_url = asset_map.get("templates.json") + if not templates_url: console.warn(f"Templates metadata not found for version {version}") return {} - templates_url = asset["browser_download_url"] - templates_data = net.get(templates_url, follow_redirects=True).json()["templates"] + templates_data = ( + net.get(templates_url, follow_redirects=True).json().get("templates", []) + ) - for template in templates_data: - if template["name"] == "blank": - template["code_url"] = "" - continue - template["code_url"] = next( - ( - a["browser_download_url"] - for a in assets - if a["name"] == f"{template['name']}.zip" - ), - None, - ) + known_fields = {f.name for f in dataclasses.fields(Template)} filtered_templates = {} - for tp in templates_data: - if tp["hidden"] or tp["code_url"] is None: + for template in templates_data: + code_url = ( + "" + if template["name"] == "blank" + else asset_map.get(f"{template['name']}.zip") + ) + if template["hidden"] or code_url is None: continue - known_fields = {f.name for f in dataclasses.fields(Template)} - filtered_templates[tp["name"]] = Template(**{ - k: v for k, v in tp.items() if k in known_fields + filtered_templates[template["name"]] = Template(**{ + k: v for k, v in template.items() if k in known_fields }) + filtered_templates[template["name"]].code_url = code_url + return filtered_templates From aeaa9300b7e24cbc85f862b0bf11af890128e75d Mon Sep 17 00:00:00 2001 From: HellAmbro Date: Thu, 25 Dec 2025 00:55:01 +0100 Subject: [PATCH 2/3] Fix frozen dataclass assignment --- reflex/utils/templates.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/reflex/utils/templates.py b/reflex/utils/templates.py index 51fc2659820..2cd4113689d 100644 --- a/reflex/utils/templates.py +++ b/reflex/utils/templates.py @@ -281,11 +281,10 @@ def get_release_by_tag(tag: str) -> dict | None: ) if template["hidden"] or code_url is None: continue - filtered_templates[template["name"]] = Template(**{ - k: v for k, v in template.items() if k in known_fields - }) - filtered_templates[template["name"]].code_url = code_url - + filtered_templates[template["name"]] = Template( + **{k: v for k, v in template.items() if k in known_fields}, + code_url=code_url + ) return filtered_templates From 1ef37592ec7c802f4f66fad983f5f67d5fe071ec Mon Sep 17 00:00:00 2001 From: HellAmbro Date: Thu, 25 Dec 2025 00:59:29 +0100 Subject: [PATCH 3/3] Reformat code --- reflex/utils/templates.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reflex/utils/templates.py b/reflex/utils/templates.py index 2cd4113689d..da404a04a3e 100644 --- a/reflex/utils/templates.py +++ b/reflex/utils/templates.py @@ -283,7 +283,7 @@ def get_release_by_tag(tag: str) -> dict | None: continue filtered_templates[template["name"]] = Template( **{k: v for k, v in template.items() if k in known_fields}, - code_url=code_url + code_url=code_url, ) return filtered_templates