ds-caselaw-marklogic-api-client 27.3.0__py3-none-any.whl → 28.0.0__py3-none-any.whl

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.

caselawclient/Client.py CHANGED
@@ -62,6 +62,8 @@ except importlib.metadata.PackageNotFoundError:
62
62
  VERSION = "0"
63
63
  DEFAULT_USER_AGENT = f"ds-caselaw-marklogic-api-client/{VERSION}"
64
64
 
65
+ DEBUG: bool = bool(os.getenv("DEBUG", default=False))
66
+
65
67
 
66
68
  class NoResponse(Exception):
67
69
  """A requests HTTPError has no response. We expect this will never happen."""
@@ -207,12 +209,14 @@ class MarklogicApiClient:
207
209
  Returns a list of PressSummary objects associated with a given Document URI
208
210
  """
209
211
  vars: query_dicts.GetComponentsForDocumentDict = {
210
- "parent_uri": DocumentURIString(uri if uri.startswith("/") else "/" + uri),
212
+ "parent_uri": uri,
211
213
  "component": "pressSummary",
212
214
  }
213
215
  response = self._send_to_eval(vars, "get_components_for_document.xqy")
214
216
  uris = get_multipart_strings_from_marklogic_response(response)
215
- return [PressSummary(uri.strip(".xml"), self) for uri in uris]
217
+ return [
218
+ PressSummary(DocumentURIString(uri.strip("/").strip(".xml")), self) for uri in uris
219
+ ] # TODO: Migrate this strip behaviour into proper manipulation of a MarkLogicURIString
216
220
 
217
221
  def get_document_by_uri(
218
222
  self,
@@ -728,6 +732,10 @@ class MarklogicApiClient:
728
732
  "vars": vars,
729
733
  }
730
734
  path = "LATEST/eval"
735
+
736
+ if DEBUG:
737
+ print(f"Sending {vars} to {xquery_path}")
738
+
731
739
  response = self.session.request(
732
740
  "POST",
733
741
  url=self._path_to_request_url(path),
@@ -1101,6 +1109,21 @@ class MarklogicApiClient:
1101
1109
 
1102
1110
  return results
1103
1111
 
1112
+ def get_recently_enriched(
1113
+ self,
1114
+ ) -> list[list[Any]]:
1115
+ """Retrieve documents which are not yet enriched with a given version."""
1116
+ results: list[list[Any]] = json.loads(
1117
+ get_single_string_from_marklogic_response(
1118
+ self._send_to_eval(
1119
+ {},
1120
+ "get_recently_enriched.xqy",
1121
+ ),
1122
+ ),
1123
+ )
1124
+
1125
+ return results
1126
+
1104
1127
  def get_highest_parser_version(self) -> tuple[int, int]:
1105
1128
  """This gets the highest parser version in the database, so if nothing has been parsed with the most recent version of the parser, this won't reflect that change."""
1106
1129
  table = json.loads(
@@ -1135,3 +1158,18 @@ class MarklogicApiClient:
1135
1158
  )
1136
1159
 
1137
1160
  return results
1161
+
1162
+ def get_recently_parsed(
1163
+ self,
1164
+ ) -> list[list[Any]]:
1165
+ """Retrieve documents which are not yet enriched with a given version."""
1166
+ results: list[list[Any]] = json.loads(
1167
+ get_single_string_from_marklogic_response(
1168
+ self._send_to_eval(
1169
+ {},
1170
+ "get_recently_parsed.xqy",
1171
+ ),
1172
+ ),
1173
+ )
1174
+
1175
+ return results
@@ -5,7 +5,7 @@ from unittest.mock import Mock
5
5
  from typing_extensions import TypeAlias
6
6
 
7
7
  from caselawclient.Client import MarklogicApiClient
8
- from caselawclient.models.documents import Document
8
+ from caselawclient.models.documents import Document, DocumentURIString
9
9
  from caselawclient.models.documents.body import DocumentBody
10
10
  from caselawclient.models.judgments import Judgment
11
11
  from caselawclient.models.press_summaries import PressSummary
@@ -54,7 +54,7 @@ class DocumentFactory:
54
54
  @classmethod
