Temple 是一个用于创建和管理应用程序模板的工具,它使用 YAML(YAML Ain't Markup Language)文件来定义模板的结构和内容。这些模板可以用于生成项目的骨架代码、配置文件、文档等。

        该工具位于string模块内,使用如下代码导入:

from string import Template

        下面是一个简单的 YAML Temple 示例:

name: MyProject
description: A sample project template

variables:
  - name: project_name
    prompt: Enter the project name
    default: MyProject

files:
  - path: src/main.py
    template: templates/main.py.j2

  - path: README.md
    content: |
      # {{ project_name }}
      This is a sample project generated by Temple.

  - path: config.yaml
    content: |
      project_name: {{ project_name }}
      version: 1.0

        在这个示例中,我们定义了一个名为 "MyProject" 的项目模板,它包含了以下内容:

        name 和 description 字段用于描述模板的名称和描述信息。

        variables 字段定义了模板中可以接受的变量列表。每个变量都有一个 name 字段用于指定变量的名称,prompt 字段用于指定用户输入变量时的提示信息,default 字段用于指定变量的默认值(可选)。

        files 字段定义了模板中的文件列表。每个文件都有一个 path 字段用于指定文件的路径,template 字段用于指定文件的模板路径(可选),content 字段用于指定文件的内容。

        在使用 Temple 生成项目时,它会提示用户输入变量的值,并根据模板生成对应的文件。模板文件中可以使用 Jinja2 模板语法来动态地生成文件内容,例如 {{ project_name }} 将会被替换为用户输入的项目名称。

        Temple 提供了命令行工具和 Python API 来使用模板生成项目。你可以使用命令行工具运行 temple create 命令并指定模板的 YAML 文件,或者使用 Python API 调用相应的函数来生成项目。

        下面给出一个使用Template修改yaml中的变量的示例:

source.yaml文件内容如下:

- test:
    name: login case1
    request:
        url: http://www.xxx.com/login/
        method: POST
        headers:
            Content-Type: application/json
            User-Agent: python-requests/2.18.4
        json:
            username: $user
            password: $psw
    validate:
        - eq: [$.msg, login success!]
        - eq: [$.code, 0]

示例code:

import  yaml
from string import Template

class YamlTest:
    def __init__(self, yaml_file) -> None:
        self.yaml_file = yaml_file;

    def read_yaml(self):
        with open(self.yaml_file, 'r', encoding='utf-8') as f:
            value = f.read()
            temp = Template(value)
            print("temp={}".format(temp))

            res = temp.safe_substitute({'user': 'lili', 'password': '123456'})
            yaml_data = yaml.safe_load(res)

            print('res={}'.format(res))  #打印匹配后数据
            print("yaml_data={}".format(yaml_data))

if __name__ == "__main__":
    YamlTest("./data/source.yaml").read_yaml()

         safe_substitute:可以让不想匹配的变量当正常的字符串使用

运行结果:

python之Temple工具及与Yaml文件配合使用的介绍-LMLPHP

         通过运行结果看到,safe_substitute要匹配{'user': 'lili', 'password': '123456'},但是原文件中只有username: $user , password: $psw, 所以‘user’被匹配到,并且用‘lili’进行了替换;因为原文件中只有‘pwd’没有'password',所以没有被替换。

03-15 13:04