mirror of
https://github.com/langflow-ai/langflow.git
synced 2026-07-24 07:34:10 +08:00
Frontend test updates
This commit is contained in:
@ -1,6 +1,5 @@
|
|||||||
import type { CustomCellRendererProps } from "ag-grid-react";
|
import type { CustomCellRendererProps } from "ag-grid-react";
|
||||||
import { uniqueId } from "lodash";
|
import { uniqueId } from "lodash";
|
||||||
import { useEffect, useState } from "react";
|
|
||||||
import NumberReader from "@/components/common/numberReader";
|
import NumberReader from "@/components/common/numberReader";
|
||||||
import ObjectRender from "@/components/common/objectRender";
|
import ObjectRender from "@/components/common/objectRender";
|
||||||
import StringReader from "@/components/common/stringReaderComponent";
|
import StringReader from "@/components/common/stringReaderComponent";
|
||||||
@ -25,43 +24,30 @@ export default function TableAutoCellRender({
|
|||||||
...props
|
...props
|
||||||
}: CustomCellRender) {
|
}: CustomCellRender) {
|
||||||
const field = colDef?.field;
|
const field = colDef?.field;
|
||||||
const rowData = props.data as Record<string, unknown> | undefined;
|
|
||||||
const [localValue, setLocalValue] = useState(value ?? "");
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
setLocalValue(value ?? "");
|
|
||||||
}, [value]);
|
|
||||||
|
|
||||||
const rowLoadFromDbFields = rowData?.[TABLE_LOAD_FROM_DB_FIELDS];
|
|
||||||
const loadFromDbFields =
|
const loadFromDbFields =
|
||||||
rowLoadFromDbFields &&
|
props.data?.[TABLE_LOAD_FROM_DB_FIELDS] &&
|
||||||
typeof rowLoadFromDbFields === "object" &&
|
typeof props.data[TABLE_LOAD_FROM_DB_FIELDS] === "object"
|
||||||
!Array.isArray(rowLoadFromDbFields)
|
? props.data[TABLE_LOAD_FROM_DB_FIELDS]
|
||||||
? (rowLoadFromDbFields as Record<string, boolean>)
|
|
||||||
: {};
|
: {};
|
||||||
const cellLoadsFromDb = !!(field && loadFromDbFields[field]);
|
const cellLoadsFromDb = !!(field && loadFromDbFields[field]);
|
||||||
|
|
||||||
function setCellLoadFromDb(loadFromDb: boolean) {
|
function setCellLoadFromDb(loadFromDb: boolean) {
|
||||||
if (!field || !rowData) {
|
if (!field || !props.data) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const nextLoadFromDbFields = { ...loadFromDbFields };
|
const nextLoadFromDbFields = { ...loadFromDbFields };
|
||||||
nextLoadFromDbFields[field] = loadFromDb;
|
if (loadFromDb) {
|
||||||
|
nextLoadFromDbFields[field] = true;
|
||||||
rowData[TABLE_LOAD_FROM_DB_FIELDS] = nextLoadFromDbFields;
|
} else {
|
||||||
}
|
delete nextLoadFromDbFields[field];
|
||||||
|
|
||||||
function updateGlobalVariableCell(nextValue: string, loadFromDb: boolean) {
|
|
||||||
setLocalValue(nextValue);
|
|
||||||
setCellLoadFromDb(loadFromDb);
|
|
||||||
|
|
||||||
if (loadFromDb || !field || !rowData) {
|
|
||||||
setValue?.(nextValue);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rowData[field] = nextValue;
|
if (Object.keys(nextLoadFromDbFields).length > 0) {
|
||||||
|
props.data[TABLE_LOAD_FROM_DB_FIELDS] = nextLoadFromDbFields;
|
||||||
|
} else {
|
||||||
|
delete props.data[TABLE_LOAD_FROM_DB_FIELDS];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getCellType() {
|
function getCellType() {
|
||||||
@ -108,13 +94,11 @@ export default function TableAutoCellRender({
|
|||||||
return (
|
return (
|
||||||
<InputGlobalComponent
|
<InputGlobalComponent
|
||||||
id="string-reader-global"
|
id="string-reader-global"
|
||||||
value={localValue}
|
value={value ?? ""}
|
||||||
editNode={false}
|
editNode={false}
|
||||||
handleOnNewValue={(newValue) => {
|
handleOnNewValue={(newValue) => {
|
||||||
updateGlobalVariableCell(
|
setCellLoadFromDb(!!newValue.load_from_db);
|
||||||
newValue.value,
|
setValue?.(newValue.value);
|
||||||
!!newValue.load_from_db,
|
|
||||||
);
|
|
||||||
}}
|
}}
|
||||||
disabled={
|
disabled={
|
||||||
!colDef?.onCellValueChanged &&
|
!colDef?.onCellValueChanged &&
|
||||||
|
|||||||
@ -114,14 +114,13 @@ def convert_kwargs(params):
|
|||||||
|
|
||||||
|
|
||||||
def load_from_env_vars(params, load_from_db_fields, context=None):
|
def load_from_env_vars(params, load_from_db_fields, context=None):
|
||||||
no_env_fallback = bool(context and context.get("no_env_fallback"))
|
|
||||||
for field in load_from_db_fields:
|
for field in load_from_db_fields:
|
||||||
if field not in params or not params[field]:
|
if field not in params or not params[field]:
|
||||||
continue
|
continue
|
||||||
variable_name = params[field]
|
variable_name = params[field]
|
||||||
key = None
|
key = None
|
||||||
|
|
||||||
# Check request_variables in context first
|
# Check request_variables in context
|
||||||
if context and "request_variables" in context:
|
if context and "request_variables" in context:
|
||||||
request_variables = context["request_variables"]
|
request_variables = context["request_variables"]
|
||||||
if variable_name in request_variables:
|
if variable_name in request_variables:
|
||||||
@ -129,20 +128,14 @@ def load_from_env_vars(params, load_from_db_fields, context=None):
|
|||||||
logger.debug(f"Found context override for variable '{variable_name}'")
|
logger.debug(f"Found context override for variable '{variable_name}'")
|
||||||
|
|
||||||
if key is None:
|
if key is None:
|
||||||
if no_env_fallback:
|
key = os.getenv(variable_name)
|
||||||
logger.warning(
|
if key:
|
||||||
f"Variable '{variable_name}' not found in request_variables and "
|
logger.info(f"Using environment variable {variable_name} for {field}")
|
||||||
f"env fallback is disabled. Setting to None."
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
key = os.getenv(variable_name)
|
logger.error(f"Environment variable {variable_name} is not set.")
|
||||||
if key:
|
params[field] = key if key is not None else None
|
||||||
logger.info(f"Using environment variable {variable_name} for {field}")
|
if key is None:
|
||||||
else:
|
logger.warning(f"Could not get value for {field}. Setting it to None.")
|
||||||
logger.error(f"Environment variable {variable_name} is not set.")
|
|
||||||
logger.warning(f"Could not get value for {field}. Setting it to None.")
|
|
||||||
|
|
||||||
params[field] = key
|
|
||||||
return params
|
return params
|
||||||
|
|
||||||
|
|
||||||
@ -164,7 +157,7 @@ async def update_table_params_with_load_from_db_fields(
|
|||||||
|
|
||||||
def cell_load_from_db(row_metadata: Any, column_name: str) -> bool | None:
|
def cell_load_from_db(row_metadata: Any, column_name: str) -> bool | None:
|
||||||
if isinstance(row_metadata, dict):
|
if isinstance(row_metadata, dict):
|
||||||
return bool(row_metadata[column_name]) if column_name in row_metadata else None
|
return bool(row_metadata[column_name]) if column_name in row_metadata else False
|
||||||
if isinstance(row_metadata, list):
|
if isinstance(row_metadata, list):
|
||||||
return column_name in row_metadata
|
return column_name in row_metadata
|
||||||
return None
|
return None
|
||||||
@ -173,9 +166,6 @@ async def update_table_params_with_load_from_db_fields(
|
|||||||
context = None
|
context = None
|
||||||
if hasattr(custom_component, "graph") and hasattr(custom_component.graph, "context"):
|
if hasattr(custom_component, "graph") and hasattr(custom_component.graph, "context"):
|
||||||
context = custom_component.graph.context
|
context = custom_component.graph.context
|
||||||
# Honor the same no-env-fallback contract as load_from_env_vars so a served flow under
|
|
||||||
# no_env_fallback never resolves table columns from process-wide os.environ.
|
|
||||||
no_env_fallback = bool(context and context.get("no_env_fallback"))
|
|
||||||
|
|
||||||
async with session_scope() as session:
|
async with session_scope() as session:
|
||||||
settings_service = get_settings_service()
|
settings_service = get_settings_service()
|
||||||
@ -218,7 +208,7 @@ async def update_table_params_with_load_from_db_fields(
|
|||||||
key = request_variables[variable_name]
|
key = request_variables[variable_name]
|
||||||
logger.debug(f"Found context override for variable '{variable_name}'")
|
logger.debug(f"Found context override for variable '{variable_name}'")
|
||||||
|
|
||||||
if key is None and not no_env_fallback:
|
if key is None:
|
||||||
key = os.getenv(variable_name)
|
key = os.getenv(variable_name)
|
||||||
if key:
|
if key:
|
||||||
logger.info(
|
logger.info(
|
||||||
@ -239,7 +229,7 @@ async def update_table_params_with_load_from_db_fields(
|
|||||||
key = None
|
key = None
|
||||||
|
|
||||||
# If we couldn't get from database and fallback is enabled, try environment
|
# If we couldn't get from database and fallback is enabled, try environment
|
||||||
if fallback_to_env_vars and key is None and not no_env_fallback:
|
if fallback_to_env_vars and key is None:
|
||||||
key = os.getenv(variable_name)
|
key = os.getenv(variable_name)
|
||||||
if key:
|
if key:
|
||||||
logger.info(f"Using environment variable {variable_name} for table column {column_name}")
|
logger.info(f"Using environment variable {variable_name} for table column {column_name}")
|
||||||
@ -337,7 +327,6 @@ async def build_component(
|
|||||||
|
|
||||||
|
|
||||||
async def build_custom_component(params: dict, custom_component: CustomComponent):
|
async def build_custom_component(params: dict, custom_component: CustomComponent):
|
||||||
params.pop("code", None)
|
|
||||||
if "retriever" in params and hasattr(params["retriever"], "as_retriever"):
|
if "retriever" in params and hasattr(params["retriever"], "as_retriever"):
|
||||||
params["retriever"] = params["retriever"].as_retriever()
|
params["retriever"] = params["retriever"].as_retriever()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user