ds-caselaw-marklogic-api-client 39.2.0__tar.gz → 40.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.
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/PKG-INFO +2 -4
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/pyproject.toml +4 -4
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/Client.py +39 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/documents/__init__.py +24 -1
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/responses/search_result.py +11 -5
- ds_caselaw_marklogic_api_client-40.0.0/src/caselawclient/xquery/set_datetime_property.xqy +11 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery_type_dicts.py +7 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/LICENSE.md +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/README.md +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/__init__.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/client_helpers/__init__.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/client_helpers/search_helpers.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/content_hash.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/errors.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/factories.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/identifier_resolution.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/__init__.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/documents/body.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/documents/comparison.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/documents/exceptions.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/documents/statuses.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/documents/transforms/html.xsl +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/documents/xml.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/identifiers/__init__.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/identifiers/collection.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/identifiers/exceptions.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/identifiers/fclid.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/identifiers/neutral_citation.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/identifiers/press_summary_ncn.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/identifiers/unpacker.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/judgments.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/neutral_citation_mixin.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/parser_logs.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/press_summaries.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/utilities/__init__.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/utilities/aws.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/utilities/dates.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/models/utilities/move.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/py.typed +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/responses/__init__.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/responses/search_response.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/responses/xsl/search_match.xsl +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/search_parameters.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/types.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xml_helpers.py +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/break_judgment_checkout.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/checkin_judgment.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/checkout_judgment.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/copy_document.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/delete_judgment.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/document_collections.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/document_exists.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_combined_stats_table.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_components_for_document.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_highest_enrichment_version.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_highest_parser_version.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_judgment.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_judgment_checkout_status.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_judgment_version.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_last_modified.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_missing_fclid.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_next_document_sequence_number.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_pending_enrichment_for_version.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_pending_parse_for_version.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_properties_for_search_results.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_property.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_property_as_node.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_recently_enriched.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_recently_parsed.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_version_annotation.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/get_version_created.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/insert_document.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/list_judgment_versions.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/resolve_from_identifier_slug.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/resolve_from_identifier_value.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/set_boolean_property.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/set_metadata_citation.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/set_metadata_court.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/set_metadata_jurisdiction.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/set_metadata_name.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/set_metadata_this_uri.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/set_metadata_work_expression_date.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/set_property.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/set_property_as_node.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/update_document.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/update_locked_judgment.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/user_has_privilege.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/user_has_role.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/validate_all_documents.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/validate_document.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/xslt.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xquery/xslt_transform.xqy +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xslt/modify_xml_live.xsl +0 -0
- {ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.0.0}/src/caselawclient/xslt/sample.xsl +0 -0
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: ds-caselaw-marklogic-api-client
|
|
3
|
-
Version:
|
|
3
|
+
Version: 40.0.0
|
|
4
4
|
Summary: An API client for interacting with the underlying data in Find Caselaw.
|
|
5
5
|
Keywords: national archives,caselaw
|
|
6
6
|
Author: The National Archives
|
|
7
|
-
Requires-Python: >=3.
|
|
7
|
+
Requires-Python: >=3.12.0,<4.0.0
|
|
8
8
|
Classifier: Programming Language :: Python :: 3
|
|
9
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
10
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
11
9
|
Classifier: Programming Language :: Python :: 3.12
|
|
12
10
|
Classifier: Programming Language :: Python :: 3.13
|
|
13
11
|
Requires-Dist: boto3 (>=1.26.112,<2.0.0)
|
{ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.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 = "40.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.12.0"
|
|
15
15
|
certifi = ">=2025.8.3,<2025.9.0"
|
|
16
16
|
charset-normalizer = "^3.0.0"
|
|
17
17
|
django-environ = ">=0.12.0"
|
|
@@ -32,14 +32,14 @@ sqids = "^0.5.0"
|
|
|
32
32
|
defusedxml = "^0.7.1"
|
|
33
33
|
|
|
34
34
|
[tool.poetry.group.dev.dependencies]
|
|
35
|
-
coverage = "7.10.
|
|
35
|
+
coverage = "7.10.4"
|
|
36
36
|
pytest = "8.4.1"
|
|
37
37
|
pytest-cov = "6.2.1"
|
|
38
38
|
beautifulsoup4 = "4.13.4"
|
|
39
39
|
responses = "0.25.8"
|
|
40
40
|
python-dotenv = "1.1.1"
|
|
41
41
|
time-machine = "2.17.0"
|
|
42
|
-
moto = {version = "5.1.
|
|
42
|
+
moto = {version = "5.1.10", extras = ["all"]}
|
|
43
43
|
|
|
44
44
|
[tool.poetry.group.docs]
|
|
45
45
|
optional = true
|
|
@@ -11,6 +11,7 @@ from xml.etree.ElementTree import Element
|
|
|
11
11
|
|
|
12
12
|
import environ
|
|
13
13
|
import requests
|
|
14
|
+
from dateutil.parser import isoparse
|
|
14
15
|
from defusedxml import ElementTree
|
|
15
16
|
from defusedxml.ElementTree import ParseError, fromstring
|
|
16
17
|
from ds_caselaw_utils.types import NeutralCitationString
|
|
@@ -948,12 +949,50 @@ class MarklogicApiClient:
|
|
|
948
949
|
"value": string_value,
|
|
949
950
|
"name": name,
|
|
950
951
|
}
|
|
952
|
+
"""
|
|
953
|
+
Set a property within MarkLogic which is specifically a boolean.
|
|
954
|
+
|
|
955
|
+
Since XML has no concept of boolean, the actual value in the database is set to `"true"` or `"false"`.
|
|
956
|
+
"""
|
|
951
957
|
return self._send_to_eval(vars, "set_boolean_property.xqy")
|
|
952
958
|
|
|
953
959
|
def get_boolean_property(self, judgment_uri: DocumentURIString, name: str) -> bool:
|
|
960
|
+
"""
|
|
961
|
+
Get a property from MarkLogic which is specifically a boolean.
|
|
962
|
+
|
|
963
|
+
:return: `True` if the property exists and has a value of `"true"`, otherwise `False`
|
|
964
|
+
"""
|
|
954
965
|
content = self.get_property(judgment_uri, name)
|
|
955
966
|
return content == "true"
|
|
956
967
|
|
|
968
|
+
def set_datetime_property(
|
|
969
|
+
self,
|
|
970
|
+
judgment_uri: DocumentURIString,
|
|
971
|
+
name: str,
|
|
972
|
+
value: datetime,
|
|
973
|
+
) -> requests.Response:
|
|
974
|
+
"""Set a property within MarkLogic which is specifically a datetime."""
|
|
975
|
+
uri = self._format_uri_for_marklogic(judgment_uri)
|
|
976
|
+
vars: query_dicts.SetDatetimePropertyDict = {
|
|
977
|
+
"uri": uri,
|
|
978
|
+
"value": value.isoformat(),
|
|
979
|
+
"name": name,
|
|
980
|
+
}
|
|
981
|
+
return self._send_to_eval(vars, "set_datetime_property.xqy")
|
|
982
|
+
|
|
983
|
+
def get_datetime_property(self, judgment_uri: DocumentURIString, name: str) -> Optional[datetime]:
|
|
984
|
+
"""
|
|
985
|
+
Get a property from MarkLogic which is specifically a datetime.
|
|
986
|
+
|
|
987
|
+
:return: A datetime with the value of the property, or `None` if it does not exist
|
|
988
|
+
"""
|
|
989
|
+
content = self.get_property(judgment_uri, name)
|
|
990
|
+
|
|
991
|
+
if content:
|
|
992
|
+
return isoparse(content)
|
|
993
|
+
|
|
994
|
+
return None
|
|
995
|
+
|
|
957
996
|
def set_published(
|
|
958
997
|
self,
|
|
959
998
|
judgment_uri: DocumentURIString,
|
|
@@ -305,6 +305,14 @@ class Document:
|
|
|
305
305
|
# An empty list (which is falsy) therefore means the judgment can be published safely.
|
|
306
306
|
return not self.validation_failure_messages
|
|
307
307
|
|
|
308
|
+
@cached_property
|
|
309
|
+
def first_published_datetime(self) -> Optional[datetime.datetime]:
|
|
310
|
+
return self.api_client.get_datetime_property(self.uri, "first_published_datetime")
|
|
311
|
+
|
|
312
|
+
@cached_property
|
|
313
|
+
def has_ever_been_published(self) -> bool:
|
|
314
|
+
return self.is_published or self.first_published_datetime is not None
|
|
315
|
+
|
|
308
316
|
@cached_property
|
|
309
317
|
def validation_failure_messages(self) -> list[str]:
|
|
310
318
|
exception_list = []
|
|
@@ -407,6 +415,8 @@ class Document:
|
|
|
407
415
|
|
|
408
416
|
def publish(self) -> None:
|
|
409
417
|
"""
|
|
418
|
+
Assuming that a document passes pre-publish checks, perform all necessary operations to put it into a published state.
|
|
419
|
+
|
|
410
420
|
:raises CannotPublishUnpublishableDocument: This document has not passed the checks in `is_publishable`, and as
|
|
411
421
|
such cannot be published.
|
|
412
422
|
"""
|
|
@@ -416,13 +426,26 @@ class Document:
|
|
|
416
426
|
## Make sure the document has an FCLID
|
|
417
427
|
self.assign_fclid_if_missing()
|
|
418
428
|
|
|
429
|
+
## Copy the document assets into the appropriate place in S3
|
|
419
430
|
publish_documents(self.uri)
|
|
431
|
+
|
|
432
|
+
## Set the fact the document is published
|
|
420
433
|
self.api_client.set_published(self.uri, True)
|
|
434
|
+
|
|
435
|
+
## If necessary, set the first published date
|
|
436
|
+
if not self.first_published_datetime:
|
|
437
|
+
self.api_client.set_datetime_property(
|
|
438
|
+
self.uri, "first_published_datetime", datetime.datetime.now(datetime.timezone.utc)
|
|
439
|
+
)
|
|
440
|
+
|
|
441
|
+
## Announce the publication on the event bus
|
|
421
442
|
announce_document_event(
|
|
422
443
|
uri=self.uri,
|
|
423
444
|
status="publish",
|
|
424
445
|
)
|
|
425
|
-
|
|
446
|
+
|
|
447
|
+
## Send the document off for enrichment, but accept if we can't for any reason
|
|
448
|
+
self.enrich(accept_failures=True)
|
|
426
449
|
|
|
427
450
|
def unpublish(self) -> None:
|
|
428
451
|
self.api_client.break_checkout(self.uri)
|
|
@@ -13,6 +13,8 @@ from lxml import etree
|
|
|
13
13
|
|
|
14
14
|
from caselawclient.Client import MarklogicApiClient
|
|
15
15
|
from caselawclient.models.identifiers.collection import IdentifiersCollection
|
|
16
|
+
from caselawclient.models.identifiers.neutral_citation import NeutralCitationNumber
|
|
17
|
+
from caselawclient.models.identifiers.press_summary_ncn import PressSummaryRelatedNCNIdentifier
|
|
16
18
|
from caselawclient.models.identifiers.unpacker import unpack_all_identifiers_from_etree
|
|
17
19
|
from caselawclient.types import DocumentURIString
|
|
18
20
|
from caselawclient.xml_helpers import get_xpath_match_string
|
|
@@ -196,14 +198,18 @@ class SearchResult:
|
|
|
196
198
|
return str(preferred.url_slug)
|
|
197
199
|
|
|
198
200
|
@property
|
|
199
|
-
def neutral_citation(self) -> str:
|
|
201
|
+
def neutral_citation(self) -> Optional[str]:
|
|
200
202
|
"""
|
|
201
|
-
:return:
|
|
203
|
+
:return: If present, the value of preferred neutral citation of the document.
|
|
202
204
|
"""
|
|
203
205
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
206
|
+
preferred_ncn = self.identifiers.preferred(type=NeutralCitationNumber)
|
|
207
|
+
|
|
208
|
+
# If the result doesn't have a preferred NCN, maybe it has a preferred press summary related NCN?
|
|
209
|
+
if not preferred_ncn:
|
|
210
|
+
preferred_ncn = self.identifiers.preferred(type=PressSummaryRelatedNCNIdentifier)
|
|
211
|
+
|
|
212
|
+
return preferred_ncn.value if preferred_ncn else None
|
|
207
213
|
|
|
208
214
|
@property
|
|
209
215
|
def name(self) -> str:
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
xquery version "1.0-ml";
|
|
2
|
+
|
|
3
|
+
import module namespace dls = "http://marklogic.com/xdmp/dls" at "/MarkLogic/dls.xqy";
|
|
4
|
+
|
|
5
|
+
declare variable $uri as xs:string external;
|
|
6
|
+
declare variable $value as xs:string external;
|
|
7
|
+
declare variable $name as xs:string external;
|
|
8
|
+
|
|
9
|
+
let $props := ( element {$name}{xs:dateTime($value)} )
|
|
10
|
+
|
|
11
|
+
return dls:document-set-property($uri, $props)
|
|
@@ -166,6 +166,13 @@ class SetBooleanPropertyDict(MarkLogicAPIDict):
|
|
|
166
166
|
value: str
|
|
167
167
|
|
|
168
168
|
|
|
169
|
+
# set_datetime_property.xqy
|
|
170
|
+
class SetDatetimePropertyDict(MarkLogicAPIDict):
|
|
171
|
+
name: str
|
|
172
|
+
uri: MarkLogicDocumentURIString
|
|
173
|
+
value: str
|
|
174
|
+
|
|
175
|
+
|
|
169
176
|
# set_metadata_citation.xqy
|
|
170
177
|
class SetMetadataCitationDict(MarkLogicAPIDict):
|
|
171
178
|
content: str
|
{ds_caselaw_marklogic_api_client-39.2.0 → ds_caselaw_marklogic_api_client-40.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
|
|
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
|