tablassert 7.4.4__tar.gz → 7.4.5__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 (63) hide show
  1. {tablassert-7.4.4 → tablassert-7.4.5}/.gitignore +1 -0
  2. {tablassert-7.4.4 → tablassert-7.4.5}/CHANGELOG.md +7 -0
  3. {tablassert-7.4.4 → tablassert-7.4.5}/PKG-INFO +2 -1
  4. {tablassert-7.4.4 → tablassert-7.4.5}/docs/changelog.md +4 -3
  5. {tablassert-7.4.4 → tablassert-7.4.5}/pyproject.toml +2 -1
  6. {tablassert-7.4.4 → tablassert-7.4.5}/src/tablassert/models.py +13 -2
  7. {tablassert-7.4.4 → tablassert-7.4.5}/uv.lock +12 -1
  8. {tablassert-7.4.4 → tablassert-7.4.5}/.github/workflows/autotag.yml +0 -0
  9. {tablassert-7.4.4 → tablassert-7.4.5}/.github/workflows/docker.yml +0 -0
  10. {tablassert-7.4.4 → tablassert-7.4.5}/.github/workflows/docs.yml +0 -0
  11. {tablassert-7.4.4 → tablassert-7.4.5}/.github/workflows/pipy.yml +0 -0
  12. {tablassert-7.4.4 → tablassert-7.4.5}/.pre-commit-config.yaml +0 -0
  13. {tablassert-7.4.4 → tablassert-7.4.5}/AGENTS.md +0 -0
  14. {tablassert-7.4.4 → tablassert-7.4.5}/CITATION.cff +0 -0
  15. {tablassert-7.4.4 → tablassert-7.4.5}/CONTRIBUTING.md +0 -0
  16. {tablassert-7.4.4 → tablassert-7.4.5}/Dockerfile +0 -0
  17. {tablassert-7.4.4 → tablassert-7.4.5}/LICENSE +0 -0
  18. {tablassert-7.4.4 → tablassert-7.4.5}/README.md +0 -0
  19. {tablassert-7.4.4 → tablassert-7.4.5}/docs/api/fullmap.md +0 -0
  20. {tablassert-7.4.4 → tablassert-7.4.5}/docs/api/lib.md +0 -0
  21. {tablassert-7.4.4 → tablassert-7.4.5}/docs/api/qc.md +0 -0
  22. {tablassert-7.4.4 → tablassert-7.4.5}/docs/api/utils.md +0 -0
  23. {tablassert-7.4.4 → tablassert-7.4.5}/docs/cli.md +0 -0
  24. {tablassert-7.4.4 → tablassert-7.4.5}/docs/configuration/advanced-example.md +0 -0
  25. {tablassert-7.4.4 → tablassert-7.4.5}/docs/configuration/graph.md +0 -0
  26. {tablassert-7.4.4 → tablassert-7.4.5}/docs/configuration/table.md +0 -0
  27. {tablassert-7.4.4 → tablassert-7.4.5}/docs/datassert.md +0 -0
  28. {tablassert-7.4.4 → tablassert-7.4.5}/docs/docker.md +0 -0
  29. {tablassert-7.4.4 → tablassert-7.4.5}/docs/examples/tutorial-data.csv +0 -0
  30. {tablassert-7.4.4 → tablassert-7.4.5}/docs/examples/tutorial-graph.yaml +0 -0
  31. {tablassert-7.4.4 → tablassert-7.4.5}/docs/examples/tutorial-table.yaml +0 -0
  32. {tablassert-7.4.4 → tablassert-7.4.5}/docs/examples.md +0 -0
  33. {tablassert-7.4.4 → tablassert-7.4.5}/docs/index.md +0 -0
  34. {tablassert-7.4.4 → tablassert-7.4.5}/docs/installation.md +0 -0
  35. {tablassert-7.4.4 → tablassert-7.4.5}/docs/tutorial.md +0 -0
  36. {tablassert-7.4.4 → tablassert-7.4.5}/llms.txt +0 -0
  37. {tablassert-7.4.4 → tablassert-7.4.5}/mkdocs.yml +0 -0
  38. {tablassert-7.4.4 → tablassert-7.4.5}/src/tablassert/__init__.py +0 -0
  39. {tablassert-7.4.4 → tablassert-7.4.5}/src/tablassert/cli.py +0 -0
  40. {tablassert-7.4.4 → tablassert-7.4.5}/src/tablassert/downloader.py +0 -0
  41. {tablassert-7.4.4 → tablassert-7.4.5}/src/tablassert/enums.py +0 -0
  42. {tablassert-7.4.4 → tablassert-7.4.5}/src/tablassert/fullmap.py +0 -0
  43. {tablassert-7.4.4 → tablassert-7.4.5}/src/tablassert/ingests.py +0 -0
  44. {tablassert-7.4.4 → tablassert-7.4.5}/src/tablassert/lib.py +0 -0
  45. {tablassert-7.4.4 → tablassert-7.4.5}/src/tablassert/log.py +0 -0
  46. {tablassert-7.4.4 → tablassert-7.4.5}/src/tablassert/nlp.py +0 -0
  47. {tablassert-7.4.4 → tablassert-7.4.5}/src/tablassert/progress.py +0 -0
  48. {tablassert-7.4.4 → tablassert-7.4.5}/src/tablassert/qc.py +0 -0
  49. {tablassert-7.4.4 → tablassert-7.4.5}/src/tablassert/utils.py +0 -0
  50. {tablassert-7.4.4 → tablassert-7.4.5}/tests/__init__.py +0 -0
  51. {tablassert-7.4.4 → tablassert-7.4.5}/tests/conftest.py +0 -0
  52. {tablassert-7.4.4 → tablassert-7.4.5}/tests/fixtures/invalid_section_missing_source.yaml +0 -0
  53. {tablassert-7.4.4 → tablassert-7.4.5}/tests/fixtures/minimal_section.yaml +0 -0
  54. {tablassert-7.4.4 → tablassert-7.4.5}/tests/fixtures/minimal_section_with_sections.yaml +0 -0
  55. {tablassert-7.4.4 → tablassert-7.4.5}/tests/test_downloader.py +0 -0
  56. {tablassert-7.4.4 → tablassert-7.4.5}/tests/test_enums.py +0 -0
  57. {tablassert-7.4.4 → tablassert-7.4.5}/tests/test_fullmap.py +0 -0
  58. {tablassert-7.4.4 → tablassert-7.4.5}/tests/test_ingests.py +0 -0
  59. {tablassert-7.4.4 → tablassert-7.4.5}/tests/test_lib.py +0 -0
  60. {tablassert-7.4.4 → tablassert-7.4.5}/tests/test_models.py +0 -0
  61. {tablassert-7.4.4 → tablassert-7.4.5}/tests/test_nlp.py +0 -0
  62. {tablassert-7.4.4 → tablassert-7.4.5}/tests/test_qc.py +0 -0
  63. {tablassert-7.4.4 → tablassert-7.4.5}/tests/test_utils.py +0 -0
