kcl-lang / kcl-py

KCL Python SDK
Apache License 2.0
9 stars 5 forks source link

`planner.plan`错误 #34

Closed nizq closed 4 months ago

nizq commented 4 months ago

Bug Report

1. Minimal reproduce step (Required)

import kclvm.program.exec as kclvm_exec
import kclvm.vm.planner as planner

def main():    
    result = kclvm_exec.Run(["main.k"])
    print(planner.plan(result.filter_by_path_selector()))

2. What did you expect to see? (Required)

The_first_kcl_program: Hello World!

3. What did you see instead (Required)

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/nizq/workspace/gitee/easyoss/easyops/easyops/cli.py", line 20, in main
    planner.YAMLPlanner().plan(result.filter_by_path_selector())
  File "/home/nizq/.cache/pypoetry/virtualenvs/easyops-e3l7Kj-s-py3.11/lib/python3.11/site-packages/kclvm/vm/planner/plan.py", line 240, in plan
    plan_obj = super().plan(var_dict) if to_py else var_dict
               ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/nizq/.cache/pypoetry/virtualenvs/easyops-e3l7Kj-s-py3.11/lib/python3.11/site-packages/kclvm/vm/planner/plan.py", line 224, in plan
    return [self.plan_dict(v) for v in var]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/nizq/.cache/pypoetry/virtualenvs/easyops-e3l7Kj-s-py3.11/lib/python3.11/site-packages/kclvm/vm/planner/plan.py", line 224, in <listcomp>
    return [self.plan_dict(v) for v in var]
            ^^^^^^^^^^^^^^^^^
  File "/home/nizq/.cache/pypoetry/virtualenvs/easyops-e3l7Kj-s-py3.11/lib/python3.11/site-packages/kclvm/vm/planner/plan.py", line 212, in plan_dict
    return {
           ^
  File "/home/nizq/.cache/pypoetry/virtualenvs/easyops-e3l7Kj-s-py3.11/lib/python3.11/site-packages/kclvm/vm/planner/plan.py", line 215, in <dictcomp>
    if v and v.type() in KCL_PLAN_TYPE
             ^^^^^^
AttributeError: 'str' object has no attribute 'type'

4. What is your KCL components version? (Required)

kclvm-0.8.0

5. 其它

参考kcl-py/kclvm/internal/kclvm_internal/main.py,将代码改为:

import kclvm.program.exec as kclvm_exec
import kclvm.vm.planner as planner

def main():    
    result = kclvm_exec.Run(["main.k"])
    print(planner.YAMLPlanner().plan(result.filter_by_path_selector(), to_py=False))

则工作正常。

Peefy commented 4 months ago

Thank you for your feedback. The fixed code will be released in version 0.8.0.2.