* disable react strict mode for event loop
* oops
* pyi oui
* separate socket connection from event loop
* prettier state.js
* disable react strict mode
* didn't work sadge
* socket connect/disconnect depends on new isBackendDisabled state
* only start the event loop when the socket is set or we're not stateful
* Always drain the queue unless backend is disabled
---------
Co-authored-by: Masen Furer <m_github@0x26.net>
* add backend disabled dialog
* pyi that guy
* pyi the other guy
* extend test_connection_banner to also test the cloud banner
* oops, need asyncio _inside_ the app
* Update reflex/components/core/banner.py
Co-authored-by: Masen Furer <m_github@0x26.net>
* use universal cookies
* fix pre-commit
* revert universal cookie 🍪
---------
Co-authored-by: Masen Furer <m_github@0x26.net>
* Fix setting default color mode in dev mode
Without this, the last_compiled_timestamp local storage never gets set because
it's always `null` until it gets set.
* test_client_storage: also pop `theme` key from next-themes
* remove deprecated features and support for py3.9
* remove other deprecated stuff
* update lock file
* fix units tests
* relock poetry
* fix _replace for computed_var
* fix some merge typo
* fix typing of deploy args
* fix benchmarks.yml versions
* console.error instead of raising Exception
* fix tests
* ignore lambdas when resolving annotations
* simplify redirect logic in event.py
* more fixes
* fix unit tests again
* give back default annotations for lambdas
* fix signature check for on_submit
* remove useless stuff
* update pyi
* readd the getattr
* raise if log_level is wrong type
* silly goose, loglevel is a subclass of str
* i don't believe this code
* add guard
---------
Co-authored-by: Khaleel Al-Adhami <khaleel.aladhami@gmail.com>
* use position in vardata to mark internal hooks
* update all render to use position
* use macros for rendering
* reduce number of iterations over hooks during rendering
* cleanup code and add typing
* add __future__
* use new macros to render component maps in markdown
* remove calls to _get_all_hooks_internal
* fix typo
* forgot to replace this
* unnecessary expand in utils.py
* [ENG-2157] [Refix] Allow `rx.download` to resolve `rx.get_upload_url`
Update the special case in a way that works with the new Var system and its
unstoppable determination to concatenate strings instead of using template
string
This has been broken since 0.6.0, so a regression test was added to avoid
future inadvertant breakage.
Fix#2812 (again)
* use safer indirect eval
* fix memoized event trigger order
* allow to declare deps in event signature for memoized event triggers
* clean up the code to pass tests
* handle position of hooks
* clean up code
* revert test changes
* add future annotations
* remove non-necessary stuff
* reuse data_callback name if already set during first call to add_hooks
* remove HookVar and use Var with VarData instead
* remove test change
* readd removed line
* fix order of stmt for cleaner code
* fix typing
* something broke during the merge I guess
* remove hack and pass proper const for position
* oops, bad syntax in jinja
* use "hook_position" instead of "hook_positions"
match the name of the enum
---------
Co-authored-by: Masen Furer <m_github@0x26.net>
* Avoid double JSON encode/decode for socket.io
socket.io (python and js) already has a built in mechanism for JSON encoding
and decoding messages over the websocket. To use it, we pass a custom `json`
namespace which uses `format.json_dumps` (leveraging reflex serializers) to encode the
messages. This avoids sending a JSON-encoded string of JSON over the wire, and
reduces the number of serialization/deserialization passes over the message
data.
The side benefit is that debugging websocket messages in browser tools displays
the parsed JSON hierarchy and is much easier to work with.
* JSON5.parse in on_upload_progress handler responses
* rx.upload must include _var_data from props
str-casting the dropzone arguments removed any VarData they depended on, like
the state context.
update test_upload to include passing a prop from a state var
* Handle large payload delta from upload event handler
Fix update chunk chaining logic; try/catch wasn't catching errors from the
async inner function.
* Unit test updates
* test_client_storage: simulate backend state expiry
* [HOS-333] Send a "reload" message to the frontend after state expiry
1. a state instance expires on the backing store
2. frontend attempts to process an event against the expired token and gets a
fresh instance of the state without router_data set
3. backend sends a "reload" message on the websocket containing the event and
immediately stops processing
4. in response to the "reload" message, frontend sends
[hydrate, update client storage, on_load, <previous_event>]
This allows the frontend and backend to re-syncronize on the state of the app
before continuing to process regular events.
If the event in (2) is a special hydrate event, then it is processed normally
by the middleware and the "reload" logic is skipped since this indicates an
initial load or a browser refresh.
* unit tests working with redis
When an event/event spec is marked as "temporal", it will not be queued unless
the backend is up. This can be used to prevent periodic events (like from
`rx.moment`) from queueing up while the backend is down, and then stampeding
when the backend comes up and the queue is drained. It can be used to avoid
processing many periodic events at once when the app is only expecting to
process such an event every so often.
In some cases, a routing failure can cause the failure to be cached. When the
router has a cached failure, pushing such a route will never call
routeChangeComplete, and thus on_load event will never be fired for that route.
Purposely clearing the error from the router allows the page to properly load
on subsequent attempts without refreshing the app.
* Codeblock cleanup in markdown
* Initial approach to getting this working with rx.memo and reflex web
* abstract the map var logic
* the tests are not valid + pyright fix
* darglint fix
* Add unit tests plus mix components
* pyi run
* rebase on main
* fix darglint
* testing different OS
* revert
* This should fix it. Right?
* Fix tests
* minor fn signature fix
* use ArgsFunctionOperation
* use destructured args and pass the tests
* fix remaining unit tests
* fix pyi files
* rebase on main
* move language regex on codeblock to markdown
* fix tests
---------
Co-authored-by: Khaleel Al-Adhami <khaleel.aladhami@gmail.com>
* Shiki codeblock support decorations
* add decorations to useEffect
* fix pyright
* validate decorations dict
* Fix exception message plus unit tests
* possible test fix
* fix pyright
* possible tests fix
* cast decorations before creating codeblock
* `plain` is not a valid theme
* pyi fix
* address PR comment
* component as literal vars
* fix pyi
* use render
* fix pyi
* only render once
* add type ignore
* fix upload default value
* remove testcases if you don't pass them
* improve behavior
* fix render
* that's not how icon buttons work
* upgrade to next js 15 and remove babel and enable turbo
* upload is a silly guy
* woops
* how did this work before
* set env variable
* lower it even more
* lower it even more
* lower it even more
* only do literals as component vars
* use $ syntax
* missing test case change
* try being a little smart
* improve merge imports logic
* add public as well
* oops missed that one
* last one there
* Shiki Code block Experimental
* refactor
* update code
* remove console.log
* add transformers to namespace
* some validations
* fix components paths
* fix ruff
* add a high-level component
* fix mapping
* fix mapping
* python 3.9+
* see if this fixes the tests
* fix pyi and annotations
* minimal update of theme and language map
* add hack for reflex-web/flexdown
* unit test file commit
* [ENG-3895] [ENG-3896] Update styling for shiki code block
* strip transformer triggers
* minor refactor
* linter
* fix pyright
* pyi fix
* add unit tests
* sneaky pyright ignore
* the transformer trigger regex should remove the language comment character
* minor refactor
* fix silly mistake
* component mapping in markdown should use the first child for codeblock
* use ternary operator in numbers.py, move code block args to class for docs discoverability
* precommit
* pyright fix
* remove id on copy button animation
* pyright fix for real
* pyi fix
* pyi fix fr
* check if svg exists
* copy event chain
* do a concatenation instead of first child
* added comment
---------
Co-authored-by: Carlos <cutillascarlos@gmail.com>
* Revert "ruff formatting to unbreak `main` CI (#3964)"
This reverts commit f9be184b86.
* Revert "bump python>=3.10 for 0.6.0 (#3956)"
This reverts commit fe1833c5e1.
* drop python3.8 support
* relock dependencies
* Raise warning when < py310 is used
* Move python version check to reflex version check function
Avoid spammy deprecation warnings by only emitting warning once per project,
per reflex version, per reinit.
* Remove other references to python3.8
* [WiP] Support UI components returned from a computed var
* Get rid of nasty react hooks warning
* include @babel/standalone in the base to avoid CDN
* put window variables behind an object
* use jsx
* implement the thing
* cleanup dead test code (#3909)
* override dict in propsbase to use camelCase (#3910)
* override dict in propsbase to use camelCase
* fix underscore in dict
* dang it darglint
* [REF-3562][REF-3563] Replace chakra usage (#3872)
* [ENG-3717] [flexgen] Initialize app from refactored code (#3918)
* Remove Pydantic from some classes (#3907)
* half of the way there
* add dataclass support
* Forbid Computed var shadowing (#3843)
* get it right pyright
* fix unit tests
* rip out more pydantic
* fix weird issues with merge_imports
* add missing docstring
* make special props a list instead of a set
* fix moment pyi
* actually ignore the runtime error
* it's ruff out there
---------
Co-authored-by: benedikt-bartscher <31854409+benedikt-bartscher@users.noreply.github.com>
* Merging
* fixss
* fix field_name
* always import react
* move func to file
* do some weird things
* it's really ruff out there
* add docs
* how does this work
* dang it darglint
* fix the silly
* don't remove computed guy
* silly goose, don't ignore var types :D
* update code
* put f string on one line
* make it deprecated instead of outright killing it
* i hate it
* add imports from react
* assert it has evalReactComponent
* do things ig
* move get field to global context
* ooops
---------
Co-authored-by: Khaleel Al-Adhami <khaleel.aladhami@gmail.com>
Co-authored-by: benedikt-bartscher <31854409+benedikt-bartscher@users.noreply.github.com>
Co-authored-by: Elijah Ahianyo <elijahahianyo@gmail.com>
* delete most references to varr
* [REF-3562][REF-3563] Replace chakra usage (#3872)
* only one mention of var
* delete vars.py why not
* remove reflex.vars
* rename immutable var to var
* rename ivars to vars
* add vars back smh
* ruff
* no more create_safe
* reorder deprecated
* remove raises
* remove all Var.create
* move to new api
* fix unit tests
* fix pyi hopefully
* sort literals
* fix event handler issues
* update poetry
* fix silly issues i'm very silly
* add var_operation_return
* rename immutable to not immutable
* add str type
* it's ruff out there
---------
Co-authored-by: Elijah Ahianyo <elijahahianyo@gmail.com>
* use serializer system
* add checks for unsupported operands
* and and or are now supported
* format
* remove unnecessary call to JSON
* put base before rest
* fix failing testcase
* add hinting to get static analysis to complain
* damn
* big changes
* get typeguard from extensions
* please darglint
* dangit darglint
* remove one from vars
* add without data and use it in plotly
* DARGLINT
* change format for special props
* add pyi
* delete instances of Var.create
* modify client state to work
* fixed so much
* remove every Var.create
* delete all basevar stuff
* checkpoint
* fix pyi
* get older python to work
* dangit darglint
* add simple fix to last failing testcase
* remove var name unwrapped and put client state on immutable var
* fix older python
* fox event issues
* change forms pyi
* make test less strict
* use rx state directly
* add typeignore to page_id
* implement foreach
* delete .web states folder silly
* update reflex chakra
* fix issue when on mount or on unmount is not set
* nuke Var
* run pyi
* import immutablevar in critical location
* delete unwrap vars
* bring back array ref
* fix style props in app
* /health endpoint for K8 Liveness and Readiness probes (#3855)
* Added API Endpoint
* Added API Endpoint
* Added Unit Tests
* Added Unit Tests
* main
* Apply suggestions from Code Review
* Fix Ruff Formatting
* Update Socket Events
* Async Functions
* Update find_replace (#3886)
* [REF-3592]Promote `rx.progress` from radix themes (#3878)
* Promote `rx.progress` from radix themes
* fix pyi
* add warning when accessing `rx._x.progress`
* Use correct flexgen backend URL (#3891)
* Remove demo template (#3888)
* gitignore .web (#3885)
* update overflowY in AUTO_HEIGHT_JS from hidden to scroll (#3882)
* Retain mutability inside `async with self` block (#3884)
When emitting a state update, restore `_self_mutable` to the value it had
previously so that `yield` in the middle of `async with self` does not result
in an immutable StateProxy.
Fix#3869
* Include child imports in markdown component_map (#3883)
If a component in the markdown component_map contains children components, use
`_get_all_imports` to recursively enumerate them.
Fix#3880
* [REF-3570] Remove deprecated REDIS_URL syntax (#3892)
* mixin computed vars should only be applied to highest level state (#3833)
* improve state hierarchy validation, drop old testing special case (#3894)
* fix var dependency dicts (#3842)
* Adding array to array pluck operation. (#3868)
* fix initial state without cv fallback (#3670)
* add fragment to foreach (#3877)
* Update docker-example (#3324)
* /health endpoint for K8 Liveness and Readiness probes (#3855)
* Added API Endpoint
* Added API Endpoint
* Added Unit Tests
* Added Unit Tests
* main
* Apply suggestions from Code Review
* Fix Ruff Formatting
* Update Socket Events
* Async Functions
* /health endpoint for K8 Liveness and Readiness probes (#3855)
* Added API Endpoint
* Added API Endpoint
* Added Unit Tests
* Added Unit Tests
* main
* Apply suggestions from Code Review
* Fix Ruff Formatting
* Update Socket Events
* Async Functions
* Merge branch 'main' into use-old-serializer-in-literalvar
* [REF-3570] Remove deprecated REDIS_URL syntax (#3892)
* /health endpoint for K8 Liveness and Readiness probes (#3855)
* Added API Endpoint
* Added API Endpoint
* Added Unit Tests
* Added Unit Tests
* main
* Apply suggestions from Code Review
* Fix Ruff Formatting
* Update Socket Events
* Async Functions
* [REF-3570] Remove deprecated REDIS_URL syntax (#3892)
* remove extra var
Co-authored-by: Masen Furer <m_github@0x26.net>
* resolve typo
* write better doc for var.create
* return var value when we know it's literal var
* fix unit test
* less bloat for ToOperations
* simplify ImmutableComputedVar.__get__ (#3902)
* simplify ImmutableComputedVar.__get__
* ruff it
---------
Co-authored-by: Samarth Bhadane <samarthbhadane119@gmail.com>
Co-authored-by: Elijah Ahianyo <elijahahianyo@gmail.com>
Co-authored-by: Masen Furer <m_github@0x26.net>
Co-authored-by: benedikt-bartscher <31854409+benedikt-bartscher@users.noreply.github.com>
Co-authored-by: Vishnu Deva <vishnu.deva12@gmail.com>
Co-authored-by: abulvenz <a.eismann@senbax.de>
If the user provided an `appearance` or `color_mode` value to `rx.theme`, then
the resulting value ended up being double-double-quoted in the resulting JS
output.
Instead remove the quotes from the context.js.jinja2 and always pass appearance
as a Var.
* add module prefix to state names
* fix state names in test_app
* update state names in test_state
* fix state names in test_var
* fix state name in test_component
* fix state names in test_format
* fix state names in test_foreach
* fix state names in test_cond
* fix state names in test_datatable
* fix state names in test_colors
* fix state names in test_script
* fix state names in test_match
* fix state name in event1 fixture
* fix pyright and darglint
* fix state names in state_tree
* fix state names in redis only test
* fix state names in test_client_storage
* fix state name in js template
* add `get_state_name` and `get_full_state_name` helpers for `AppHarness`
* fix state names in test_dynamic_routes
* use new state name helpers in test_client_storage
* fix state names in test_event_actions
* fix state names in test_event_chain
* fix state names in test_upload
* fix state name in test_login_flow
* fix state names in test_input
* fix state names in test_form_submit
* ruff
* validate state module names
* wtf is going on here?
* remove comments leftover from refactoring
* adjust new test_add_style_embedded_vars
* fix state name in state.js
* fix integration/test_client_state.py
new SessionStorage feature was added with more full state names that need to be formatted in
* fix pre-commit issues in test_client_storage.py
* adjust test_computed_vars
* adjust safe-guards
* fix redis tests with new exception state
---------
Co-authored-by: Masen Furer <m_github@0x26.net>
* - added possibility to pass front- and backend exception handlers to rx.App
- wrapped the app with ErrorBoundary component to catch rendering errors
* added missing exception handler to reflex.app._process
* regenerated pyi
* fix unit tests for exception handler validation
* fix typing error in ErrorBoudary
* - fix error_bounday pyi
- minor refactoring of error boundary
- removed error boundary from 404 page
* added missing inspect module import after merging main
* fix typing error
* Clean up ErrorBoundary component
* Remove custom _render function
* Remove special imports in Component base class
* Simplify hooks for better composability
* test_exception_handlers: also test in prod mode
* fixed color prop
* fixed error boundary bug and removed hardcoding of the frontend event exception state
* formatted the code after conflict resolution
* fixed type of the error_boundary
* ruff format
---------
Co-authored-by: Maxim Vlah <m.vlah@senbax.de>
Co-authored-by: Masen Furer <m_github@0x26.net>