@@ -9,6 +9,7 @@
9
9
  *specs/
10
10
  *.storassert/
11
11
  *.logassert/
12
+ *.cachassert/
12
13
  *DATALAKE/
13
14
  *.onnxassert/
14
15
  *.claude/
@@ -2,6 +2,13 @@
2
2
 
3
3
  All notable changes to this project are documented in this file.
4
4
 
5
+ ## 7.4.5 - 2026-05-11
6
+
7
+ ### Changes
8
+ - Cached `BaseSource.is_real_url` validator results to a `diskcache.Cache` at `.cachassert/` in `models.py`, so repeated config parses skip redundant `httpx.head()` round-trips against unchanged URLs.
9
+ - Increased `is_real_url` `httpx.head()` timeout from 5.0s to 15.0s to further reduce spurious validation failures against slow upstreams.
10
+ - Added `diskcache>=5.6.3` runtime dependency.
11
+
5
12
  ## 7.4.4 - 2026-05-11
6
13
 
7
14
  ### Changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tablassert
3
- Version: 7.4.4
3
+ Version: 7.4.5
4
4
  Summary: Extract knowledge assertions from tabular data into NCATS Translator-compliant KGX NDJSON — declaratively, with entity resolution and quality control built in.
5
5
  Project-URL: Homepage, https://github.com/SkyeAv/Tablassert
6
6
  Project-URL: Source, https://github.com/SkyeAv/Tablassert
@@ -25,6 +25,7 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
25
25
  Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
26
26
  Requires-Python: >=3.11
27
27
  Requires-Dist: cyclopts>=1.0.0
28
+ Requires-Dist: diskcache>=5.6.3
28
29
  Requires-Dist: duckdb>=1.5.0
29
30
  Requires-Dist: fastexcel>=0.19.0
30
31
  Requires-Dist: httpx>=0.28.1
