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

问题描述

在对这个问题的回答中,建议高级用户可能喜欢直接开发包,而不是在操场上开发然后创建单独的包——具体来说,这个想法是创建跨包帮助函数而不必打包/重新打包, ETC。

这里有几个问题。其中一些非常“开箱即用”,所以我很高兴自己进行实验/研究,但只是想问问是否有任何已知的问题/想法/最佳实践。

  1. 这是要查看该建议的正确目录吗:/usr/share/docassemble/local3.8/lib/python3.8/site-packages/docassemble/[[package-name]]/data
  2. 该目录有什么魔力,或者我可以.../site-packages/docassemble/helpers用于开发辅助功能/交叉使用面试的东西,然后根据需要导入.../data
  3. 文档中某处是否有 docassemble 文件结构的列表(即当您运行容器时)?文档中有各种对 (eg.) /usr/share/docassemble/config/.../docassemble/backup等的引用,但我没有找到整个文件系统或 docassemble 层的文件系统的任何内容(alpine例如,显然不需要布局)。
  4. 查看文档的“Anatomy of a docassemble package”页面以及“Modules folder”页面,我认为用于导入.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
---

很高兴做我自己的实验/研究,但只是想问问是否有任何已知的问题/想法浮现在脑海中。

标签: docassemble

解决方案


  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. 该目录site-packages/docassemble/helpers将是 Python 包的目录docassemble.helpers。您可以编写这样的包并将其发布在 PyPI 上(名称尚未使用)。
  3. 您可以查看安装页面和/或Dockerfile
  4. 当您在 Python 包中引用数据文件时,您可以使用完全限定的引用,例如docassemble.familylaw:data/questions/kids.yml. 如果你写data/static/tweaks.css它会假设你的意思是当前包中的一个文件。如果您只是给它一个文件名(例如,tweaks.css),它将假定您指的是当前包中的文件,并且它将根据上下文对您所指的数据文件夹做出假设。如果您的 Python 包名为docassemble.familylaw,则数据文件夹位于包docassemble/familylaw/datadocassemble.familylaw
  5. 您可以创建一个 Python 包docassemble.helpers并安装它,但不建议通过将文件直接写入 Python 虚拟环境来绕过 docassemble 的包安装系统。请注意,docassemble 是一个云应用程序,因此 docassemble“服务器”可能是一组机器。包管理系统确保您可以执行docker stopdocker rmdocker pulldocker run,并且您的服务器将使用所有正确的 Python 包重新启动并运行,即使docker pull导致从 Python 3.8 升级到 Python 3.9 也是如此。
  6. 该块与文件夹modules无关。data如果docassemble.xyz在块中列出modules,则 docassemble 运行from docassemble.xyz import *并将模块的导出名称导入面试答案命名空间。

推荐阅读