reflex 0.6.8a2__py3-none-any.whl → 0.7.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of reflex might be problematic. Click here for more details.
- reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +1 -1
- reflex/.templates/jinja/web/pages/_app.js.jinja2 +7 -7
- reflex/.templates/jinja/web/pages/utils.js.jinja2 +3 -3
- reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +1 -4
- reflex/.templates/web/utils/state.js +65 -36
- reflex/__init__.py +4 -17
- reflex/__init__.pyi +1 -2
- reflex/app.py +286 -129
- reflex/app_mixins/lifespan.py +9 -9
- reflex/app_mixins/middleware.py +6 -6
- reflex/app_module_for_backend.py +3 -7
- reflex/base.py +7 -7
- reflex/compiler/compiler.py +8 -0
- reflex/compiler/utils.py +57 -18
- reflex/components/base/app_wrap.pyi +16 -16
- reflex/components/base/bare.py +1 -1
- reflex/components/base/body.pyi +16 -16
- reflex/components/base/document.pyi +76 -76
- reflex/components/base/error_boundary.py +2 -1
- reflex/components/base/error_boundary.pyi +19 -22
- reflex/components/base/fragment.pyi +16 -16
- reflex/components/base/head.pyi +31 -31
- reflex/components/base/link.pyi +31 -31
- reflex/components/base/meta.py +2 -2
- reflex/components/base/meta.pyi +61 -61
- reflex/components/base/script.pyi +19 -19
- reflex/components/base/strict_mode.py +10 -0
- reflex/components/base/strict_mode.pyi +57 -0
- reflex/components/component.py +38 -77
- reflex/components/core/banner.py +159 -4
- reflex/components/core/banner.pyi +162 -76
- reflex/components/core/breakpoints.py +3 -1
- reflex/components/core/client_side_routing.py +1 -1
- reflex/components/core/client_side_routing.pyi +32 -32
- reflex/components/core/clipboard.pyi +17 -20
- reflex/components/core/cond.py +9 -10
- reflex/components/core/debounce.py +1 -1
- reflex/components/core/debounce.pyi +17 -17
- reflex/components/core/foreach.py +28 -3
- reflex/components/core/html.py +1 -1
- reflex/components/core/html.pyi +16 -16
- reflex/components/core/match.py +5 -5
- reflex/components/core/sticky.py +134 -0
- reflex/components/core/sticky.pyi +449 -0
- reflex/components/core/upload.py +2 -2
- reflex/components/core/upload.pyi +80 -88
- reflex/components/datadisplay/code.py +5 -14
- reflex/components/datadisplay/code.pyi +31 -31
- reflex/components/datadisplay/dataeditor.py +7 -4
- reflex/components/datadisplay/dataeditor.pyi +40 -54
- reflex/components/datadisplay/logo.py +13 -8
- reflex/components/datadisplay/shiki_code_block.py +14 -9
- reflex/components/datadisplay/shiki_code_block.pyi +46 -46
- reflex/components/dynamic.py +22 -3
- reflex/components/el/constants/reflex.py +1 -1
- reflex/components/el/element.py +1 -1
- reflex/components/el/element.pyi +16 -16
- reflex/components/el/elements/base.pyi +16 -16
- reflex/components/el/elements/forms.py +4 -4
- reflex/components/el/elements/forms.pyi +224 -258
- reflex/components/el/elements/inline.pyi +421 -421
- reflex/components/el/elements/media.pyi +376 -376
- reflex/components/el/elements/metadata.pyi +91 -91
- reflex/components/el/elements/other.pyi +106 -106
- reflex/components/el/elements/scripts.pyi +46 -46
- reflex/components/el/elements/sectioning.pyi +226 -226
- reflex/components/el/elements/tables.pyi +151 -151
- reflex/components/el/elements/typography.pyi +226 -226
- reflex/components/gridjs/datatable.pyi +31 -31
- reflex/components/lucide/icon.py +46 -8
- reflex/components/lucide/icon.pyi +85 -31
- reflex/components/markdown/markdown.py +10 -8
- reflex/components/markdown/markdown.pyi +16 -16
- reflex/components/moment/moment.py +2 -2
- reflex/components/moment/moment.pyi +17 -19
- reflex/components/next/base.pyi +16 -16
- reflex/components/next/image.py +16 -4
- reflex/components/next/image.pyi +22 -20
- reflex/components/next/link.py +1 -1
- reflex/components/next/link.pyi +16 -16
- reflex/components/next/video.pyi +16 -16
- reflex/components/plotly/__init__.py +29 -2
- reflex/components/plotly/plotly.py +240 -5
- reflex/components/plotly/plotly.pyi +799 -44
- reflex/components/props.py +3 -3
- reflex/components/radix/__init__.pyi +1 -1
- reflex/components/radix/primitives/accordion.py +9 -5
- reflex/components/radix/primitives/accordion.pyi +110 -108
- reflex/components/radix/primitives/base.pyi +31 -31
- reflex/components/radix/primitives/drawer.py +5 -2
- reflex/components/radix/primitives/drawer.pyi +179 -187
- reflex/components/radix/primitives/form.pyi +160 -172
- reflex/components/radix/primitives/progress.py +1 -1
- reflex/components/radix/primitives/progress.pyi +76 -76
- reflex/components/radix/primitives/slider.py +1 -1
- reflex/components/radix/primitives/slider.pyi +78 -82
- reflex/components/radix/themes/base.pyi +121 -121
- reflex/components/radix/themes/color_mode.py +11 -9
- reflex/components/radix/themes/color_mode.pyi +47 -49
- reflex/components/radix/themes/components/alert_dialog.py +3 -0
- reflex/components/radix/themes/components/alert_dialog.pyi +110 -112
- reflex/components/radix/themes/components/aspect_ratio.pyi +16 -16
- reflex/components/radix/themes/components/avatar.pyi +16 -16
- reflex/components/radix/themes/components/badge.pyi +16 -16
- reflex/components/radix/themes/components/button.pyi +16 -16
- reflex/components/radix/themes/components/callout.pyi +76 -76
- reflex/components/radix/themes/components/card.py +1 -1
- reflex/components/radix/themes/components/card.pyi +17 -17
- reflex/components/radix/themes/components/checkbox.pyi +49 -55
- reflex/components/radix/themes/components/checkbox_cards.pyi +31 -31
- reflex/components/radix/themes/components/checkbox_group.pyi +31 -31
- reflex/components/radix/themes/components/context_menu.py +5 -0
- reflex/components/radix/themes/components/context_menu.pyi +149 -155
- reflex/components/radix/themes/components/data_list.pyi +61 -61
- reflex/components/radix/themes/components/dialog.py +3 -0
- reflex/components/radix/themes/components/dialog.pyi +113 -117
- reflex/components/radix/themes/components/dropdown_menu.py +5 -0
- reflex/components/radix/themes/components/dropdown_menu.pyi +133 -137
- reflex/components/radix/themes/components/hover_card.py +3 -0
- reflex/components/radix/themes/components/hover_card.pyi +63 -67
- reflex/components/radix/themes/components/icon_button.py +2 -2
- reflex/components/radix/themes/components/icon_button.pyi +17 -16
- reflex/components/radix/themes/components/inset.pyi +16 -16
- reflex/components/radix/themes/components/popover.py +3 -0
- reflex/components/radix/themes/components/popover.pyi +68 -70
- reflex/components/radix/themes/components/progress.pyi +16 -16
- reflex/components/radix/themes/components/radio.pyi +16 -16
- reflex/components/radix/themes/components/radio_cards.py +2 -0
- reflex/components/radix/themes/components/radio_cards.pyi +32 -34
- reflex/components/radix/themes/components/radio_group.py +1 -1
- reflex/components/radix/themes/components/radio_group.pyi +62 -64
- reflex/components/radix/themes/components/scroll_area.pyi +16 -16
- reflex/components/radix/themes/components/segmented_control.pyi +32 -35
- reflex/components/radix/themes/components/select.py +4 -0
- reflex/components/radix/themes/components/select.pyi +145 -157
- reflex/components/radix/themes/components/separator.pyi +16 -16
- reflex/components/radix/themes/components/skeleton.py +3 -0
- reflex/components/radix/themes/components/skeleton.pyi +16 -16
- reflex/components/radix/themes/components/slider.pyi +22 -28
- reflex/components/radix/themes/components/spinner.pyi +16 -16
- reflex/components/radix/themes/components/switch.pyi +17 -19
- reflex/components/radix/themes/components/table.pyi +106 -106
- reflex/components/radix/themes/components/tabs.py +3 -0
- reflex/components/radix/themes/components/tabs.pyi +78 -82
- reflex/components/radix/themes/components/text_area.py +12 -0
- reflex/components/radix/themes/components/text_area.pyi +21 -33
- reflex/components/radix/themes/components/text_field.py +1 -1
- reflex/components/radix/themes/components/text_field.pyi +52 -80
- reflex/components/radix/themes/components/tooltip.py +6 -1
- reflex/components/radix/themes/components/tooltip.pyi +20 -21
- reflex/components/radix/themes/layout/__init__.pyi +1 -1
- reflex/components/radix/themes/layout/base.pyi +16 -16
- reflex/components/radix/themes/layout/box.pyi +16 -16
- reflex/components/radix/themes/layout/center.pyi +16 -16
- reflex/components/radix/themes/layout/container.pyi +16 -16
- reflex/components/radix/themes/layout/flex.pyi +16 -16
- reflex/components/radix/themes/layout/grid.pyi +16 -16
- reflex/components/radix/themes/layout/list.py +2 -2
- reflex/components/radix/themes/layout/list.pyi +76 -76
- reflex/components/radix/themes/layout/section.pyi +16 -16
- reflex/components/radix/themes/layout/spacer.pyi +16 -16
- reflex/components/radix/themes/layout/stack.py +2 -2
- reflex/components/radix/themes/layout/stack.pyi +46 -46
- reflex/components/radix/themes/typography/blockquote.pyi +16 -16
- reflex/components/radix/themes/typography/code.pyi +16 -16
- reflex/components/radix/themes/typography/heading.pyi +16 -16
- reflex/components/radix/themes/typography/link.py +1 -1
- reflex/components/radix/themes/typography/link.pyi +16 -16
- reflex/components/radix/themes/typography/text.py +2 -2
- reflex/components/radix/themes/typography/text.pyi +106 -106
- reflex/components/react_player/audio.pyi +33 -39
- reflex/components/react_player/react_player.py +1 -1
- reflex/components/react_player/react_player.pyi +32 -38
- reflex/components/react_player/video.pyi +33 -39
- reflex/components/recharts/__init__.py +2 -0
- reflex/components/recharts/__init__.pyi +2 -0
- reflex/components/recharts/cartesian.pyi +282 -282
- reflex/components/recharts/charts.py +15 -15
- reflex/components/recharts/charts.pyi +164 -164
- reflex/components/recharts/general.py +19 -4
- reflex/components/recharts/general.pyi +132 -81
- reflex/components/recharts/polar.py +2 -2
- reflex/components/recharts/polar.pyi +55 -55
- reflex/components/recharts/recharts.py +4 -4
- reflex/components/recharts/recharts.pyi +31 -31
- reflex/components/sonner/toast.py +15 -13
- reflex/components/sonner/toast.pyi +22 -22
- reflex/components/suneditor/editor.py +6 -4
- reflex/components/suneditor/editor.pyi +26 -40
- reflex/components/tags/iter_tag.py +3 -3
- reflex/components/tags/tag.py +25 -3
- reflex/config.py +48 -15
- reflex/constants/__init__.py +1 -0
- reflex/constants/base.py +4 -1
- reflex/constants/compiler.py +5 -2
- reflex/constants/config.py +8 -1
- reflex/constants/installer.py +9 -9
- reflex/constants/style.py +1 -1
- reflex/custom_components/custom_components.py +18 -10
- reflex/event.py +221 -231
- reflex/experimental/__init__.py +19 -11
- reflex/experimental/client_state.py +53 -28
- reflex/experimental/hooks.py +5 -5
- reflex/experimental/layout.py +8 -5
- reflex/experimental/layout.pyi +79 -83
- reflex/experimental/misc.py +3 -3
- reflex/istate/wrappers.py +1 -1
- reflex/middleware/hydrate_middleware.py +2 -2
- reflex/model.py +11 -6
- reflex/page.py +5 -5
- reflex/reflex.py +104 -26
- reflex/route.py +1 -1
- reflex/state.py +358 -401
- reflex/style.py +27 -3
- reflex/testing.py +29 -23
- reflex/utils/build.py +6 -2
- reflex/utils/codespaces.py +1 -4
- reflex/utils/compat.py +6 -5
- reflex/utils/console.py +71 -16
- reflex/utils/exceptions.py +89 -26
- reflex/utils/exec.py +69 -74
- reflex/utils/export.py +6 -1
- reflex/utils/format.py +8 -40
- reflex/utils/imports.py +5 -2
- reflex/utils/lazy_loader.py +7 -1
- reflex/utils/path_ops.py +74 -14
- reflex/utils/prerequisites.py +345 -68
- reflex/utils/processes.py +45 -32
- reflex/utils/pyi_generator.py +39 -33
- reflex/utils/registry.py +4 -4
- reflex/utils/serializers.py +1 -1
- reflex/utils/telemetry.py +5 -4
- reflex/utils/types.py +42 -18
- reflex/vars/base.py +695 -330
- reflex/vars/datetime.py +6 -7
- reflex/vars/dep_tracking.py +344 -0
- reflex/vars/function.py +11 -5
- reflex/vars/number.py +31 -43
- reflex/vars/object.py +74 -64
- reflex/vars/sequence.py +79 -67
- {reflex-0.6.8a2.dist-info → reflex-0.7.0.dist-info}/METADATA +7 -8
- reflex-0.7.0.dist-info/RECORD +401 -0
- {reflex-0.6.8a2.dist-info → reflex-0.7.0.dist-info}/WHEEL +1 -1
- reflex/experimental/assets.py +0 -37
- reflex-0.6.8a2.dist-info/RECORD +0 -397
- {reflex-0.6.8a2.dist-info → reflex-0.7.0.dist-info}/LICENSE +0 -0
- {reflex-0.6.8a2.dist-info → reflex-0.7.0.dist-info}/entry_points.txt +0 -0
reflex/reflex.py
CHANGED
|
@@ -17,7 +17,7 @@ from reflex.state import reset_disk_state_manager
|
|
|
17
17
|
from reflex.utils import console, telemetry
|
|
18
18
|
|
|
19
19
|
# Disable typer+rich integration for help panels
|
|
20
|
-
typer.core.rich = None #
|
|
20
|
+
typer.core.rich = None # pyright: ignore [reportPrivateImportUsage]
|
|
21
21
|
|
|
22
22
|
# Create the app.
|
|
23
23
|
try:
|
|
@@ -26,6 +26,8 @@ except TypeError:
|
|
|
26
26
|
# Fallback for older typer versions.
|
|
27
27
|
cli = typer.Typer(add_completion=False)
|
|
28
28
|
|
|
29
|
+
SHOW_BUILT_WITH_REFLEX_INFO = "https://reflex.dev/docs/hosting/reflex-branding/"
|
|
30
|
+
|
|
29
31
|
# Get the config.
|
|
30
32
|
config = get_config()
|
|
31
33
|
|
|
@@ -125,8 +127,8 @@ def _run(
|
|
|
125
127
|
env: constants.Env = constants.Env.DEV,
|
|
126
128
|
frontend: bool = True,
|
|
127
129
|
backend: bool = True,
|
|
128
|
-
frontend_port:
|
|
129
|
-
backend_port:
|
|
130
|
+
frontend_port: int = config.frontend_port,
|
|
131
|
+
backend_port: int = config.backend_port,
|
|
130
132
|
backend_host: str = config.backend_host,
|
|
131
133
|
loglevel: constants.LogLevel = config.loglevel,
|
|
132
134
|
):
|
|
@@ -143,10 +145,7 @@ def _run(
|
|
|
143
145
|
exec.output_system_info()
|
|
144
146
|
|
|
145
147
|
# If no --frontend-only and no --backend-only, then turn on frontend and backend both
|
|
146
|
-
|
|
147
|
-
frontend = True
|
|
148
|
-
backend = True
|
|
149
|
-
|
|
148
|
+
frontend, backend = prerequisites.check_running_mode(frontend, backend)
|
|
150
149
|
if not frontend and backend:
|
|
151
150
|
_skip_compile()
|
|
152
151
|
|
|
@@ -160,18 +159,22 @@ def _run(
|
|
|
160
159
|
# Find the next available open port if applicable.
|
|
161
160
|
if frontend:
|
|
162
161
|
frontend_port = processes.handle_port(
|
|
163
|
-
"frontend",
|
|
162
|
+
"frontend",
|
|
163
|
+
frontend_port,
|
|
164
|
+
constants.DefaultPorts.FRONTEND_PORT,
|
|
164
165
|
)
|
|
165
166
|
|
|
166
167
|
if backend:
|
|
167
168
|
backend_port = processes.handle_port(
|
|
168
|
-
"backend",
|
|
169
|
+
"backend",
|
|
170
|
+
backend_port,
|
|
171
|
+
constants.DefaultPorts.BACKEND_PORT,
|
|
169
172
|
)
|
|
170
173
|
|
|
171
174
|
# Apply the new ports to the config.
|
|
172
|
-
if frontend_port !=
|
|
175
|
+
if frontend_port != config.frontend_port:
|
|
173
176
|
config._set_persistent(frontend_port=frontend_port)
|
|
174
|
-
if backend_port !=
|
|
177
|
+
if backend_port != config.backend_port:
|
|
175
178
|
config._set_persistent(backend_port=backend_port)
|
|
176
179
|
|
|
177
180
|
# Reload the config to make sure the env vars are persistent.
|
|
@@ -182,6 +185,15 @@ def _run(
|
|
|
182
185
|
prerequisites.check_latest_package_version(constants.Reflex.MODULE_NAME)
|
|
183
186
|
|
|
184
187
|
if frontend:
|
|
188
|
+
if not config.show_built_with_reflex:
|
|
189
|
+
# The sticky badge may be disabled at runtime for team/enterprise tiers.
|
|
190
|
+
prerequisites.check_config_option_in_tier(
|
|
191
|
+
option_name="show_built_with_reflex",
|
|
192
|
+
allowed_tiers=["team", "enterprise"],
|
|
193
|
+
fallback_value=True,
|
|
194
|
+
help_link=SHOW_BUILT_WITH_REFLEX_INFO,
|
|
195
|
+
)
|
|
196
|
+
|
|
185
197
|
# Get the app module.
|
|
186
198
|
prerequisites.get_compiled_app()
|
|
187
199
|
|
|
@@ -262,10 +274,10 @@ def run(
|
|
|
262
274
|
help="Execute only backend.",
|
|
263
275
|
envvar=environment.REFLEX_BACKEND_ONLY.name,
|
|
264
276
|
),
|
|
265
|
-
frontend_port:
|
|
277
|
+
frontend_port: int = typer.Option(
|
|
266
278
|
config.frontend_port, help="Specify a different frontend port."
|
|
267
279
|
),
|
|
268
|
-
backend_port:
|
|
280
|
+
backend_port: int = typer.Option(
|
|
269
281
|
config.backend_port, help="Specify a different backend port."
|
|
270
282
|
),
|
|
271
283
|
backend_host: str = typer.Option(
|
|
@@ -291,10 +303,18 @@ def export(
|
|
|
291
303
|
True, "--no-zip", help="Disable zip for backend and frontend exports."
|
|
292
304
|
),
|
|
293
305
|
frontend: bool = typer.Option(
|
|
294
|
-
|
|
306
|
+
False,
|
|
307
|
+
"--frontend-only",
|
|
308
|
+
help="Export only frontend.",
|
|
309
|
+
show_default=False,
|
|
310
|
+
envvar=environment.REFLEX_FRONTEND_ONLY.name,
|
|
295
311
|
),
|
|
296
312
|
backend: bool = typer.Option(
|
|
297
|
-
|
|
313
|
+
False,
|
|
314
|
+
"--backend-only",
|
|
315
|
+
help="Export only backend.",
|
|
316
|
+
show_default=False,
|
|
317
|
+
envvar=environment.REFLEX_BACKEND_ONLY.name,
|
|
298
318
|
),
|
|
299
319
|
zip_dest_dir: str = typer.Option(
|
|
300
320
|
str(Path.cwd()),
|
|
@@ -306,6 +326,9 @@ def export(
|
|
|
306
326
|
help="Whether to exclude sqlite db files when exporting backend.",
|
|
307
327
|
hidden=True,
|
|
308
328
|
),
|
|
329
|
+
env: constants.Env = typer.Option(
|
|
330
|
+
constants.Env.PROD, help="The environment to export the app in."
|
|
331
|
+
),
|
|
309
332
|
loglevel: constants.LogLevel = typer.Option(
|
|
310
333
|
config.loglevel, help="The log level to use."
|
|
311
334
|
),
|
|
@@ -314,15 +337,27 @@ def export(
|
|
|
314
337
|
from reflex.utils import export as export_utils
|
|
315
338
|
from reflex.utils import prerequisites
|
|
316
339
|
|
|
317
|
-
|
|
340
|
+
frontend, backend = prerequisites.check_running_mode(frontend, backend)
|
|
341
|
+
|
|
342
|
+
if prerequisites.needs_reinit(frontend=frontend or not backend):
|
|
318
343
|
_init(name=config.app_name, loglevel=loglevel)
|
|
319
344
|
|
|
345
|
+
if frontend and not config.show_built_with_reflex:
|
|
346
|
+
# The sticky badge may be disabled on export for team/enterprise tiers.
|
|
347
|
+
prerequisites.check_config_option_in_tier(
|
|
348
|
+
option_name="show_built_with_reflex",
|
|
349
|
+
allowed_tiers=["team", "enterprise"],
|
|
350
|
+
fallback_value=False,
|
|
351
|
+
help_link=SHOW_BUILT_WITH_REFLEX_INFO,
|
|
352
|
+
)
|
|
353
|
+
|
|
320
354
|
export_utils.export(
|
|
321
355
|
zipping=zipping,
|
|
322
356
|
frontend=frontend,
|
|
323
357
|
backend=backend,
|
|
324
358
|
zip_dest_dir=zip_dest_dir,
|
|
325
359
|
upload_db_file=upload_db_file,
|
|
360
|
+
env=env,
|
|
326
361
|
loglevel=loglevel.subprocess_level(),
|
|
327
362
|
)
|
|
328
363
|
|
|
@@ -351,7 +386,7 @@ def logout(
|
|
|
351
386
|
|
|
352
387
|
check_version()
|
|
353
388
|
|
|
354
|
-
logout(loglevel) #
|
|
389
|
+
logout(loglevel) # pyright: ignore [reportArgumentType]
|
|
355
390
|
|
|
356
391
|
|
|
357
392
|
db_cli = typer.Typer()
|
|
@@ -440,7 +475,11 @@ def deploy(
|
|
|
440
475
|
config.app_name,
|
|
441
476
|
"--app-name",
|
|
442
477
|
help="The name of the App to deploy under.",
|
|
443
|
-
|
|
478
|
+
),
|
|
479
|
+
app_id: str = typer.Option(
|
|
480
|
+
None,
|
|
481
|
+
"--app-id",
|
|
482
|
+
help="The ID of the App to deploy over.",
|
|
444
483
|
),
|
|
445
484
|
regions: List[str] = typer.Option(
|
|
446
485
|
[],
|
|
@@ -480,6 +519,11 @@ def deploy(
|
|
|
480
519
|
"--project",
|
|
481
520
|
help="project id to deploy to",
|
|
482
521
|
),
|
|
522
|
+
project_name: Optional[str] = typer.Option(
|
|
523
|
+
None,
|
|
524
|
+
"--project-name",
|
|
525
|
+
help="The name of the project to deploy to.",
|
|
526
|
+
),
|
|
483
527
|
token: Optional[str] = typer.Option(
|
|
484
528
|
None,
|
|
485
529
|
"--token",
|
|
@@ -492,6 +536,7 @@ def deploy(
|
|
|
492
536
|
),
|
|
493
537
|
):
|
|
494
538
|
"""Deploy the app to the Reflex hosting service."""
|
|
539
|
+
from reflex_cli.constants.base import LogLevel as HostingLogLevel
|
|
495
540
|
from reflex_cli.utils import dependency
|
|
496
541
|
from reflex_cli.v2 import cli as hosting_cli
|
|
497
542
|
|
|
@@ -500,15 +545,32 @@ def deploy(
|
|
|
500
545
|
|
|
501
546
|
check_version()
|
|
502
547
|
|
|
548
|
+
if not config.show_built_with_reflex:
|
|
549
|
+
# The sticky badge may be disabled on deploy for pro/team/enterprise tiers.
|
|
550
|
+
prerequisites.check_config_option_in_tier(
|
|
551
|
+
option_name="show_built_with_reflex",
|
|
552
|
+
allowed_tiers=["pro", "team", "enterprise"],
|
|
553
|
+
fallback_value=True,
|
|
554
|
+
help_link=SHOW_BUILT_WITH_REFLEX_INFO,
|
|
555
|
+
)
|
|
556
|
+
|
|
503
557
|
# Set the log level.
|
|
504
558
|
console.set_log_level(loglevel)
|
|
505
559
|
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
560
|
+
def convert_reflex_loglevel_to_reflex_cli_loglevel(
|
|
561
|
+
loglevel: constants.LogLevel,
|
|
562
|
+
) -> HostingLogLevel:
|
|
563
|
+
if loglevel == constants.LogLevel.DEBUG:
|
|
564
|
+
return HostingLogLevel.DEBUG
|
|
565
|
+
if loglevel == constants.LogLevel.INFO:
|
|
566
|
+
return HostingLogLevel.INFO
|
|
567
|
+
if loglevel == constants.LogLevel.WARNING:
|
|
568
|
+
return HostingLogLevel.WARNING
|
|
569
|
+
if loglevel == constants.LogLevel.ERROR:
|
|
570
|
+
return HostingLogLevel.ERROR
|
|
571
|
+
if loglevel == constants.LogLevel.CRITICAL:
|
|
572
|
+
return HostingLogLevel.CRITICAL
|
|
573
|
+
return HostingLogLevel.INFO
|
|
512
574
|
|
|
513
575
|
# Only check requirements if interactive.
|
|
514
576
|
# There is user interaction for requirements update.
|
|
@@ -522,6 +584,7 @@ def deploy(
|
|
|
522
584
|
|
|
523
585
|
hosting_cli.deploy(
|
|
524
586
|
app_name=app_name,
|
|
587
|
+
app_id=app_id,
|
|
525
588
|
export_fn=lambda zip_dest_dir,
|
|
526
589
|
api_url,
|
|
527
590
|
deploy_url,
|
|
@@ -542,13 +605,28 @@ def deploy(
|
|
|
542
605
|
envfile=envfile,
|
|
543
606
|
hostname=hostname,
|
|
544
607
|
interactive=interactive,
|
|
545
|
-
loglevel=
|
|
608
|
+
loglevel=convert_reflex_loglevel_to_reflex_cli_loglevel(loglevel),
|
|
546
609
|
token=token,
|
|
547
610
|
project=project,
|
|
548
|
-
|
|
611
|
+
project_name=project_name,
|
|
612
|
+
**({"config_path": config_path} if config_path is not None else {}),
|
|
549
613
|
)
|
|
550
614
|
|
|
551
615
|
|
|
616
|
+
@cli.command()
|
|
617
|
+
def rename(
|
|
618
|
+
new_name: str = typer.Argument(..., help="The new name for the app."),
|
|
619
|
+
loglevel: constants.LogLevel = typer.Option(
|
|
620
|
+
config.loglevel, help="The log level to use."
|
|
621
|
+
),
|
|
622
|
+
):
|
|
623
|
+
"""Rename the app in the current directory."""
|
|
624
|
+
from reflex.utils import prerequisites
|
|
625
|
+
|
|
626
|
+
prerequisites.validate_app_name(new_name)
|
|
627
|
+
prerequisites.rename_app(new_name, loglevel)
|
|
628
|
+
|
|
629
|
+
|
|
552
630
|
cli.add_typer(db_cli, name="db", help="Subcommands for managing the database schema.")
|
|
553
631
|
cli.add_typer(script_cli, name="script", help="Subcommands running helper scripts.")
|
|
554
632
|
cli.add_typer(
|
reflex/route.py
CHANGED
|
@@ -103,7 +103,7 @@ def catchall_prefix(route: str) -> str:
|
|
|
103
103
|
return route.replace(pattern, "") if pattern else ""
|
|
104
104
|
|
|
105
105
|
|
|
106
|
-
def replace_brackets_with_keywords(input_string):
|
|
106
|
+
def replace_brackets_with_keywords(input_string: str) -> str:
|
|
107
107
|
"""Replace brackets and everything inside it in a string with a keyword.
|
|
108
108
|
|
|
109
109
|
Args:
|