docassemble.AssemblyLine 4.5.0__tar.gz → 4.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- docassemble_assemblyline-4.6.0/MANIFEST.in +17 -0
- {docassemble_assemblyline-4.5.0/docassemble.AssemblyLine.egg-info → docassemble_assemblyline-4.6.0}/PKG-INFO +1 -5
- docassemble_assemblyline-4.6.0/docassemble/AssemblyLine/__init__.py +1 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/al_document.py +114 -13
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/al_code.yml +4 -3
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/al_document.yml +3 -3
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/al_language.yml +13 -2
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/al_settings.yml +2 -2
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/interview_list.yml +4 -4
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/ql_baseline.yml +6 -2
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/test_signature.yml +2 -0
- docassemble_assemblyline-4.6.0/docassemble/AssemblyLine/data/templates/sample_word_template.docx +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/language.py +1 -1
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/sessions.py +8 -8
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/test_al_document.py +69 -0
- docassemble_assemblyline-4.6.0/docassemble/AssemblyLine/test_all_imports.py +12 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0/docassemble.AssemblyLine.egg-info}/PKG-INFO +1 -5
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble.AssemblyLine.egg-info/SOURCES.txt +1 -4
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/pyproject.toml +15 -1
- docassemble_assemblyline-4.6.0/setup.cfg +4 -0
- docassemble_assemblyline-4.5.0/MANIFEST.in +0 -1
- docassemble_assemblyline-4.5.0/docassemble/AssemblyLine/__init__.py +0 -1
- docassemble_assemblyline-4.5.0/docassemble/AssemblyLine/data/templates/sample_word_template.docx +0 -0
- docassemble_assemblyline-4.5.0/docassemble/AssemblyLine/requirements.txt +0 -9
- docassemble_assemblyline-4.5.0/docassemble.AssemblyLine.egg-info/not-zip-safe +0 -1
- docassemble_assemblyline-4.5.0/setup.cfg +0 -7
- docassemble_assemblyline-4.5.0/setup.py +0 -60
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/LICENSE +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/README.md +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/al_courts.py +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/al_general.py +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/custom_jinja_filters.py +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/al_package.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/al_package_unstyled.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/al_question_test.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/al_reminders.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/al_saved_sessions.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/al_saved_sessions_store.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/al_terms_of_use.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/al_visual.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/assembly_line.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/assembly_line_unstyled.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/demo_search_sessions.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/feedback.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/ql_catchall.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/ql_namechange.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/reserved_words.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/test_al_table_document.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/test_aladdendum.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/test_alcourts.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/test_aldocument.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/test_aldocument_background_assembly.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/test_alexhibit.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/test_alexhibit_maxsize.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/test_bundle_parity.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/test_catchall.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/test_familiar_disambiguation.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/test_if_final.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/test_preferred_formats.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/test_preferred_name.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/questions/test_question_library.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/sources/README.md +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/sources/ar-words.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/sources/es-words.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/sources/fr-words.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/sources/languages.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/sources/ne-words.yml +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/sources/test_aldocument.feature +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_docx_1.docx +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_jpg_1.jpg +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_pdf_1.pdf +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_png_1.png +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/sources/test_question_library.feature +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/sources/translation_es.xlsx +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/sources/translation_ht.xlsx +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/sources/translation_pt.xlsx +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/static/README.md +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/static/al_audio.css +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/static/al_audio.js +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/static/aldocument.css +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/static/aldocument.js +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/static/interview_list.css +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/static/limit_upload_size.js +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/static/lt1-pullout-10-getting-organized.pdf +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/static/ma_logo.png +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/static/placeholder.png +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/static/seal.jpg +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/static/styles.css +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/templates/README.md +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/templates/al_basic_addendum.docx +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/templates/exhibit_cover_sheet.docx +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/templates/exhibit_table_of_contents.docx +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/templates/general_cover_sheet.docx +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/templates/test_aldocument_docx_1.docx +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/templates/test_aldocument_pdf_1.pdf +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/templates/test_catchall.docx +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/data/templates/test_if_final.docx +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/py.typed +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/sign.py +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/test_al_general.py +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/test_language.py +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble.AssemblyLine.egg-info/dependency_links.txt +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble.AssemblyLine.egg-info/requires.txt +0 -0
- {docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble.AssemblyLine.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
include README.md
|
|
2
|
+
graft docassemble/AssemblyLine/data
|
|
3
|
+
recursive-exclude * *.egg-info
|
|
4
|
+
recursive-exclude .git *
|
|
5
|
+
recursive-exclude venv *
|
|
6
|
+
recursive-exclude .github *
|
|
7
|
+
recursive-exclude .pytest_cache *
|
|
8
|
+
recursive-exclude .vscode *
|
|
9
|
+
recursive-exclude build *
|
|
10
|
+
recursive-exclude dist *
|
|
11
|
+
recursive-exclude * __pycache__
|
|
12
|
+
recursive-exclude * *.pyc
|
|
13
|
+
recursive-exclude * *.pyo
|
|
14
|
+
recursive-exclude * *.orig
|
|
15
|
+
recursive-exclude * *~
|
|
16
|
+
recursive-exclude * *.bak
|
|
17
|
+
recursive-exclude * *.swp
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: docassemble.AssemblyLine
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.6.0
|
|
4
4
|
Summary: Quickly go from a paper court form to a runnable, guided, step-by-step web application powered by Docassemble. Swap out branding and pre-built questions to meet your needs.
|
|
5
|
-
Home-page: https://courtformsonline.org
|
|
6
|
-
Author: Suffolk Legal Innovation and Technology Lab
|
|
7
5
|
Author-email: Suffolk Legal Innovation and Technology Lab <litlab@suffolk.edu>
|
|
8
6
|
License-Expression: MIT
|
|
9
7
|
Project-URL: Homepage, https://courtformsonline.org
|
|
@@ -11,8 +9,6 @@ Description-Content-Type: text/markdown
|
|
|
11
9
|
License-File: LICENSE
|
|
12
10
|
Requires-Dist: docassemble.ALToolbox>=0.16.0
|
|
13
11
|
Requires-Dist: docassemble.GitHubFeedbackForm>=0.4.1.1
|
|
14
|
-
Dynamic: author
|
|
15
|
-
Dynamic: home-page
|
|
16
12
|
Dynamic: license-file
|
|
17
13
|
|
|
18
14
|
# Suffolk LIT Lab Document Assembly Line
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '4.6.0'
|
|
@@ -945,6 +945,15 @@ class ALDocument(DADict):
|
|
|
945
945
|
instance. These values will be used to detect and handle overflow.
|
|
946
946
|
has_addendum (bool): (optional) Defaults to False. Set to True if the
|
|
947
947
|
document could have overflow, like for a PDF template.
|
|
948
|
+
default_overflow_message (str): The message appended to truncated text when it overflows
|
|
949
|
+
to the addendum. Defaults to `"..."`. This is used as the fallback whenever
|
|
950
|
+
`overflow_message=None` is passed to :meth:`safe_value`,
|
|
951
|
+
:meth:`overflow_value`, or :meth:`original_or_overflow_message`.
|
|
952
|
+
Override per-document by setting `my_doc.default_overflow_message`.
|
|
953
|
+
suffix_to_append (str): When the document key matches this value, it is appended to
|
|
954
|
+
the output filename to distinguish it from other versions. Defaults to `"preview"`
|
|
955
|
+
so the preview version is saved as e.g. `myDoc_preview.pdf` while the final
|
|
956
|
+
version is saved as `myDoc.pdf`.
|
|
948
957
|
|
|
949
958
|
Note:
|
|
950
959
|
The `enabled` attribute should always be defined by a code block or the
|
|
@@ -1099,6 +1108,7 @@ class ALDocument(DADict):
|
|
|
1099
1108
|
|
|
1100
1109
|
if isinstance(main_doc, DAFileCollection):
|
|
1101
1110
|
main_doc = main_doc.pdf
|
|
1111
|
+
if isinstance(main_doc, DAFile):
|
|
1102
1112
|
main_doc.title = self.title
|
|
1103
1113
|
main_doc.filename = filename
|
|
1104
1114
|
try:
|
|
@@ -1254,6 +1264,8 @@ class ALDocument(DADict):
|
|
|
1254
1264
|
Args:
|
|
1255
1265
|
field_name (str): The name of the field to check.
|
|
1256
1266
|
overflow_message (str): A short message to go on the page where text is cutoff.
|
|
1267
|
+
If `None`, falls back to `self.default_overflow_message`
|
|
1268
|
+
(`"..."` by default).
|
|
1257
1269
|
input_width (int): The width, in characters, of the input box. Defaults to 80.
|
|
1258
1270
|
preserve_newlines (bool): Determines whether newlines are preserved in the "safe" text.
|
|
1259
1271
|
Defaults to False, which means all newlines are removed. This allows more text to appear
|
|
@@ -1292,7 +1304,9 @@ class ALDocument(DADict):
|
|
|
1292
1304
|
|
|
1293
1305
|
Args:
|
|
1294
1306
|
field_name (str): The name of the field to retrieve the safe value from.
|
|
1295
|
-
overflow_message (Optional[str]): Message
|
|
1307
|
+
overflow_message (Optional[str]): Message appended when the field value is truncated.
|
|
1308
|
+
If `None`, falls back to `self.default_overflow_message`
|
|
1309
|
+
(`"..."` by default).
|
|
1296
1310
|
preserve_newlines (bool): Whether to maintain newlines in the output. Defaults to False.
|
|
1297
1311
|
input_width (int): The expected input width, used for formatting. Defaults to 80.
|
|
1298
1312
|
preserve_words (bool): Whether to avoid splitting words during formatting. Defaults to True.
|
|
@@ -1322,7 +1336,9 @@ class ALDocument(DADict):
|
|
|
1322
1336
|
|
|
1323
1337
|
Args:
|
|
1324
1338
|
field_name (str): The name of the field to retrieve the overflow value from.
|
|
1325
|
-
overflow_message (Optional[str]): Message
|
|
1339
|
+
overflow_message (Optional[str]): Message appended when the safe portion of the field
|
|
1340
|
+
value is truncated. If `None`, falls back to `self.default_overflow_message`
|
|
1341
|
+
(`"..."` by default).
|
|
1326
1342
|
preserve_newlines (bool): Whether to maintain newlines in the output. Defaults to False.
|
|
1327
1343
|
input_width (int): The expected input width, used for formatting. Defaults to 80.
|
|
1328
1344
|
preserve_words (bool): Whether to avoid splitting words during formatting. Defaults to True.
|
|
@@ -1548,7 +1564,62 @@ class ALDocumentBundle(DAList):
|
|
|
1548
1564
|
enabled (bool, optional): Determines if the bundle is active. Defaults to True.
|
|
1549
1565
|
auto_gather (bool, optional): Automatically gathers attributes. Defaults to False.
|
|
1550
1566
|
gathered (bool, optional): Specifies if attributes have been gathered. Defaults to True.
|
|
1551
|
-
default_parity (Optional[Literal["even", "odd"]]): Default parity to enforce on the PDF.
|
|
1567
|
+
default_parity (Optional[Literal["even", "odd"]]): Default parity to enforce on the PDF.
|
|
1568
|
+
When set, :meth:`as_pdf` will append a blank page if necessary to reach the desired
|
|
1569
|
+
parity. Defaults to `None` (no enforcement).
|
|
1570
|
+
suffix_to_append (str): When the document key matches this value, it is appended to the
|
|
1571
|
+
output filename to distinguish it from other versions. Defaults to `"preview"`
|
|
1572
|
+
so the preview bundle is saved as e.g. `bundle_preview.pdf` while the final is
|
|
1573
|
+
saved as `bundle.pdf`.
|
|
1574
|
+
view_label (DALazyTemplate): Template providing the label for "View" buttons in
|
|
1575
|
+
:meth:`download_list_html`. Defined generically in `ql_baseline.yml`; resolves to
|
|
1576
|
+
`"View"` (or its translation). Override by assigning a new template to
|
|
1577
|
+
`your_bundle.view_label` in your interview YAML.
|
|
1578
|
+
download_label (DALazyTemplate): Template providing the label for "Download" buttons in
|
|
1579
|
+
:meth:`download_list_html`. Defined generically in `ql_baseline.yml`; resolves to
|
|
1580
|
+
`"Download"` (or its translation).
|
|
1581
|
+
send_label (DALazyTemplate): Template providing the label for "Send" buttons in
|
|
1582
|
+
:meth:`download_list_html`, :meth:`send_email_table_row`, and
|
|
1583
|
+
:meth:`send_button_to_html`. Defined generically in `ql_baseline.yml`; resolves to
|
|
1584
|
+
`"Send"` (or its translation).
|
|
1585
|
+
zip_label (DALazyTemplate): Template providing the label for the "Download all" zip
|
|
1586
|
+
button in :meth:`download_list_html`. Defined generically in `al_document.yml`;
|
|
1587
|
+
resolves to `"Download all"` (or its translation).
|
|
1588
|
+
full_pdf_label (DALazyTemplate): Template providing the label for the "Download as one
|
|
1589
|
+
PDF" button in :meth:`download_list_html`. Defined generically in
|
|
1590
|
+
`al_document.yml`; resolves to `"Download as one PDF"` (or its translation).
|
|
1591
|
+
send_email_template (DALazyTemplate): Template used as the default email subject and
|
|
1592
|
+
body in :meth:`send_email` when `template=None`. Defined generically in
|
|
1593
|
+
`al_document.yml`. The subject defaults to
|
|
1594
|
+
`"Your <document> document from <app> is ready"` and the body to
|
|
1595
|
+
`"Your document is attached. Visit <homepage> to learn more."`
|
|
1596
|
+
Override by assigning a new template block to `your_bundle.send_email_template`
|
|
1597
|
+
in your interview YAML.
|
|
1598
|
+
get_email_copy (DALazyTemplate): Template providing the header text for the email input
|
|
1599
|
+
section rendered by :meth:`send_button_html`. Defined generically in
|
|
1600
|
+
`al_document.yml`; resolves to `"Get a copy of the documents in email"`
|
|
1601
|
+
(or its translation).
|
|
1602
|
+
include_editable_documents (DALazyTemplate): Template providing the label for the
|
|
1603
|
+
"include editable copy" checkbox in :meth:`send_button_html`. Defined generically
|
|
1604
|
+
in `al_document.yml`; resolves to `"Include an editable copy"`
|
|
1605
|
+
(or its translation).
|
|
1606
|
+
add_page_numbers (bool): If `True`, Bates-style page numbers are stamped onto the
|
|
1607
|
+
merged PDF produced by :meth:`as_pdf`. Defaults to `False`.
|
|
1608
|
+
page_number_prefix (str): Text prepended to each stamped page number (e.g. `"EX-"`).
|
|
1609
|
+
Defaults to `""`.
|
|
1610
|
+
page_number_start (int): The first page number used when stamping page numbers.
|
|
1611
|
+
Defaults to `1`.
|
|
1612
|
+
page_number_digits (int): Minimum number of digits in each stamped page number;
|
|
1613
|
+
shorter numbers are left-padded with zeros. Defaults to `5`.
|
|
1614
|
+
page_number_area (Optional[str]): Location on the page where numbers are stamped.
|
|
1615
|
+
Accepted values: `"TOP_LEFT"`, `"TOP_RIGHT"`, `"BOTTOM_LEFT"`,
|
|
1616
|
+
`"BOTTOM_RIGHT"`. Defaults to `None` (bottom-right).
|
|
1617
|
+
page_number_font_size (float): Font size in points for stamped page numbers.
|
|
1618
|
+
Defaults to `10`.
|
|
1619
|
+
page_number_offset_horizontal (float): Horizontal inset in pixels from the nearest
|
|
1620
|
+
page edge for stamped page numbers. Defaults to `15`.
|
|
1621
|
+
page_number_offset_vertical (float): Vertical inset in pixels from the nearest page
|
|
1622
|
+
edge for stamped page numbers. Defaults to `15`.
|
|
1552
1623
|
|
|
1553
1624
|
Examples:
|
|
1554
1625
|
Given three documents: `Cover page`, `Main motion form`, and `Notice of Interpreter Request`,
|
|
@@ -1660,7 +1731,14 @@ class ALDocumentBundle(DAList):
|
|
|
1660
1731
|
pdfa=pdfa,
|
|
1661
1732
|
append_matching_suffix=append_matching_suffix,
|
|
1662
1733
|
)
|
|
1734
|
+
bundle_filename = f"{base_name(self.filename)}{append_suffix}.pdf"
|
|
1663
1735
|
pdf.title = self.title
|
|
1736
|
+
pdf.filename = bundle_filename
|
|
1737
|
+
try:
|
|
1738
|
+
pdf.set_attributes(filename=bundle_filename)
|
|
1739
|
+
pdf.set_mimetype("application/pdf")
|
|
1740
|
+
except:
|
|
1741
|
+
pass
|
|
1664
1742
|
else:
|
|
1665
1743
|
pdf = pdf_concatenate(
|
|
1666
1744
|
[document.as_pdf(key=key, refresh=refresh) for document in files],
|
|
@@ -1677,6 +1755,7 @@ class ALDocumentBundle(DAList):
|
|
|
1677
1755
|
font_size=self.page_number_font_size,
|
|
1678
1756
|
offset_horizontal=self.page_number_offset_horizontal,
|
|
1679
1757
|
offset_vertical=self.page_number_offset_vertical,
|
|
1758
|
+
filename=pdf.filename,
|
|
1680
1759
|
)
|
|
1681
1760
|
pdf.title = self.title
|
|
1682
1761
|
setattr(self.cache, safe_key, pdf)
|
|
@@ -2064,13 +2143,21 @@ class ALDocumentBundle(DAList):
|
|
|
2064
2143
|
refresh (bool): Flag to reconsider the 'enabled' attribute, default is True.
|
|
2065
2144
|
pdfa (bool): Flag to return documents in PDF/A format, default is False.
|
|
2066
2145
|
include_zip (bool): Flag to include a zip option, default is True.
|
|
2067
|
-
view_label (str): Label for the 'view' button
|
|
2146
|
+
view_label (str): Label for the 'view' button. If `None`, falls back to
|
|
2147
|
+
`self.view_label` (a translatable template defined in `ql_baseline.yml`,
|
|
2148
|
+
defaulting to `"View"`).
|
|
2068
2149
|
view_icon (str): Icon for the 'view' button, default is "eye".
|
|
2069
|
-
download_label (str): Label for the 'download' button
|
|
2150
|
+
download_label (str): Label for the 'download' button. If `None`, falls back to
|
|
2151
|
+
`self.download_label` (a translatable template defined in `ql_baseline.yml`,
|
|
2152
|
+
defaulting to `"Download"`).
|
|
2070
2153
|
download_icon (str): Icon for the 'download' button, default is "download".
|
|
2071
|
-
send_label (str): Label for the 'send' button.
|
|
2154
|
+
send_label (str): Label for the 'send' button. If `None`, falls back to
|
|
2155
|
+
`self.send_label` (a translatable template defined in `ql_baseline.yml`,
|
|
2156
|
+
defaulting to `"Send"`).
|
|
2072
2157
|
send_icon (str): Fontawesome icon for the 'send' button. Default is "envelope".
|
|
2073
|
-
zip_label (Optional[str]): Label for the zip
|
|
2158
|
+
zip_label (Optional[str]): Label for the zip button. If `None`, falls back to
|
|
2159
|
+
`self.zip_label` (a translatable template defined in `al_document.yml`,
|
|
2160
|
+
defaulting to `"Download all"`).
|
|
2074
2161
|
zip_icon (str): Icon for the zip option, default is "file-archive".
|
|
2075
2162
|
zip_row_label (str, optional): Text to go in the left-most column
|
|
2076
2163
|
of the table's zip row. Will default to the value of `self.title`.
|
|
@@ -2137,7 +2224,7 @@ class ALDocumentBundle(DAList):
|
|
|
2137
2224
|
download_doc.url_for(
|
|
2138
2225
|
attachment=True, display_filename=download_filename
|
|
2139
2226
|
),
|
|
2140
|
-
label=download_label,
|
|
2227
|
+
label=f'{download_label} <span class="visually-hidden">{title}</span>',
|
|
2141
2228
|
icon=download_icon,
|
|
2142
2229
|
color="primary",
|
|
2143
2230
|
size="md",
|
|
@@ -2152,7 +2239,7 @@ class ALDocumentBundle(DAList):
|
|
|
2152
2239
|
result["pdf"].url_for(
|
|
2153
2240
|
attachment=False, display_filename=view_filename
|
|
2154
2241
|
),
|
|
2155
|
-
label=view_label,
|
|
2242
|
+
label=f'{view_label} <span class="visually-hidden">{title}</span>',
|
|
2156
2243
|
icon=view_icon,
|
|
2157
2244
|
color="secondary",
|
|
2158
2245
|
size="md",
|
|
@@ -2296,7 +2383,9 @@ class ALDocumentBundle(DAList):
|
|
|
2296
2383
|
|
|
2297
2384
|
Args:
|
|
2298
2385
|
key (str): A key used to identify which version of the ALDocument to send. Defaults to "final".
|
|
2299
|
-
send_label (str): Label for the 'send' button.
|
|
2386
|
+
send_label (str): Label for the 'send' button. If `None`, falls back to
|
|
2387
|
+
`self.send_label` (a translatable template defined in `ql_baseline.yml`,
|
|
2388
|
+
defaulting to `"Send"`).
|
|
2300
2389
|
send_icon (str): Icon for the 'send' button. Default is "envelope".
|
|
2301
2390
|
|
|
2302
2391
|
Returns:
|
|
@@ -2360,7 +2449,9 @@ class ALDocumentBundle(DAList):
|
|
|
2360
2449
|
email (str): The recipient's email address.
|
|
2361
2450
|
editable (bool, optional): Flag indicating if the bundle is editable. Defaults to False. (deprecated; use preferred_formats instead)
|
|
2362
2451
|
template_name (str, optional): The name of the template to be used. Defaults to an empty string.
|
|
2363
|
-
label (str, optional): The label for the button.
|
|
2452
|
+
label (str, optional): The label for the button. If `None`, falls back to
|
|
2453
|
+
`self.send_label` (a translatable template defined in `ql_baseline.yml`,
|
|
2454
|
+
defaulting to `"Send"`).
|
|
2364
2455
|
icon (str, optional): The Fontawesome icon for the button. Defaults to "envelope".
|
|
2365
2456
|
color (str, optional): The Bootstrap color of the button. Defaults to "primary".
|
|
2366
2457
|
key (str, optional): A key used to identify which version of the ALDocument to send. Defaults to "final".
|
|
@@ -2412,7 +2503,7 @@ class ALDocumentBundle(DAList):
|
|
|
2412
2503
|
key: str = "final",
|
|
2413
2504
|
show_editable_checkbox: bool = True,
|
|
2414
2505
|
template_name: str = "",
|
|
2415
|
-
label: str =
|
|
2506
|
+
label: Optional[str] = None,
|
|
2416
2507
|
icon: str = "envelope",
|
|
2417
2508
|
preferred_formats: Optional[Union[str, List[str]]] = None,
|
|
2418
2509
|
email_legend_class: str = "h4",
|
|
@@ -2441,6 +2532,9 @@ class ALDocumentBundle(DAList):
|
|
|
2441
2532
|
Returns:
|
|
2442
2533
|
str: The generated HTML string for the input box and button.
|
|
2443
2534
|
"""
|
|
2535
|
+
if label is None:
|
|
2536
|
+
label = str(self.send_label) or word("Send")
|
|
2537
|
+
|
|
2444
2538
|
if not self.has_enabled_documents():
|
|
2445
2539
|
return "" # Don't let people email an empty set of documents
|
|
2446
2540
|
|
|
@@ -2528,7 +2622,14 @@ class ALDocumentBundle(DAList):
|
|
|
2528
2622
|
to (Any): The email address, list of email addresses, or list of Individuals with a .email attribute to send to.
|
|
2529
2623
|
key (str, optional): Specifies which version of the document to send. Defaults to "final".
|
|
2530
2624
|
editable (bool, optional): If True, sends the editable documents. Defaults to False. (Deprecated)
|
|
2531
|
-
template (Any): The template variable for the subject and body of the email,
|
|
2625
|
+
template (Any, optional): The template variable for the subject and body of the email,
|
|
2626
|
+
similar to the `template` parameter of docassemble's `send_email` function.
|
|
2627
|
+
If `None`, falls back to `self.send_email_template`, a template defined
|
|
2628
|
+
generically in `al_document.yml`. Its subject defaults to
|
|
2629
|
+
`"Your <document> document from <app> is ready"` and its body to
|
|
2630
|
+
`"Your document is attached. Visit <homepage> to learn more."`
|
|
2631
|
+
Override it by assigning a new template block to `your_bundle.send_email_template`
|
|
2632
|
+
in your interview YAML.
|
|
2532
2633
|
preferred_formats (str): Specifies the format of the files to send. Can be "pdf" or "docx", or a list of these formats. Overrides deprecated `editable` keyword.
|
|
2533
2634
|
**kwargs: Additional parameters to pass to the da `send_email` function.
|
|
2534
2635
|
|
|
@@ -155,15 +155,16 @@ code: |
|
|
|
155
155
|
for signature in signature_fields:
|
|
156
156
|
# Signature fields are strings like "users[0].signature". If the string ends in .signature, remove that and replace with .typed_signature, only at the end of the string
|
|
157
157
|
if signature.endswith("signature"):
|
|
158
|
-
typed_signature = signature[:-9] + "typed_signature"
|
|
159
|
-
define(signature, DAFile(signature, filename="signature.png"))
|
|
158
|
+
typed_signature = value(signature[:-9] + "typed_signature")
|
|
159
|
+
define(signature, DAFile(signature, filename="signature.png", alt_text=typed_signature))
|
|
160
160
|
value(signature).initialize()
|
|
161
161
|
create_signature(
|
|
162
|
-
|
|
162
|
+
typed_signature,
|
|
163
163
|
value(signature).path(),
|
|
164
164
|
signature_prefix=al_typed_signature_prefix,
|
|
165
165
|
font_name=al_typed_signature_font,
|
|
166
166
|
)
|
|
167
|
+
del(typed_signature)
|
|
167
168
|
else:
|
|
168
169
|
log(
|
|
169
170
|
"Signature field "
|
|
@@ -89,7 +89,7 @@ code: |
|
|
|
89
89
|
# Used in the email subject line when email is triggered on download screen.
|
|
90
90
|
# This defaults to the interview title. For example, if the
|
|
91
91
|
# interview title is "Guardianship Helper", the email
|
|
92
|
-
# subject would be "Your Guardianship Helper document from
|
|
92
|
+
# subject would be "Your Guardianship Helper document from docassemble is ready".
|
|
93
93
|
# Customize this if you prefer something like "Your guardianship document is ready"
|
|
94
94
|
x.document_label = str(
|
|
95
95
|
all_variables(special="titles").get(
|
|
@@ -123,12 +123,12 @@ content: |
|
|
|
123
123
|
generic object: ALDocumentBundle
|
|
124
124
|
template: x.zip_label
|
|
125
125
|
content: |
|
|
126
|
-
Download all
|
|
126
|
+
Download all <span class="visually-hidden">${ x.title }</span> documents
|
|
127
127
|
---
|
|
128
128
|
generic object: ALDocumentBundle
|
|
129
129
|
template: x.full_pdf_label
|
|
130
130
|
content: |
|
|
131
|
-
Download as one PDF
|
|
131
|
+
Download <span class="visually-hidden">${ x.title }</span> as one PDF
|
|
132
132
|
---
|
|
133
133
|
id: al exhibit ocr pages bg
|
|
134
134
|
event: al_exhibit_ocr_pages
|
|
@@ -19,13 +19,16 @@ code: |
|
|
|
19
19
|
default screen parts:
|
|
20
20
|
navigation bar html: |
|
|
21
21
|
% if enable_al_language and len(al_interview_languages) > 1:
|
|
22
|
-
${ get_language_list_dropdown(al_interview_languages,current=al_user_language ) }
|
|
22
|
+
${ get_language_list_dropdown(al_interview_languages, current=session_local.attr("al_user_language") or al_user_language ) }
|
|
23
23
|
% endif
|
|
24
24
|
---
|
|
25
25
|
initial: True
|
|
26
26
|
code: |
|
|
27
27
|
if enable_al_language:
|
|
28
|
-
|
|
28
|
+
if session_local.attr("al_user_language"):
|
|
29
|
+
set_language(session_local.attr("al_user_language"))
|
|
30
|
+
else:
|
|
31
|
+
set_language(al_user_language)
|
|
29
32
|
process_action()
|
|
30
33
|
---
|
|
31
34
|
code: |
|
|
@@ -37,6 +40,14 @@ code: |
|
|
|
37
40
|
---
|
|
38
41
|
event: al_change_language
|
|
39
42
|
code: |
|
|
43
|
+
# Set browser-specific language for this interview session
|
|
44
|
+
if "lang" in action_arguments():
|
|
45
|
+
session_local.al_user_language = action_argument("lang")
|
|
46
|
+
set_language(session_local.al_user_language)
|
|
47
|
+
---
|
|
48
|
+
event: al_get_language_list_change_language
|
|
49
|
+
code: |
|
|
50
|
+
# Set "global" language for this interview session instead of user-specific
|
|
40
51
|
if "lang" in action_arguments():
|
|
41
52
|
al_user_language = action_argument("lang")
|
|
42
53
|
set_language(al_user_language)
|
|
@@ -7,13 +7,13 @@ code: |
|
|
|
7
7
|
# Set this to the name of your application
|
|
8
8
|
# Defaults to checking for a possible name from global docassemble config
|
|
9
9
|
al_app_name = get_config(
|
|
10
|
-
"appname", get_config("external hostname", "
|
|
10
|
+
"appname", get_config("external hostname", "docassemble")
|
|
11
11
|
)
|
|
12
12
|
---
|
|
13
13
|
code: |
|
|
14
14
|
# The name of your organization. Defaults to a similar value as `al_app_name`,
|
|
15
15
|
# but is still distinct
|
|
16
|
-
AL_ORGANIZATION_TITLE = get_config("appname", "
|
|
16
|
+
AL_ORGANIZATION_TITLE = get_config("appname", "docassemble")
|
|
17
17
|
---
|
|
18
18
|
code: |
|
|
19
19
|
AL_ORGANIZATION_HOMEPAGE = get_config("app homepage", "https://courtformsonline.org")
|
|
@@ -158,7 +158,7 @@ default screen parts:
|
|
|
158
158
|
% elif showifdef("AL_ORGANIZATION_TITLE"):
|
|
159
159
|
${ AL_ORGANIZATION_TITLE }
|
|
160
160
|
% else:
|
|
161
|
-
${ get_config("
|
|
161
|
+
${ get_config("appname", "docassemble") }
|
|
162
162
|
% endif
|
|
163
163
|
short title: |
|
|
164
164
|
% if PAGE_TITLE:
|
|
@@ -166,7 +166,7 @@ default screen parts:
|
|
|
166
166
|
% elif showifdef("AL_ORGANIZATION_TITLE"):
|
|
167
167
|
${ AL_ORGANIZATION_TITLE }
|
|
168
168
|
% else:
|
|
169
|
-
${ get_config("
|
|
169
|
+
${ get_config("appname", "docassemble") }
|
|
170
170
|
% endif
|
|
171
171
|
title url: |
|
|
172
172
|
% if LOGO_URL:
|
|
@@ -197,7 +197,7 @@ default screen parts:
|
|
|
197
197
|
% elif showifdef("AL_ORGANIZATION_TITLE"):
|
|
198
198
|
<span class="title-row-1">${ AL_ORGANIZATION_TITLE }</span>
|
|
199
199
|
% else:
|
|
200
|
-
<span class="title-row-1">${ get_config("
|
|
200
|
+
<span class="title-row-1">${ get_config("appname", "docassemble") }</span>
|
|
201
201
|
% endif
|
|
202
202
|
% if LOGO_TITLE_ROW_2:
|
|
203
203
|
<span class="title-row-2">${ LOGO_TITLE_ROW_2 }</span>
|
|
@@ -223,7 +223,7 @@ default screen parts:
|
|
|
223
223
|
% elif showifdef("AL_ORGANIZATION_TITLE"):
|
|
224
224
|
<span class="title-row-1">${ AL_ORGANIZATION_TITLE }</span>
|
|
225
225
|
% else:
|
|
226
|
-
<span class="title-row-1">${ get_config("
|
|
226
|
+
<span class="title-row-1">${ get_config("appname", "docassemble") }</span>
|
|
227
227
|
% endif
|
|
228
228
|
% if LOGO_TITLE_ROW_2:
|
|
229
229
|
<span class="title-row-2">${ LOGO_TITLE_ROW_2 }</span>
|
|
@@ -1248,6 +1248,8 @@ question: |
|
|
|
1248
1248
|
signature: x.signature
|
|
1249
1249
|
under: |
|
|
1250
1250
|
${x}
|
|
1251
|
+
validation code: |
|
|
1252
|
+
x.signature.alt_text = f"Signature of {x.name_full()}"
|
|
1251
1253
|
---
|
|
1252
1254
|
id: signature date
|
|
1253
1255
|
question: |
|
|
@@ -2666,8 +2668,10 @@ content: "Download"
|
|
|
2666
2668
|
---
|
|
2667
2669
|
generic object: ALDocumentBundle
|
|
2668
2670
|
template: x.send_label
|
|
2669
|
-
content:
|
|
2671
|
+
content: |
|
|
2672
|
+
Send <span class="visually-hidden">${ x.title } documents</span>
|
|
2670
2673
|
---
|
|
2671
2674
|
generic object: ALDocumentBundle
|
|
2672
2675
|
template: x.send_button_to_label
|
|
2673
|
-
content:
|
|
2676
|
+
content: |
|
|
2677
|
+
Send <span class="visually-hidden">${ x.title } documents</span>
|
docassemble_assemblyline-4.6.0/docassemble/AssemblyLine/data/templates/sample_word_template.docx
ADDED
|
Binary file
|
|
@@ -173,7 +173,7 @@ def get_language_list(
|
|
|
173
173
|
current="",
|
|
174
174
|
lang_codes: Optional[List[str]] = None,
|
|
175
175
|
languages_path: Optional[str] = None,
|
|
176
|
-
event_name="
|
|
176
|
+
event_name="al_get_language_list_change_language",
|
|
177
177
|
) -> str:
|
|
178
178
|
"""
|
|
179
179
|
Given a list of language codes, returns
|
|
@@ -310,8 +310,8 @@ def get_interview_metadata(
|
|
|
310
310
|
{"filename": filename, "tags": metadata_key_name, "session_id": session_id},
|
|
311
311
|
).fetchone()
|
|
312
312
|
|
|
313
|
-
|
|
314
|
-
|
|
313
|
+
if row:
|
|
314
|
+
return row[0] # row is a RowMapping/tuple; data is column 0
|
|
315
315
|
return {}
|
|
316
316
|
|
|
317
317
|
|
|
@@ -447,6 +447,7 @@ def get_saved_interview_list(
|
|
|
447
447
|
log("Asked to get interview list for user that is not logged in")
|
|
448
448
|
return []
|
|
449
449
|
|
|
450
|
+
sessions = []
|
|
450
451
|
with db.connect() as con:
|
|
451
452
|
rs = con.execute(
|
|
452
453
|
get_sessions_query,
|
|
@@ -463,9 +464,8 @@ def get_saved_interview_list(
|
|
|
463
464
|
), # We need to pass a value to the query, but it's treated as a flag
|
|
464
465
|
},
|
|
465
466
|
)
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
sessions.append(dict(session._mapping))
|
|
467
|
+
for session in rs:
|
|
468
|
+
sessions.append(dict(session._mapping))
|
|
469
469
|
|
|
470
470
|
return sessions
|
|
471
471
|
|
|
@@ -665,12 +665,12 @@ def find_matching_sessions(
|
|
|
665
665
|
for column, val_tuple in metadata_filters.items():
|
|
666
666
|
parameters[f"{column}_filter"] = val_tuple[0]
|
|
667
667
|
|
|
668
|
+
sessions = []
|
|
668
669
|
with db.connect() as con:
|
|
669
670
|
rs = con.execute(get_sessions_query, parameters)
|
|
670
671
|
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
sessions.append(dict(session._mapping))
|
|
672
|
+
for session in rs:
|
|
673
|
+
sessions.append(dict(session._mapping))
|
|
674
674
|
|
|
675
675
|
return sessions
|
|
676
676
|
|
|
@@ -35,6 +35,75 @@ class test_dont_assume_pdf(unittest.TestCase):
|
|
|
35
35
|
pass
|
|
36
36
|
|
|
37
37
|
|
|
38
|
+
class FakePdf(DAFile):
|
|
39
|
+
def __init__(self, filename="file.pdf", title="child"):
|
|
40
|
+
self.instanceName = "fake_pdf"
|
|
41
|
+
self.has_nonrandom_instance_name = True
|
|
42
|
+
self.filename = filename
|
|
43
|
+
self.title = title
|
|
44
|
+
self.attribute_filenames = []
|
|
45
|
+
self.mimetype = None
|
|
46
|
+
|
|
47
|
+
def set_attributes(self, **kwargs):
|
|
48
|
+
if "filename" in kwargs:
|
|
49
|
+
self.attribute_filenames.append(kwargs["filename"])
|
|
50
|
+
|
|
51
|
+
def set_mimetype(self, mimetype):
|
|
52
|
+
self.mimetype = mimetype
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class FakeSingleDoc:
|
|
56
|
+
def __init__(self, pdf):
|
|
57
|
+
self._pdf = pdf
|
|
58
|
+
|
|
59
|
+
def is_enabled(self, refresh=True):
|
|
60
|
+
return True
|
|
61
|
+
|
|
62
|
+
def as_pdf(self, **kwargs):
|
|
63
|
+
return self._pdf
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class TestSingleDocumentBundleFilename(unittest.TestCase):
|
|
67
|
+
def test_bundle_as_pdf_renames_single_document_to_bundle_filename(self):
|
|
68
|
+
child_pdf = FakePdf()
|
|
69
|
+
bundle = ALDocumentBundle(
|
|
70
|
+
"bundle",
|
|
71
|
+
elements=[FakeSingleDoc(child_pdf)],
|
|
72
|
+
title="Bundle title",
|
|
73
|
+
filename="bundle-output.pdf",
|
|
74
|
+
enabled=True,
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
result = bundle.as_pdf()
|
|
78
|
+
|
|
79
|
+
self.assertIs(result, child_pdf)
|
|
80
|
+
self.assertEqual(result.title, "Bundle title")
|
|
81
|
+
self.assertEqual(result.filename, "bundle-output.pdf")
|
|
82
|
+
self.assertEqual(result.attribute_filenames, ["bundle-output.pdf"])
|
|
83
|
+
self.assertEqual(result.mimetype, "application/pdf")
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class TestSingleDocumentFilename(unittest.TestCase):
|
|
87
|
+
def test_document_as_pdf_renames_plain_dafile_to_document_filename(self):
|
|
88
|
+
child_pdf = FakePdf()
|
|
89
|
+
doc = ALDocument(
|
|
90
|
+
"doc",
|
|
91
|
+
title="Document title",
|
|
92
|
+
filename="document-output.pdf",
|
|
93
|
+
enabled=True,
|
|
94
|
+
has_addendum=False,
|
|
95
|
+
)
|
|
96
|
+
doc["final"] = child_pdf
|
|
97
|
+
|
|
98
|
+
result = doc.as_pdf(refresh=False)
|
|
99
|
+
|
|
100
|
+
self.assertIs(result, child_pdf)
|
|
101
|
+
self.assertEqual(result.title, "Document title")
|
|
102
|
+
self.assertEqual(result.filename, "document-output.pdf")
|
|
103
|
+
self.assertEqual(result.attribute_filenames, ["document-output.pdf"])
|
|
104
|
+
self.assertEqual(result.mimetype, "application/pdf")
|
|
105
|
+
|
|
106
|
+
|
|
38
107
|
class test_aladdendum(unittest.TestCase):
|
|
39
108
|
def test_safe_value(self):
|
|
40
109
|
text_testcase1 = """Charged by my father with a very delicate mission, I repaired, towards the end of May, 1788, to the château of Ionis, situated a dozen leagues distant, in the lands lying between Angers and Saumur. I was twenty-two, and already practising the profession of lawyer, for which I experienced but slight inclination, although neither the study of business nor of argument had presented serious difficulties to me. Taking my youth into consideration, I was not esteemed without talent, and the standing of my father, a lawyer renowned in the locality, assured me a brilliant patronage in the future, in return for any paltry efforts I might make to be worthy of replacing him. But I would have preferred literature, a more dreamy life, a more independent and more individual use of my faculties, a responsibility less submissive to the passions and interests of others. As my family was well off, and I an only son, greatly spoiled and petted, I might have chosen my own career, but I would have thus afflicted my father, who took pride in his ability to direct me 4in the road which he had cleared in advance, and I loved him too tenderly to permit my instinct to outweigh his wishes.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Makes sure that loading each module file works.
|
|
2
|
+
# Includes all imports not covered by other test files.
|
|
3
|
+
|
|
4
|
+
from .al_courts import *
|
|
5
|
+
from .custom_jinja_filters import *
|
|
6
|
+
from .language import *
|
|
7
|
+
from .sign import *
|
|
8
|
+
|
|
9
|
+
try:
|
|
10
|
+
from .sessions import *
|
|
11
|
+
except SystemExit as ex:
|
|
12
|
+
print(f"Ignoring SystemExit error (expected from config.py: {ex})")
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: docassemble.AssemblyLine
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.6.0
|
|
4
4
|
Summary: Quickly go from a paper court form to a runnable, guided, step-by-step web application powered by Docassemble. Swap out branding and pre-built questions to meet your needs.
|
|
5
|
-
Home-page: https://courtformsonline.org
|
|
6
|
-
Author: Suffolk Legal Innovation and Technology Lab
|
|
7
5
|
Author-email: Suffolk Legal Innovation and Technology Lab <litlab@suffolk.edu>
|
|
8
6
|
License-Expression: MIT
|
|
9
7
|
Project-URL: Homepage, https://courtformsonline.org
|
|
@@ -11,8 +9,6 @@ Description-Content-Type: text/markdown
|
|
|
11
9
|
License-File: LICENSE
|
|
12
10
|
Requires-Dist: docassemble.ALToolbox>=0.16.0
|
|
13
11
|
Requires-Dist: docassemble.GitHubFeedbackForm>=0.4.1.1
|
|
14
|
-
Dynamic: author
|
|
15
|
-
Dynamic: home-page
|
|
16
12
|
Dynamic: license-file
|
|
17
13
|
|
|
18
14
|
# Suffolk LIT Lab Document Assembly Line
|
|
@@ -2,12 +2,9 @@ LICENSE
|
|
|
2
2
|
MANIFEST.in
|
|
3
3
|
README.md
|
|
4
4
|
pyproject.toml
|
|
5
|
-
setup.cfg
|
|
6
|
-
setup.py
|
|
7
5
|
docassemble.AssemblyLine.egg-info/PKG-INFO
|
|
8
6
|
docassemble.AssemblyLine.egg-info/SOURCES.txt
|
|
9
7
|
docassemble.AssemblyLine.egg-info/dependency_links.txt
|
|
10
|
-
docassemble.AssemblyLine.egg-info/not-zip-safe
|
|
11
8
|
docassemble.AssemblyLine.egg-info/requires.txt
|
|
12
9
|
docassemble.AssemblyLine.egg-info/top_level.txt
|
|
13
10
|
docassemble/AssemblyLine/__init__.py
|
|
@@ -17,11 +14,11 @@ docassemble/AssemblyLine/al_general.py
|
|
|
17
14
|
docassemble/AssemblyLine/custom_jinja_filters.py
|
|
18
15
|
docassemble/AssemblyLine/language.py
|
|
19
16
|
docassemble/AssemblyLine/py.typed
|
|
20
|
-
docassemble/AssemblyLine/requirements.txt
|
|
21
17
|
docassemble/AssemblyLine/sessions.py
|
|
22
18
|
docassemble/AssemblyLine/sign.py
|
|
23
19
|
docassemble/AssemblyLine/test_al_document.py
|
|
24
20
|
docassemble/AssemblyLine/test_al_general.py
|
|
21
|
+
docassemble/AssemblyLine/test_all_imports.py
|
|
25
22
|
docassemble/AssemblyLine/test_language.py
|
|
26
23
|
docassemble/AssemblyLine/data/questions/al_code.yml
|
|
27
24
|
docassemble/AssemblyLine/data/questions/al_document.yml
|
|
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
|
|
|
6
6
|
|
|
7
7
|
[project]
|
|
8
8
|
name = "docassemble.AssemblyLine"
|
|
9
|
-
version = "4.
|
|
9
|
+
version = "4.6.0"
|
|
10
10
|
description = "Quickly go from a paper court form to a runnable, guided, step-by-step web application powered by Docassemble. Swap out branding and pre-built questions to meet your needs."
|
|
11
11
|
readme = "README.md"
|
|
12
12
|
authors = [
|
|
@@ -62,3 +62,17 @@ ignore_missing_imports = true
|
|
|
62
62
|
[[tool.mypy.overrides]]
|
|
63
63
|
module = "backports.*"
|
|
64
64
|
ignore_missing_imports = true
|
|
65
|
+
|
|
66
|
+
[dependency-groups]
|
|
67
|
+
dev = [
|
|
68
|
+
"docassemble.base>=1.7",
|
|
69
|
+
"docassemble.webapp>=1.7",
|
|
70
|
+
"pytest>=7.0",
|
|
71
|
+
"mypy",
|
|
72
|
+
"pandas-stubs",
|
|
73
|
+
"sqlalchemy[mypy]>=1.3.0",
|
|
74
|
+
"types-PyYAML",
|
|
75
|
+
"types-requests",
|
|
76
|
+
"types-psycopg2",
|
|
77
|
+
]
|
|
78
|
+
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
include README.md
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '4.5.0'
|
docassemble_assemblyline-4.5.0/docassemble/AssemblyLine/data/templates/sample_word_template.docx
DELETED
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import sys
|
|
3
|
-
from setuptools import setup, find_namespace_packages
|
|
4
|
-
from fnmatch import fnmatchcase
|
|
5
|
-
from distutils.util import convert_path
|
|
6
|
-
|
|
7
|
-
standard_exclude = ('*.pyc', '*~', '.*', '*.bak', '*.swp*')
|
|
8
|
-
standard_exclude_directories = ('.*', 'CVS', '_darcs', './build', './dist', 'EGG-INFO', '*.egg-info')
|
|
9
|
-
|
|
10
|
-
def find_package_data(where='.', package='', exclude=standard_exclude, exclude_directories=standard_exclude_directories):
|
|
11
|
-
out = {}
|
|
12
|
-
stack = [(convert_path(where), '', package)]
|
|
13
|
-
while stack:
|
|
14
|
-
where, prefix, package = stack.pop(0)
|
|
15
|
-
for name in os.listdir(where):
|
|
16
|
-
fn = os.path.join(where, name)
|
|
17
|
-
if os.path.isdir(fn):
|
|
18
|
-
bad_name = False
|
|
19
|
-
for pattern in exclude_directories:
|
|
20
|
-
if (fnmatchcase(name, pattern)
|
|
21
|
-
or fn.lower() == pattern.lower()):
|
|
22
|
-
bad_name = True
|
|
23
|
-
break
|
|
24
|
-
if bad_name:
|
|
25
|
-
continue
|
|
26
|
-
if os.path.isfile(os.path.join(fn, '__init__.py')):
|
|
27
|
-
if not package:
|
|
28
|
-
new_package = name
|
|
29
|
-
else:
|
|
30
|
-
new_package = package + '.' + name
|
|
31
|
-
stack.append((fn, '', new_package))
|
|
32
|
-
else:
|
|
33
|
-
stack.append((fn, prefix + name + '/', package))
|
|
34
|
-
else:
|
|
35
|
-
bad_name = False
|
|
36
|
-
for pattern in exclude:
|
|
37
|
-
if (fnmatchcase(name, pattern)
|
|
38
|
-
or fn.lower() == pattern.lower()):
|
|
39
|
-
bad_name = True
|
|
40
|
-
break
|
|
41
|
-
if bad_name:
|
|
42
|
-
continue
|
|
43
|
-
out.setdefault(package, []).append(prefix+name)
|
|
44
|
-
return out
|
|
45
|
-
|
|
46
|
-
setup(name='docassemble.AssemblyLine',
|
|
47
|
-
version='4.5.0',
|
|
48
|
-
description=(''),
|
|
49
|
-
long_description='# Suffolk LIT Lab Document Assembly Line\r\n\r\n[](https://badge.fury.io/py/docassemble-AssemblyLine)\r\n\r\n<img src="https://user-images.githubusercontent.com/7645641/142245862-c2eb02ab-3090-4e97-9653-bb700bf4c54d.png" alt="drawing" width="300" alt="work together" style="align: center;"/>\r\n\r\nThe Assembly Line Project is a collection of volunteers, students, and institutions who joined together\r\nduring the COVID-19 pandemic to help increase access to the court system. Our vision is mobile-friendly,\r\neasy to use **guided** online forms that help empower litigants to access the court remotely.\r\n\r\nOur signature project is [CourtFormsOnline.org](https://courtformsonline.org).\r\n\r\nWe designed a step-by-step, assembly line style process for automating court forms on top of Docassemble\r\nand built several tools along the way that **you** can use in your home jurisdiction.\r\n\r\nThis package contains **runtime code** and **pre-written questions** to support authoring robust, \r\nconsistent, and attractive Docassemble interviews that help complete court forms.\r\n\r\nRead more on our [documentation page](https://suffolklitlab.org/docassemble-AssemblyLine-documentation/).\r\n\r\n\r\n# Related repositories\r\n\r\n* https://github.com/SuffolkLitLab/docassemble-ALWeaver\r\n* https://github.com/SuffolkLitLab/docassemble-ALMassachusetts\r\n* https://github.com/SuffolkLitLab/docassemble-MassAccess\r\n* https://github.com/SuffolkLitLab/docassemble-ALThemeTemplate\r\n* https://github.com/SuffolkLitLab/EfileProxyServer\r\n\r\n# Documentation\r\n\r\nhttps://suffolklitlab.org/docassemble-AssemblyLine-documentation/\r\n\r\n# Installation\r\n\r\n## Menu-driven installation\r\n\r\nThe recommended installation method is with the [guided installation script](https://suffolklitlab.org/docassemble-AssemblyLine-documentation/docs/installation).\r\n\r\n## Manual installation\r\n\r\nNormally you do not need to manually install the Assembly Line. Use the [installation script](https://suffolklitlab.org/docassemble-AssemblyLine-documentation/docs/installation)\r\nif you can. The instructions below are for your optional reference.\r\n\r\nThis package depends on the following configuration changes on your Docassemble server:\r\n\r\n* Ensure that [font-awesome](https://docassemble.org/docs/config.html#default%20icons) is enabled (this may be on by default:\r\n```yaml\r\ndefault icons: font awesome\r\n```\r\n* Add a [Google API key](https://docassemble.org/docs/config.html#google) that has access to:\r\n * Google Places API\r\n * Google Geocoding API\r\n* Add a [VoiceRSS API key](https://docassemble.org/docs/config.html#voicerss)\r\n* Add a [Twilio API key](https://docassemble.org/docs/config.html#twilio) for SMS support\r\n* Add an email account: [Mailgun](https://docassemble.org/docs/config.html#mailgun%20api) or [SendGrid](https://docassemble.org/docs/config.html#sendgrid%20api) recommended for email support\r\n* To show package update time and to enable the feedback form, add a GitHub Private Access token to your config.yml file, like this:\r\n```yaml\r\n# Needs access to create new issues on repositories\r\ngithub issues:\r\n username: "suffolklitlab-issues"\r\n token: "12345"\r\n# Does not need any special access to public repositories \r\ngithub readonly:\r\n username: "suffolklitlab-issues"\r\n password: "45678"\r\n type: "basic"\r\n```\r\n* If you are also using the [Assembly Line Weaver](https://github.com/SuffolkLITLab/docassemble-assemblylinewizard), you may want to set up a [Docassemble API key](https://docassemble.org/docs/api.html#manage_api) in your config.yml file to allow you to install packages automatically, like this:\r\n```yaml\r\ninstall packages api key: 12345\r\n```\r\n\r\n# Migration\r\n\r\nSee [discussion here](https://github.com/SuffolkLITLab/docassemble-AssemblyLine/issues/69)\r\n\r\n\r\n# ALDocument class\r\n\r\n## Purpose\r\n\r\nThe ALDocument class is a small utility library that makes it simpler to use the following features in an interview:\r\n\r\n* Conditional assembly of multiple, optional documents that are triggered in different ways in your interview\r\n* An addendum for PDF files that makes it simple to deal with overflow text\r\n* A customizable download screen that lists the documents in a neat table\r\n* A customizable "send" button that allows the user to email the final forms to a location of their choice\r\n\r\nHere is a small snippet that you can copy and modify that shows how to use the most important features of the ALDocument class.\r\n\r\n```\r\n---\r\nobjects:\r\n - CRA_Motion_to_Dismiss_attachment: ALDocument.using(filename="CRA_Motion_to_Dismiss", title="Motion to Dismiss CRA", enabled=True, has_addendum=True, default_overflow_message="[See addendum]") \r\n---\r\nobjects:\r\n - al_user_bundle: ALDocumentBundle.using(elements=[CRA_Motion_to_Dismiss_attachment], title="Forms to download and deliver to court", filename="motion_to_dismiss_CRA.pdf")\r\n - al_court_bundle: ALDocumentBundle.using(elements=[CRA_Motion_to_Dismiss_attachment], title="Forms to download and deliver to court", filename="motion_to_dismiss_CRA.pdf")\r\n---\r\ngeneric object: ALDocument\r\nattachment:\r\n variable name: x.addendum\r\n docx template file: docx_addendum.docx\r\n---\r\ncode: |\r\n CRA_Motion_to_Dismiss_attachment.overflow_fields[\'reasons_for_request\'].overflow_trigger = 640\r\n CRA_Motion_to_Dismiss_attachment.overflow_fields[\'reasons_for_request\'].label = "Reasons for request"\r\n CRA_Motion_to_Dismiss_attachment.overflow_fields.gathered = True\r\n \r\n---\r\nattachment:\r\n variable name: CRA_Motion_to_Dismiss_attachment[i]\r\n name: CRA Motion to Dismiss\r\n filename: CRA_Motion_to_Dismiss\r\n skip undefined: True\r\n pdf template file: CRA_Motion_to_Dismiss.pdf\r\n fields: \r\n - "court_county": ${ trial_court.address.county }\r\n - "docket_number": ${ docket_number }\r\n - "user_signature": ${ users[0].signature_if_final(i) }\r\n - "signature_date": ${ signature_date }\r\n```\r\n\r\nIt is very common to have a *contingent* document in ALDocument. If your document is contingent, remove the `enabled=True` from the object declaration, and use\r\nsome other method to "turn on" the attachment.\r\n\r\nE.g.,\r\n\r\n```\r\ncode: |\r\n CRA_Motion_to_Dismiss_attachment.enabled = condition1 and condition2\r\n```\r\n\r\n# Changelog\r\n\r\nSee [CHANGELOG.MD](https://github.com/SuffolkLITLab/docassemble-AssemblyLine/blob/main/CHANGELOG.md)\r\n',
|
|
50
|
-
long_description_content_type='text/markdown',
|
|
51
|
-
author='Suffolk Legal Innovation and Technology Lab',
|
|
52
|
-
author_email='qsteenhuis@suffolk.edu',
|
|
53
|
-
license='The MIT License (MIT)',
|
|
54
|
-
url='https://courtformsonline.org',
|
|
55
|
-
packages=find_namespace_packages(),
|
|
56
|
-
install_requires=['docassemble.ALToolbox>=0.16.0', 'docassemble.GithubFeedbackForm>=0.4.1.1'],
|
|
57
|
-
zip_safe=False,
|
|
58
|
-
package_data=find_package_data(where='docassemble/AssemblyLine/', package='docassemble.AssemblyLine'),
|
|
59
|
-
)
|
|
60
|
-
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/py.typed
RENAMED
|
File without changes
|
{docassemble_assemblyline-4.5.0 → docassemble_assemblyline-4.6.0}/docassemble/AssemblyLine/sign.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|