Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ENG-4149] require login to deploy named templates #4450

Draft
wants to merge 3 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .github/workflows/integration_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,36 @@ jobs:
--python-version "${{ matrix.python-version }}" --commit-sha "${{ github.sha }}"
--pr-id "${{ github.event.pull_request.id }}" --branch-name "${{ github.head_ref || github.ref_name }}"
--app-name "reflex-web" --path ./reflex-web/.web

rx-shout-from-template:
strategy:
fail-fast: false
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup_build_env
with:
python-version: '3.11.4'
run-poetry-install: true
create-venv-at-path: .venv
- name: Create app directory
run: mkdir rx-shout-from-template
- name: Init reflex-web from template
run: poetry run reflex init --template https://github.com/masenf/rx_shout
working-directory: ./rx-shout-from-template
- name: ignore reflex pin in requirements
run: sed -i -e '/reflex==/d' requirements.txt
working-directory: ./rx-shout-from-template
- name: Install additional dependencies
run: poetry run uv pip install -r requirements.txt
working-directory: ./rx-shout-from-template
- name: Run Website and Check for errors
run: |
# Check that npm is home
npm -v
poetry run bash scripts/integration.sh ./rx-shout-from-template prod


reflex-web-macos:
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
strategy:
Expand Down
4 changes: 3 additions & 1 deletion reflex/reflex.py
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,9 @@ def loginv2(loglevel: constants.LogLevel = typer.Option(config.loglevel)):

check_version()

hosting_cli.login()
validated_info = hosting_cli.login()
if validated_info is not None:
telemetry.send("loginv2", user_uuid=validated_info.get("user_id"))


@cli.command()
Expand Down
38 changes: 19 additions & 19 deletions reflex/utils/prerequisites.py
Original file line number Diff line number Diff line change
Expand Up @@ -1408,13 +1408,22 @@ def validate_and_create_app_using_remote_template(app_name, template, templates)
"""
# If user selects a template, it needs to exist.
if template in templates:
from reflex_cli.v2.utils import hosting

authenticated_token = hosting.authenticated_token()
if not authenticated_token or not authenticated_token[0]:
console.print(
f"Please use `reflex loginv2` to access the '{template}' template."
)
raise typer.Exit(3)

template_url = templates[template].code_url
else:
# Check if the template is a github repo.
if template.startswith("https://github.com"):
template_url = f"{template.strip('/').replace('.git', '')}/archive/main.zip"
else:
console.error(f"Template `{template}` not found.")
console.error(f"Template `{template}` not found or invalid.")
raise typer.Exit(1)

if template_url is None:
Expand Down Expand Up @@ -1451,7 +1460,7 @@ def generate_template_using_ai(template: str | None = None) -> str:


def fetch_remote_templates(
template: Optional[str] = None,
template: str,
) -> tuple[str, dict[str, Template]]:
"""Fetch the available remote templates.

Expand All @@ -1460,9 +1469,6 @@ def fetch_remote_templates(

Returns:
The selected template and the available templates.

Raises:
Exit: If the template is not valid or if the template is not specified.
"""
available_templates = {}

Expand All @@ -1474,19 +1480,7 @@ def fetch_remote_templates(
console.debug(f"Error while fetching templates: {e}")
template = constants.Templates.DEFAULT

if template == constants.Templates.DEFAULT:
return template, available_templates

if template in available_templates:
return template, available_templates

else:
if template is not None:
console.error(f"{template!r} is not a valid template name.")
console.print(
f"Go to the templates page ({constants.Templates.REFLEX_TEMPLATES_URL}) and copy the command to init with a template."
)
raise typer.Exit(0)
return template, available_templates


def initialize_app(
Expand All @@ -1501,6 +1495,9 @@ def initialize_app(

Returns:
The name of the template.

Raises:
Exit: If the template is not valid or unspecified.
"""
# Local imports to avoid circular imports.
from reflex.utils import telemetry
Expand Down Expand Up @@ -1528,7 +1525,10 @@ def initialize_app(
# change to the default to allow creation of default app
template = constants.Templates.DEFAULT
elif template == constants.Templates.CHOOSE_TEMPLATES:
template, templates = fetch_remote_templates()
console.print(
f"Go to the templates page ({constants.Templates.REFLEX_TEMPLATES_URL}) and copy the command to init with a template."
)
raise typer.Exit(0)

# If the blank template is selected, create a blank app.
if template in (constants.Templates.DEFAULT,):
Expand Down
2 changes: 1 addition & 1 deletion reflex/utils/telemetry.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ def _prepare_event(event: str, **kwargs) -> dict:

cpuinfo = get_cpu_info()

additional_keys = ["template", "context", "detail"]
additional_keys = ["template", "context", "detail", "user_uuid"]
additional_fields = {
key: value for key in additional_keys if (value := kwargs.get(key)) is not None
}
Expand Down
Loading