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.
Files changed (89) hide show
  1. {docassemble_assemblyline-2.28.0/docassemble.AssemblyLine.egg-info → docassemble_assemblyline-3.0.0}/PKG-INFO +1 -1
  2. docassemble_assemblyline-3.0.0/docassemble/AssemblyLine/__init__.py +1 -0
  3. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/al_courts.py +15 -3
  4. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/al_document.py +22 -11
  5. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/al_general.py +227 -39
  6. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_settings.yml +4 -1
  7. docassemble_assemblyline-3.0.0/docassemble/AssemblyLine/data/questions/demo_search_sessions.yml +67 -0
  8. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/ql_baseline.yml +215 -150
  9. docassemble_assemblyline-3.0.0/docassemble/AssemblyLine/data/questions/test_familiar_disambiguation.yml +13 -0
  10. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/sessions.py +193 -38
  11. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0/docassemble.AssemblyLine.egg-info}/PKG-INFO +1 -1
  12. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble.AssemblyLine.egg-info/SOURCES.txt +2 -0
  13. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/setup.py +1 -1
  14. docassemble_assemblyline-2.28.0/docassemble/AssemblyLine/__init__.py +0 -1
  15. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/LICENSE +0 -0
  16. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/MANIFEST.in +0 -0
  17. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/README.md +0 -0
  18. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_code.yml +0 -0
  19. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_document.yml +0 -0
  20. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_language.yml +0 -0
  21. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_package.yml +0 -0
  22. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_package_unstyled.yml +0 -0
  23. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_question_test.yml +0 -0
  24. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_reminders.yml +0 -0
  25. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_saved_sessions.yml +0 -0
  26. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_saved_sessions_store.yml +0 -0
  27. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_terms_of_use.yml +0 -0
  28. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/al_visual.yml +0 -0
  29. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/assembly_line.yml +0 -0
  30. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/assembly_line_unstyled.yml +0 -0
  31. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/feedback.yml +0 -0
  32. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/interview_list.yml +0 -0
  33. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/ql_catchall.yml +0 -0
  34. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/reserved_words.yml +0 -0
  35. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/test_al_table_document.yml +0 -0
  36. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/test_aladdendum.yml +0 -0
  37. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/test_alcourts.yml +0 -0
  38. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/test_aldocument.yml +0 -0
  39. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/test_alexhibit.yml +0 -0
  40. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/test_alexhibit_maxsize.yml +0 -0
  41. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/test_bundle_parity.yml +0 -0
  42. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/questions/test_question_library.yml +0 -0
  43. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/README.md +0 -0
  44. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/es-words.yml +0 -0
  45. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/languages.yml +0 -0
  46. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/test_aldocument.feature +0 -0
  47. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_docx_1.docx +0 -0
  48. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_jpg_1.jpg +0 -0
  49. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_pdf_1.pdf +0 -0
  50. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/test_alexhibit_png_1.png +0 -0
  51. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/test_question_library.feature +0 -0
  52. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/translation_es.xlsx +0 -0
  53. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/translation_ht.xlsx +0 -0
  54. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/sources/translation_pt.xlsx +0 -0
  55. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/README.md +0 -0
  56. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/al_audio.css +0 -0
  57. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/al_audio.js +0 -0
  58. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/aldocument.css +0 -0
  59. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/aldocument.js +0 -0
  60. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/interview_list.css +0 -0
  61. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/limit_upload_size.js +0 -0
  62. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/lt1-pullout-10-getting-organized.pdf +0 -0
  63. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/ma_logo.png +0 -0
  64. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/placeholder.png +0 -0
  65. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/seal.jpg +0 -0
  66. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/static/styles.css +0 -0
  67. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/templates/README.md +0 -0
  68. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/templates/al_basic_addendum.docx +0 -0
  69. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/templates/exhibit_cover_sheet.docx +0 -0
  70. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/templates/exhibit_table_of_contents.docx +0 -0
  71. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/templates/general_cover_sheet.docx +0 -0
  72. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/templates/sample_word_template.docx +0 -0
  73. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/templates/test_aldocument_docx_1.docx +0 -0
  74. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/data/templates/test_aldocument_pdf_1.pdf +0 -0
  75. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/language.py +0 -0
  76. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/project_maintenance.py +0 -0
  77. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/py.typed +0 -0
  78. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/requirements.txt +0 -0
  79. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/test_al_document.py +0 -0
  80. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/test_al_general.py +0 -0
  81. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/AssemblyLine/test_language.py +0 -0
  82. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble/__init__.py +0 -0
  83. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble.AssemblyLine.egg-info/dependency_links.txt +0 -0
  84. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble.AssemblyLine.egg-info/namespace_packages.txt +0 -0
  85. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble.AssemblyLine.egg-info/not-zip-safe +0 -0
  86. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble.AssemblyLine.egg-info/requires.txt +0 -0
  87. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/docassemble.AssemblyLine.egg-info/top_level.txt +0 -0
  88. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/pyproject.toml +0 -0
  89. {docassemble_assemblyline-2.28.0 → docassemble_assemblyline-3.0.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: docassemble.AssemblyLine
3
- Version: 2.28.0
3
+ Version: 3.0.0
4
4
  Home-page: https://courtformsonline.org
5
5
  Author: Suffolk Legal Innovation and Technology Lab
6
6
  Author-email: qsteenhuis@suffolk.edu
@@ -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) and self.overflow_trigger:
286
- return self.value()
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
- return original_value[self.overflow_trigger :]
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) or isinstance(value, DAList):
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 field data with keys "field_name"
783
- and "overflow_trigger".
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
- will be returned. Defaults to "overflow_only".
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
- attachments=set(
2248
- self.as_editable_list(key=key) + self.as_pdf_list(key=key)
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
  )