Fix custom component imports (#246)

This commit is contained in:
Nikhil Rao 2023-01-11 11:34:46 -08:00 committed by GitHub
parent 897ef161bf
commit 7f0aa4f5c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 45 additions and 23 deletions

Binary file not shown.

View File

@ -6,9 +6,9 @@
"prod": "next start" "prod": "next start"
}, },
"dependencies": { "dependencies": {
"@chakra-ui/system": "1.12.1",
"@chakra-ui/icons": "1.1.7", "@chakra-ui/icons": "1.1.7",
"@chakra-ui/react": "1.8.8", "@chakra-ui/react": "1.8.8",
"@chakra-ui/system": "1.12.1",
"@emotion/react": "^11.9.0", "@emotion/react": "^11.9.0",
"@emotion/styled": "^11.8.1", "@emotion/styled": "^11.8.1",
"axios": "^0.27.2", "axios": "^0.27.2",
@ -27,6 +27,7 @@
"rehype-katex": "^6.0.2", "rehype-katex": "^6.0.2",
"rehype-raw": "^6.1.1", "rehype-raw": "^6.1.1",
"remark-gfm": "^3.0.1", "remark-gfm": "^3.0.1",
"remark-math": "^5.1.1" "remark-math": "^5.1.1",
"victory": "^36.6.8"
} }
} }

View File

@ -7,6 +7,7 @@ from .app import App
from .base import Base from .base import Base
from .components import * from .components import *
from .components.component import custom_component as component from .components.component import custom_component as component
from .components.graphing.victory import data
from .config import Config from .config import Config
from .constants import Env from .constants import Env
from .event import EventChain, console_log, redirect, window_alert from .event import EventChain, console_log, redirect, window_alert
@ -14,4 +15,3 @@ from .middleware import Middleware
from .model import Model, session from .model import Model, session
from .state import ComputedVar as var from .state import ComputedVar as var
from .state import State from .state import State
from .components.graphing.victory import data

View File

@ -387,15 +387,24 @@ class Component(Base, ABC):
self._get_imports(), *[child.get_imports() for child in self.children] self._get_imports(), *[child.get_imports() for child in self.children]
) )
def get_custom_components(self) -> Set[CustomComponent]: def get_custom_components(
self, seen: Optional[Set[str]] = None
) -> Set[CustomComponent]:
"""Get all the custom components used by the component. """Get all the custom components used by the component.
Args:
seen: The tags of the components that have already been seen.
Returns: Returns:
The set of custom components. The set of custom components.
""" """
custom_components = set() custom_components = set()
# Store the seen components in a set to avoid infinite recursion.
if seen is None:
seen = set()
for child in self.children: for child in self.children:
custom_components |= child.get_custom_components() custom_components |= child.get_custom_components(seen=seen)
return custom_components return custom_components
@ -479,17 +488,29 @@ class CustomComponent(Component):
""" """
return set() return set()
def get_custom_components(self) -> Set[CustomComponent]: def get_custom_components(
self, seen: Optional[Set[str]] = None
) -> Set[CustomComponent]:
"""Get all the custom components used by the component. """Get all the custom components used by the component.
Args:
seen: The tags of the components that have already been seen.
Returns: Returns:
The set of custom components. The set of custom components.
""" """
return ( assert self.tag is not None, "The tag must be set."
{self}
| super().get_custom_components() # Store the seen components in a set to avoid infinite recursion.
# | self.get_component().get_custom_components() if seen is None:
) seen = set()
custom_components = {self} | super().get_custom_components(seen=seen)
# Avoid adding the same component twice.
if self.tag not in seen:
seen.add(self.tag)
custom_components |= self.get_component().get_custom_components(seen=seen)
return custom_components
def _render(self) -> Tag: def _render(self) -> Tag:
"""Define how to render the component in React. """Define how to render the component in React.

View File

@ -2,19 +2,19 @@
from .plotly import Plotly from .plotly import Plotly
from .victory import ( from .victory import (
Chart,
Line,
Scatter,
Area, Area,
Bar, Bar,
Pie,
Polar,
Candlestick,
BoxPlot, BoxPlot,
Histogram, Candlestick,
ErrorBar, Chart,
ChartGroup, ChartGroup,
ChartStack, ChartStack,
ErrorBar,
Histogram,
Line,
Pie,
Polar,
Scatter,
Voronoi, Voronoi,
) )

View File

@ -1,6 +1,6 @@
"""Victory graphing components.""" """Victory graphing components."""
from typing import Any, Dict, Union, List, Optional from typing import Any, Dict, List, Optional, Union
from pynecone.components.component import Component from pynecone.components.component import Component
from pynecone.components.tags import Tag from pynecone.components.tags import Tag

View File

@ -286,10 +286,10 @@ class Var(ABC):
A var with the absolute value. A var with the absolute value.
Raises: Raises:
ValueError: If the var is not a list. TypeError: If the var is not a list.
""" """
if not utils._issubclass(self.type_, List): if not utils._issubclass(self.type_, List):
raise ValueError(f"Cannot get length of non-list var {self}.") raise TypeError(f"Cannot get length of non-list var {self}.")
return BaseVar( return BaseVar(
name=f"{self.full_name}.length", name=f"{self.full_name}.length",
type_=int, type_=int,

View File

@ -2,13 +2,13 @@ from typing import List, Set, Type
import pytest import pytest
from pynecone import data
from pynecone.components.component import Component, CustomComponent, ImportDict from pynecone.components.component import Component, CustomComponent, ImportDict
from pynecone.components.layout.box import Box from pynecone.components.layout.box import Box
from pynecone.event import EVENT_TRIGGERS, EventHandler from pynecone.event import EVENT_TRIGGERS, EventHandler
from pynecone.state import State from pynecone.state import State
from pynecone.style import Style from pynecone.style import Style
from pynecone.var import Var from pynecone.var import Var
from pynecone import data
x_num = [1, 2, 3, 4, 5] x_num = [1, 2, 3, 4, 5]
x_str = ["Cats", "Dogs", "Birds", "Fish", "Reptiles"] x_str = ["Cats", "Dogs", "Birds", "Fish", "Reptiles"]