容器通用接口
容器类对象承担着管理功能
容器类对象承担着对包含内容的管理角色。文件夹、表单库、应用容器、工作台等都属于容器类对象。
所有这些 Container 类型的对象都存在一组公共接口,下面用 container 指代容器对象,说明器接口。
1 包含的内容
容器类对象包括:站点根、文件夹、表单库、应用容器等。
1.1 访问对象 (dict接口)
容器提供类似dict的访问方法:
root.keys() # root是全局可访问的对象,返回: ['container1', 'container2'] root.values() root.items() container1 = root['container1']
删除某个包含的内容:
del root['container2'] # 整个容器删除 del container1['item1']
1.3 容器中的名字 name
任何对象在容器中有唯一的名字 name
container1.name # 'container1' container2.name # 'container2' container1['item1'].name # 'item1'
1.4 选择一个空余的名字 choose_name
注意部署的子应用名字不能重复,否则会报告 KeyError 错误,可以通过下面的方法选择一个名字:
name = container.choose_name('plans') # 如果重复,则返回 plans-1 / plans-2
1.5 找到所在容器 parent
任何对象可得到其所在的容器 parent
container1.parent # root item1.parent # container1 sub_container1.parent # container1
1.7 对包含内容排序
包括根据字段排序,以及手动排序2种。
1.7.1 字段排序
字段排序信息存放在 sort_by 的设置字段中:
sort_info = container.settings.get('sort_by', default={'sort':'modified', 'reverse':True, inherted=True})
其中:
- sort : 排序的字段
- reverse : 是否倒叙排序
1.7.2 手动排序 set_order
容器类对象都支持对包含内容进行排序(注意:如果容器包含的内容数量大,为提高性能,可对部分内容进行排序):
root.set_order(('container2', 'container1')) container.ordered_keys() # ('container2', 'container1') folder.ordered_keys()
对于文件夹,默认添加文件会自动进入排序,但是只能排序到 container.order_limit . 对于表单库,这个参数默认为0,因此不会自动排序。如果要支持,可以设置:
container.order_limit = 1000
1.8 移动 move_to
可以对内容进行移动、改名:
item1.move_to(target, new_name=None, async_index=False)
- target:移动的目标位置,如果target就是 item.parent,那就是改名操作
- new_name:[可选]新的名字
- async_index:移动之后,包含的文件需要全部重建索引,默认异步进行
1.9 复制 copy_to
将obj复制到target:
obj.copy_to(target, new_name=None, remove_permissions=True, include_attachments=True) # 复制
其中:
- target: 复制的目标位置
- new_name:新的名字
- remove_permissoin: 是否去除授权信息
- include_attachments:是否复制文件的附件
另外,复制的时候,不会复制历史版本
1.11 临时的占位子对象 temp_child
生成应该临时的child,可用于新建和查询表单的渲染:
child = container.temp_child()
其中:
- child.name is '' - child.parent is container
2 容量配额 container.quota
2.1 设置容量限额set_size_limit
container.quota.set_size_limit(1024) //单位为M,当前设置的容量控制为1G
清除容量限额:
container.quota.set_size_limit(None)
2.2 得到容量限额 get_size_limit
container.quota.get_size_limit()
2.3 得到容量大小 get_total_size
container.quota.get_total_size()
3 分组清单 container.lists
分组可用于分类的定义。
3.1 分组管理
3.1.1 新建分组 new
container.lists.new(name, title, description)
3.1.2 管理分组 dict接口
删除分组
container.lists.remove(name)
查看全分组:
container.lists.keys() container.lists.values() container.lists.items()
得到一个分组:
the_list = container.lists[name]
3.1.3 调整分组顺序 move_to
container.lists.move_to(name, index)
3.2 分组列表管理
每个分组可以关联暂时一组内容
3.2.1 添加一个内容 append
the_list.append(doc2)
3.2.2 删除应该内容 remove
the_list.remove(doc2)
4 标签组 container.tag_groups
标签组实现了多维度、多层次、可管理的分类管理.
4.1 读取标签组设置 list_items
标签组在容器(文件夹、表单库、应用容器)上设置,可得到标签组设置:
container.tag_groups.list_items()
输出为:
[{'group': '按产品', 'required':true, 'single':true, 'tags': [{'name':'wps'}, {'name':'游戏'}, {'name':'天下'}, {'name':'传奇'}, {'name':'毒霸'} ]}, {'group': '按部门' 'required':true, 'single':true, 'tags': [{'name':'研发', 'children':[{'name':'产品'}, {'name':'测试'}, {'name':'软件'}, {'name':'硬件', 'children':[{'name':'电子'}, {'name':'机械'}] }, ] }, {'name':'市场'}, ] }]