caselawclient.models.documents.stub
1import os 2from typing import Literal, cast 3 4from ds_caselaw_utils.courts import courts 5from ds_caselaw_utils.types import CourtCode 6from saxonche import PySaxonProcessor 7from typing_extensions import TypedDict 8 9 10class PartyData(TypedDict): 11 role: Literal["Claimant", "Respondent", "Appellant", "Defendant"] 12 name: str 13 14 15class EditorStubData(TypedDict): 16 decision_date: str # day precision 17 transform_datetime: str # second precision 18 court_code: str 19 title: str 20 year: str 21 case_numbers: list[str] # can be none 22 parties: list[PartyData] # (type (claimant|defendant), name) 23 24 25class RendererStubData(EditorStubData): 26 court_url: str # should be populated from utils/courts.cs 27 court_full_name: str # ditto 28 29 30def add_other_stub_fields(editor_data: EditorStubData) -> RendererStubData: 31 court = courts.get_court_by_code(CourtCode(editor_data["court_code"].upper())) 32 return { 33 **editor_data, 34 "court_url": court.identifier_iri, 35 "court_full_name": court.long_name, 36 } 37 38 39def render_stub_xml(editor_data: EditorStubData) -> bytes: 40 render_data = add_other_stub_fields(editor_data) 41 xquery_location = os.path.join(os.path.dirname(os.path.realpath(__file__)), "templates", "judgment.xqy") 42 43 with PySaxonProcessor() as proc: 44 xquery = proc.new_xquery_processor() 45 xquery.set_query_file(file_name=xquery_location) 46 47 xquery.set_parameter("decision_date", proc.make_string_value(render_data["decision_date"])) 48 xquery.set_parameter("transform_datetime", proc.make_string_value(render_data["transform_datetime"])) 49 xquery.set_parameter("court_code", proc.make_string_value(render_data["court_code"])) 50 xquery.set_parameter("title", proc.make_string_value(render_data["title"])) 51 xquery.set_parameter("year", proc.make_string_value(render_data["year"])) 52 xquery.set_parameter("court_url", proc.make_string_value(render_data["court_url"])) 53 xquery.set_parameter("court_full_name", proc.make_string_value(render_data["court_full_name"])) 54 xquery.set_parameter( 55 "case_numbers", proc.make_array([proc.make_string_value(x) for x in render_data["case_numbers"]]) 56 ) 57 58 builder = [] 59 for party in render_data["parties"]: 60 builder.append( 61 proc.make_map({proc.make_string_value(key): proc.make_string_value(value) for key, value in party.items()}) 62 ) 63 64 xquery.set_parameter("parties", proc.make_array(builder)) 65 return cast(bytes, xquery.run_query_to_string().encode("utf-8"))
class
PartyData(typing_extensions.TypedDict):
class
EditorStubData(typing_extensions.TypedDict):
16class EditorStubData(TypedDict): 17 decision_date: str # day precision 18 transform_datetime: str # second precision 19 court_code: str 20 title: str 21 year: str 22 case_numbers: list[str] # can be none 23 parties: list[PartyData] # (type (claimant|defendant), name)
parties: list[PartyData]
26class RendererStubData(EditorStubData): 27 court_url: str # should be populated from utils/courts.cs 28 court_full_name: str # ditto
Inherited Members
40def render_stub_xml(editor_data: EditorStubData) -> bytes: 41 render_data = add_other_stub_fields(editor_data) 42 xquery_location = os.path.join(os.path.dirname(os.path.realpath(__file__)), "templates", "judgment.xqy") 43 44 with PySaxonProcessor() as proc: 45 xquery = proc.new_xquery_processor() 46 xquery.set_query_file(file_name=xquery_location) 47 48 xquery.set_parameter("decision_date", proc.make_string_value(render_data["decision_date"])) 49 xquery.set_parameter("transform_datetime", proc.make_string_value(render_data["transform_datetime"])) 50 xquery.set_parameter("court_code", proc.make_string_value(render_data["court_code"])) 51 xquery.set_parameter("title", proc.make_string_value(render_data["title"])) 52 xquery.set_parameter("year", proc.make_string_value(render_data["year"])) 53 xquery.set_parameter("court_url", proc.make_string_value(render_data["court_url"])) 54 xquery.set_parameter("court_full_name", proc.make_string_value(render_data["court_full_name"])) 55 xquery.set_parameter( 56 "case_numbers", proc.make_array([proc.make_string_value(x) for x in render_data["case_numbers"]]) 57 ) 58 59 builder = [] 60 for party in render_data["parties"]: 61 builder.append( 62 proc.make_map({proc.make_string_value(key): proc.make_string_value(value) for key, value in party.items()}) 63 ) 64 65 xquery.set_parameter("parties", proc.make_array(builder)) 66 return cast(bytes, xquery.run_query_to_string().encode("utf-8"))