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.
Files changed (131) hide show
  1. {docassemble_assemblyline-4.7.0/docassemble.AssemblyLine.egg-info → docassemble_assemblyline-4.9.0}/PKG-INFO +2 -2
  2. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/__init__.py +1 -0
  3. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/al_courts.py +224 -11
  4. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/al_document.py +1650 -212
  5. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/al_general.py +1636 -253
  6. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/custom_jinja_filters.py +64 -48
  7. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_code.yml +1 -0
  8. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_document.yml +108 -0
  9. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_saved_sessions.yml +10 -7
  10. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_terms_of_use.yml +2 -4
  11. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_visual.yml +43 -21
  12. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/interview_list.yml +13 -8
  13. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/ql_baseline.yml +14 -8
  14. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/questions/test_accessibility_translation.yml +190 -0
  15. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_al_table_document.yml +5 -0
  16. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_aladdendum.yml +5 -0
  17. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_alcourts.yml +5 -0
  18. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_aldocument.yml +5 -0
  19. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_aldocument_background_assembly.yml +17 -5
  20. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_alexhibit.yml +5 -0
  21. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_alexhibit_maxsize.yml +5 -0
  22. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/questions/test_bundle_gathering.yml +133 -0
  23. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_bundle_parity.yml +5 -0
  24. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_catchall.yml +5 -0
  25. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_familiar_disambiguation.yml +5 -0
  26. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_if_final.yml +5 -0
  27. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/questions/test_lazy_bundle_gathering.yml +74 -0
  28. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_preferred_formats.yml +5 -0
  29. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_preferred_name.yml +5 -0
  30. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/questions/test_pronoun_verb_agreement.yml +255 -0
  31. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_question_library.yml +5 -0
  32. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_saving_snapshots.yml +5 -0
  33. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/test_signature.yml +5 -0
  34. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/questions/test_signature_output.yml +106 -0
  35. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/ar-words.yml +66 -9
  36. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/es-words.yml +65 -6
  37. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/fr-words.yml +63 -5
  38. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/ht-words.yml +79 -0
  39. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/km-words.yml +79 -0
  40. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/languages.yml +8 -1
  41. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/ne-words.yml +62 -3
  42. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/pt-words.yml +79 -0
  43. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/test_aldocument.feature +22 -5
  44. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/test_bundle_gathering.feature +18 -0
  45. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/test_pronoun_verb_agreement.feature +44 -0
  46. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/test_question_library.feature +4 -1
  47. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/translation_es.xlsx +0 -0
  48. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/vi-words.yml +79 -0
  49. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/zh-Hans-words.yml +160 -0
  50. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/sources/zh-Hant-words.yml +160 -0
  51. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/al_audio.js +34 -5
  52. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/aldocument.js +23 -4
  53. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/interview_list.css +55 -0
  54. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/static/interview_list.js +64 -0
  55. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/templates/al_interview_list_page.html +178 -0
  56. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/templates/exhibit_table_of_contents.docx +0 -0
  57. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/templates/test_signature_output.docx +0 -0
  58. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/data/templates/test_signature_output.pdf +0 -0
  59. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/interview_list_endpoint.py +367 -0
  60. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/language.py +67 -5
  61. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/sessions.py +565 -81
  62. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/sign.py +75 -24
  63. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_accessibility_translation.py +287 -0
  64. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_al_courts.py +88 -0
  65. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_al_document.py +703 -0
  66. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/test_al_general.py +265 -9
  67. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/test_all_imports.py +1 -0
  68. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_audio.py +37 -0
  69. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_background_assembly.py +277 -0
  70. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_interview_list_copy.py +133 -0
  71. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_interview_list_endpoint.py +586 -0
  72. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_sessions.py +244 -0
  73. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_sessions_dispatch.py +76 -0
  74. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/test_sign.py +178 -0
  75. docassemble_assemblyline-4.9.0/docassemble/AssemblyLine/translation_test.py +14 -0
  76. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0/docassemble.AssemblyLine.egg-info}/PKG-INFO +2 -2
  77. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble.AssemblyLine.egg-info/SOURCES.txt +29 -1
  78. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble.AssemblyLine.egg-info/requires.txt +1 -1
  79. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble.AssemblyLine.egg-info/top_level.txt +1 -0
  80. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/pyproject.toml +12 -4
  81. docassemble_assemblyline-4.7.0/docassemble/AssemblyLine/__init__.py +0 -1
  82. docassemble_assemblyline-4.7.0/docassemble/AssemblyLine/data/sources/translation_es.xlsx +0 -0
  83. docassemble_assemblyline-4.7.0/docassemble/AssemblyLine/data/templates/exhibit_table_of_contents.docx +0 -0
  84. docassemble_assemblyline-4.7.0/docassemble/AssemblyLine/test_al_document.py +0 -245
  85. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/LICENSE +0 -0
  86. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/MANIFEST.in +0 -0
  87. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/README.md +0 -0
  88. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_language.yml +0 -0
  89. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_package.yml +0 -0
  90. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_package_unstyled.yml +0 -0
  91. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_question_test.yml +0 -0
  92. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_reminders.yml +0 -0
  93. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_saved_sessions_store.yml +0 -0
  94. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/al_settings.yml +0 -0
  95. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/assembly_line.yml +0 -0
  96. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/assembly_line_unstyled.yml +0 -0
  97. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/demo_search_sessions.yml +0 -0
  98. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/feedback.yml +0 -0
  99. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/ql_catchall.yml +0 -0
  100. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/ql_namechange.yml +0 -0
  101. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/questions/reserved_words.yml +0 -0
  102. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/README.md +0 -0
  103. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_docx_1.docx +0 -0
  104. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_jpg_1.jpg +0 -0
  105. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_pdf_1.pdf +0 -0
  106. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_png_1.png +0 -0
  107. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/test_snapshots.feature +0 -0
  108. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/translation_ht.xlsx +0 -0
  109. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/sources/translation_pt.xlsx +0 -0
  110. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/README.md +0 -0
  111. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/al_audio.css +0 -0
  112. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/aldocument.css +0 -0
  113. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/limit_upload_size.js +0 -0
  114. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/lt1-pullout-10-getting-organized.pdf +0 -0
  115. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/ma_logo.png +0 -0
  116. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/placeholder.png +0 -0
  117. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/seal.jpg +0 -0
  118. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/static/styles.css +0 -0
  119. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/README.md +0 -0
  120. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/al_basic_addendum.docx +0 -0
  121. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/exhibit_cover_sheet.docx +0 -0
  122. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/general_cover_sheet.docx +0 -0
  123. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/sample_word_template.docx +0 -0
  124. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/test_aldocument_docx_1.docx +0 -0
  125. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/test_aldocument_pdf_1.pdf +0 -0
  126. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/test_catchall.docx +0 -0
  127. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/data/templates/test_if_final.docx +0 -0
  128. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/py.typed +0 -0
  129. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble/AssemblyLine/test_language.py +0 -0
  130. {docassemble_assemblyline-4.7.0 → docassemble_assemblyline-4.9.0}/docassemble.AssemblyLine.egg-info/dependency_links.txt +0 -0
  131. {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.7.0
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.18.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
- """Object representing a court in Massachusetts. We use a function on the CourtList object that filters courts by
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
- """Create a new court object.
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
- """Create a new courtloader object.
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
- if search_string and search_columns:
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["__search_col"] = (
396
- filtered[search_columns].fillna("").agg(" ".join, axis=1)
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()