在 docassemble 中编写辅助函数/代码/采访,直接到数据目录(即绕过操场)?

Writing helper functions / code / interviews in docassemble, directly to data directory (i.e. bypassing the playground)?

的回答中建议高级用户可能喜欢直接开发包,而不是在操场上开发然后创建单独的包——具体来说,这个想法是创建交叉包无需打包/重新打包等辅助功能

这里有几个问题。其中一些非常“开箱即用”,所以我很乐意做自己的实验/研究,但只是想问一下,以防出现任何已知问题/想法/最佳实践。

  1. 这是要寻找该建议的正确目录吗:/usr/share/docassemble/local3.8/lib/python3.8/site-packages/docassemble/[[package-name]]/data
  2. 那个目录有什么神奇之处吗,或者我可以使用 .../site-packages/docassemble/helpers 开发辅助功能/交叉使用面试内容,然后根据需要导入 .../data 吗?
  3. 文档中某处是否有 docassemble 文件结构的列表(即当您 运行 容器时)?在文档中有对(例如)/usr/share/docassemble/config/.../docassemble/backup 等的各种引用,但我没有找到整个文件系统或 docassemble 层的文件系统的任何内容(显然没有必要例如布置 alpine
  4. 查看 "Anatomy of a docassemble package" page of the docs, along with the "Modules folder" page,我认为用于导入 .yml 文件的 CWD 是 .../data?
  5. 如果那是对的,那么如果我要创建一个 /usr/share/docassemble/local3.8/lib/python3.8/site-packages/docassemble/helpers/helper.py 目录和文件,我就可以使用类似下面的内容将 helper.py 导入一个虚构的 interview.yml 文件中?并不是说那是最好的主意,只是问它是否可以尝试更多地了解 docassemble ......还没有完全考虑过这样的工作流程(即,如果只使用它可能会更好游乐场打包东西,或者如果有另一个更简单的选择)。
---
modules:
    - .....helpers.helper
---
  1. 大概这样我也可以采纳文档中其他地方的建议,并将包中的代码抽象出来,方法是将它放在 docassemble/packagename/data/ 文件夹中,然后像这样导入:
---
modules:
    - .module
---

我想我什至可以像这样构建我的文件 .../data/modules/module.py,然后用类似下面的东西导入?

---
modules:
    - .modules.module
---

很高兴做我自己的实验/研究,但只是想问一下,以防万一我想到任何已知的问题/想法。

  1. Dockerfile 运行 python3.8 -m venv --copies /usr/share/docassemble/local3.8。当需要升级到 Python 3.9 时,它会做到 python3.9 -m venv --copies /usr/share/docassemble/local3.9。如何在虚拟环境中安装软件包取决于 Python 和 pip.
  2. 的开发人员
  3. 目录 site-packages/docassemble/helpers 将是 Python 包 docassemble.helpers 的目录。你可以编写这样一个包并发布到 PyPI 上(名称尚未使用)。
  4. 你可以看看Installation page and/or the Dockerfile
  5. 当您引用 Python 包中的数据文件时,您可以使用完全限定的引用,例如 docassemble.familylaw:data/questions/kids.yml。如果你写 data/static/tweaks.css 它会假定你的意思是当前包中的一个文件。如果你只是给它一个文件名(例如,tweaks.css),它会假设你指的是当前包中的一个文件,它会根据上下文假设你指的是哪个数据文件夹。如果您的 Python 包名为 docassemble.familylaw,则数据文件夹位于 docassemble.familylaw 包内的 docassemble/familylaw/data
  6. 您可以创建一个名为 docassemble.helpers 的 Python 包并安装它,但是通过直接将文件写入 Python 虚拟环境来绕过 docassemble 的包安装系统是不可取的。请注意,docassemble 是一个云应用程序,因此 docassemble“服务器”可能是一组机器。包管理系统确保您可以执行 docker stopdocker rmdocker pulldocker run,并且您的服务器将启动并再次 运行 所有正确的 Python 包,即使 docker pull 导致从 Python 3.8 升级到 Python 3.9.
  7. modules 块与 data 文件夹无关。如果 docassemble.xyz 列在 modules 块中,docassemble 运行 from docassemble.xyz import * 并将模块的导出名称导入采访答案命名空间。