Skip to content

feature

要素/特征定义相关 CLI 命令。

cmd_feature_create(fmt, file_id, name, fields)

创建新要素定义(需 Dimine 运行)。

Source code in dimine_python_sdk\cli\commands\feature.py
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
def cmd_feature_create(fmt: str, file_id: str, name: str, fields: str) -> None:
    """创建新要素定义(需 Dimine 运行)。"""
    err = require_remote_sdk()
    if err:
        output_error(err, fmt)

    try:
        prop_defs = parse_fields_arg(fields)
    except ValueError as e:
        output_error(str(e), fmt)

    async def _run():
        client = await get_client()
        result = await client.create_feature(file_id=file_id, name=name, defines=prop_defs)
        return {
            "success": True,
            "file_id": file_id,
            "name": name,
            "define_count": len(prop_defs),
            "result": result,
            "message": f"已成功创建要素: {name}",
        }

    try:
        result = asyncio.run(_run())
        output_result(result, fmt)
    except Exception as e:
        handle_sdk_error(e, fmt, "创建要素失败")

cmd_feature_delete(fmt, file_id, name)

删除要素定义(需 Dimine 运行)。

Source code in dimine_python_sdk\cli\commands\feature.py
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
def cmd_feature_delete(fmt: str, file_id: str, name: str) -> None:
    """删除要素定义(需 Dimine 运行)。"""
    err = require_remote_sdk()
    if err:
        output_error(err, fmt)

    async def _run():
        client = await get_client()
        await client.delete_feature(file_id, name)
        return {
            "success": True,
            "file_id": file_id,
            "name": name,
            "message": f"已成功删除要素: {name}",
        }

    try:
        result = asyncio.run(_run())
        output_result(result, fmt)
    except Exception as e:
        handle_sdk_error(e, fmt, "删除要素失败")

cmd_feature_list(fmt, file_id)

列出文件中的要素定义(需 Dimine 运行)。

Source code in dimine_python_sdk\cli\commands\feature.py
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
def cmd_feature_list(fmt: str, file_id: str | None) -> None:
    """列出文件中的要素定义(需 Dimine 运行)。"""
    err = require_remote_sdk()
    if err:
        output_error(err, fmt)

    async def _run():
        nonlocal file_id
        client = await get_client()
        if not file_id:
            files = await client.get_files()
            if not files:
                raise_or_exit("没有打开的文件,请先打开文件或提供 --file-id", fmt)
            file_id = files[0].id
        features = await client.get_features(file_id)
        result = []
        for f in features:
            props = []
            if hasattr(f, "properties") and f.properties:
                for prop in f.properties:
                    props.append({"name": prop.name, "type": prop.type})
            result.append({"name": f.name, "properties": props})
        return {"file_id": file_id, "feature_count": len(result), "features": result}

    try:
        result = asyncio.run(_run())
        output_result(result, fmt)
    except SystemExit:
        raise
    except Exception as e:
        handle_sdk_error(e, fmt, "获取要素列表失败")

cmd_feature_update(fmt, file_id, name, fields)

更新现有要素定义的属性(需 Dimine 运行)。

Source code in dimine_python_sdk\cli\commands\feature.py
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
def cmd_feature_update(fmt: str, file_id: str, name: str, fields: str) -> None:
    """更新现有要素定义的属性(需 Dimine 运行)。"""
    err = require_remote_sdk()
    if err:
        output_error(err, fmt)

    try:
        prop_defs = parse_fields_arg(fields)
    except ValueError as e:
        output_error(str(e), fmt)

    async def _run():
        client = await get_client()
        result = await client.update_feature(file_id=file_id, name=name, defines=prop_defs)
        return {
            "success": True,
            "file_id": file_id,
            "name": name,
            "define_count": len(prop_defs),
            "result": result,
            "message": f"已成功更新要素: {name}",
        }

    try:
        result = asyncio.run(_run())
        output_result(result, fmt)
    except Exception as e:
        handle_sdk_error(e, fmt, "更新要素失败")

register_commands(subparsers, format_parent)

向 subparsers 注册要素相关子命令。

Source code in dimine_python_sdk\cli\commands\feature.py
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
def register_commands(subparsers, format_parent) -> None:
    """向 subparsers 注册要素相关子命令。"""
    p = subparsers.add_parser("feature-list", parents=[format_parent], help="列出要素定义")
    p.add_argument("--file-id", default=None, help="文件ID,不提供则使用当前打开的第一个文件")

    p = subparsers.add_parser("feature-create", parents=[format_parent], help="创建要素定义")
    p.add_argument("--file-id", required=True, help="文件ID")
    p.add_argument("--name", required=True, help="要素名称")
    p.add_argument("--fields", required=True, help="逗号分隔的 name:type 对,如 '品位:float,备注:string'。type 可选: string/float/int/bool/date/time/datetime")

    p = subparsers.add_parser("feature-update", parents=[format_parent], help="更新要素定义")
    p.add_argument("--file-id", required=True, help="文件ID")
    p.add_argument("--name", required=True, help="要素名称")
    p.add_argument("--fields", required=True, help="逗号分隔的 name:type 对,如 '品位:float,备注:string'")

    p = subparsers.add_parser("feature-delete", parents=[format_parent], help="删除要素定义")
    p.add_argument("--file-id", required=True, help="文件ID")
    p.add_argument("--name", required=True, help="要素名称")