check frontend version on connect (#4611)
* check frontend version on connect * do something a bit silly * thanks masen * just delete the tests you don't pass
This commit is contained in:
parent
212b2d4af9
commit
0c70146013
@ -3,6 +3,7 @@ import axios from "axios";
|
|||||||
import io from "socket.io-client";
|
import io from "socket.io-client";
|
||||||
import JSON5 from "json5";
|
import JSON5 from "json5";
|
||||||
import env from "$/env.json";
|
import env from "$/env.json";
|
||||||
|
import reflexEnvironment from "$/reflex.json";
|
||||||
import Cookies from "universal-cookie";
|
import Cookies from "universal-cookie";
|
||||||
import { useEffect, useRef, useState } from "react";
|
import { useEffect, useRef, useState } from "react";
|
||||||
import Router, { useRouter } from "next/router";
|
import Router, { useRouter } from "next/router";
|
||||||
@ -407,6 +408,7 @@ export const connect = async (
|
|||||||
socket.current = io(endpoint.href, {
|
socket.current = io(endpoint.href, {
|
||||||
path: endpoint["pathname"],
|
path: endpoint["pathname"],
|
||||||
transports: transports,
|
transports: transports,
|
||||||
|
protocols: env.TEST_MODE ? undefined : [reflexEnvironment.version],
|
||||||
autoUnref: false,
|
autoUnref: false,
|
||||||
});
|
});
|
||||||
// Ensure undefined fields in events are sent as null instead of removed
|
// Ensure undefined fields in events are sent as null instead of removed
|
||||||
|
@ -1528,7 +1528,11 @@ class EventNamespace(AsyncNamespace):
|
|||||||
sid: The Socket.IO session id.
|
sid: The Socket.IO session id.
|
||||||
environ: The request information, including HTTP headers.
|
environ: The request information, including HTTP headers.
|
||||||
"""
|
"""
|
||||||
pass
|
subprotocol = environ.get("HTTP_SEC_WEBSOCKET_PROTOCOL", None)
|
||||||
|
if subprotocol and subprotocol != constants.Reflex.VERSION:
|
||||||
|
console.warn(
|
||||||
|
f"Frontend version {subprotocol} for session {sid} does not match the backend version {constants.Reflex.VERSION}."
|
||||||
|
)
|
||||||
|
|
||||||
def on_disconnect(self, sid):
|
def on_disconnect(self, sid):
|
||||||
"""Event for when the websocket disconnects.
|
"""Event for when the websocket disconnects.
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
"""The constants package."""
|
"""The constants package."""
|
||||||
|
|
||||||
from .base import (
|
from .base import (
|
||||||
|
APP_HARNESS_FLAG,
|
||||||
COOKIES,
|
COOKIES,
|
||||||
IS_LINUX,
|
IS_LINUX,
|
||||||
IS_MACOS,
|
IS_MACOS,
|
||||||
|
@ -257,6 +257,7 @@ SESSION_STORAGE = "session_storage"
|
|||||||
# Testing variables.
|
# Testing variables.
|
||||||
# Testing os env set by pytest when running a test case.
|
# Testing os env set by pytest when running a test case.
|
||||||
PYTEST_CURRENT_TEST = "PYTEST_CURRENT_TEST"
|
PYTEST_CURRENT_TEST = "PYTEST_CURRENT_TEST"
|
||||||
|
APP_HARNESS_FLAG = "APP_HARNESS_FLAG"
|
||||||
|
|
||||||
REFLEX_VAR_OPENING_TAG = "<reflex.Var>"
|
REFLEX_VAR_OPENING_TAG = "<reflex.Var>"
|
||||||
REFLEX_VAR_CLOSING_TAG = "</reflex.Var>"
|
REFLEX_VAR_CLOSING_TAG = "</reflex.Var>"
|
||||||
|
@ -282,6 +282,7 @@ class AppHarness:
|
|||||||
before_decorated_pages = reflex.app.DECORATED_PAGES[self.app_name].copy()
|
before_decorated_pages = reflex.app.DECORATED_PAGES[self.app_name].copy()
|
||||||
# Ensure the AppHarness test does not skip State assignment due to running via pytest
|
# Ensure the AppHarness test does not skip State assignment due to running via pytest
|
||||||
os.environ.pop(reflex.constants.PYTEST_CURRENT_TEST, None)
|
os.environ.pop(reflex.constants.PYTEST_CURRENT_TEST, None)
|
||||||
|
os.environ[reflex.constants.APP_HARNESS_FLAG] = "true"
|
||||||
self.app_module = reflex.utils.prerequisites.get_compiled_app(
|
self.app_module = reflex.utils.prerequisites.get_compiled_app(
|
||||||
# Do not reload the module for pre-existing apps (only apps generated from source)
|
# Do not reload the module for pre-existing apps (only apps generated from source)
|
||||||
reload=self.app_source is not None
|
reload=self.app_source is not None
|
||||||
|
@ -13,13 +13,17 @@ from rich.progress import MofNCompleteColumn, Progress, TimeElapsedColumn
|
|||||||
from reflex import constants
|
from reflex import constants
|
||||||
from reflex.config import get_config
|
from reflex.config import get_config
|
||||||
from reflex.utils import console, path_ops, prerequisites, processes
|
from reflex.utils import console, path_ops, prerequisites, processes
|
||||||
|
from reflex.utils.exec import is_in_app_harness
|
||||||
|
|
||||||
|
|
||||||
def set_env_json():
|
def set_env_json():
|
||||||
"""Write the upload url to a REFLEX_JSON."""
|
"""Write the upload url to a REFLEX_JSON."""
|
||||||
path_ops.update_json_file(
|
path_ops.update_json_file(
|
||||||
str(prerequisites.get_web_dir() / constants.Dirs.ENV_JSON),
|
str(prerequisites.get_web_dir() / constants.Dirs.ENV_JSON),
|
||||||
{endpoint.name: endpoint.get_url() for endpoint in constants.Endpoint},
|
{
|
||||||
|
**{endpoint.name: endpoint.get_url() for endpoint in constants.Endpoint},
|
||||||
|
"TEST_MODE": is_in_app_harness(),
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -509,6 +509,15 @@ def is_testing_env() -> bool:
|
|||||||
return constants.PYTEST_CURRENT_TEST in os.environ
|
return constants.PYTEST_CURRENT_TEST in os.environ
|
||||||
|
|
||||||
|
|
||||||
|
def is_in_app_harness() -> bool:
|
||||||
|
"""Whether the app is running in the app harness.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
True if the app is running in the app harness.
|
||||||
|
"""
|
||||||
|
return constants.APP_HARNESS_FLAG in os.environ
|
||||||
|
|
||||||
|
|
||||||
def is_prod_mode() -> bool:
|
def is_prod_mode() -> bool:
|
||||||
"""Check if the app is running in production mode.
|
"""Check if the app is running in production mode.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user