docassemble.AssemblyLine 4.7.0__tar.gz → 4.9.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.7.0/docassemble.AssemblyLine.egg-info → docassemble_assemblyline-4.9.0}/PKG-INFO +2 -2
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/__init__.py +1 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/al_courts.py +224 -11
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/al_document.py +1650 -212
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/al_general.py +1636 -253
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/custom_jinja_filters.py +64 -48
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_code.yml +1 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_document.yml +108 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_saved_sessions.yml +10 -7
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_terms_of_use.yml +2 -4
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_visual.yml +43 -21
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/interview_list.yml +13 -8
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/ql_baseline.yml +14 -8
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/questions/test_accessibility_translation.yml +190 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_al_table_document.yml +5 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_aladdendum.yml +5 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_alcourts.yml +5 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_aldocument.yml +5 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_aldocument_background_assembly.yml +17 -5
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_alexhibit.yml +5 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_alexhibit_maxsize.yml +5 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/questions/test_bundle_gathering.yml +133 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_bundle_parity.yml +5 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_catchall.yml +5 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_familiar_disambiguation.yml +5 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_if_final.yml +5 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/questions/test_lazy_bundle_gathering.yml +74 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_preferred_formats.yml +5 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_preferred_name.yml +5 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/questions/test_pronoun_verb_agreement.yml +255 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_question_library.yml +5 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_saving_snapshots.yml +5 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_signature.yml +5 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/questions/test_signature_output.yml +106 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/ar-words.yml +66 -9
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/es-words.yml +65 -6
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/fr-words.yml +63 -5
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/ht-words.yml +79 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/km-words.yml +79 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/languages.yml +8 -1
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/ne-words.yml +62 -3
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/pt-words.yml +79 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/test_aldocument.feature +22 -5
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/test_bundle_gathering.feature +18 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/test_pronoun_verb_agreement.feature +44 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/test_question_library.feature +4 -1
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/translation_es.xlsx +0 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/vi-words.yml +79 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/zh-Hans-words.yml +160 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/zh-Hant-words.yml +160 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/al_audio.js +34 -5
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/aldocument.js +23 -4
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/interview_list.css +55 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/static/interview_list.js +64 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/templates/al_interview_list_page.html +178 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/templates/exhibit_table_of_contents.docx +0 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/templates/test_signature_output.docx +0 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/templates/test_signature_output.pdf +0 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/interview_list_endpoint.py +367 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/language.py +67 -5
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/sessions.py +565 -81
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/sign.py +75 -24
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_accessibility_translation.py +287 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_al_courts.py +88 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_al_document.py +703 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/test_al_general.py +265 -9
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/test_all_imports.py +1 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_audio.py +37 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_background_assembly.py +277 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_interview_list_copy.py +133 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_interview_list_endpoint.py +586 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_sessions.py +244 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_sessions_dispatch.py +76 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_sign.py +178 -0
- docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/translation_test.py +14 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0/docassemble.AssemblyLine.egg-info}/PKG-INFO +2 -2
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble.AssemblyLine.egg-info/SOURCES.txt +29 -1
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble.AssemblyLine.egg-info/requires.txt +1 -1
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble.AssemblyLine.egg-info/top_level.txt +1 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/pyproject.toml +12 -4
- docassemble_assemblyline-4.7.0/docassemble/AssemblyLine/__init__.py +0 -1
- docassemble_assemblyline-4.7.0/docassemble/AssemblyLine/data/sources/translation_es.xlsx +0 -0
- docassemble_assemblyline-4.7.0/docassemble/AssemblyLine/data/templates/exhibit_table_of_contents.docx +0 -0
- docassemble_assemblyline-4.7.0/docassemble/AssemblyLine/test_al_document.py +0 -245
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/LICENSE +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/MANIFEST.in +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/README.md +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_language.yml +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_package.yml +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_package_unstyled.yml +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_question_test.yml +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_reminders.yml +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_saved_sessions_store.yml +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_settings.yml +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/assembly_line.yml +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/assembly_line_unstyled.yml +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/demo_search_sessions.yml +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/feedback.yml +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/ql_catchall.yml +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/ql_namechange.yml +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/reserved_words.yml +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/README.md +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_docx_1.docx +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_jpg_1.jpg +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_pdf_1.pdf +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_png_1.png +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/test_snapshots.feature +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/translation_ht.xlsx +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/translation_pt.xlsx +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/README.md +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/al_audio.css +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/aldocument.css +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/limit_upload_size.js +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/lt1-pullout-10-getting-organized.pdf +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/ma_logo.png +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/placeholder.png +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/seal.jpg +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/styles.css +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/README.md +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/al_basic_addendum.docx +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/exhibit_cover_sheet.docx +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/general_cover_sheet.docx +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/sample_word_template.docx +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/test_aldocument_docx_1.docx +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/test_aldocument_pdf_1.pdf +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/test_catchall.docx +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/test_if_final.docx +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/py.typed +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/test_language.py +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble.AssemblyLine.egg-info/dependency_links.txt +0 -0
- {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/setup.cfg +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: docassemble.AssemblyLine
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.9.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
5
|
Author-email: Suffolk Legal Innovation and Technology Lab <litlab@suffolk.edu>
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
Project-URL: Homepage, https://courtformsonline.org
|
|
8
8
|
Description-Content-Type: text/markdown
|
|
9
9
|
License-File: LICENSE
|
|
10
|
-
Requires-Dist: docassemble.ALToolbox>=0.
|
|
10
|
+
Requires-Dist: docassemble.ALToolbox>=0.19.0
|
|
11
11
|
Requires-Dist: docassemble.GitHubFeedbackForm>=0.4.1.1
|
|
12
12
|
Dynamic: license-file
|
|
13
13
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '4.9.0'
|
|
@@ -22,20 +22,51 @@ __all__ = [
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class ALCourt(Court):
|
|
25
|
-
"""
|
|
25
|
+
"""
|
|
26
|
+
Object representing a court in Massachusetts. We use a function on the CourtList object that filters courts by
|
|
26
27
|
address and can use any of those three features of the court to do the filtering.
|
|
27
28
|
|
|
28
29
|
<!-- TODO: it could be interesting to store a jurisdiction on a court. But this is non-trivial. Should it be geo boundaries?
|
|
29
30
|
A list of cities? A list of counties? Instead, we use a function on the CourtList object that filters courts by
|
|
30
31
|
address and can use any of those three features of the court to do the filtering.-->
|
|
32
|
+
|
|
33
|
+
Example:
|
|
34
|
+
In an interview:
|
|
35
|
+
|
|
36
|
+
```yaml
|
|
37
|
+
objects:
|
|
38
|
+
- trial_court: ALCourt
|
|
39
|
+
---
|
|
40
|
+
code: |
|
|
41
|
+
trial_court.name = "Example District Court"
|
|
42
|
+
trial_court.address.address = "123 Main Street"
|
|
43
|
+
trial_court.address.city = "Boston"
|
|
44
|
+
trial_court.address.state = "MA"
|
|
45
|
+
trial_court.address.zip = "02108"
|
|
46
|
+
---
|
|
47
|
+
question: |
|
|
48
|
+
Your court
|
|
49
|
+
subquestion: |
|
|
50
|
+
${ trial_court.short_label_and_address() }
|
|
51
|
+
```
|
|
31
52
|
"""
|
|
32
53
|
|
|
33
54
|
def init(self, *pargs, **kwargs) -> None:
|
|
34
|
-
"""
|
|
55
|
+
"""
|
|
56
|
+
Create a new court object.
|
|
35
57
|
|
|
36
58
|
Args:
|
|
37
59
|
*pargs: Standard DAObject positional arguments.
|
|
38
60
|
**kwargs: Standard DAObject keyword arguments.
|
|
61
|
+
|
|
62
|
+
Example:
|
|
63
|
+
Docassemble calls `init()` automatically during object creation.
|
|
64
|
+
See the class example for the rest of the setup.
|
|
65
|
+
|
|
66
|
+
```yaml
|
|
67
|
+
objects:
|
|
68
|
+
- trial_court: ALCourt
|
|
69
|
+
```
|
|
39
70
|
"""
|
|
40
71
|
super().init(*pargs, **kwargs)
|
|
41
72
|
if "address" not in kwargs:
|
|
@@ -84,6 +115,29 @@ class ALCourt(Court):
|
|
|
84
115
|
|
|
85
116
|
Returns:
|
|
86
117
|
str: string representing the court's name, with city if needed to disambiguate.
|
|
118
|
+
|
|
119
|
+
Example:
|
|
120
|
+
With `trial_court.name = "District Court"` and
|
|
121
|
+
`trial_court.address.city = "Boston"`, the city is added because it is
|
|
122
|
+
not already part of the name:
|
|
123
|
+
|
|
124
|
+
**Input (Mako)**
|
|
125
|
+
|
|
126
|
+
```mako
|
|
127
|
+
${ trial_court.short_label() }
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Input (Jinja2)**
|
|
131
|
+
|
|
132
|
+
```jinja2
|
|
133
|
+
{{ trial_court.short_label() }}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Output**
|
|
137
|
+
|
|
138
|
+
```text
|
|
139
|
+
District Court (Boston)
|
|
140
|
+
```
|
|
87
141
|
"""
|
|
88
142
|
# Avoid forcing the interview to define the court's address
|
|
89
143
|
if hasattr(self, "address") and hasattr(self.address, "city"):
|
|
@@ -100,6 +154,19 @@ class ALCourt(Court):
|
|
|
100
154
|
|
|
101
155
|
Returns:
|
|
102
156
|
str: string representing the court's name and address.
|
|
157
|
+
|
|
158
|
+
Example:
|
|
159
|
+
In question or Markdown attachment text (Mako):
|
|
160
|
+
|
|
161
|
+
```mako
|
|
162
|
+
${ trial_court.short_label_and_address() }
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
In a DOCX template (Jinja2):
|
|
166
|
+
|
|
167
|
+
```jinja2
|
|
168
|
+
{{ trial_court.short_label_and_address() }}
|
|
169
|
+
```
|
|
103
170
|
"""
|
|
104
171
|
return f"**{ self.short_label() }**[BR]{ self.address.on_one_line() }"
|
|
105
172
|
|
|
@@ -111,6 +178,19 @@ class ALCourt(Court):
|
|
|
111
178
|
|
|
112
179
|
Returns:
|
|
113
180
|
str: string representing the court's name and description.
|
|
181
|
+
|
|
182
|
+
Example:
|
|
183
|
+
In question or Markdown attachment text (Mako):
|
|
184
|
+
|
|
185
|
+
```mako
|
|
186
|
+
${ trial_court.short_description() }
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
In a DOCX template (Jinja2):
|
|
190
|
+
|
|
191
|
+
```jinja2
|
|
192
|
+
{{ trial_court.short_description() }}
|
|
193
|
+
```
|
|
114
194
|
"""
|
|
115
195
|
all_info = f"**{ self.short_label() }**"
|
|
116
196
|
if hasattr(self, "address"):
|
|
@@ -129,6 +209,14 @@ class ALCourt(Court):
|
|
|
129
209
|
Args:
|
|
130
210
|
df_row: Pandas Series object.
|
|
131
211
|
ensure_lat_long: bool, whether to use Google Maps to geocode the address if we don't have coordinates.
|
|
212
|
+
|
|
213
|
+
Example:
|
|
214
|
+
Given a pandas DataFrame loaded from your court data:
|
|
215
|
+
|
|
216
|
+
```yaml
|
|
217
|
+
code: |
|
|
218
|
+
trial_court.from_row(court_dataframe.iloc[0])
|
|
219
|
+
```
|
|
132
220
|
"""
|
|
133
221
|
# A few columns we expect to see:
|
|
134
222
|
# name
|
|
@@ -193,12 +281,28 @@ class ALCourt(Court):
|
|
|
193
281
|
Use Google Maps to geocode the court's address and store the result in the location attribute.
|
|
194
282
|
|
|
195
283
|
Deprecated: use geocode() instead.
|
|
284
|
+
|
|
285
|
+
Example:
|
|
286
|
+
In an interview code block:
|
|
287
|
+
|
|
288
|
+
```yaml
|
|
289
|
+
code: |
|
|
290
|
+
trial_court.geolocate()
|
|
291
|
+
```
|
|
196
292
|
"""
|
|
197
293
|
self.geocode()
|
|
198
294
|
|
|
199
295
|
def geocode(self) -> None:
|
|
200
296
|
"""
|
|
201
297
|
Use Google Maps to geocode the court's address and store the result in the location attribute.
|
|
298
|
+
|
|
299
|
+
Example:
|
|
300
|
+
In an interview code block:
|
|
301
|
+
|
|
302
|
+
```yaml
|
|
303
|
+
code: |
|
|
304
|
+
trial_court.geocode()
|
|
305
|
+
```
|
|
202
306
|
"""
|
|
203
307
|
self.address.geocode()
|
|
204
308
|
self.location = self.address.location
|
|
@@ -213,14 +317,41 @@ class ALCourtLoader(DAObject):
|
|
|
213
317
|
Attributes:
|
|
214
318
|
filename (str): Path to the file containing court information.
|
|
215
319
|
converters (Dict[str, Callable]): A dictionary of functions to apply to columns in the dataframe.
|
|
320
|
+
|
|
321
|
+
Example:
|
|
322
|
+
Place your court spreadsheet in the package’s `data/sources` directory:
|
|
323
|
+
|
|
324
|
+
```yaml
|
|
325
|
+
objects:
|
|
326
|
+
- all_courts: ALCourtLoader.using(filename="courts.xlsx")
|
|
327
|
+
---
|
|
328
|
+
question: |
|
|
329
|
+
Which court is handling your case?
|
|
330
|
+
fields:
|
|
331
|
+
- Court: selected_court_index
|
|
332
|
+
code: all_courts.all_courts()
|
|
333
|
+
---
|
|
334
|
+
code: |
|
|
335
|
+
trial_court = all_courts.as_court("trial_court", selected_court_index)
|
|
336
|
+
```
|
|
216
337
|
"""
|
|
217
338
|
|
|
218
339
|
def init(self, *pargs, **kwargs) -> None:
|
|
219
|
-
"""
|
|
340
|
+
"""
|
|
341
|
+
Create a new courtloader object.
|
|
220
342
|
|
|
221
343
|
Args:
|
|
222
344
|
*pargs: Standard DAObject positional arguments.
|
|
223
345
|
**kwargs: Standard DAObject keyword arguments.
|
|
346
|
+
|
|
347
|
+
Example:
|
|
348
|
+
Docassemble calls `init()` automatically during object creation.
|
|
349
|
+
See the class example for the rest of the setup.
|
|
350
|
+
|
|
351
|
+
```yaml
|
|
352
|
+
objects:
|
|
353
|
+
- all_courts: ALCourtLoader.using(filename="courts.xlsx")
|
|
354
|
+
```
|
|
224
355
|
"""
|
|
225
356
|
super().init(*pargs, **kwargs)
|
|
226
357
|
self.package = docassemble.base.functions.this_thread.current_question.package
|
|
@@ -242,6 +373,17 @@ class ALCourtLoader(DAObject):
|
|
|
242
373
|
|
|
243
374
|
Returns:
|
|
244
375
|
List[Tuple[int, str]]: List of tuples where each tuple contains (dataframe_index, display_value). The dataframe_index (int) can be used with as_court() to retrieve the full court object. The display_value (str) is the court's name or other display column value.
|
|
376
|
+
|
|
377
|
+
Example:
|
|
378
|
+
With `all_courts` configured as an ALCourtLoader for your spreadsheet:
|
|
379
|
+
|
|
380
|
+
```yaml
|
|
381
|
+
question: |
|
|
382
|
+
Which court is handling your case?
|
|
383
|
+
fields:
|
|
384
|
+
- Court: selected_court_index
|
|
385
|
+
code: all_courts.all_courts()
|
|
386
|
+
```
|
|
245
387
|
"""
|
|
246
388
|
return self.filter_courts(None)
|
|
247
389
|
|
|
@@ -256,6 +398,14 @@ class ALCourtLoader(DAObject):
|
|
|
256
398
|
Set[str]:.
|
|
257
399
|
- A set containing unique values from the specified column.
|
|
258
400
|
- Returns an empty set if the column does not exist or an error occurs.
|
|
401
|
+
|
|
402
|
+
Example:
|
|
403
|
+
With `all_courts` configured as an ALCourtLoader for your spreadsheet:
|
|
404
|
+
|
|
405
|
+
```yaml
|
|
406
|
+
code: |
|
|
407
|
+
court_departments = all_courts.unique_column_values("department")
|
|
408
|
+
```
|
|
259
409
|
"""
|
|
260
410
|
df = self._load_courts()
|
|
261
411
|
try:
|
|
@@ -273,6 +423,14 @@ class ALCourtLoader(DAObject):
|
|
|
273
423
|
|
|
274
424
|
Returns:
|
|
275
425
|
Set[str]: A list of all unique values in the specified row in the given spreadsheet.
|
|
426
|
+
|
|
427
|
+
Example:
|
|
428
|
+
With `all_courts` configured as an ALCourtLoader for your spreadsheet:
|
|
429
|
+
|
|
430
|
+
```yaml
|
|
431
|
+
code: |
|
|
432
|
+
court_counties = all_courts.county_list()
|
|
433
|
+
```
|
|
276
434
|
"""
|
|
277
435
|
return self.unique_column_values(column_name)
|
|
278
436
|
|
|
@@ -290,6 +448,14 @@ class ALCourtLoader(DAObject):
|
|
|
290
448
|
|
|
291
449
|
Returns:
|
|
292
450
|
bool: True if there is only one court associated with the specified county in the spreadsheet.
|
|
451
|
+
|
|
452
|
+
Example:
|
|
453
|
+
With `all_courts` configured as an ALCourtLoader for your spreadsheet:
|
|
454
|
+
|
|
455
|
+
```yaml
|
|
456
|
+
code: |
|
|
457
|
+
has_one_court_in_county = all_courts.county_has_one_court(users[0].address.county)
|
|
458
|
+
```
|
|
293
459
|
"""
|
|
294
460
|
return (
|
|
295
461
|
len(self.filter_courts(court_types=county_name, column=county_column)) == 1
|
|
@@ -314,6 +480,13 @@ class ALCourtLoader(DAObject):
|
|
|
314
480
|
Returns:
|
|
315
481
|
ALCourt: The first court matching the county name.
|
|
316
482
|
|
|
483
|
+
Example:
|
|
484
|
+
With `all_courts` configured as an ALCourtLoader for your spreadsheet:
|
|
485
|
+
|
|
486
|
+
```yaml
|
|
487
|
+
code: |
|
|
488
|
+
trial_court = all_courts.county_court("trial_court", users[0].address.county)
|
|
489
|
+
```
|
|
317
490
|
"""
|
|
318
491
|
matches = self.filter_courts(court_types=county_name, column=county_column)
|
|
319
492
|
if len(matches) > 0:
|
|
@@ -346,6 +519,17 @@ class ALCourtLoader(DAObject):
|
|
|
346
519
|
|
|
347
520
|
Returns:
|
|
348
521
|
List[Tuple[int, str]]: List of tuples where each tuple contains (dataframe_index, display_value). The dataframe_index (int) can be used with as_court() to retrieve the full court object. The display_value (str) is the court's name or other display column value.
|
|
522
|
+
|
|
523
|
+
Example:
|
|
524
|
+
With `all_courts` configured as an ALCourtLoader for your spreadsheet:
|
|
525
|
+
|
|
526
|
+
```yaml
|
|
527
|
+
question: |
|
|
528
|
+
Which court is handling your case?
|
|
529
|
+
fields:
|
|
530
|
+
- Court: selected_court_index
|
|
531
|
+
code: all_courts.matching_courts_in_county(users[0].address.county)
|
|
532
|
+
```
|
|
349
533
|
"""
|
|
350
534
|
return self.filter_courts(
|
|
351
535
|
court_types=county_name,
|
|
@@ -357,11 +541,12 @@ class ALCourtLoader(DAObject):
|
|
|
357
541
|
|
|
358
542
|
def filter_courts(
|
|
359
543
|
self,
|
|
360
|
-
court_types: Optional[Union[List[str], str]],
|
|
544
|
+
court_types: Optional[Union[List[str], str]] = None,
|
|
361
545
|
column: str = "department",
|
|
362
546
|
display_column: str = "name",
|
|
363
547
|
search_string: Optional[str] = None,
|
|
364
548
|
search_columns: Optional[Union[List[str], str]] = None,
|
|
549
|
+
filters: Optional[Dict[str, Union[List[str], str]]] = None,
|
|
365
550
|
) -> List[Tuple[int, str]]:
|
|
366
551
|
"""
|
|
367
552
|
Return a filtered subset of courts represented as a list of tuples.
|
|
@@ -378,8 +563,28 @@ class ALCourtLoader(DAObject):
|
|
|
378
563
|
search_columns (Optional[Union[List[str], str]], optional): Columns to aggregate and search across with.
|
|
379
564
|
the search_string in a case-insensitive manner. Defaults to None.
|
|
380
565
|
|
|
566
|
+
filters (Optional[Dict[str, Union[List[str], str]]]): Additional exact matches by
|
|
567
|
+
column. Values must be strings or lists of strings. All columns must
|
|
568
|
+
match; a list matches any value in that column. An empty list matches
|
|
569
|
+
no courts. An empty mapping adds no restrictions. Unlike court_types,
|
|
570
|
+
an empty string is an exact match, not an omitted filter.
|
|
571
|
+
|
|
381
572
|
Returns:
|
|
382
573
|
List[Tuple[int, str]]: List of tuples where each tuple contains (dataframe_index, display_value). The dataframe_index (int) can be used with as_court() to retrieve the full court object. The display_value (str) is the court's name or other display column value.
|
|
574
|
+
|
|
575
|
+
Example:
|
|
576
|
+
With `all_courts` configured as an ALCourtLoader for your spreadsheet:
|
|
577
|
+
|
|
578
|
+
```yaml
|
|
579
|
+
question: |
|
|
580
|
+
Which court is handling your case?
|
|
581
|
+
fields:
|
|
582
|
+
- Court: selected_court_index
|
|
583
|
+
code: |
|
|
584
|
+
all_courts.filter_courts(
|
|
585
|
+
filters={"division_abbr": division, "address_county": county}
|
|
586
|
+
)
|
|
587
|
+
```
|
|
383
588
|
"""
|
|
384
589
|
df = self._load_courts()
|
|
385
590
|
if court_types:
|
|
@@ -389,15 +594,15 @@ class ALCourtLoader(DAObject):
|
|
|
389
594
|
filtered = df[df[column].isin(court_types)]
|
|
390
595
|
else:
|
|
391
596
|
filtered = df
|
|
392
|
-
|
|
597
|
+
for filter_column, matches in (filters or {}).items():
|
|
598
|
+
if isinstance(matches, str):
|
|
599
|
+
matches = [matches]
|
|
600
|
+
filtered = filtered[filtered[filter_column].isin(matches)]
|
|
601
|
+
if search_string and search_columns and not filtered.empty:
|
|
393
602
|
if isinstance(search_columns, str):
|
|
394
603
|
search_columns = [search_columns]
|
|
395
|
-
filtered["
|
|
396
|
-
|
|
397
|
-
)
|
|
398
|
-
filtered = filtered[
|
|
399
|
-
filtered["__search_col"].str.contains(search_string, case=False)
|
|
400
|
-
]
|
|
604
|
+
search_values = filtered[search_columns].fillna("").agg(" ".join, axis=1)
|
|
605
|
+
filtered = filtered[search_values.str.contains(search_string, case=False)]
|
|
401
606
|
return list(filtered[display_column].items()) # type: ignore
|
|
402
607
|
|
|
403
608
|
def as_court(
|
|
@@ -413,6 +618,14 @@ class ALCourtLoader(DAObject):
|
|
|
413
618
|
|
|
414
619
|
Returns:
|
|
415
620
|
ALCourt: An ALCourt object initialized with data from the specified index.
|
|
621
|
+
|
|
622
|
+
Example:
|
|
623
|
+
With `all_courts` configured as an ALCourtLoader for your spreadsheet:
|
|
624
|
+
|
|
625
|
+
```yaml
|
|
626
|
+
code: |
|
|
627
|
+
trial_court = all_courts.as_court("trial_court", selected_court_index)
|
|
628
|
+
```
|
|
416
629
|
"""
|
|
417
630
|
court = ALCourt(intrinsicName)
|
|
418
631
|
df = self._load_courts()
|