ds-caselaw-marklogic-api-client 32.0.0__tar.gz → 34.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.
Potentially problematic release.
This version of ds-caselaw-marklogic-api-client might be problematic. Click here for more details.
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/PKG-INFO +2 -3
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/pyproject.toml +2 -2
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/Client.py +6 -3
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/client_helpers/__init__.py +28 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/documents/__init__.py +2 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/judgments.py +1 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/press_summaries.py +1 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/responses/search_result.py +21 -1
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/insert_document.xqy +2 -6
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/update_locked_judgment.xqy +1 -2
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery_type_dicts.py +1 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/LICENSE.md +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/README.md +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/__init__.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/client_helpers/search_helpers.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/content_hash.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/errors.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/factories.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/identifier_resolution.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/__init__.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/documents/body.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/documents/exceptions.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/documents/statuses.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/documents/transforms/html.xsl +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/documents/xml.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/identifiers/__init__.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/identifiers/fclid.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/identifiers/neutral_citation.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/identifiers/press_summary_ncn.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/identifiers/unpacker.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/neutral_citation_mixin.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/utilities/__init__.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/utilities/aws.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/utilities/dates.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/models/utilities/move.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/py.typed +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/responses/__init__.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/responses/search_response.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/responses/xsl/search_match.xsl +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/search_parameters.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/types.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xml_helpers.py +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/break_judgment_checkout.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/checkin_judgment.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/checkout_judgment.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/copy_document.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/delete_judgment.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/document_collections.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/document_exists.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_combined_stats_table.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_components_for_document.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_highest_enrichment_version.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_highest_parser_version.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_judgment.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_judgment_checkout_status.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_judgment_version.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_last_modified.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_next_document_sequence_number.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_pending_enrichment_for_version.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_pending_parse_for_version.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_properties_for_search_results.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_property.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_property_as_node.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_recently_enriched.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_recently_parsed.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_version_annotation.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/get_version_created.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/list_judgment_versions.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/resolve_from_identifier_slug.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/resolve_from_identifier_value.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/set_boolean_property.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/set_metadata_citation.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/set_metadata_court.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/set_metadata_jurisdiction.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/set_metadata_name.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/set_metadata_this_uri.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/set_metadata_work_expression_date.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/set_property.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/set_property_as_node.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/update_document.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/user_has_privilege.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/user_has_role.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/validate_all_documents.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/validate_document.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/xslt.xqy +0 -0
- {ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/src/caselawclient/xquery/xslt_transform.xqy +0 -0
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ds-caselaw-marklogic-api-client
|
|
3
|
-
Version:
|
|
3
|
+
Version: 34.0.0
|
|
4
4
|
Summary: An API client for interacting with the underlying data in Find Caselaw.
|
|
5
5
|
Home-page: https://github.com/nationalarchives/ds-caselaw-custom-api-client
|
|
6
6
|
Keywords: national archives,caselaw
|
|
7
7
|
Author: The National Archives
|
|
8
|
-
Requires-Python: >=3.
|
|
8
|
+
Requires-Python: >=3.10.0,<4.0.0
|
|
9
9
|
Classifier: Programming Language :: Python :: 3
|
|
10
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
11
10
|
Classifier: Programming Language :: Python :: 3.10
|
|
12
11
|
Classifier: Programming Language :: Python :: 3.11
|
|
13
12
|
Requires-Dist: boto3 (>=1.26.112,<2.0.0)
|
{ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/pyproject.toml
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "ds-caselaw-marklogic-api-client"
|
|
3
|
-
version = "
|
|
3
|
+
version = "34.0.0"
|
|
4
4
|
description = "An API client for interacting with the underlying data in Find Caselaw."
|
|
5
5
|
authors = ["The National Archives"]
|
|
6
6
|
homepage = "https://github.com/nationalarchives/ds-caselaw-custom-api-client"
|
|
@@ -11,7 +11,7 @@ packages = [
|
|
|
11
11
|
]
|
|
12
12
|
|
|
13
13
|
[tool.poetry.dependencies]
|
|
14
|
-
python = "^3.
|
|
14
|
+
python = "^3.10.0"
|
|
15
15
|
certifi = ">=2025.1.31,<2025.2.0"
|
|
16
16
|
charset-normalizer = "^3.0.0"
|
|
17
17
|
django-environ = ">=0.12.0"
|
|
@@ -572,6 +572,7 @@ class MarklogicApiClient:
|
|
|
572
572
|
self,
|
|
573
573
|
document_uri: DocumentURIString,
|
|
574
574
|
document_xml: Element,
|
|
575
|
+
document_type: type[Document],
|
|
575
576
|
annotation: VersionAnnotation,
|
|
576
577
|
) -> requests.Response:
|
|
577
578
|
"""
|
|
@@ -579,6 +580,7 @@ class MarklogicApiClient:
|
|
|
579
580
|
|
|
580
581
|
:param document_uri: The URI to insert the document at
|
|
581
582
|
:param document_xml: The XML of the document to insert
|
|
583
|
+
:param document_type: The type class of the document
|
|
582
584
|
:param annotation: Annotations to record alongside this version
|
|
583
585
|
|
|
584
586
|
:return: The response object from MarkLogic
|
|
@@ -592,6 +594,7 @@ class MarklogicApiClient:
|
|
|
592
594
|
|
|
593
595
|
vars: query_dicts.InsertDocumentDict = {
|
|
594
596
|
"uri": uri,
|
|
597
|
+
"type_collection": document_type.type_collection_name,
|
|
595
598
|
"document": xml.decode("utf-8"),
|
|
596
599
|
"annotation": annotation.as_json,
|
|
597
600
|
}
|
|
@@ -1068,14 +1071,14 @@ class MarklogicApiClient:
|
|
|
1068
1071
|
response = self._send_to_eval(vars, "get_properties_for_search_results.xqy")
|
|
1069
1072
|
return get_single_string_from_marklogic_response(response)
|
|
1070
1073
|
|
|
1071
|
-
def search_and_decode_response(self, search_parameters: SearchParameters) ->
|
|
1074
|
+
def search_and_decode_response(self, search_parameters: SearchParameters) -> bytes:
|
|
1072
1075
|
response = self.advanced_search(search_parameters)
|
|
1073
|
-
return
|
|
1076
|
+
return get_single_bytestring_from_marklogic_response(response)
|
|
1074
1077
|
|
|
1075
1078
|
def search_judgments_and_decode_response(
|
|
1076
1079
|
self,
|
|
1077
1080
|
search_parameters: SearchParameters,
|
|
1078
|
-
) ->
|
|
1081
|
+
) -> bytes:
|
|
1079
1082
|
search_parameters.collections = [DOCUMENT_COLLECTION_URI_JUDGMENT]
|
|
1080
1083
|
return self.search_and_decode_response(search_parameters)
|
|
1081
1084
|
|
|
@@ -2,8 +2,17 @@ import json
|
|
|
2
2
|
from enum import Enum
|
|
3
3
|
from typing import Any, Optional, TypedDict
|
|
4
4
|
|
|
5
|
+
from lxml import etree
|
|
5
6
|
from typing_extensions import NotRequired
|
|
6
7
|
|
|
8
|
+
from ..models.documents import Document
|
|
9
|
+
from ..models.judgments import Judgment
|
|
10
|
+
from ..models.press_summaries import PressSummary
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class CannotDetermineDocumentType(Exception):
|
|
14
|
+
pass
|
|
15
|
+
|
|
7
16
|
|
|
8
17
|
class AnnotationDataDict(TypedDict):
|
|
9
18
|
type: str
|
|
@@ -112,3 +121,22 @@ class VersionAnnotation:
|
|
|
112
121
|
|
|
113
122
|
def __str__(self) -> str:
|
|
114
123
|
return self.as_json
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def get_document_type_class(xml: bytes) -> type[Document]:
|
|
127
|
+
"""Attempt to get the type of the document based on the XML root node."""
|
|
128
|
+
|
|
129
|
+
node = etree.fromstring(xml)
|
|
130
|
+
|
|
131
|
+
# If the document's root element is `judgment` it's a `Judgment`, regardless of the presence of a `name`.
|
|
132
|
+
if node.tag == "judgment":
|
|
133
|
+
return Judgment
|
|
134
|
+
|
|
135
|
+
# If the document's root element has a `name` attribute with a value of `pressSummary` we can assume it's a `PressSummary`
|
|
136
|
+
if node.tag == "doc" and node.attrib.get("name") == "pressSummary":
|
|
137
|
+
return PressSummary
|
|
138
|
+
|
|
139
|
+
# Otherwise, we don't know for sure. Fail out.
|
|
140
|
+
raise CannotDetermineDocumentType(
|
|
141
|
+
"Unable to accurately determine the type of document based on the root XML node.",
|
|
142
|
+
)
|
|
@@ -23,6 +23,7 @@ class Judgment(NeutralCitationMixin, Document):
|
|
|
23
23
|
|
|
24
24
|
document_noun = "judgment"
|
|
25
25
|
document_noun_plural = "judgments"
|
|
26
|
+
type_collection_name = "judgment"
|
|
26
27
|
|
|
27
28
|
def __init__(self, uri: DocumentURIString, *args: Any, **kwargs: Any) -> None:
|
|
28
29
|
super().__init__(self.document_noun, uri, *args, **kwargs)
|
|
@@ -24,6 +24,7 @@ class PressSummary(NeutralCitationMixin, Document):
|
|
|
24
24
|
|
|
25
25
|
document_noun = "press summary"
|
|
26
26
|
document_noun_plural = "press summaries"
|
|
27
|
+
type_collection_name = "press-summary"
|
|
27
28
|
|
|
28
29
|
def __init__(self, uri: DocumentURIString, *args: Any, **kwargs: Any) -> None:
|
|
29
30
|
super().__init__(self.document_noun, uri, *args, **kwargs)
|
|
@@ -3,7 +3,7 @@ import os
|
|
|
3
3
|
from datetime import datetime
|
|
4
4
|
from enum import Enum
|
|
5
5
|
from functools import cached_property
|
|
6
|
-
from typing import Dict, Optional
|
|
6
|
+
from typing import Any, Dict, Optional
|
|
7
7
|
|
|
8
8
|
from dateutil import parser as dateparser
|
|
9
9
|
from dateutil.parser import ParserError
|
|
@@ -12,6 +12,8 @@ from ds_caselaw_utils.types import CourtCode, JurisdictionCode
|
|
|
12
12
|
from lxml import etree
|
|
13
13
|
|
|
14
14
|
from caselawclient.Client import MarklogicApiClient
|
|
15
|
+
from caselawclient.models.identifiers import Identifiers
|
|
16
|
+
from caselawclient.models.identifiers.unpacker import unpack_all_identifiers_from_etree
|
|
15
17
|
from caselawclient.types import DocumentURIString
|
|
16
18
|
from caselawclient.xml_helpers import get_xpath_match_string
|
|
17
19
|
|
|
@@ -169,6 +171,21 @@ class SearchResult:
|
|
|
169
171
|
self._get_xpath_match_string("@uri").lstrip("/").split(".xml")[0],
|
|
170
172
|
)
|
|
171
173
|
|
|
174
|
+
@property
|
|
175
|
+
def identifiers(self) -> Identifiers:
|
|
176
|
+
identifiers_etrees = self._get_xpath("//identifiers")
|
|
177
|
+
if count := len(identifiers_etrees) != 1:
|
|
178
|
+
logging.warning(f"{count} //identifiers nodes found in search result, expected 1.")
|
|
179
|
+
identifiers_etree = None if not identifiers_etrees else identifiers_etrees[0]
|
|
180
|
+
return unpack_all_identifiers_from_etree(identifiers_etree)
|
|
181
|
+
|
|
182
|
+
@cached_property
|
|
183
|
+
def slug(self) -> str:
|
|
184
|
+
preferred = self.identifiers.preferred()
|
|
185
|
+
if not preferred:
|
|
186
|
+
raise RuntimeError("No preferred identifier for search result")
|
|
187
|
+
return str(preferred.url_slug)
|
|
188
|
+
|
|
172
189
|
@property
|
|
173
190
|
def neutral_citation(self) -> str:
|
|
174
191
|
"""
|
|
@@ -278,3 +295,6 @@ class SearchResult:
|
|
|
278
295
|
|
|
279
296
|
def _get_xpath_match_string(self, path: str) -> str:
|
|
280
297
|
return get_xpath_match_string(self.node, path, namespaces=self.NAMESPACES)
|
|
298
|
+
|
|
299
|
+
def _get_xpath(self, path: str) -> Any:
|
|
300
|
+
return self.node.xpath(path, namespaces=self.NAMESPACES)
|
|
@@ -4,20 +4,16 @@ import module namespace dls = "http://marklogic.com/xdmp/dls" at "/MarkLogic/dls
|
|
|
4
4
|
|
|
5
5
|
declare variable $uri as xs:string external;
|
|
6
6
|
declare variable $document as xs:string external;
|
|
7
|
+
declare variable $type_collection as xs:string external;
|
|
7
8
|
declare variable $annotation as xs:string external;
|
|
8
9
|
|
|
9
10
|
let $document_xml := xdmp:unquote($document)
|
|
10
11
|
|
|
11
|
-
let $collections :=
|
|
12
|
-
if (fn:contains($uri, 'press-summary'))
|
|
13
|
-
then ("press-summary")
|
|
14
|
-
else ("judgment")
|
|
15
|
-
|
|
16
12
|
return dls:document-insert-and-manage(
|
|
17
13
|
$uri,
|
|
18
14
|
fn:true(),
|
|
19
15
|
$document_xml,
|
|
20
16
|
$annotation,
|
|
21
17
|
(),
|
|
22
|
-
$
|
|
18
|
+
($type_collection)
|
|
23
19
|
)
|
|
@@ -8,8 +8,7 @@ declare variable $judgment as xs:string external;
|
|
|
8
8
|
declare variable $annotation as xs:string external;
|
|
9
9
|
|
|
10
10
|
let $judgment_xml := xdmp:unquote($judgment)
|
|
11
|
-
|
|
12
|
-
let $crash_if_invalid := validate strict {$judgment_xml}
|
|
11
|
+
|
|
13
12
|
return dls:document-update(
|
|
14
13
|
$uri,
|
|
15
14
|
$judgment_xml,
|
{ds_caselaw_marklogic_api_client-32.0.0 → ds_caselaw_marklogic_api_client-34.0.0}/LICENSE.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|