mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-12 17:29:04 +08:00
feat(variables): Support to_object
. (#6572)
This commit is contained in:
parent
cfc408095c
commit
f019bc4bd7
@ -33,6 +33,15 @@ class Segment(BaseModel):
|
|||||||
def markdown(self) -> str:
|
def markdown(self) -> str:
|
||||||
return str(self.value)
|
return str(self.value)
|
||||||
|
|
||||||
|
def to_object(self) -> Any:
|
||||||
|
if isinstance(self.value, Segment):
|
||||||
|
return self.value.to_object()
|
||||||
|
if isinstance(self.value, list):
|
||||||
|
return [v.to_object() for v in self.value]
|
||||||
|
if isinstance(self.value, dict):
|
||||||
|
return {k: v.to_object() for k, v in self.value.items()}
|
||||||
|
return self.value
|
||||||
|
|
||||||
|
|
||||||
class StringSegment(Segment):
|
class StringSegment(Segment):
|
||||||
value_type: SegmentType = SegmentType.STRING
|
value_type: SegmentType = SegmentType.STRING
|
||||||
|
@ -4,7 +4,7 @@ from typing import Any, Union
|
|||||||
|
|
||||||
from typing_extensions import deprecated
|
from typing_extensions import deprecated
|
||||||
|
|
||||||
from core.app.segments import ArrayVariable, ObjectVariable, Variable, factory
|
from core.app.segments import Variable, factory
|
||||||
from core.file.file_obj import FileVar
|
from core.file.file_obj import FileVar
|
||||||
from core.workflow.entities.node_entities import SystemVariable
|
from core.workflow.entities.node_entities import SystemVariable
|
||||||
|
|
||||||
@ -113,14 +113,7 @@ class VariablePool:
|
|||||||
raise ValueError('Invalid selector')
|
raise ValueError('Invalid selector')
|
||||||
hash_key = hash(tuple(selector[1:]))
|
hash_key = hash(tuple(selector[1:]))
|
||||||
value = self._variable_dictionary[selector[0]].get(hash_key)
|
value = self._variable_dictionary[selector[0]].get(hash_key)
|
||||||
|
return value.to_object() if value else None
|
||||||
if value is None:
|
|
||||||
return value
|
|
||||||
if isinstance(value, ArrayVariable):
|
|
||||||
return [element.value for element in value.value]
|
|
||||||
if isinstance(value, ObjectVariable):
|
|
||||||
return {k: v.value for k, v in value.value.items()}
|
|
||||||
return value.value if value else None
|
|
||||||
|
|
||||||
def remove(self, selector: Sequence[str], /):
|
def remove(self, selector: Sequence[str], /):
|
||||||
"""
|
"""
|
||||||
|
@ -9,6 +9,7 @@ from core.app.segments import (
|
|||||||
StringVariable,
|
StringVariable,
|
||||||
factory,
|
factory,
|
||||||
)
|
)
|
||||||
|
from core.app.segments.variables import ArrayVariable, ObjectVariable
|
||||||
|
|
||||||
|
|
||||||
def test_string_variable():
|
def test_string_variable():
|
||||||
@ -89,3 +90,47 @@ def test_build_a_blank_string():
|
|||||||
)
|
)
|
||||||
assert isinstance(result, StringVariable)
|
assert isinstance(result, StringVariable)
|
||||||
assert result.value == ''
|
assert result.value == ''
|
||||||
|
|
||||||
|
|
||||||
|
def test_object_variable_to_object():
|
||||||
|
var = ObjectVariable(
|
||||||
|
name='object',
|
||||||
|
value={
|
||||||
|
'key1': ObjectVariable(
|
||||||
|
name='object',
|
||||||
|
value={
|
||||||
|
'key2': StringVariable(name='key2', value='value2'),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
'key2': ArrayVariable(
|
||||||
|
name='array',
|
||||||
|
value=[
|
||||||
|
StringVariable(name='key5_1', value='value5_1'),
|
||||||
|
IntegerVariable(name='key5_2', value=42),
|
||||||
|
ObjectVariable(name='key5_3', value={}),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
assert var.to_object() == {
|
||||||
|
'key1': {
|
||||||
|
'key2': 'value2',
|
||||||
|
},
|
||||||
|
'key2': [
|
||||||
|
'value5_1',
|
||||||
|
42,
|
||||||
|
{},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_variable_to_object():
|
||||||
|
var = StringVariable(name='text', value='text')
|
||||||
|
assert var.to_object() == 'text'
|
||||||
|
var = IntegerVariable(name='integer', value=42)
|
||||||
|
assert var.to_object() == 42
|
||||||
|
var = FloatVariable(name='float', value=3.14)
|
||||||
|
assert var.to_object() == 3.14
|
||||||
|
var = SecretVariable(name='secret', value='secret_value')
|
||||||
|
assert var.to_object() == 'secret_value'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user