caselawclient.identifier_resolution
1import json 2from typing import NamedTuple 3 4from caselawclient.models.identifiers import Identifier 5from caselawclient.models.identifiers.unpacker import IDENTIFIER_NAMESPACE_MAP 6from caselawclient.types import DocumentIdentifierSlug, DocumentIdentifierValue 7from caselawclient.xquery_type_dicts import MarkLogicDocumentURIString 8 9 10class IdentifierResolutions(list["IdentifierResolution"]): 11 """ 12 A list of candidate MarkLogic documents which correspond to a Public UI uri 13 14 MarkLogic returns a list of dictionaries; IdentifierResolution handles a single dictionary 15 which corresponds to a single identifier to MarkLogic document mapping. 16 17 see `xquery/resolve_from_identifier_slug.xqy` and `resolve_from_identifier` in `Client.py` 18 """ 19 20 @staticmethod 21 def from_marklogic_output(table: list[str]) -> "IdentifierResolutions": 22 return IdentifierResolutions(list(IdentifierResolution.from_marklogic_output(row) for row in table)) 23 24 def published(self) -> "IdentifierResolutions": 25 "Filter the list so that only published documents are returned" 26 return IdentifierResolutions(list(x for x in self if x.document_published)) 27 28 29class IdentifierResolution(NamedTuple): 30 """A single response from MarkLogic about a single identifier / document mapping""" 31 32 identifier_uuid: str 33 document_uri: MarkLogicDocumentURIString 34 identifier_slug: DocumentIdentifierSlug 35 document_published: bool 36 identifier_value: DocumentIdentifierValue 37 identifier_namespace: str 38 identifier_type: type[Identifier] 39 40 @staticmethod 41 def from_marklogic_output(raw_row: str) -> "IdentifierResolution": 42 row = json.loads(raw_row) 43 identifier_namespace = row["documents.compiled_url_slugs.identifier_namespace"] 44 return IdentifierResolution( 45 identifier_uuid=row["documents.compiled_url_slugs.identifier_uuid"], 46 document_uri=MarkLogicDocumentURIString(row["documents.compiled_url_slugs.document_uri"]), 47 identifier_slug=DocumentIdentifierSlug(row["documents.compiled_url_slugs.identifier_slug"]), 48 document_published=row["documents.compiled_url_slugs.document_published"], 49 identifier_value=DocumentIdentifierValue(row["documents.compiled_url_slugs.identifier_value"]), 50 identifier_namespace=identifier_namespace, 51 identifier_type=IDENTIFIER_NAMESPACE_MAP[identifier_namespace], 52 )
class
IdentifierResolutions(list['IdentifierResolution']):
11class IdentifierResolutions(list["IdentifierResolution"]): 12 """ 13 A list of candidate MarkLogic documents which correspond to a Public UI uri 14 15 MarkLogic returns a list of dictionaries; IdentifierResolution handles a single dictionary 16 which corresponds to a single identifier to MarkLogic document mapping. 17 18 see `xquery/resolve_from_identifier_slug.xqy` and `resolve_from_identifier` in `Client.py` 19 """ 20 21 @staticmethod 22 def from_marklogic_output(table: list[str]) -> "IdentifierResolutions": 23 return IdentifierResolutions(list(IdentifierResolution.from_marklogic_output(row) for row in table)) 24 25 def published(self) -> "IdentifierResolutions": 26 "Filter the list so that only published documents are returned" 27 return IdentifierResolutions(list(x for x in self if x.document_published))
A list of candidate MarkLogic documents which correspond to a Public UI uri
MarkLogic returns a list of dictionaries; IdentifierResolution handles a single dictionary which corresponds to a single identifier to MarkLogic document mapping.
see xquery/resolve_from_identifier_slug.xqy and resolve_from_identifier in Client.py
class
IdentifierResolution(typing.NamedTuple):
30class IdentifierResolution(NamedTuple): 31 """A single response from MarkLogic about a single identifier / document mapping""" 32 33 identifier_uuid: str 34 document_uri: MarkLogicDocumentURIString 35 identifier_slug: DocumentIdentifierSlug 36 document_published: bool 37 identifier_value: DocumentIdentifierValue 38 identifier_namespace: str 39 identifier_type: type[Identifier] 40 41 @staticmethod 42 def from_marklogic_output(raw_row: str) -> "IdentifierResolution": 43 row = json.loads(raw_row) 44 identifier_namespace = row["documents.compiled_url_slugs.identifier_namespace"] 45 return IdentifierResolution( 46 identifier_uuid=row["documents.compiled_url_slugs.identifier_uuid"], 47 document_uri=MarkLogicDocumentURIString(row["documents.compiled_url_slugs.document_uri"]), 48 identifier_slug=DocumentIdentifierSlug(row["documents.compiled_url_slugs.identifier_slug"]), 49 document_published=row["documents.compiled_url_slugs.document_published"], 50 identifier_value=DocumentIdentifierValue(row["documents.compiled_url_slugs.identifier_value"]), 51 identifier_namespace=identifier_namespace, 52 identifier_type=IDENTIFIER_NAMESPACE_MAP[identifier_namespace], 53 )
A single response from MarkLogic about a single identifier / document mapping
IdentifierResolution( identifier_uuid: str, document_uri: caselawclient.types.MarkLogicDocumentURIString, identifier_slug: caselawclient.types.DocumentIdentifierSlug, document_published: bool, identifier_value: caselawclient.types.DocumentIdentifierValue, identifier_namespace: str, identifier_type: type[caselawclient.models.identifiers.Identifier])
Create new instance of IdentifierResolution(identifier_uuid, document_uri, identifier_slug, document_published, identifier_value, identifier_namespace, identifier_type)
41 @staticmethod 42 def from_marklogic_output(raw_row: str) -> "IdentifierResolution": 43 row = json.loads(raw_row) 44 identifier_namespace = row["documents.compiled_url_slugs.identifier_namespace"] 45 return IdentifierResolution( 46 identifier_uuid=row["documents.compiled_url_slugs.identifier_uuid"], 47 document_uri=MarkLogicDocumentURIString(row["documents.compiled_url_slugs.document_uri"]), 48 identifier_slug=DocumentIdentifierSlug(row["documents.compiled_url_slugs.identifier_slug"]), 49 document_published=row["documents.compiled_url_slugs.document_published"], 50 identifier_value=DocumentIdentifierValue(row["documents.compiled_url_slugs.identifier_value"]), 51 identifier_namespace=identifier_namespace, 52 identifier_type=IDENTIFIER_NAMESPACE_MAP[identifier_namespace], 53 )