Commit Graph

190 Commits

Author SHA1 Message Date
Elijah Ahianyo
61c6728006
[REF-2229]Dedupe deprecation warnings (#2871)
* Dedupe deprecation warnings

* Update reflex/utils/console.py

Co-authored-by: Masen Furer <m_github@0x26.net>

* address PR comments

---------

Co-authored-by: Masen Furer <m_github@0x26.net>
2024-03-26 16:33:55 +00:00
wassaf shahzad
15dc7f4552
added feature to automatically change port (#2867) 2024-03-25 17:38:28 -07:00
Masen Furer
7debd3dbb9
When __REFLEX_SKIP_COMPILE == "yes" allow telemetry to fail (#2881)
* When __REFLEX_SKIP_COMPILE == "yes" allow telemetry to fail

Allow running `--backend-only` without a .web directory

* When re-initializing a pre-project_hash project, do not blow up on KeyError
2024-03-19 14:30:55 -07:00
Masen Furer
479b5182aa
[REF-2216] Warn if windows is used with py312 (#2856)
Display a warning message, recommending python 3.11 with the current release of
reflex.

We need this until running with a uvicorn version that has better support for
py3.12 on windows.
2024-03-15 11:16:20 -07:00
Emmanuel Onwuegbusi
2a8d9d1ef4
added name of Var to error message (#2827) 2024-03-13 15:39:49 -07:00
Thomas Brandého
92db402539
telemetry refactor + unit tests (#2786) 2024-03-13 12:38:54 -07:00
Masen Furer
f52ff56440
[REF-2086] Avoid "Warning: The path to the Node binary could not be found. (#2803) 2024-03-13 12:35:43 -07:00
Thomas Brandého
e5fc5f9a83
better default title for seo (also remove default description) (#2844)
* better default title for seo (also remove default description)
2024-03-13 11:18:54 -07:00
Masen Furer
eb18ce90d5
[REF-2172] Add DECORATED_PAGES before compiling in thread (#2841) 2024-03-12 10:28:37 -07:00
benedikt-bartscher
8a3c9383fb
improve event handler state references (#2818) 2024-03-11 12:18:18 -07:00
Martin Xu
bf297e2f5b
[REF-2141] Custom component command improvements (#2807)
* add custom component command improvements

* fix test

* fix regex to include both single/double quotes
2024-03-07 20:42:22 -08:00
benedikt-bartscher
f5b7eca9c7
add support for sqlalchemy AssociationProxys (#2809)
* add support for sqlalchemy AssociationProxys

* python 3.8 compatibility
2024-03-07 15:19:35 -08:00
benedikt-bartscher
19a5cdd408
Track state usage (#2441)
* rebase

* pass include_children kwarg in radix FormRoot

* respect include_children

* ruff fixes

* readd statemanager init, run pyi gen

* minor performance imporovements, fix for state changes

* fix pyi and pyright

* pass include_children for chakra

* remove old state detection

* add test for unused states in stateless app

---------

Co-authored-by: Masen Furer <m_github@0x26.net>
2024-03-07 14:25:55 -08:00
Masen Furer
03aa28320a
Perf improvements (part 1) (#2779)
* types: remove runtime imports from `is_generic_alias`

Reduce try/except contexts for better performance.

* _decode_var optimizations:

* compile the regex once at module scope
* fast path string scan for REFLEX_VAR_OPENING_TAG before doing more complex logic

* Avoid repeated `hasattr` check in `is_union`

`is_union` gets called a lot, and the hasattr check can be resolved at import
time for better performance.
2024-03-06 10:42:20 -08:00
Carlos Llatser
2125701c2d
Fix encoding of the .gitignore file on Windows (#2797) 2024-03-06 09:40:55 -08:00
Masen Furer
fc190c8c8f
app_module_for_backend: wait for _compile in prod mode (#2760)
* Expose reflex.utils.exec.is_prod_mode

Formalize runtime checking of the app's `--env` parameter.

* app_module_for_backend: wait for _compile in prod mode

Prod mode uses separate worker processes that fork from the main process.

If the app is not fully compiled when the fork occurs, any further changes to
the app (like mounting the _upload endpoint) will not be reflected in the
workers. This is not a performance hit because compile is skipped anyway
for backend processes and hot reload is not in the picture for prod mode.

* remove _is_dev_mode and replace it with calls to is_prod_mode()

_is_dev_mode was a private function in the compiler, but now that utils.exec
exposes is_prod_mode, we should use that throughout for consistency
2024-03-04 16:50:31 -08:00
Pablo GS
bbb9253985
Solved Nodejs prerequisite check (#2767) 2024-03-03 19:47:05 -08:00
Tom Gotsman
93fc269860
initial attempt at writing test for urls (#2689)
* initial attempt at writing test for urls

* turn it into a pytest test

* fix precommit and add wrong url to make sure test work

* fix darglint error and fix url set error

* black error

* add to test .md files in reflex as well

* update to fix masen comment

* black formatting

* Fix trailing slash in reflex/state.py

---------

Co-authored-by: Tom Gotsman <tomgotsman@Toms-MacBook-Pro.local>
Co-authored-by: Tom Gotsman <tomgotsman@toms-mbp.lan>
Co-authored-by: Masen Furer <m_github@0x26.net>
2024-02-29 13:45:57 -08:00
Elijah Ahianyo
7ec7f031a3
Only alert users of reflex upgrade once per project (#2731) 2024-02-27 17:12:21 -08:00
Masen Furer
deae662e2a
[REF-1988] API to Get instance of Arbitrary State class (#2678)
* WiP get_state

* Refactor get_state fast path

Rudimentary protection for state instance access from a background task
(StateProxy)

* retain dirty substate marking per `_mark_dirty` call to avoid test changes

* Find common ancestor by part instead of by character

Fix StateProxy for substates and parent_state attributes (have to handle in
__getattr__, not property)

Fix type annotation for `get_state`

* test_state: workflow test for `get_state` functionality

* Do not reset _always_dirty_substates when adding vars

Reset the substate tracking only when the class is instantiated.

* test_state_tree: test substate access in a larger state tree

Ensure that `get_state` returns the proper "branch" of the state tree depending
on what substate is requested.

* test_format: fixup broken tests from adding substates of TestState

* Fix flaky integration tests with more polling

* AppHarness: reset _always_dirty_substates on rx.State

* RuntimeError unless State is instantiated with _reflex_internal_init=True

Avoid user errors trying to directly instantiate State classes

* Helper functions for _substate_key and _split_substate_key

Unify the implementation of generating and decoding the token + state name
format used for redis state sharding.

* StateManagerRedis: use create_task in get_state and set_state

read and write substates concurrently (allow redis to shine)

* test_state_inheritance: use polling cuz life too short for flaky tests

kthnxbai ❤️

* Move _is_testing_env to reflex.utils.exec.is_testing_env

Reuse the code in app.py

* Break up `BaseState.get_state` and friends into separate methods

* Add test case for pre-fetching cached var dependency

* Move on_load_internal and update_vars_internal to substates

Avoid loading the entire state tree to process these common internal events. If
the state tree is very large, this allow page navigation to occur more quickly.

Pre-fetch substates that contain cached vars, as they may need to be recomputed
if certain vars change.

* Do not copy ROUTER_DATA into all substates.

This is a waste of time and memory, and can be handled via a special case in
__getattribute__

* Track whether State instance _was_touched

Avoid wasting time serializing states that have no modifications

* Do not persist states in `StateManagerRedis.get_state`

Wait until the state is actually modified, and then persist it as part of `set_state`.

Factor out common logic into helper methods for readability and to reduce
duplication of common logic.

To avoid having to recursively call `get_state`, which would require persisting
the instance and then getting it again, some of the initialization logic
regarding parent_state and substates is duplicated when creating a new
instance. This is for performance reasons.

* Remove stray print()

* context.js.jinja2: fix check for empty local storage / cookie vars

* Add comments for onLoadInternalEvent and initialEvents

* nit: typo

* split _get_was_touched into _update_was_touched

Improve clarity in cases where _get_was_touched was being called for its side
effects only.

* Remove extraneous information from incorrect State instantiation error

* Update missing redis exception message
2024-02-27 13:02:08 -08:00
Thomas Brandého
467fb794da
fix telemetry for init event (#2736) 2024-02-27 18:53:57 +01:00
benedikt-bartscher
93f402c773
Initial values for computed vars (#2670)
* initial values for computed vars draft

* add tests, add computed_var overloads

* fix darglint

* pass initial to substates when calling dict

* add tests for for child states

* format black

* allow None as initial value

* rename runtime_only to raises_at_runtime

* cleanup unused arguments of ComputedVars

* refactor cached_var to be partial of computed_var
2024-02-24 13:45:07 -08:00
Krys
278183b526
fix image serializing - REF-1889 (#2550)
* fix image serializing

* If get_format_mimetype does not work, look up format in Image.MIME

Throw a warning if the image format does not have an associated MIME type and
ultimately fallback to image/png and let the browser figure it out.

* test_media: end to end serialization of PIL images

---------

Co-authored-by: Masen Furer <m_github@0x26.net>
2024-02-22 08:13:19 -08:00
Martin Xu
a3be76fb75
use sync redis client to sanity check (#2679) 2024-02-21 07:01:44 -08:00
benedikt-bartscher
6c49b96d9d
Fix SQLAlchemy list types (#2668)
* fix sqlalchemy relationship list type hints

* py3.8 and py3.9 compatibility

Co-authored-by: Masen Furer <m_github@0x26.net>

* add missing import

---------

Co-authored-by: Masen Furer <m_github@0x26.net>
2024-02-20 15:14:33 -08:00
Nikhil Rao
4ad238c42c
Update deprecation version to 0.5.0 (#2642) 2024-02-16 11:23:15 -08:00
Masen Furer
1698e3e5e3
Fix more information link to v0.4.0 blog post (#2638) 2024-02-15 20:51:06 -08:00
Masen Furer
d979d99338
[REF-1902] [REF-1987] Chakra upgrade message (#2624)
* Show rx.chakra upgrade message _before_ overwriting the version

Ensure that the conditions for showing the rx.chakra upgrade message
are checked before overwriting the version saved in .web/reflex.json.

Check for the absense of a config file to suppress the upgrade message
when init'ing a brand new project.

Check for the existance of `reflex.json` before opening it, since it
might not exist at the point it's checked.

* Update more information link in chakra upgrade message

* Fix long line
2024-02-15 12:49:53 -08:00
invrainbow
e729a315f8
Fix fstrings being escaped improperly (#2571) 2024-02-13 14:32:44 -08:00
invrainbow
61234ae164
Fix operator precedence (#2573) 2024-02-12 19:30:25 -08:00
Masen Furer
eafe53369e
keep-chakra: whitelist is always whitelist (#2585)
Regardless of whether the same name exists in the top level rx.<x> namespace,
always convert whitelisted names to rx.chakra.<x>
2024-02-12 14:55:39 -08:00
Masen Furer
58b5e2f5bd
Merge remote-tracking branch 'origin/main' into reflex-0.4.0 2024-02-09 19:38:35 -08:00
Elijah Ahianyo
ccc9c32c95
Get rx.color working with fstrings (#2562)
* fix for rx.color working with fstrings

* Fix fstrings issues
2024-02-09 17:06:55 -08:00
Masen Furer
3619595bcc
Fixup import of ChakraComponent
It is no longer exposed in rx.components namespace
2024-02-08 12:50:07 -08:00
Elijah Ahianyo
601dd34792
rx.color to work with conditional vars (#2546) 2024-02-08 11:45:15 -08:00
Elijah Ahianyo
64a90fa6eb
Decorator to validate rx.color prop fields (#2553) 2024-02-08 11:21:46 -08:00
jackie-pc
a4ee985509
CLI script to maintain Chakra backed components in rx namespace in older apps (#2322) 2024-02-08 11:12:20 -08:00
Alek Petuskey
5589cbbfc2
Refactor rx.color (#2522)
* Refactor

* Lint

* Change name space to top level

* Update test

* Lint

* Fix pyright

* Update pyi

---------

Co-authored-by: Alek Petuskey <alekpetuskey@aleks-mbp.lan>
Co-authored-by: Nikhil Rao <nikhil@reflex.dev>
2024-02-04 15:39:07 -08:00
jackie-pc
80c9eb34e4
Rework telemetry to support installation_id (#2480) 2024-01-31 11:39:48 -08:00
benedikt-bartscher
be7f7969ed
improve sqlalchemy type parsing (#2474)
* improve sqlalchemy type parsing

* add support for propertys and relationships

* cleanup duplicate property check

* avoid confusion, improve readability
2024-01-30 15:57:56 -08:00
Alek Petuskey
670faf291a
[WIP] rx.color (#2443)
* Color module intial commit

* Improvments

* Update reflex/constants/colors.py

Co-authored-by: Masen Furer <m_github@0x26.net>

* Comments+tests

* Fix import

---------

Co-authored-by: Alek Petuskey <alekpetuskey@aleks-mbp.lan>
Co-authored-by: Masen Furer <m_github@0x26.net>
Co-authored-by: Alek Petuskey <alekpetuskey@Aleks-MacBook-Pro.local>
2024-01-28 14:06:08 -08:00
benedikt-bartscher
0d8efb9b55
parse return type annotations of sqlalchemy hybrid properties (#2422)
* parse return type annotations of sqlylchemy hybrid properties

* use get_type_hints instead of __annotations__
2024-01-23 14:00:07 -08:00
Masen Furer
9446a1e99f
[REF-1705] Do not overwrite Var attributes during format (#2421) 2024-01-19 15:17:00 -08:00
Masen Furer
6fcc4fd357
Allow app harness tests to import State subclasses (#2408) 2024-01-18 12:54:29 -08:00
jackie-pc
2c270585ab
Skip frontend packages install if previously done (#2400) 2024-01-16 17:52:28 -08:00
benedikt-bartscher
1aca1b677f
fix is_backend_variable for dunder prefixed variables (#2391) 2024-01-16 17:37:05 -08:00
Elijah Ahianyo
26a9e79a5f
Resolve correct python path on windows (#2373) 2024-01-09 09:58:06 -08:00
Masen Furer
87844c3f7d
Enable real app AppHarness tests to not specify state= (#2358) 2024-01-05 17:47:31 -08:00
Elijah Ahianyo
abfc099779
rx.match component (#2318)
* initial commit

* add more tests

* refactor match jinja template

* add docstrings

* cleanup

* possible fix for pyright

* fix conflicts

* fix conflicts again

* comments

* fixed bug from review

* fix tests

* address PR comment

* fix tests

* type error improvement

* formatting

* darglint fix

* more tests

* stringify switch condition and cases as js doesnt support complex types(lists and dicts) in switch cases.

* Update reflex/vars.py

Co-authored-by: Masen Furer <m_github@0x26.net>

* change usages

* Precommit fix

---------

Co-authored-by: Alek Petuskey <alek@pynecone.io>
Co-authored-by: Masen Furer <m_github@0x26.net>
Co-authored-by: Alek Petuskey <alekpetuskey@aleks-mbp.lan>
2024-01-04 09:48:18 -08:00
benedikt-bartscher
58a7e5e460
support parsing type args of DeclarativeBase subclasses (#2348) 2024-01-03 11:55:07 -08:00