tree 模块

模块: borax.structure.tree (v1.1.4+)

功能

tree.pll2cnl 能够将易于存储的 Parent线性数组 转化为 Children嵌套数组 形式。

Parent线性数组(ParentLinearList)格式:

  1. [
  2. {"id": 1, "name": "node1", "parent": null},
  3. {"id": 2, "name": "child1", "parent": 1},
  4. {"id": 3, "name": "child2", "parent": 1},
  5. {"id": 4, "name": "node2", "parent": null},
  6. {"id": 5, "name": "child3", "parent": 5}
  7. ]

Children嵌套数组(ChildrenNestedList) 格式:

  1. [
  2. {
  3. "name": "node1", "id": 1,
  4. "children": [
  5. { "name": "child1", "id": 2 },
  6. { "name": "child2", "id": 3 }
  7. ]
  8. },
  9. {
  10. "name": "node2", "id": 4,
  11. "children": [
  12. { "name": "child3", "id": 5 }
  13. ]
  14. }
  15. ]

应用场景

可作为相关插件的远程数据构建工具,包括:

API

该模块只有一个函数 pll2cnl ,函数签名

  1. def pll2cnl(
  2. nodelist,
  3. *,
  4. id_field='id',
  5. parent_field='parent',
  6. root_value=None,
  7. children_field='children',
  8. flat_fields=None,
  9. extra_fields=None,
  10. extra_key=None
  11. ):
  12. pass

pll2cnl 的全称为 parent-linear-list-to-children-nested-list 。

参数定义如下:

属性 类型 描述 其他
id_field str 主键字段名称
parent_field str 父节点字段名称
root_value Any 根节点的主键值 通常取值 None-1
children_field str 子节点字段名称
flat_fields list 同级字段列表
extra_key str 额外数据的键名称
extra_fields list 其他字段列表

其他参数要求:

  • id_fieldchildren_field, extra_key, flat_fields 必须选取不同的值。

一个节点的通用格式如下:

  1. {
  2. <id_field>: <id_field_value>,
  3. <extra_key>:{
  4. <e_k1>: <e_v1>,
  5. <e_k2>: <e_v2>,
  6. ...
  7. }
  8. <f_k1>:<f_v1>,
  9. <f_k2>:<f_v2>,
  10. ...
  11. <children_field>:[
  12. <Node>,
  13. ...
  14. ]
  15. }

例如对于配置 extra_key=extra&extra_fields=name ,上述节点将输出为以下格式:

  1. {
  2. "id": 0,
  3. "extra":{
  4. "name":"A"
  5. }
  6. }