docassemble.AssemblyLine 2.28.0__tar.gz → 3.0.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-2.28.0/docassemble.AssemblyLine.egg-info → docassemble_assemblyline-3.0.0}/PKG-INFO +1 -1
- docassemble_assemblyline-3.0.0/docassemble/AssemblyLine/__init__.py +1 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/al_courts.py +15 -3
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/al_document.py +22 -11
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/al_general.py +227 -39
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_settings.yml +4 -1
- docassemble_assemblyline-3.0.0/docassemble/AssemblyLine/data/questions/demo_search_sessions.yml +67 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/ql_baseline.yml +215 -150
- docassemble_assemblyline-3.0.0/docassemble/AssemblyLine/data/questions/test_familiar_disambiguation.yml +13 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/sessions.py +193 -38
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0/docassemble.AssemblyLine.egg-info}/PKG-INFO +1 -1
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble.AssemblyLine.egg-info/SOURCES.txt +2 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/setup.py +1 -1
- docassemble_assemblyline-2.28.0/docassemble/AssemblyLine/__init__.py +0 -1
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/LICENSE +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/MANIFEST.in +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/README.md +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_code.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_document.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_language.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_package.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_package_unstyled.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_question_test.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_reminders.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_saved_sessions.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_saved_sessions_store.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_terms_of_use.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_visual.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/assembly_line.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/assembly_line_unstyled.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/feedback.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/interview_list.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/ql_catchall.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/reserved_words.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/test_al_table_document.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/test_aladdendum.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/test_alcourts.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/test_aldocument.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/test_alexhibit.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/test_alexhibit_maxsize.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/test_bundle_parity.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/test_question_library.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/README.md +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/es-words.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/languages.yml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/test_aldocument.feature +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_docx_1.docx +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_jpg_1.jpg +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_pdf_1.pdf +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_png_1.png +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/test_question_library.feature +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/translation_es.xlsx +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/translation_ht.xlsx +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/translation_pt.xlsx +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/README.md +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/al_audio.css +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/al_audio.js +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/aldocument.css +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/aldocument.js +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/interview_list.css +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/limit_upload_size.js +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/lt1-pullout-10-getting-organized.pdf +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/ma_logo.png +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/placeholder.png +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/seal.jpg +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/styles.css +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/templates/README.md +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/templates/al_basic_addendum.docx +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/templates/exhibit_cover_sheet.docx +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/templates/exhibit_table_of_contents.docx +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/templates/general_cover_sheet.docx +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/templates/sample_word_template.docx +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/templates/test_aldocument_docx_1.docx +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/templates/test_aldocument_pdf_1.pdf +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/language.py +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/project_maintenance.py +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/py.typed +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/requirements.txt +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/test_al_document.py +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/test_al_general.py +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/test_language.py +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/__init__.py +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble.AssemblyLine.egg-info/dependency_links.txt +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble.AssemblyLine.egg-info/namespace_packages.txt +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble.AssemblyLine.egg-info/not-zip-safe +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble.AssemblyLine.egg-info/requires.txt +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble.AssemblyLine.egg-info/top_level.txt +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/pyproject.toml +0 -0
- {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/setup.cfg +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '3.0.0'
|
|
@@ -3,7 +3,7 @@ Package for a very simple / MVP list of courts that is mostly signature compatib
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
import os
|
|
6
|
-
from typing import Any, Dict, List, Optional, Union, Set
|
|
6
|
+
from typing import Any, Callable, Dict, List, Mapping, Optional, Union, Set
|
|
7
7
|
import pandas as pd
|
|
8
8
|
import docassemble.base.functions
|
|
9
9
|
from docassemble.base.util import (
|
|
@@ -205,6 +205,7 @@ class ALCourtLoader(DAObject):
|
|
|
205
205
|
|
|
206
206
|
Attributes:
|
|
207
207
|
filename (str): Path to the file containing court information.
|
|
208
|
+
converters (Dict[str, Callable]): A dictionary of functions to apply to columns in the dataframe.
|
|
208
209
|
"""
|
|
209
210
|
|
|
210
211
|
def init(self, *pargs, **kwargs):
|
|
@@ -413,6 +414,8 @@ class ALCourtLoader(DAObject):
|
|
|
413
414
|
|
|
414
415
|
The method determines the file type (.csv, .xlsx, or .json) based on its extension and reads it accordingly.
|
|
415
416
|
|
|
417
|
+
If the "callable" attribute is defined on the instance, it will be used to convert the data in the dataframe.
|
|
418
|
+
|
|
416
419
|
Returns:
|
|
417
420
|
pd.DataFrame: A dataframe containing the list of courts.
|
|
418
421
|
|
|
@@ -429,11 +432,20 @@ class ALCourtLoader(DAObject):
|
|
|
429
432
|
else:
|
|
430
433
|
load_path = str(self.filename)
|
|
431
434
|
|
|
435
|
+
def convert_zip(z: Any) -> str:
|
|
436
|
+
return str(z).zfill(5)
|
|
437
|
+
|
|
438
|
+
merged_converters: Dict[str, Callable[[object], object]] = {
|
|
439
|
+
"address_zip": convert_zip
|
|
440
|
+
}
|
|
441
|
+
if hasattr(self, "converters") and self.converters:
|
|
442
|
+
assert isinstance(self.converters, dict)
|
|
443
|
+
merged_converters.update(self.converters)
|
|
432
444
|
to_load = path_and_mimetype(load_path)[0]
|
|
433
445
|
if self.filename.lower().endswith(".xlsx"):
|
|
434
|
-
df = pd.read_excel(to_load)
|
|
446
|
+
df = pd.read_excel(to_load, converters=merged_converters) # type: ignore
|
|
435
447
|
elif self.filename.lower().endswith(".csv"):
|
|
436
|
-
df = pd.read_csv(to_load)
|
|
448
|
+
df = pd.read_csv(to_load, converters=merged_converters) # type: ignore
|
|
437
449
|
elif self.filename.lower().endswith(".json"):
|
|
438
450
|
# TODO: we may need to normalize a JSON file
|
|
439
451
|
df = pd.read_json(to_load)
|
|
@@ -282,8 +282,10 @@ class ALAddendumField(DAObject):
|
|
|
282
282
|
Any: The portion of the variable exceeding the content safe for display, considered as overflow.
|
|
283
283
|
"""
|
|
284
284
|
# Handle a Boolean overflow first
|
|
285
|
-
if isinstance(self.overflow_trigger, bool)
|
|
286
|
-
|
|
285
|
+
if isinstance(self.overflow_trigger, bool):
|
|
286
|
+
if self.overflow_trigger:
|
|
287
|
+
return self.value()
|
|
288
|
+
return ""
|
|
287
289
|
|
|
288
290
|
# If trigger is not a boolean value, overflow value is the value that starts at the end of the safe value.
|
|
289
291
|
original_value = self.value_if_defined()
|
|
@@ -320,7 +322,11 @@ class ALAddendumField(DAObject):
|
|
|
320
322
|
return value_to_process[overflow_start:].lstrip()
|
|
321
323
|
|
|
322
324
|
# Do not subtract length of overflow message if this is a list of objects instead of a string
|
|
323
|
-
|
|
325
|
+
elif isinstance(safe_text, (list, DAList)):
|
|
326
|
+
return original_value[self.overflow_trigger :]
|
|
327
|
+
raise ValueError(
|
|
328
|
+
f"Attempted ALAddendum overflow for {self.field_name } which is of type {type(safe_text)}. Overflow is for lists and strings only."
|
|
329
|
+
)
|
|
324
330
|
|
|
325
331
|
def max_lines(self, input_width: int = 80) -> int:
|
|
326
332
|
"""
|
|
@@ -524,10 +530,11 @@ class ALAddendumField(DAObject):
|
|
|
524
530
|
return value.rstrip()
|
|
525
531
|
|
|
526
532
|
# If the overflow item is a list or DAList
|
|
527
|
-
if isinstance(value, list
|
|
533
|
+
if isinstance(value, (list, DAList)):
|
|
528
534
|
return value[: self.overflow_trigger]
|
|
529
535
|
else:
|
|
530
536
|
# We can't slice objects that are not lists or strings
|
|
537
|
+
# TODO: is it correct to return the whole object here?
|
|
531
538
|
return value
|
|
532
539
|
|
|
533
540
|
def value_if_defined(self) -> Any:
|
|
@@ -774,13 +781,13 @@ class ALAddendumFieldDict(DAOrderedDict):
|
|
|
774
781
|
self[the_key].field_name = the_key
|
|
775
782
|
return newobj
|
|
776
783
|
|
|
777
|
-
def from_list(self, data) -> None:
|
|
784
|
+
def from_list(self, data: List[Dict]) -> None:
|
|
778
785
|
"""
|
|
779
786
|
Populate the dictionary using a list of field data.
|
|
780
787
|
|
|
781
788
|
Args:
|
|
782
|
-
data (list): List of dictionaries containing
|
|
783
|
-
|
|
789
|
+
data (list): List of dictionaries containing ield data with keys "field_name"
|
|
790
|
+
and "overflow_trigger".
|
|
784
791
|
"""
|
|
785
792
|
for entry in data:
|
|
786
793
|
new_field = self.initializeObject(entry["field_name"], ALAddendumField)
|
|
@@ -788,13 +795,13 @@ class ALAddendumFieldDict(DAOrderedDict):
|
|
|
788
795
|
new_field.overflow_trigger = entry["overflow_trigger"]
|
|
789
796
|
return
|
|
790
797
|
|
|
791
|
-
def defined_fields(self, style="overflow_only") -> list:
|
|
798
|
+
def defined_fields(self, style: str = "overflow_only") -> list:
|
|
792
799
|
"""
|
|
793
800
|
Fetch a list of fields that are defined.
|
|
794
801
|
|
|
795
802
|
Args:
|
|
796
803
|
style (str, optional): If set to "overflow_only", only the fields with overflow values
|
|
797
|
-
|
|
804
|
+
will be returned. Defaults to "overflow_only".
|
|
798
805
|
|
|
799
806
|
Returns:
|
|
800
807
|
list: List of defined fields based on the specified style.
|
|
@@ -2244,8 +2251,12 @@ class ALDocumentBundle(DAList):
|
|
|
2244
2251
|
return send_email(
|
|
2245
2252
|
to=to,
|
|
2246
2253
|
template=template,
|
|
2247
|
-
|
|
2248
|
-
|
|
2254
|
+
# Add both DOCX and PDF versions, but if it's not possible to be a DOCX don't add the PDF
|
|
2255
|
+
# twice
|
|
2256
|
+
attachments=list(
|
|
2257
|
+
dict.fromkeys(
|
|
2258
|
+
self.as_editable_list(key=key) + self.as_pdf_list(key=key)
|
|
2259
|
+
)
|
|
2249
2260
|
),
|
|
2250
2261
|
**kwargs,
|
|
2251
2262
|
)
|