Browse Source

re add removed method with better behaviour and tests (#3986)

Thomas Brandého 8 months ago
parent
commit
4e4d36a867
2 changed files with 49 additions and 1 deletions
  1. 19 0
      reflex/page.py
  2. 30 1
      tests/test_page.py

+ 19 - 0
reflex/page.py

@@ -63,3 +63,22 @@ def page(
         return render_fn
 
     return decorator
+
+
+def get_decorated_pages(omit_implicit_routes=True) -> list[dict[str, Any]]:
+    """Get the decorated pages.
+
+    Args:
+        omit_implicit_routes: Whether to omit pages where the route will be implicitely guessed later.
+
+    Returns:
+        The decorated pages.
+    """
+    return sorted(
+        [
+            page_data
+            for _, page_data in DECORATED_PAGES[get_config().app_name]
+            if not omit_implicit_routes or "route" in page_data
+        ],
+        key=lambda x: x.get("route", ""),
+    )

+ 30 - 1
tests/test_page.py

@@ -1,6 +1,6 @@
 from reflex import text
 from reflex.config import get_config
-from reflex.page import DECORATED_PAGES, page
+from reflex.page import DECORATED_PAGES, get_decorated_pages, page
 
 
 def test_page_decorator():
@@ -48,3 +48,32 @@ def test_page_decorator_with_kwargs():
     }
 
     DECORATED_PAGES.clear()
+
+
+def test_get_decorated_pages():
+    assert get_decorated_pages() == []
+
+    def foo_():
+        return text("foo")
+
+    page()(foo_)
+
+    assert get_decorated_pages() == []
+    assert get_decorated_pages(omit_implicit_routes=False) == [{}]
+
+    page(route="foo2")(foo_)
+
+    assert get_decorated_pages() == [{"route": "foo2"}]
+    assert get_decorated_pages(omit_implicit_routes=False) == [{}, {"route": "foo2"}]
+
+    page(route="foo3", title="Foo3")(foo_)
+
+    assert get_decorated_pages() == [
+        {"route": "foo2"},
+        {"route": "foo3", "title": "Foo3"},
+    ]
+    assert get_decorated_pages(omit_implicit_routes=False) == [
+        {},
+        {"route": "foo2"},
+        {"route": "foo3", "title": "Foo3"},
+    ]