55
55
  def build(
56
56
  cls,
57
- uri: str = "test/2023/123",
57
+ uri: DocumentURIString = DocumentURIString("test/2023/123"),
58
58
  html: str = "<p>This is a judgment.</p>",
59
59
  api_client: Optional[MarklogicApiClient] = None,
60
60
  **kwargs: Any,
@@ -1,7 +1,7 @@
1
1
  import datetime
2
2
  import warnings
3
3
  from functools import cached_property
4
- from typing import TYPE_CHECKING, Any, NewType, Optional
4
+ from typing import TYPE_CHECKING, Any, Optional
5
5
 
6
6
  from ds_caselaw_utils import courts
7
7
  from ds_caselaw_utils.courts import CourtNotFoundException
@@ -30,7 +30,7 @@ from caselawclient.models.utilities.aws import (
30
30
  )
31
31
 
32
32
  from .body import DocumentBody
33
- from .exceptions import CannotPublishUnpublishableDocument, DocumentNotSafeForDeletion
33
+ from .exceptions import CannotPublishUnpublishableDocument, DocumentNotSafeForDeletion, InvalidDocumentURIException
34
34
  from .statuses import DOCUMENT_STATUS_HOLD, DOCUMENT_STATUS_IN_PROGRESS, DOCUMENT_STATUS_NEW, DOCUMENT_STATUS_PUBLISHED
35
35
 
36
36
  MINIMUM_ENRICHMENT_TIME = datetime.timedelta(minutes=20)
@@ -47,7 +47,26 @@ if TYPE_CHECKING:
47
47
  from caselawclient.Client import MarklogicApiClient
48
48
 
49
49
 
50
- DocumentURIString = NewType("DocumentURIString", str)
50
+ class DocumentURIString(str):
51
+ """
52
+ This class checks that the string is actually a valid Document URI on creation. It does _not_ manipulate the string.
53
+ """
54
+
55
+ def __new__(cls, content: str) -> "DocumentURIString":
56
+ # Check that the URI doesn't begin or end with a slash
57
+ if content[0] == "/" or content[-1] == "/":
58
+ raise InvalidDocumentURIException(
59
+ f'"{content}" is not a valid document URI; URIs cannot begin or end with slashes.'
60
+ )
61
+
62
+ # Check that the URI doesn't contain a full stop
63
+ if "." in content:
64
+ raise InvalidDocumentURIException(
65
+ f'"{content}" is not a valid document URI; URIs cannot contain full stops.'
66
+ )
67
+
68
+ # If everything is good, return as usual
69
+ return str.__new__(cls, content)
51
70
 
52
71
 
53
72
  class Document:
@@ -105,13 +124,15 @@ class Document:
105
124
  Individual document classes should extend this list where necessary to validate document type-specific attributes.
106
125
  """
107
126
 
108
- def __init__(self, uri: str, api_client: "MarklogicApiClient", search_query: Optional[str] = None):
127
+ def __init__(self, uri: DocumentURIString, api_client: "MarklogicApiClient", search_query: Optional[str] = None):
109
128
  """
110
- :param uri: For historical reasons this accepts a pseudo-URI which may include leading or trailing slashes.
129
+ :param uri: The URI of the document to retrieve from MarkLogic.
130
+ :param api_client: An instance of the API client object to handle communication with the MarkLogic server.
131
+ :param search_query: Optionally, a search string which should be highlighted if it appears in the document body.
111
132
 
112
133
  :raises DocumentNotFoundError: The document does not exist within MarkLogic
113
134
  """
114
- self.uri: DocumentURIString = DocumentURIString(uri.strip("/"))
135
+ self.uri: DocumentURIString = uri
115
136
  self.api_client: MarklogicApiClient = api_client
116
137
  if not self.document_exists():
117
138
  raise DocumentNotFoundError(f"Document {self.uri} does not exist")
@@ -123,7 +144,7 @@ class Document:
123
144
  search_query=search_query,
124
145
  ),
125
146
  )
126
- """ `Document.body` represents the XML of the document itself, without any information such as version tracking or properties. """
147
+ """ `Document.body` represents the body of the document itself, without any information such as version tracking or properties. """
127
148
 
128
149
  def __repr__(self) -> str:
129
150
  name = self.body.name or "un-named"
@@ -4,3 +4,7 @@ class CannotPublishUnpublishableDocument(Exception):
4
4
 
5
5
  class DocumentNotSafeForDeletion(Exception):
6
6
  """A document which is not safe for deletion cannot be deleted."""
7
+
8
+
9
+ class InvalidDocumentURIException(Exception):
10
+ """The document URI is not valid."""
@@ -10,7 +10,7 @@ from caselawclient.models.neutral_citation_mixin import NeutralCitationMixin
10
10
  if TYPE_CHECKING:
11
11
  from caselawclient.models.press_summaries import PressSummary
12
12
 
13
- from .documents import Document
13
+ from .documents import Document, DocumentURIString
14
14
 
15
15
 
16
16
  class Judgment(NeutralCitationMixin, Document):
@@ -21,8 +21,8 @@ class Judgment(NeutralCitationMixin, Document):
21
21
  document_noun = "judgment"
22
22
  document_noun_plural = "judgments"
23
23
 
24
- def __init__(self, *args: Any, **kwargs: Any) -> None:
25
- super().__init__(self.document_noun, *args, **kwargs)
24
+ def __init__(self, uri: DocumentURIString, *args: Any, **kwargs: Any) -> None:
25
+ super().__init__(self.document_noun, uri, *args, **kwargs)
26
26
 
27
27
  @cached_property
28
28
  def neutral_citation(self) -> NeutralCitationString:
@@ -46,8 +46,9 @@ class Judgment(NeutralCitationMixin, Document):
46
46
  Attempt to fetch a linked press summary, and return it, if it exists
47
47
  """
48
48
  try:
49
- uri = self.uri + "/press-summary/1"
50
- PressSummary = importlib.import_module("caselawclient.models.press_summaries").PressSummary
51
- return PressSummary(uri, self.api_client) # type: ignore
49
+ uri = DocumentURIString(self.uri + "/press-summary/1")
50
+ if not TYPE_CHECKING: # This isn't nice, but will be cleaned up when we refactor how related documents work
51
+ PressSummary = importlib.import_module("caselawclient.models.press_summaries").PressSummary
52
+ return PressSummary(uri, self.api_client)
52
53
  except DocumentNotFoundError:
53
54
  return None
@@ -9,7 +9,7 @@ from ds_caselaw_utils.types import NeutralCitationString
9
9
  from caselawclient.errors import DocumentNotFoundError
10
10
  from caselawclient.models.neutral_citation_mixin import NeutralCitationMixin
11
11
 
12
- from .documents import Document
12
+ from .documents import Document, DocumentURIString
13
13
 
14
14
  if TYPE_CHECKING:
15
15
  from caselawclient.models.judgments import Judgment
@@ -23,8 +23,8 @@ class PressSummary(NeutralCitationMixin, Document):
23
23
  document_noun = "press summary"
24
24
  document_noun_plural = "press summaries"
25
25
 
26
- def __init__(self, *args: Any, **kwargs: Any) -> None:
27
- super().__init__(self.document_noun, *args, **kwargs)
26
+ def __init__(self, uri: DocumentURIString, *args: Any, **kwargs: Any) -> None:
27
+ super().__init__(self.document_noun, uri, *args, **kwargs)
28
28
 
29
29
  @cached_property
30
30
  def neutral_citation(self) -> NeutralCitationString:
@@ -47,8 +47,9 @@ class PressSummary(NeutralCitationMixin, Document):
47
47
  Attempt to fetch a linked judgement, and return it, if it exists
48
48
  """
49
49
  try:
50
- uri = self.uri.removesuffix("/press-summary/1")
51
- Judgment = importlib.import_module("caselawclient.models.judgments").Judgment
52
- return Judgment(uri, self.api_client) # type: ignore
50
+ uri = DocumentURIString(self.uri.removesuffix("/press-summary/1"))
51
+ if not TYPE_CHECKING: # This isn't nice, but will be cleaned up when we refactor how related documents work
52
+ Judgment = importlib.import_module("caselawclient.models.judgments").Judgment
53
+ return Judgment(uri, self.api_client)
53
54
  except DocumentNotFoundError:
54
55
  return None
@@ -12,14 +12,14 @@ uk_namespace = {"uk": "https://caselaw.nationalarchives.gov.uk/akn"}
12
12
 
13
13
 
14
14
  class VersionsDict(TypedDict):
15
- uri: str
15
+ uri: str ## TODO: This should be either a MarkLogicDocumentURIString (raw from ML) or a DocumentURIString (and we parse it out). Just a str is too vague.
16
16
  version: int
17
17
 
18
18
 
19
19
  def render_versions(decoded_versions: list[BodyPart]) -> list[VersionsDict]:
20
20
  versions: list[VersionsDict] = [
21
21
  {
22
- "uri": part.text.rstrip(".xml"),
22
+ "uri": part.text.strip("/").rstrip(".xml"),
23
23
  "version": extract_version(part.text),
24
24
  }
25
25
  for part in decoded_versions
@@ -14,7 +14,7 @@ let $docTypeQuery := cts:element-attribute-value-query(
14
14
  )
15
15
  let $refQuery := cts:element-query(
16
16
  xs:QName("uk:summaryOf"),
17
- concat("https://caselaw.nationalarchives.gov.uk/id", $parent_uri)
17
+ concat("https://caselaw.nationalarchives.gov.uk/id/", $parent_uri)
18
18
  )
19
19
 
20
20
  return xdmp:node-uri(cts:search(//akn:akomaNtoso, cts:and-query(($refQuery, $collectionQuery, $docTypeQuery))))
@@ -11,20 +11,26 @@ xdmp:to-json(xdmp:sql(
11
11
  "SELECT process_data.uri, enrich_version_string, minutes_since_enrichment_request
12
12
  FROM (
13
13
  SELECT
14
+ propertysummary.published,
14
15
  process_data.uri,
15
16
  enrich_version_string, enrich_major_version, enrich_minor_version,
16
17
  parser_major_version, parser_minor_version,
17
18
  DATEDIFF('minute', last_sent_to_enrichment, CURRENT_TIMESTAMP) AS minutes_since_enrichment_request
18
19
  FROM documents.process_data
19
20
  JOIN documents.process_property_data ON process_data.uri = process_property_data.uri
21
+ JOIN documents.propertysummary ON process_data.uri = propertysummary.uri
20
22
  )
21
- WHERE (
22
- (enrich_version_string IS NULL) OR
23
- (enrich_major_version <= @target_enrichment_major_version AND enrich_minor_version < @target_enrichment_minor_version)
24
- ) AND (
25
- (parser_major_version = @target_parser_major_version AND parser_minor_version = @target_parser_minor_version)
26
- )
27
- AND (minutes_since_enrichment_request > 43200 OR minutes_since_enrichment_request IS NULL)
23
+ WHERE
24
+ (minutes_since_enrichment_request > 43200 OR minutes_since_enrichment_request IS NULL) AND
25
+ (propertysummary.published = 'true') AND
26
+ ( enrich_version_string IS NULL
27
+ OR
28
+ (
29
+ (enrich_major_version <= @target_enrichment_major_version AND enrich_minor_version < @target_enrichment_minor_version)
30
+ AND
31
+ (parser_major_version = @target_parser_major_version AND parser_minor_version = @target_parser_minor_version)
32
+ )
33
+ )
28
34
  ORDER BY enrich_major_version ASC NULLS FIRST, enrich_minor_version ASC
29
35
  LIMIT @maximum_records",
30
36
  "array",
@@ -0,0 +1,18 @@
1
+ xquery version "1.0-ml";
2
+
3
+ declare namespace xdmp="http://marklogic.com/xdmp";
4
+ xdmp:to-json(xdmp:sql(
5
+ "SELECT *, process_data.uri, hours_since_enrichment_request, enrich_major_version, enrich_minor_version
6
+ FROM (
7
+ SELECT
8
+ process_data.uri, enrich_major_version, enrich_minor_version,
9
+ DATEDIFF('hour', last_sent_to_enrichment, CURRENT_TIMESTAMP) AS hours_since_enrichment_request
10
+ FROM documents.process_data
11
+ JOIN documents.process_property_data ON process_data.uri = process_property_data.uri
12
+ )
13
+ ORDER BY hours_since_enrichment_request ASC
14
+ LIMIT 1000",
15
+ "array",
16
+ map:new((
17
+ ))
18
+ ))
@@ -0,0 +1,19 @@
1
+ xquery version "1.0-ml";
2
+
3
+ declare namespace xdmp="http://marklogic.com/xdmp";
4
+ xdmp:to-json(xdmp:sql(
5
+ "SELECT process_data.uri, hours_since_parse_request, parser_major_version, parser_minor_version
6
+ FROM (
7
+ SELECT
8
+ process_data.uri, parser_major_version, parser_minor_version,
9
+ DATEDIFF('hour', last_sent_to_parser, CURRENT_TIMESTAMP) AS hours_since_parse_request
10
+ FROM documents.process_data
11
+ JOIN documents.process_property_data ON process_data.uri = process_property_data.uri
12
+ )
13
+ ORDER BY hours_since_parse_request ASC
14
+ LIMIT 1000",
15
+ "array",
16
+ map:new((
17
+ ))
18
+ ))
19
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ds-caselaw-marklogic-api-client
3
- Version: 27.3.0
3
+ Version: 28.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
@@ -1,21 +1,21 @@
1
- caselawclient/Client.py,sha256=oMWfL0FwKdWyMtk_0qf6uxWJvsHLSps8vxDsAC9GxeI,40668
1
+ caselawclient/Client.py,sha256=M1fsZhEJDb7_ikUOYt2qNKPOjBMZB-QnX0FQFvX92nM,41741
2
2
  caselawclient/__init__.py,sha256=DY-caubLDQWWingSdsBWgovDNXh8KcnkI6kwz08eIFk,612
3
3
  caselawclient/client_helpers/__init__.py,sha256=fyDNKCdrTb2N0Ks23YDhmvlXKfLTHnYQCXhnZb-QQbg,3832
4
4
  caselawclient/client_helpers/search_helpers.py,sha256=R99HyRLeYHgsw2L3DOidEqlKLLvs6Tga5rKTuWQViig,1525
5
5
  caselawclient/content_hash.py,sha256=0cPC4OoABq0SC2wYFX9-24DodNigeOqksDxgxQH_hUA,2221
6
6
  caselawclient/errors.py,sha256=tV0vs3wYSd331BzmfuRiZV6GAdsd91rtN65ymRaSx3s,3164
7
- caselawclient/factories.py,sha256=wTGGP8VyUME2gwbnuYE2uC5PdCdJ2PXF9gEET3U9CZg,4356
7
+ caselawclient/factories.py,sha256=PGLn2rjiQsj_JGixkgLMoe-krcvRI084kEeyDnCalo0,4408
8
8
  caselawclient/models/__init__.py,sha256=kd23EUpvaC7aLHdgk8farqKAQEx3lf7RvNT2jEatvlg,68
9
- caselawclient/models/documents/__init__.py,sha256=uNjmmNKAthBmB6RSNlmJPir3E2MGrYkcP17iEY-xtkk,17100
9
+ caselawclient/models/documents/__init__.py,sha256=GjCx1_X5Q08ANae_e44jTrYPj7gPuhQsKNSeuFxXQBo,18074
10
10
  caselawclient/models/documents/body.py,sha256=mtdjmG1WU2qSpyRLS8-PWcSoXpDa2Qz6xlcTbxZgxvA,5603
11
- caselawclient/models/documents/exceptions.py,sha256=Mz1P8uNqf5w6uLnRwJt6xK7efsVqtd5VA-WXUUH7QLk,285
11
+ caselawclient/models/documents/exceptions.py,sha256=rw1xId16vBKvBImgFmFUpeFgKqU7VTNtVLIEVBPGKyk,374
12
12
  caselawclient/models/documents/statuses.py,sha256=Cp4dTQmJOtsU41EJcxy5dV1841pGD2PNWH0VrkDEv4Q,579
13
13
  caselawclient/models/documents/transforms/html.xsl,sha256=oSSO-IBX4qLiSWexQYmWJfGNevF09aCBx4D1NYqXxpo,38322
14
14
  caselawclient/models/documents/xml.py,sha256=afEsgcnTThqW_gKYq-VGtFr4ovOoT2J7h2gXX7F8BbE,1267
15
- caselawclient/models/judgments.py,sha256=SuCNtOD4LElp37df4dvhaD0umTowioWH0sZNmBgFsoE,1739
15
+ caselawclient/models/judgments.py,sha256=NVOg4ZTU7Jtr33UuswL2TXCaN6_W0fKFPK4EdQ-jUhE,1915
16
16
  caselawclient/models/neutral_citation_mixin.py,sha256=5ktKCPIDidVRwxVTzx5e242O1BxOdP--1dnatZyTbYI,1773
17
- caselawclient/models/press_summaries.py,sha256=ZJ5ZhamPTsj6-vO1g96aP_syzUC2RlLMhgr3xnI1PoM,1703
18
- caselawclient/models/utilities/__init__.py,sha256=aL1a2nDacPxninETeaVZKwOxZemgvm73IcpWgMNXoGc,1100
17
+ caselawclient/models/press_summaries.py,sha256=06flQ8wSLnNxoQtXO0ckmotFKszYZcub0oPcDzYbVQw,1879
18
+ caselawclient/models/utilities/__init__.py,sha256=u3yIhbTjFQ1JJyAm5wsMEBswWl4t6Z7UMORF5FqC2xQ,1257
19
19
  caselawclient/models/utilities/aws.py,sha256=YQeuFdF5NvhUxo3Ejj3PURDlygA73oq2T42ltuQZ6Oo,8073
20
20
  caselawclient/models/utilities/dates.py,sha256=WwORxVjUHM1ZFcBF6Qtwo3Cj0sATsnSECkUZ6ls1N1Q,492
21
21
  caselawclient/models/utilities/move.py,sha256=Rsx1eGHVjbGz0WMVDjy8b_5t4Ig8aP55sLudL07MVUs,3621
@@ -34,17 +34,19 @@ caselawclient/xquery/delete_judgment.xqy,sha256=-t5uc_3nCKM1HMYqlfVxv_M4Ng2jGrEJ
34
34
  caselawclient/xquery/document_collections.xqy,sha256=hbKY4CNiqZTK6IiLOcIqOKim4YbJxzOsItis6N4pQmw,267
35
35
  caselawclient/xquery/document_exists.xqy,sha256=eh9pttmU9THjoUWT4eYckzJvWlHrAyKYbGjbCJvzscY,95
36
36
  caselawclient/xquery/get_combined_stats_table.xqy,sha256=cclNqSzIB6sX6A_hgVOFZonpPpwqZt9hofu1a_-jfuo,694
37
- caselawclient/xquery/get_components_for_document.xqy,sha256=qh_F56XEDyVKMIaN4J1fskcjYK3Mc6JR8ARGwS2b0lw,768
37
+ caselawclient/xquery/get_components_for_document.xqy,sha256=qBOn5OI7ThK0OHizSm68oySfAdp2dsHFJaIMTI4iIC0,769
38
38
  caselawclient/xquery/get_highest_enrichment_version.xqy,sha256=a0dwVmEZuIMyRjIlvenSmbOaaN0WvgaCZvMtVWoLulQ,247
39
39
  caselawclient/xquery/get_highest_parser_version.xqy,sha256=LW3iSg4eWArbfBaCVWWOpr4MoUcDBz514nV48ElOsAM,247
40
40
  caselawclient/xquery/get_judgment.xqy,sha256=8V-sEFKmtpf2LIZD9QKVRfpblEsmDpP4BA6QztSCyHA,2216
41
41
  caselawclient/xquery/get_judgment_checkout_status.xqy,sha256=mdY9UXLyzQdB7byEERPqentlr0YDLbXRVqH0h4UuZTQ,193
42
42
  caselawclient/xquery/get_judgment_version.xqy,sha256=wF9k9-CBrqo8VbxxyTrD-AGzR3-3jMm25tRVCjxPLrU,292
43
43
  caselawclient/xquery/get_last_modified.xqy,sha256=8fCm_7o_kkytCEmEeSTLWzLP7iOjuPV01IfHDgf6HaQ,172
44
- caselawclient/xquery/get_pending_enrichment_for_version.xqy,sha256=S5r5h1iyn_wDQXLEh2MzK8qQ1Jiq-1lRsKgDa8L16yY,1821
44
+ caselawclient/xquery/get_pending_enrichment_for_version.xqy,sha256=8J5Pi-jMXJd_BgtpK4g6C9uR99HP57JpFv5WkoPfNuo,2016
45
45
  caselawclient/xquery/get_pending_parse_for_version.xqy,sha256=9cjVZtHeBBjm-a7RMsn1PVJt_Ug78YFlmp5CN8VJ1jQ,1197
46
46
  caselawclient/xquery/get_properties_for_search_results.xqy,sha256=Tlv3EKwVV_q-JyQyhjWVHIleicPDpucxP4ScuQjpgSw,625
47
47
  caselawclient/xquery/get_property.xqy,sha256=RHlOTrK0aH-S7s_ykYzGmUeKOJxXlI4vE5sKRt556NY,209
48
+ caselawclient/xquery/get_recently_enriched.xqy,sha256=qSA9EYlKaAyYwewBRj494aC_JnzlLzbsWyTgWIJqFbw,614
49
+ caselawclient/xquery/get_recently_parsed.xqy,sha256=k8NP72O11FyDZ3MeKAJWlcrzPsynhPTddYIeS0pRaII,594
48
50
  caselawclient/xquery/get_version_annotation.xqy,sha256=pFDMGA9SxI59iUPaoAeUsq23kUp4Op7cUg-PFNFqxcI,262
49
51
  caselawclient/xquery/get_version_created.xqy,sha256=bRweaXFtwMBNzL16SlOdiOxHkbqNUwpwDHLxpZYVCh0,250
50
52
  caselawclient/xquery/insert_document.xqy,sha256=iP2xTaLGa-u6X9KfS1yJ6yPCKQUWQFYdEW1S4YcMY7w,531
@@ -66,7 +68,7 @@ caselawclient/xquery/validate_document.xqy,sha256=PgaDcnqCRJPIVqfmWsNlXmCLNKd21q
66
68
  caselawclient/xquery/xslt.xqy,sha256=w57wNijH3dkwHkpKeAxqjlghVflQwo8cq6jS_sm-erM,199
67
69
  caselawclient/xquery/xslt_transform.xqy,sha256=smyFFxqmtkuOzBd2l7uw6K2oAsYctudrP8omdv_XNAM,2463
68
70
  caselawclient/xquery_type_dicts.py,sha256=AUEmycChASKl8sbqVQWe6WA0s-lIfEqh9mA-GdnUCQ8,5692
69
- ds_caselaw_marklogic_api_client-27.3.0.dist-info/LICENSE.md,sha256=fGMzyyLuQW-IAXUeDSCrRdsYW536aEWThdbpCjo6ZKg,1108
70
- ds_caselaw_marklogic_api_client-27.3.0.dist-info/METADATA,sha256=GltSiGOxA1e5fTsNbAdFhCjVwxQe7XAWS__-eZ165AM,4232
71
- ds_caselaw_marklogic_api_client-27.3.0.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
72
- ds_caselaw_marklogic_api_client-27.3.0.dist-info/RECORD,,
71
+ ds_caselaw_marklogic_api_client-28.0.0.dist-info/LICENSE.md,sha256=fGMzyyLuQW-IAXUeDSCrRdsYW536aEWThdbpCjo6ZKg,1108
72
+ ds_caselaw_marklogic_api_client-28.0.0.dist-info/METADATA,sha256=a2fOk_l8-GbQTwo9GYl2PdqaCSj_jrKNv48gqXl0eOE,4232
73
+ ds_caselaw_marklogic_api_client-28.0.0.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
74
+ ds_caselaw_marklogic_api_client-28.0.0.dist-info/RECORD,,