@@ -4,11 +4,12 @@ The canonical release history lives in the repository root at [`CHANGELOG.md`](h
4
4
 
5
5
  ## Current Release Notes
6
6
 
7
- ## 7.4.4 - 2026-05-11
7
+ ## 7.4.5 - 2026-05-11
8
8
 
9
9
  ### Changes
10
10
 
11
- - Relaxed the `url` field validator in `BaseSource` to only fail on 4xx responses from `httpx.head()`. Sources whose servers return 5xx or other non-2xx statuses to `HEAD` requests now pass config validation, since the URL itself is still well-formed.
12
- - Increased the `httpx.head()` timeout in the `url` validator from 3.0s to 5.0s to tolerate slower upstreams.
11
+ - Cached `url` field validator results in `BaseSource` to a `diskcache.Cache` stored at `.cachassert/`, so repeated config parses skip redundant `httpx.head()` round-trips against unchanged URLs.
12
+ - Increased the `httpx.head()` timeout in the `url` validator from 5.0s to 15.0s to further tolerate slower upstreams.
13
+ - Added `diskcache` as a runtime dependency.
13
14
 
14
15
  For older releases and the full project history, open the root `CHANGELOG.md` in the repository.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tablassert"
3
- version = "7.4.4"
3
+ version = "7.4.5"
4
4
  description = "Extract knowledge assertions from tabular data into NCATS Translator-compliant KGX NDJSON — declaratively, with entity resolution and quality control built in."
5
5
  authors = [
6
6
  { name = "Skye Lane Goetz", email = "sgoetz@isbscience.org" }
@@ -59,6 +59,7 @@ dependencies = [
59
59
  "cyclopts>=1.0.0",
60
60
  "rich>=13.0.0",
61
61
  "xxhash>=3.6.0",
62
+ "diskcache>=5.6.3",
62
63
  ]
63
64
 
64
65
  [project.urls]
@@ -6,6 +6,7 @@ from pathlib import Path
6
6
  from typing import TYPE_CHECKING, Any, Literal, Optional, Self, Union
7
7
 
8
8
  import lazy_loader as Lazy
9
+ from diskcache import Cache
9
10
  from pydantic import BaseModel, ConfigDict, Field, HttpUrl, PositiveInt, field_validator, model_validator
10
11
 
11
12
  from tablassert.enums import (
@@ -72,19 +73,29 @@ class Reindex(TablaBase):
72
73
  return self
73
74
 
74
75
 
76
+ CACHE: Path = Path(".cachassert/")
77
+ CACHE.mkdir(parents=True, exist_ok=True)
78
+
79
+ URL_CACHE: Cache = Cache(CACHE)
80
+
81
+
75
82
  class BaseSource(TablaBase):
76
83
  local: Path = Field(..., description="Local path to read from or download into.")
77
84
  url: HttpUrl = Field(..., description="Remote source URL fetched before parsing.")
78
85
 
79
86
  @field_validator("url", mode="after")
80
87
  @classmethod
81
- def is_real_url(cls, url: HttpUrl, timeout: float = 5.0) -> HttpUrl:
88
+ def is_real_url(cls, url: HttpUrl) -> HttpUrl:
82
89
  s: str = str(url)
83
90
 
84
- try:
91
+ @URL_CACHE.memoize()
92
+ def check_url(s: str, timeout: float = 15.0) -> None:
85
93
  r: Any = httpx.head(s, timeout=timeout, follow_redirects=True)
86
94
  if 400 <= r.status_code < 500:
87
95
  r.raise_for_status()
96
+
97
+ try:
98
+ check_url(s)
88
99
  except Exception as e:
89
100
  msg: str = f"12 | not a real url {s} | {e}"
90
101
  raise ValueError(msg)
@@ -293,6 +293,15 @@ wheels = [
293
293
  { url = "https://files.pythonhosted.org/packages/23/18/4cedda786e7da429e7489549a9e5461530d4133130e541f25fb94f015776/cyclopts-4.11.2-py3-none-any.whl", hash = "sha256:838020120b939549ff7c8423aca29c86764b5dd1d8a5d7f3753a6327861f537b", size = 213537, upload-time = "2026-05-04T00:11:56.103Z" },
294
294
  ]
295
295
 
296
+ [[package]]
297
+ name = "diskcache"
298
+ version = "5.6.3"
299
+ source = { registry = "https://pypi.org/simple" }
300
+ sdist = { url = "https://files.pythonhosted.org/packages/3f/21/1c1ffc1a039ddcc459db43cc108658f32c57d271d7289a2794e401d0fdb6/diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc", size = 67916, upload-time = "2023-08-31T06:12:00.316Z" }
301
+ wheels = [
302
+ { url = "https://files.pythonhosted.org/packages/3f/27/4570e78fc0bf5ea0ca45eb1de3818a23787af9b390c0b0a0033a1b8236f9/diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19", size = 45550, upload-time = "2023-08-31T06:11:58.822Z" },
303
+ ]
304
+
296
305
  [[package]]
297
306
  name = "distlib"
298
307
  version = "0.4.0"
@@ -2351,10 +2360,11 @@ wheels = [
2351
2360
 
2352
2361
  [[package]]
2353
2362
  name = "tablassert"
2354
- version = "7.4.4"
2363
+ version = "7.4.5"
2355
2364
  source = { editable = "." }
2356
2365
  dependencies = [
2357
2366
  { name = "cyclopts" },
2367
+ { name = "diskcache" },
2358
2368
  { name = "duckdb" },
2359
2369
  { name = "fastexcel" },
2360
2370
  { name = "httpx" },
@@ -2401,6 +2411,7 @@ dev = [
2401
2411
  [package.metadata]
2402
2412
  requires-dist = [
2403
2413
  { name = "cyclopts", specifier = ">=1.0.0" },
2414
+ { name = "diskcache", specifier = ">=5.6.3" },
2404
2415
  { name = "duckdb", specifier = ">=1.5.0" },
2405
2416
  { name = "fastexcel", specifier = ">=0.19.0" },
2406
2417
  { name = "httpx", specifier = ">=0.28.1" },
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