胚胎渲染器脚手架引擎
embryo的Python项目详细描述
#胚胎作为一个小型的内部工具开始为新项目搭建脚手架。当我和朋友开始更认真地使用它之后,它开始成形。在胚胎程序的上下文中,胚胎是一个简单的ol'目录,其中至少包含一个基本文件'tree.yml',它指定要在文件系统中创建或验证的文件和目录的模板名称和位置。除树文件外,胚胎还可以包含静态上下文、用于呈现文件的模板,以及用于自定义逻辑和转换的挂钩。
而用来呈现其文件的数据被写入“点”文件中的文件系统。每个胚胎都可以在运行时解析存储在其祖先和子目录中的元数据,并且它可以访问其他胚胎定义的自定义python方法。
例如,可以创建一个初始化新项目的胚胎,以及另一个为新组件生成源和测试文件的胚胎。当“新组件”胚胎运行时,它知道如何解析它所在项目的名称,因此在呈现其模板时可以生成正确的导入语句。
与现有的项目脚手架工具不同,模板文件不必以镜像树文件中定义的结构的方式布置在文件系统中。相反,您可以将所有模板直接存储在“templates”目录中,同时在树文件中修改它们的排列。
|-实体
单位
单位
单位
单位
单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-br/>-实体:
-account.py:实体(帐户)
-user.py:实体(用户)
-测试:
-test_account.py:unit_test(account)
-test_user.py:unit_test(user)
…
`````
注意模板是如何包含在“templates”目录的平面列表中的,同时,其中一些模板像“tree.yml”文件中的函数一样被调用。这些“函数”的“参数”是模板呈现上下文(python dict)中的顶级属性。上下文对象的这些元素可能包含jsonschemas,这些jsonschemas由“entity”和“unit-test”模板用于生成带有相应getter和setter的python类。
|-阿莫霍普尼科恩/
-readme.md
-setup.py
-un晶态的非晶态的独角兽/
-app.py
-ententities/
-account.py
-user.py
-test/
-test/
-test-account.py
-test.py
-test/
````
-test.py-test-user.py-user.py组成和嵌套
除了利用胚胎的自我意识和虚拟文件系统外,一个胚胎还可以在树文件中嵌套其他胚胎。例如,在新项目中初始化git存储库的胚胎可能有这样的树文件:
``yaml
--
-{{project{name}}:
-胚胎:git(python)
-{{project{snake}:
-app.py
…
```
请注意嵌套的git胚胎,它的调用类似于函数:`git(python)`。在这个例子中,我们假设git胚胎有一个`context.yml`文件,包含自定义规则,例如,为不同的项目类型生成`.gitignore'文件。作为技术说明,胚胎是在广度优先遍历中构建的。
任何python模块都将通过yapf进行格式化,因此您不必在试图获取模板文件以输出正确的python代码结构时过于紧张。
而用来呈现其文件的数据被写入“点”文件中的文件系统。每个胚胎都可以在运行时解析存储在其祖先和子目录中的元数据,并且它可以访问其他胚胎定义的自定义python方法。
例如,可以创建一个初始化新项目的胚胎,以及另一个为新组件生成源和测试文件的胚胎。当“新组件”胚胎运行时,它知道如何解析它所在项目的名称,因此在呈现其模板时可以生成正确的导入语句。
与现有的项目脚手架工具不同,模板文件不必以镜像树文件中定义的结构的方式布置在文件系统中。相反,您可以将所有模板直接存储在“templates”目录中,同时在树文件中修改它们的排列。
|-实体
单位
单位
单位
单位
单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-单位-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-自述-br/>-实体:
-account.py:实体(帐户)
-user.py:实体(用户)
-测试:
-test_account.py:unit_test(account)
-test_user.py:unit_test(user)
…
`````
注意模板是如何包含在“templates”目录的平面列表中的,同时,其中一些模板像“tree.yml”文件中的函数一样被调用。这些“函数”的“参数”是模板呈现上下文(python dict)中的顶级属性。上下文对象的这些元素可能包含jsonschemas,这些jsonschemas由“entity”和“unit-test”模板用于生成带有相应getter和setter的python类。
|-阿莫霍普尼科恩/
-readme.md
-setup.py
-un晶态的非晶态的独角兽/
-app.py
-ententities/
-account.py
-user.py
-test/
-test/
-test-account.py
-test.py
-test/
````
-test.py-test-user.py-user.py组成和嵌套
除了利用胚胎的自我意识和虚拟文件系统外,一个胚胎还可以在树文件中嵌套其他胚胎。例如,在新项目中初始化git存储库的胚胎可能有这样的树文件:
``yaml
--
-{{project{name}}:
-胚胎:git(python)
-{{project{snake}:
-app.py
…
```
请注意嵌套的git胚胎,它的调用类似于函数:`git(python)`。在这个例子中,我们假设git胚胎有一个`context.yml`文件,包含自定义规则,例如,为不同的项目类型生成`.gitignore'文件。作为技术说明,胚胎是在广度优先遍历中构建的。
任何python模块都将通过yapf进行格式化,因此您不必在试图获取模板文件以输出正确的python代码结构时过于紧张。