在 DocAssemble 面试中访问由模块处理的文件
Access file processed by a module in DocAssemble interview
我写了一个 python 模块,它根据一堆值生成图像作为绘图。该模块使用 matplotlib 和 pandas 生成图像。现在我在从 DocAssemble 内部访问图像以将图像放入 docx 模板时遇到了一些麻烦。因此我有一些问题:
- 图像将保存在
/usr/share/docassemble/files/image.png
的模块中。我不认为这是在 DA 中保存文件的正确路径。我在哪里可以保存这些文件以便在以后的采访中访问?
plt.savefig("/usr/share/docassemble/files/image.png")
- 使用 DA YAML 从这样的路径将图像实现为 docx 文档的正确方法是什么?
从 da yml 文件中提取
---
modules:
- .plot_file
[...]
---
code: |
plot_file(datapoints)
您可以在 YAML 中初始化一个 DAFile
对象,然后将该对象传递给您的 plot_file()
函数。您的 plot_file()
函数可以将数据写入 .path()
指示的路径,然后 运行 .commit()
。这将确保即使服务器将其文件保存在 S3 上,您的代码也能正常工作。
modules:
- .plot_file
---
objects:
- myfile: DAFile
---
code: |
plot_file(datapoints, myfile)
然后在你的模块中你可以做类似的事情:
def plot_file(datapoints, the_file):
the_file.initialize(filename="plot.png")
...
with open(the_file.path(), 'rb') as file_pointer:
file_pointer.write(data)
the_file.commit()
请参阅 this section 中的第一个示例。
Docassemble 被设计为基于云的应用程序,因此您不能假设在时间 1 处理请求的机器与在时间 2 处理请求的机器相同。这就是为什么文件是抽象为 DAFile
个对象; DAFile
代码负责将文件存储在 S3 上并从 S3 中检索它。 DAFile
class 还提供了一个权限系统,这样服务器上的其他用户就无法访问您的文件,除非您专门调用 .set_attributes()
或 .user_access()
来授予权限.
我写了一个 python 模块,它根据一堆值生成图像作为绘图。该模块使用 matplotlib 和 pandas 生成图像。现在我在从 DocAssemble 内部访问图像以将图像放入 docx 模板时遇到了一些麻烦。因此我有一些问题:
- 图像将保存在
/usr/share/docassemble/files/image.png
的模块中。我不认为这是在 DA 中保存文件的正确路径。我在哪里可以保存这些文件以便在以后的采访中访问?
plt.savefig("/usr/share/docassemble/files/image.png")
- 使用 DA YAML 从这样的路径将图像实现为 docx 文档的正确方法是什么?
从 da yml 文件中提取
---
modules:
- .plot_file
[...]
---
code: |
plot_file(datapoints)
您可以在 YAML 中初始化一个 DAFile
对象,然后将该对象传递给您的 plot_file()
函数。您的 plot_file()
函数可以将数据写入 .path()
指示的路径,然后 运行 .commit()
。这将确保即使服务器将其文件保存在 S3 上,您的代码也能正常工作。
modules:
- .plot_file
---
objects:
- myfile: DAFile
---
code: |
plot_file(datapoints, myfile)
然后在你的模块中你可以做类似的事情:
def plot_file(datapoints, the_file):
the_file.initialize(filename="plot.png")
...
with open(the_file.path(), 'rb') as file_pointer:
file_pointer.write(data)
the_file.commit()
请参阅 this section 中的第一个示例。
Docassemble 被设计为基于云的应用程序,因此您不能假设在时间 1 处理请求的机器与在时间 2 处理请求的机器相同。这就是为什么文件是抽象为 DAFile
个对象; DAFile
代码负责将文件存储在 S3 上并从 S3 中检索它。 DAFile
class 还提供了一个权限系统,这样服务器上的其他用户就无法访问您的文件,除非您专门调用 .set_attributes()
或 .user_access()
来授予权限.