ds-caselaw-marklogic-api-client 41.0.0__tar.gz → 41.1.1__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.
Files changed (95) hide show
  1. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/PKG-INFO +1 -1
  2. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/pyproject.toml +4 -4
  3. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/factories.py +2 -0
  4. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/documents/__init__.py +27 -0
  5. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/check_content_hash_unique_by_uri.xqy +8 -2
  6. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/LICENSE.md +0 -0
  7. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/README.md +0 -0
  8. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/Client.py +0 -0
  9. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/__init__.py +0 -0
  10. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/client_helpers/__init__.py +0 -0
  11. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/client_helpers/search_helpers.py +0 -0
  12. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/content_hash.py +0 -0
  13. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/errors.py +0 -0
  14. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/identifier_resolution.py +0 -0
  15. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/__init__.py +0 -0
  16. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/documents/body.py +0 -0
  17. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/documents/comparison.py +0 -0
  18. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/documents/exceptions.py +0 -0
  19. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/documents/statuses.py +0 -0
  20. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/documents/transforms/html.xsl +0 -0
  21. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/documents/xml.py +0 -0
  22. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/identifiers/__init__.py +0 -0
  23. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/identifiers/collection.py +0 -0
  24. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/identifiers/exceptions.py +0 -0
  25. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/identifiers/fclid.py +0 -0
  26. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/identifiers/neutral_citation.py +0 -0
  27. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/identifiers/press_summary_ncn.py +0 -0
  28. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/identifiers/unpacker.py +0 -0
  29. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/judgments.py +0 -0
  30. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/neutral_citation_mixin.py +0 -0
  31. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/parser_logs.py +0 -0
  32. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/press_summaries.py +0 -0
  33. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/utilities/__init__.py +0 -0
  34. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/utilities/aws.py +0 -0
  35. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/utilities/dates.py +0 -0
  36. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/models/utilities/move.py +0 -0
  37. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/py.typed +0 -0
  38. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/responses/__init__.py +0 -0
  39. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/responses/search_response.py +0 -0
  40. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/responses/search_result.py +0 -0
  41. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/responses/xsl/search_match.xsl +0 -0
  42. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/search_parameters.py +0 -0
  43. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/types.py +0 -0
  44. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xml_helpers.py +0 -0
  45. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/break_judgment_checkout.xqy +0 -0
  46. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/checkin_judgment.xqy +0 -0
  47. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/checkout_judgment.xqy +0 -0
  48. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/copy_document.xqy +0 -0
  49. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/delete_judgment.xqy +0 -0
  50. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/document_collections.xqy +0 -0
  51. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/document_exists.xqy +0 -0
  52. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_combined_stats_table.xqy +0 -0
  53. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_components_for_document.xqy +0 -0
  54. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_highest_enrichment_version.xqy +0 -0
  55. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_highest_parser_version.xqy +0 -0
  56. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_judgment.xqy +0 -0
  57. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_judgment_checkout_status.xqy +0 -0
  58. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_judgment_version.xqy +0 -0
  59. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_last_modified.xqy +0 -0
  60. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_missing_fclid.xqy +0 -0
  61. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_next_document_sequence_number.xqy +0 -0
  62. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_pending_enrichment_for_version.xqy +0 -0
  63. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_pending_parse_for_version.xqy +0 -0
  64. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_properties_for_search_results.xqy +0 -0
  65. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_property.xqy +0 -0
  66. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_property_as_node.xqy +0 -0
  67. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_recently_enriched.xqy +0 -0
  68. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_recently_parsed.xqy +0 -0
  69. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_version_annotation.xqy +0 -0
  70. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/get_version_created.xqy +0 -0
  71. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/insert_document.xqy +0 -0
  72. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/list_judgment_versions.xqy +0 -0
  73. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/resolve_from_identifier_slug.xqy +0 -0
  74. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/resolve_from_identifier_value.xqy +0 -0
  75. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/set_boolean_property.xqy +0 -0
  76. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/set_datetime_property.xqy +0 -0
  77. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/set_metadata_citation.xqy +0 -0
  78. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/set_metadata_court.xqy +0 -0
  79. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/set_metadata_jurisdiction.xqy +0 -0
  80. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/set_metadata_name.xqy +0 -0
  81. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/set_metadata_this_uri.xqy +0 -0
  82. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/set_metadata_work_expression_date.xqy +0 -0
  83. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/set_property.xqy +0 -0
  84. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/set_property_as_node.xqy +0 -0
  85. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/update_document.xqy +0 -0
  86. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/update_locked_judgment.xqy +0 -0
  87. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/user_has_privilege.xqy +0 -0
  88. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/user_has_role.xqy +0 -0
  89. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/validate_all_documents.xqy +0 -0
  90. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/validate_document.xqy +0 -0
  91. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/xslt.xqy +0 -0
  92. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery/xslt_transform.xqy +0 -0
  93. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xquery_type_dicts.py +0 -0
  94. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xslt/modify_xml_live.xsl +0 -0
  95. {ds_caselaw_marklogic_api_client-41.0.0 → ds_caselaw_marklogic_api_client-41.1.1}/src/caselawclient/xslt/sample.xsl +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: ds-caselaw-marklogic-api-client
