新版对象附加属性底层类
<p>新附加属性底层类
codis</p>
<pre><code>class ObjectExtendProperty(object):
#对象,直接读入附属信息
#这个类对象中,应该是有个专门的字段,表示对象代表的信息是否为复制体的键
_data_dict //从codis中读取的字典数据的缓存
_key //对应的codis实际的键
_primary_key //对应的对象的主键
_is_replica //是否为复制体
//init默认为基于对象的附属属性进行创建,任何复制体的创建,需要用到静态函数,并且需要知道具体的redis主键
def __init__(self,obj_key=None,replica_name=None):
# obj_key主键,replica_name复制体在redis的键,二者选一
pass
def delShortProperty(self,*short_name):
# 删除一个或多个短属性,short_name是列表
pass
def overallUploadProperty(self, data, full_cover=False):
# full_cover=False整体上传,属性已存在就修改,不存在就添加,data是 {属性名:{},属性名:{}}
# full_cover=True是全覆盖模式,相当于清除原有属性,使用data全部覆盖
pass
def getListDataOfNormalProperty(self, prop_name, st_pos=None, end_pos=None,
sort_field=None, reverse=True, content_only=False):
# 指定一个属性名,仅限txt,image,video,audio,object类型的列表结构属性,
# st_pos,end_pos指定开始、结束位置获取
# 指定sort_field,'time'或'title',按照这个字段进行排序
# reverse,选择False升序或True降序
# content_only,True只获取dt里面的内容
pass
def getExpandedReferenceProperty(self, prop_name=None, content_only=False, *expanded_attr):
# 只适用于tp为object的引用类型的属性,对引用的主键,指定一个或多个属性名,添加在返回的信息中
# expanded_attr只允许指定基本属性或短属性名
# 首先如果在短属性的键名列表中,获取短属性值
# 否则认为指定的是基本属性,如果获取不到,那么跳过
pass
def getPropertyNames(self, only_short=False, only_normal=False, sub_contain=False, exclude_sys=False):
# 获取所有附加属性的属性名列表
# 如果指定了exclude_sys,那么跳过所有的系统级别属性
# 如果指定了only_short,那么仅仅在短属性范围内搜索返回
# 如果指定了only_normal,那么仅仅在一般属性范围内搜索返回
# 如果指定了sub_contain,那么仅仅返回具有包含关系的引用类型的属性,其他不返回
pass
def getProperty(self, prop_name_li=None, only_short=False, only_normal=False, exclude_sys=False, content_only=False,
sub_contain=False, name_transform=None,ref_exp_dict=None,sort_rules=None,truncate_rules=None):
# 获取该对象所有附加属性,
# 如果指定了prop_name_li属性名列表,只返回指定的属性
# 如果指定了only_short,那么仅仅在短属性范围内搜索返回
# 如果指定了only_normal,那么仅仅在一般属性范围内搜索返回
# 如果指定了exclude_sys,那么跳过所有的系统级别属性
# 如果指定了content_only,那么直接只返回内容dt里面的数据,不返回其他数据,对于短属性没有影响
# 如果指定了sub_contain,那么仅仅返回具有包含关系的引用类型的属性,其他不返回
# 如果指定了name_transform,在返回的数据过程中,会使用指定的名称转换字典,将属性名字转换为字典中指定的名字,其他属性名字维持不变
# 注意这里返回的数据中,包括了所有类型的属性,包括短属性
# ref_exp_dict是{属性名:[扩展属性名],属性名:[]}
# sort_rules是{属性名:{'sort_field':'time','reverse':True},属性名:{'sort_field':'title','reverse':False}}
# truncate_rules是{属性名:{'st_pos':1,'end_pos':3},属性名:{'st_pos':3,'end_pos':5}}
pass
def getPropertyByType(self, stype=None,exclude_sys=None,content_only=None,name_transform=None):
# 获取特定类型的附加属性
# 如果指定了exclude_sys,那么跳过所有的系统级别属性
# 如果指定了content_only,那么直接只返回内容dt里面的数据,不返回其他数据,对于短属性没有影响
# 如果指定了name_transform,在返回的数据过程中,会使用指定的名称转换字典,将属性名字转换为字典中指定的名字,其他属性名字维持不变
# stype ['txt','img','video','audio','object','timeline','link','func']
pass
def getNormalProperty(self, prop_name_li=None, exclude_sys=False, content_only=False, sub_contain=False,
name_transform=None,ref_exp_dict=None,sort_rules=None,truncate_rules=None):
# 获取该对象的一般附加属性,
# 如果指定了prop_name属性名列表,只返回指定的属性
# 如果指定了exclude_sys,那么跳过所有的系统级别属性
# 如果指定了content_only,那么直接只返回内容dt里面的数据,不返回其他数据,对于短属性没有影响
# 如果指定了sub_contain,那么仅仅返回具有包含关系的引用类型的属性,其他不返回
# 如果指定了name_transform,在返回的数据过程中,会使用指定的名称转换字典,将属性名字转换为字典中指定的名字,其他属性名字维持不变
# 注意这里返回的数据中,不包括短属性
# ref_exp_dict是{属性名:[扩展属性名],属性名:[]}
# sort_rules是{属性名:{'sort_field':'time','reverse':True},属性名:{'sort_field':'title','reverse':False}}
# truncate_rules是{属性名:{'st_pos':1,'end_pos':3},属性名:{'st_pos':3,'end_pos':5}}
pass
def getShortProperty(self, exclude_sys=False, prop_name_li=None):
# 获取短属性,只是一个方便的函数
# 如果指定了exclude_sys,那么跳过所有的系统级别属性
# prop_name_li可以指定属性名列表
pass
def getSortedProperty(self, prop_name=None,exclude_sys=None,content_only=None):
# 获取指定的附加属性,并且按照相对的位置进行排列,这里不包括短属性;返回列表而不是字典
# 如果指定了prop_name属性名列表,只返回指定的属性
# 如果指定了exclude_sys,那么跳过所有的系统级别属性
# 如果指定了content_only,那么直接只返回内容dt里面的数据,不返回其他数据,对于短属性没有影响
pass
def existProperty(self, prop_name):
# 获取某属性是否存在
pass
def addNewProperty(self, prop_name, data):
# 某属性不存在时,新建一个附加属性,data是一个字典,检查合法性
# 这个方法仅仅适用于添加一般的扩展属性,而不是短属性,data中的字段类型和值都会被检查合法性。
pass
def addShortProperty(self, key, value, max_len=20):
# 添加短属性,在原短属性的字典基础上扩充,如果有重复的键则会覆盖原数据
# max_len是值的最大长度
pass
def getPropNumberAndTimeInfo(self, prop_name):
# 获取某个属性(不是短属性)的两个最核心信息,包含的数据条数(列表数据的列表长度),和最新修改时间(列表数据中修改时间的最大值)
pass
def editProperty(self, prop_name, data, content_only=None):
# 修改已存在属性的全部数据,检查data合法性
# 这里的修改是直接覆盖模式,一旦通过合理性检查,那么将直接覆盖原有的内容
# 如果指定了content_only,那么代表data中仅仅包含了dt里面的内容,而不是整个属性结构,因此仅仅替换内容部分
pass
#def editPropertyMulti(self, data, content_only=None):
# 批量修改已存在属性的全部数据,data是 {属性名:{},属性名:{}}
# 实际上是批量调用editProperty
pass
def addListPropertyUnit(self, prop_name,pos=None,content, title=None, info=None,time=None):
# 在列表类型的数据内添加一个单元数据,如果指定位置pos,则在列表的指定位置添加,time不指定等价于为当前时间的时间戳
pass
def RepositionProperty(self, data):
# 改变指定属性的相对位置参数,data是{属性名:位置,属性名:位置}
pass
def deleteProperty(self, *prop_name):
# 删除一个或者多个属性
pass
def getReplicaInfo(self,user_id=None,reason=None,from_time=None,to_time=None):
# 获取当前对象(_copy_keys)中所有复制体基本信息
# 如果指定了user id, 那么仅仅获取某一个用户创建的复制体
# 如果指定了reason, 那么仅仅获取因为某一个原因创建的复制体
# from_time,to_time,开始时间和结束时间,指的是复制时间
pass
def createReplica(self,user_id,reason,expired_time,*prop_name,skip_all_sys=True):
# 复制一个或多个附属属性,指定复制用途,过期时间(秒),并在源头对象记录复制体信息
# user id必须指定, 代表那个用户操作了
# reason必须指定, 创建的复制体原因
# expired_time必须指定,复制体的有效生命周期
# 如果指定skip_all_sys,在创建复制体的时候跳过所有系统级别的属性
pass
@staticmethod
def getReplica(replica_name):
# 指定复制体名称,获取复制体信息
pass
def cleanReplica(self):
# 清除当前原对象(_copy_keys)的复制体信息,舍弃所有已经过期的复制体
pass
#针对不同的状态变量,把状态变量绑定到一个原对象属性上,分别开通函数
#注意只有非短属性的属性才可以加载状态变量
def createListControlVar(self,prop_name,list_var_type):
# list_var_type选择模式
pass
def createFloatControlVar(self,prop_name,lower=None, upper=None,default_value=None):
# lower下限,upper 上限
pass
def createIntControlVar(self,prop_name,lower=None, upper=None,default_value=None):
# lower下限,upper 上限
pass
def createObjControlVar(self,prop_name,crange):
# crange概念范围
pass
def clearStateVar(self,st_name):
# 删除已有的状态变量,将原对象某个属性下关于状态变量的信息全部删除
pass
def getStateVarInfo(self):
# 一次性获取这个对象属性数据下所有的状态变量信息,包括状态变量的种类和附加参数
pass
def verifyStateVar(self,state_var_dict,check_integrity=True):
# 检查输入的状态变量字典是否符合了这个对象定义的要求,这个操作只有原始的对象附属属性对象才可以做
# state_var_dict 一个包含了从属性名到对应的外部指定的状态变量属性值的字典,全部为字符串
# check_integrity默认这个函数还检查输入的状态变量是否满足了所有的对象状态变量集合,如果是否,仅仅检查输入数据的合法性。否则还检查输入变量是否满足全集
# 1.输入的值是否都符合要求 2.输入的值在个数上是否可以完全填充原对象的状态属性
#返回是否符合格式要求,还有附带的解释说明文字
pass
def setStateValue(self, user_id, **stat_value_dict,complete_or_fail=None):
# 指定状态变量名称,设置或修改,指定属性的变量值
# 本函数检查所有指定的状态变量的合法性,然后直接创建复制体,吧信息填入复制体,修正复制体列表信息,并返回创建的复制体主键。
#complete_or_fail 代表是否一定检查stat_value_dict包含了所有这个对象内部的状态变量并且符合要求,否则操作失败
#返回,成功与否,如果成果返回复制体的键,同时返回信息其中可能包含对于失败的说明
pass
#如果这个对象实际上是由于设置状态变量开发的复制体的话,还可以调用下面的函数
def getStateValue(self,prop_name):
# 获取状态变量的值,可以指定属性名
pass
</code></pre>
<p>codis</p>
<pre><code>{
"RP_主键_随机数_时间数_Hash":{
'cp_info':{
'time':'', // 复制时间
'reason':'', // 复制原因,常见有,copy,st_var两种,前者代表一般拷贝,后者代表给状态变量赋值
'user':'', // 复制用户
'valid':'', // 有效截止时间
},
...
}
}</code></pre>