diff --git a/pynecone/app.py b/pynecone/app.py index 0de0ac6f3..ee02f6c6b 100644 --- a/pynecone/app.py +++ b/pynecone/app.py @@ -12,6 +12,7 @@ from pynecone.compiler import utils as compiler_utils from pynecone.components.component import Component, ComponentStyle from pynecone.event import Event, EventHandler from pynecone.middleware import HydrateMiddleware, Middleware +from pynecone.model import Model from pynecone.route import DECORATED_ROUTES from pynecone.state import DefaultState, Delta, State, StateManager, StateUpdate @@ -316,6 +317,10 @@ class App(Base): print("Skipping compilation in non-dev mode.") return + # Update models during hot reload. + if config.db_url is not None: + Model.create_all() + # Empty the .web pages directory compiler.purge_web_pages_dir() diff --git a/pynecone/components/forms/__init__.py b/pynecone/components/forms/__init__.py index 4000b0644..3ee68238d 100644 --- a/pynecone/components/forms/__init__.py +++ b/pynecone/components/forms/__init__.py @@ -14,6 +14,7 @@ from .numberinput import ( NumberInputField, NumberInputStepper, ) +from .password import Password from .pininput import PinInput, PinInputField from .radio import Radio, RadioGroup from .rangeslider import ( diff --git a/pynecone/components/forms/password.py b/pynecone/components/forms/password.py new file mode 100644 index 000000000..ac1453706 --- /dev/null +++ b/pynecone/components/forms/password.py @@ -0,0 +1,11 @@ +"""A password input component.""" + +from pynecone.components.forms.input import Input +from pynecone.var import Var + + +class Password(Input): + """A password input component.""" + + # The type of input. + type_: Var[str] = "password" # type: ignore diff --git a/pynecone/utils.py b/pynecone/utils.py index da4d6ebeb..cac739d15 100644 --- a/pynecone/utils.py +++ b/pynecone/utils.py @@ -49,7 +49,6 @@ if TYPE_CHECKING: from pynecone.components.component import ImportDict from pynecone.config import Config from pynecone.event import Event, EventHandler, EventSpec - from pynecone.model import Model from pynecone.var import Var # Shorthand for join. @@ -720,6 +719,9 @@ def setup_backend(): Specifically ensures backend database is updated when running --no-frontend. """ + # Import here to avoid circular imports. + from pynecone.model import Model + config = get_config() if config.db_url is not None: Model.create_all()