3
- Version: 41.0.0
3
+ Version: 41.1.1
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
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "ds-caselaw-marklogic-api-client"
3
- version = "41.0.0"
3
+ version = "41.1.1"
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"
@@ -33,13 +33,13 @@ defusedxml = "^0.7.1"
33
33
 
34
34
  [tool.poetry.group.dev.dependencies]
35
35
  coverage = "7.10.6"
36
- pytest = "8.4.1"
37
- pytest-cov = "6.2.1"
36
+ pytest = "8.4.2"
37
+ pytest-cov = "6.3.0"
38
38
  beautifulsoup4 = "4.13.5"
39
39
  responses = "0.25.8"
40
40
  python-dotenv = "1.1.1"
41
41
  time-machine = "2.19.0"
42
- moto = {version = "5.1.11", extras = ["all"]}
42
+ moto = {version = "5.1.12", extras = ["all"]}
43
43
 
44
44
  [tool.poetry.group.docs]
45
45
  optional = true
@@ -61,6 +61,8 @@ class DocumentFactory:
61
61
  "source_name": "Example Uploader",
62
62
  "source_email": "uploader@example.com",
63
63
  "consignment_reference": "TDR-12345",
64
+ "first_published_datetime": None,
65
+ "has_ever_been_published": False,
64
66
  "assigned_to": "",
65
67
  "versions": [],
66
68
  }
@@ -312,10 +312,37 @@ class Document:
312
312
 
313
313
  @cached_property
314
314
  def first_published_datetime(self) -> Optional[datetime.datetime]:
315
+ """
316
+ Return the database value for the date and time this document was first published.
317
+
318
+ :return: The datetime value in the database for "first published".
319
+ """
315
320
  return self.api_client.get_datetime_property(self.uri, "first_published_datetime")
316
321
 
322
+ @cached_property
323
+ def first_published_datetime_display(self) -> Optional[datetime.datetime]:
324
+ """
325
+ Return the display value for the date and time this document was first published.
326
+
327
+ A value of 1970-01-01 00:00 indicates that the document has been published previously, but the exact date and time is unknown. In this case, return `None`. This can be used alongside `has_ever_been_published` to indicate an "unknown" state.
328
+
329
+ :return: The datetime value to be displayed to end users for "first published".
330
+ """
331
+
332
+ if self.first_published_datetime == datetime.datetime(1970, 1, 1, 0, 0, tzinfo=datetime.timezone.utc):
333
+ return None
334
+
335
+ return self.first_published_datetime
336
+
317
337
  @cached_property
318
338
  def has_ever_been_published(self) -> bool:
339
+ """
340
+ Do we consider this document to have ever been published?
341
+
342
+ This is `True` if either the document is currently published, or if `first_published_datetime` has any value (including the sentinel value).
343
+
344
+ :return: A boolean indicating if the document has ever been published.
345
+ """
319
346
  return self.is_published or self.first_published_datetime is not None
320
347
 
321
348
  @cached_property
@@ -5,5 +5,11 @@ declare variable $uri as xs:string external;
5
5
 
6
6
  let $doc := doc($uri)
7
7
  let $hash := $doc//uk:hash/text()
8
- let $count := count(cts:search(fn:doc(), cts:element-value-query(xs:QName("uk:hash"), $hash)))
9
- return $count = 1
8
+ let $count := count(cts:uris(
9
+ (), (),
10
+ cts:and-query((
11
+ cts:element-value-query(xs:QName("uk:hash"), $hash),
12
+ cts:collection-query("http://marklogic.com/collections/dls/latest-version")
13
+ ))
14
+ ))
15
+ return $count