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

@staticmethod
def from_marklogic_output( table: list[str]) -> IdentifierResolutions:
21    @staticmethod
22    def from_marklogic_output(table: list[str]) -> "IdentifierResolutions":
23        return IdentifierResolutions(list(IdentifierResolution.from_marklogic_output(row) for row in table))
def published(self) -> IdentifierResolutions:
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))

Filter the list so that only published documents are returned

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)

identifier_uuid: str

Alias for field number 0

Alias for field number 1

Alias for field number 2

document_published: bool

Alias for field number 3

Alias for field number 4

identifier_namespace: str

Alias for field number 5

Alias for field number 6

@staticmethod
def from_marklogic_output(raw_row: str) -> IdentifierResolution:
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        )