Skip to content

Commit

Permalink
[ENG-4149] require login to deploy named templates (#4450)
Browse files Browse the repository at this point in the history
* integration_tests.yml: init masenf/rx_shout as a template

fix test

* [ENG-4149] require login to deploy template

* Send loginv2 telemetry event
  • Loading branch information
masenf committed Dec 5, 2024
1 parent 0c81922 commit 3219157
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 21 deletions.
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

0 comments on commit 3219157

Please sign in to comment.