变量元素¶
变量元素是对变量API的二次封装,提供比底层API更加符合使用习惯的函数。
对于已经存在于系统中的变量元素,可以对其变量和值进行增改操作。
实例化变量¶
例如系统中存在 test_val
变量元素,于 /test
目录下:
[2]:
from deepfos.element.variable import Variable
variable = Variable(element_name='test_val', path='/test')
查询变量值¶
使用get
方法¶
[3]:
variable.get('test_global_text')
[3]:
'abcd'
如果变量不存在,默认返回None
[4]:
val = variable.get('not_existed')
val is None
[4]:
True
也可传入default值指定变量不存在时的返回值
[5]:
variable.get('not_existed', default='custom value')
[5]:
'custom value'
get
方法能够根据设置的变量成员类型自动转换变量值
[6]:
variable.get('test_user_date')
[6]:
Timestamp('2021-01-02 03:04:05')
[7]:
num = variable.get('test_user_num')
num, type(num)
[7]:
(999.0, float)
[8]:
variable.get('test_user_customlist')
[8]:
['1', '3', '4']
说明
get
方法的取值逻辑默认为:全局变量时即为变量的值,用户变量时即为自定义值。 如果想对取值逻辑有更多的控制,可以使用 get_value
方法
使用get_value
方法¶
get_value
方法也可以获取变量的值,与get
类似,但是在变量不存在时会抛出KeyError
,可以提供default参数作为变量不存在的默认值。
相较于get
方法,get_value
对取值逻辑提供更多控制。提供 is_customize_value
参数,在取用户变量时,可以以此区分取默认值还是自定义值
[9]:
variable.get_value(name='test_user_num', is_customize_value=False)
[9]:
2233.0
查询变量¶
如果需要查询的不仅是变量值,而是变量本身(包含变量配置等),可以使用get_variable
[10]:
variable.get_variable('test_user_customlist')
[10]:
VariableValueDTO(description={}, dimensionMemberList=None, languageKey='uniqueKey5', name='test_user_customlist', relationKey=None, role=None, roleGroup=None, roleScript=None, rsDimension=None, rsElementDetail=None, rsMapping=None, rsName=None, rsRelationKey=None, scope=2, status=True, type=None, userValue='1,3,4', userValueDesc='', value=None, valueDesc='', valueType=13, valueTypeMap=ValueTypeMapDTO(decimalDisplayLength=None, defaultValue=None, defaultValueShow=None, digitLen=None, dimensionDisplay=None, dimensionName=None, displayDigitLen=None, elementDetail=None, enableDimensionExpression=None, functionCode=None, instruction=None, length=None, maxEqual=None, maxLen=None, maximun=None, minEqual=None, minimun=None, multiLevel=None, multipleChoiceLimit=None, multipleLevelInfo=None, percentage=None, selectMulti=None, selectedMulti=False, thousandthSymbol=None, treeView=None, valueField=None, valueKey='1,2,3,4', valueType=13))
遍历变量¶
variables
属性返回一个python字典,包含当前变量元素中的所有变量,以变量名为键,内容为值。
[11]:
list(variable.variables.keys())
[11]:
['test_global_text',
'test_global_num',
'test_global_dim',
'test_user_date',
'test_user_customlist',
'test_user_text',
'test_user_num']
[12]:
variable.variables['test_global_text']
[12]:
VariableValueDTO(description={}, dimensionMemberList=None, languageKey='uniqueKey1', name='test_global_text', relationKey=None, role=None, roleGroup=None, roleScript=None, rsDimension=None, rsElementDetail=None, rsMapping=None, rsName=None, rsRelationKey=None, scope=1, status=True, type=None, userValue=None, userValueDesc='', value='abcd', valueDesc='', valueType=1, valueTypeMap=ValueTypeMapDTO(decimalDisplayLength=None, defaultValue=None, defaultValueShow=None, digitLen=None, dimensionDisplay=None, dimensionName=None, displayDigitLen=None, elementDetail=None, enableDimensionExpression=None, functionCode=None, instruction=None, length=24, maxEqual=None, maxLen=None, maximun=None, minEqual=None, minimun=None, multiLevel=None, multipleChoiceLimit=None, multipleLevelInfo=None, percentage=None, selectMulti=None, selectedMulti=None, thousandthSymbol=None, treeView=None, valueField=None, valueKey='1', valueType=1))
变量元素定义了 __contains__
, 可以使用 in 判断某个变量名是否存在
[13]:
'test_global_text' in variable
[13]:
True
[14]:
'not_existed' in variable
[14]:
False
删除¶
使用delete_variables
方法可以删除变量成员,但是删除并不会立即生效,需要调用``save``方法
[15]:
variable.delete_variables('test_global_num')
要一次删除多个成员,可以传入多个变量成员名
[16]:
variable.delete_variables('test_global_text', 'test_user_date')
清空所有成员
[17]:
variable.delete_variables(*variable.variables.keys())
保存修改结果
[18]:
variable.save()
变量成员已被清空:
新增¶
add_xxx
方法可以在当前变量元素中增加变量
说明
区分了不同的变量类型,除了定义变量类型所必须的信息为必填参数外,其余都有默认值
定义时默认为当前用户的用户变量,支持在增加变量时赋值,默认为自定义值,可以通过 is_global
和 is_customize_value
参数更改
目前支持的变量类型:
add_text : 新增单个文本变量
add_number : 新增单个数字变量
add_sml : 新增单个值列表变量
add_dim : 新增单个维度变量
add_date : 新增单个日期变量
add_customlist : 新增单个自定义列表变量
增加一个长度为24的文字全局变量test_global_text,并赋值abcd
[19]:
variable.add_text(
name='test_global_text',
value='abcd',
is_global=True,
length=24
)
增加一个数字类型的全局变量test_global_num,整数长度8,小数长度2,并赋值1123
[20]:
variable.add_number(
name='test_global_num',
value=1123,
is_global=True,
int_length=8,
digit_length=2
)
增加维度类型的变量时,需要提供所用的维度对象
[21]:
# 实例化维度test_dim
from deepfos.element.dimension import Dimension
Dim = Dimension(element_name='test_dim')
# 增加一个维度全局变量test_global_dim,并定义维度表达式(必填)
variable.add_dimension(
name='test_global_dim',
dim=Dim,
dim_expression='test_dim{IDescendant(#root,0)}',
is_global=True
)
增加一个年份格式的日期类型的用户自定义变量
[22]:
# 此处建议使用枚举类DateType,该枚举类提供了不同年月日格式的字符串,具可读性
from deepfos.element.variable import DateType
variable.add_date(
name='test_user_date',
date_format=DateType.year_month_day_time
)
增加一个自定义列表类型的用户自定义变量
[23]:
variable.add_custom_list(
name='test_user_customlist',
custom_list=list('1234')
)
增加一个文字用户自定义变量test_user_text,并赋值
[24]:
variable.add_text(
name='test_user_text',
value='text_value',
is_customize_value=True
)
增加一个数字类型的用户默认变量,并赋值2233
[25]:
variable.add_number(
name='test_user_num',
value='2233',
is_customize_value=False
)
保存后生效
[26]:
variable.save()
新增成员结果如图:
更新¶
更新变量值¶
update_value
能够更新变量值
[27]:
import pandas as pd
variable['test_user_date'] = pd.to_datetime('2021-01-02 03:04:05')
variable.update_value(name='test_user_num', update_value=999)
variable.update_value(
name='test_user_customlist',
update_value=['1', '3', '4']
)
variable.update_value(
name='test_user_date',
update_value=pd.to_datetime('2022-03-04 05:06:07'),
is_customize_value=False
)
也可以使用__setitem__
方法更新,对于用户变量,会默认更新自定义值
[28]:
variable['test_user_date'] = pd.to_datetime('2021-01-02 03:04:05')
调用save
方法使更改生效
[29]:
variable.save()
更新结果如图:
更新变量描述¶
update_description
方法可以更新指定变量的描述
[30]:
variable.update_description(
name='test_user_text',
en_description="test english description",
zh_cn_description="测试中文描述"
)
调用save
方法使更改生效
[31]:
variable.save()
当前变量元素界面呈现: