tablassert 7.3.4__tar.gz → 7.3.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 (61) hide show
  1. {tablassert-7.3.4 → tablassert-7.3.5}/CHANGELOG.md +5 -0
  2. {tablassert-7.3.4 → tablassert-7.3.5}/PKG-INFO +8 -6
  3. {tablassert-7.3.4 → tablassert-7.3.5}/README.md +7 -5
  4. tablassert-7.3.5/docs/changelog.md +13 -0
  5. {tablassert-7.3.4 → tablassert-7.3.5}/docs/configuration/table.md +55 -55
  6. {tablassert-7.3.4 → tablassert-7.3.5}/pyproject.toml +1 -1
  7. {tablassert-7.3.4 → tablassert-7.3.5}/src/tablassert/models.py +3 -1
  8. {tablassert-7.3.4 → tablassert-7.3.5}/uv.lock +1 -1
  9. tablassert-7.3.4/docs/changelog.md +0 -13
  10. {tablassert-7.3.4 → tablassert-7.3.5}/.github/workflows/autotag.yml +0 -0
  11. {tablassert-7.3.4 → tablassert-7.3.5}/.github/workflows/docker.yml +0 -0
  12. {tablassert-7.3.4 → tablassert-7.3.5}/.github/workflows/docs.yml +0 -0
  13. {tablassert-7.3.4 → tablassert-7.3.5}/.github/workflows/pipy.yml +0 -0
  14. {tablassert-7.3.4 → tablassert-7.3.5}/.gitignore +0 -0
  15. {tablassert-7.3.4 → tablassert-7.3.5}/.pre-commit-config.yaml +0 -0
  16. {tablassert-7.3.4 → tablassert-7.3.5}/AGENTS.md +0 -0
  17. {tablassert-7.3.4 → tablassert-7.3.5}/CITATION.cff +0 -0
  18. {tablassert-7.3.4 → tablassert-7.3.5}/CONTRIBUTING.md +0 -0
  19. {tablassert-7.3.4 → tablassert-7.3.5}/Dockerfile +0 -0
  20. {tablassert-7.3.4 → tablassert-7.3.5}/LICENSE +0 -0
  21. {tablassert-7.3.4 → tablassert-7.3.5}/docs/api/fullmap.md +0 -0
  22. {tablassert-7.3.4 → tablassert-7.3.5}/docs/api/lib.md +0 -0
  23. {tablassert-7.3.4 → tablassert-7.3.5}/docs/api/qc.md +0 -0
  24. {tablassert-7.3.4 → tablassert-7.3.5}/docs/api/utils.md +0 -0
  25. {tablassert-7.3.4 → tablassert-7.3.5}/docs/cli.md +0 -0
  26. {tablassert-7.3.4 → tablassert-7.3.5}/docs/configuration/advanced-example.md +0 -0
  27. {tablassert-7.3.4 → tablassert-7.3.5}/docs/configuration/graph.md +0 -0
  28. {tablassert-7.3.4 → tablassert-7.3.5}/docs/datassert.md +0 -0
  29. {tablassert-7.3.4 → tablassert-7.3.5}/docs/docker.md +0 -0
  30. {tablassert-7.3.4 → tablassert-7.3.5}/docs/examples/tutorial-data.csv +0 -0
  31. {tablassert-7.3.4 → tablassert-7.3.5}/docs/examples/tutorial-graph.yaml +0 -0
  32. {tablassert-7.3.4 → tablassert-7.3.5}/docs/examples/tutorial-table.yaml +0 -0
  33. {tablassert-7.3.4 → tablassert-7.3.5}/docs/examples.md +0 -0
  34. {tablassert-7.3.4 → tablassert-7.3.5}/docs/index.md +0 -0
  35. {tablassert-7.3.4 → tablassert-7.3.5}/docs/installation.md +0 -0
  36. {tablassert-7.3.4 → tablassert-7.3.5}/docs/tutorial.md +0 -0
  37. {tablassert-7.3.4 → tablassert-7.3.5}/llms.txt +0 -0
  38. {tablassert-7.3.4 → tablassert-7.3.5}/mkdocs.yml +0 -0
  39. {tablassert-7.3.4 → tablassert-7.3.5}/src/tablassert/__init__.py +0 -0
  40. {tablassert-7.3.4 → tablassert-7.3.5}/src/tablassert/cli.py +0 -0
  41. {tablassert-7.3.4 → tablassert-7.3.5}/src/tablassert/downloader.py +0 -0
  42. {tablassert-7.3.4 → tablassert-7.3.5}/src/tablassert/enums.py +0 -0
  43. {tablassert-7.3.4 → tablassert-7.3.5}/src/tablassert/fullmap.py +0 -0
  44. {tablassert-7.3.4 → tablassert-7.3.5}/src/tablassert/ingests.py +0 -0
  45. {tablassert-7.3.4 → tablassert-7.3.5}/src/tablassert/lib.py +0 -0
  46. {tablassert-7.3.4 → tablassert-7.3.5}/src/tablassert/log.py +0 -0
  47. {tablassert-7.3.4 → tablassert-7.3.5}/src/tablassert/nlp.py +0 -0
  48. {tablassert-7.3.4 → tablassert-7.3.5}/src/tablassert/qc.py +0 -0
  49. {tablassert-7.3.4 → tablassert-7.3.5}/src/tablassert/utils.py +0 -0
  50. {tablassert-7.3.4 → tablassert-7.3.5}/tests/__init__.py +0 -0
  51. {tablassert-7.3.4 → tablassert-7.3.5}/tests/conftest.py +0 -0
  52. {tablassert-7.3.4 → tablassert-7.3.5}/tests/fixtures/invalid_section_missing_source.yaml +0 -0
  53. {tablassert-7.3.4 → tablassert-7.3.5}/tests/fixtures/minimal_section.yaml +0 -0
  54. {tablassert-7.3.4 → tablassert-7.3.5}/tests/fixtures/minimal_section_with_sections.yaml +0 -0
  55. {tablassert-7.3.4 → tablassert-7.3.5}/tests/test_enums.py +0 -0
  56. {tablassert-7.3.4 → tablassert-7.3.5}/tests/test_fullmap.py +0 -0
  57. {tablassert-7.3.4 → tablassert-7.3.5}/tests/test_ingests.py +0 -0
  58. {tablassert-7.3.4 → tablassert-7.3.5}/tests/test_lib.py +0 -0
  59. {tablassert-7.3.4 → tablassert-7.3.5}/tests/test_models.py +0 -0
  60. {tablassert-7.3.4 → tablassert-7.3.5}/tests/test_nlp.py +0 -0
  61. {tablassert-7.3.4 → tablassert-7.3.5}/tests/test_utils.py +0 -0
@@ -2,6 +2,11 @@
2
2
 
3
3
  All notable changes to this project are documented in this file.
4
4
 
5
+ ## 7.3.5 - 2026-04-29
6
+
7
+ ### Documentation
8
+ - Tightened the table-configuration reference so field requirements, defaults, accepted enum values, row indexing, and column-reference examples match the strict `Section` schema and section-merging behavior implemented in `models.py`, `ingests.py`, and the runtime loader.
9
+
5
10
  ## 7.3.4 - 2026-04-28
6
11
 
7
12
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tablassert
3
- Version: 7.3.4
3
+ Version: 7.3.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
@@ -98,11 +98,13 @@ docker run --rm \
98
98
  ```bash
99
99
  # Build a knowledge graph from a YAML configuration
100
100
  $ tablassert build-knowledge-graph graph-config.yaml
101
- ⠋ Loading table configurations...
102
- Resolving entities across 10 DuckDB shards...
103
- Compiling subgraphs...
104
- Deduplicating nodes and edges...
105
- Finished — wrote MY_GRAPH_1.0.0.nodes.ndjson and MY_GRAPH_1.0.0.edges.ndjson
101
+ ⠋ Loading Tables...
102
+ Extracting Sections...
103
+ Building TCode...
104
+ Collecting Instructions...
105
+ Building Subgraphs...
106
+ ⠋ Compiling Graph...
107
+ ✓ Finished!
106
108
  ```
107
109
 
108
110
  Define your entities and relationships in YAML, point tablassert at your data, and get NCATS Translator-compliant KGX NDJSON out the other side — no code required. Intermediate section artifacts are staged in `.storassert/` during the build.
@@ -46,11 +46,13 @@ docker run --rm \
46
46
  ```bash
47
47
  # Build a knowledge graph from a YAML configuration
48
48
  $ tablassert build-knowledge-graph graph-config.yaml
49
- ⠋ Loading table configurations...
50
- Resolving entities across 10 DuckDB shards...
51
- Compiling subgraphs...
52
- Deduplicating nodes and edges...
53
- Finished — wrote MY_GRAPH_1.0.0.nodes.ndjson and MY_GRAPH_1.0.0.edges.ndjson
49
+ ⠋ Loading Tables...
50
+ Extracting Sections...
51
+ Building TCode...
52
+ Collecting Instructions...
53
+ Building Subgraphs...
54
+ ⠋ Compiling Graph...
55
+ ✓ Finished!
54
56
  ```
55
57
 
56
58
  Define your entities and relationships in YAML, point tablassert at your data, and get NCATS Translator-compliant KGX NDJSON out the other side — no code required. Intermediate section artifacts are staged in `.storassert/` during the build.
@@ -0,0 +1,13 @@
1
+ # Changelog
2
+
3
+ The canonical release history lives in the repository root at [`CHANGELOG.md`](https://github.com/SkyeAv/Tablassert/blob/main/CHANGELOG.md).
4
+
5
+ ## Current Release Notes
6
+
7
+ ## 7.3.5 - 2026-04-29
8
+
9
+ ### Documentation
10
+
11
+ - The table-configuration reference now matches the strict runtime schema and merge behavior, including field defaults, requiredness, accepted enum values, zero-based row indexing, and valid column-reference examples.
12
+
13
+ For older releases and the full project history, open the root `CHANGELOG.md` in the repository.
@@ -39,14 +39,14 @@ template:
39
39
 
40
40
  sections:
41
41
  - statement: # Section 1: Gene-Disease
42
- subject: {encoding: gene_column}
42
+ subject: {method: column, encoding: A}
43
43
  predicate: associated_with
44
- object: {encoding: disease_column}
44
+ object: {method: column, encoding: B}
45
45
 
46
46
  - statement: # Section 2: Gene-Pathway
47
- subject: {encoding: gene_column}
47
+ subject: {method: column, encoding: A}
48
48
  predicate: participates_in
49
- object: {encoding: pathway_column}
49
+ object: {method: column, encoding: C}
50
50
  ```
51
51
 
52
52
  ### Merge Behavior (fastmerge)
@@ -92,15 +92,15 @@ sections:
92
92
  **Single output:** Template only
93
93
  ```yaml
94
94
  template:
95
- source: {kind: text, local: data.csv}
95
+ source: {kind: text, local: data.csv, url: https://example.com/data.csv}
96
96
  statement: {...}
97
97
  ```
98
98
 
99
99
  **Multiple predicates, same source:**
100
100
  ```yaml
101
101
  template:
102
- source: {kind: excel, local: data.xlsx}
103
- provenance: {repo: PMC, publication: 123}
102
+ source: {kind: excel, local: data.xlsx, url: https://example.com/data.xlsx}
103
+ provenance: {repo: PMC, publication: 123, contributors: [{name: Example User, date: 27 JAN 2026}]}
104
104
 
105
105
  sections:
106
106
  - statement: {predicate: treats}
@@ -110,14 +110,14 @@ sections:
110
110
  **Multiple columns, shared provenance:**
111
111
  ```yaml
112
112
  template:
113
- source: {kind: text, local: data.csv}
114
- provenance: {repo: PMID, publication: 456}
113
+ source: {kind: text, local: data.csv, url: https://example.com/data.csv}
114
+ provenance: {repo: PMID, publication: 456, contributors: [{name: Example User, date: 27 JAN 2026}]}
115
115
  statement:
116
- subject: {encoding: gene_symbol}
116
+ subject: {method: column, encoding: A}
117
117
 
118
118
  sections:
119
- - statement: {object: {encoding: column_A}}
120
- - statement: {object: {encoding: column_B}}
119
+ - statement: {object: {method: column, encoding: B}}
120
+ - statement: {object: {method: column, encoding: C}}
121
121
  ```
122
122
 
123
123
  ## Configuration Schema
@@ -126,8 +126,8 @@ sections:
126
126
 
127
127
  | Field | Type | Required | Description |
128
128
  |-------|------|----------|-------------|
129
- | `syntax` | String | Yes | Configuration version (must be `"TC3"`) |
130
- | `status` | String | No | Development status: `"alpha"`, `"beta"`, `"primetime"` |
129
+ | `syntax` | String | No | Configuration version. Defaults to `"TC3"`. |
130
+ | `status` | String | No | Development status. Defaults to `"alpha"`; allowed values are `"alpha"`, `"beta"`, `"primetime"`. |
131
131
 
132
132
  ### Source
133
133
 
@@ -137,12 +137,12 @@ Defines the data file location and format.
137
137
 
138
138
  | Field | Type | Required | Description |
139
139
  |-------|------|----------|-------------|
140
- | `kind` | String | Yes | Must be `"excel"` |
140
+ | `kind` | String | No | Source kind. Model default is `"excel"`, but specify it explicitly in configs. |
141
141
  | `local` | Path | Yes | Local file path for caching |
142
142
  | `url` | URL | Yes | Download URL (HTTP/HTTPS) |
143
- | `sheet` | String | No | Sheet name (default: `"Sheet1"`) |
144
- | `row_slice` | List[Int\|"auto"] | No | Row range: `[start, end]` or `[start, "auto"]` |
145
- | `rows` | List[Int] | No | Specific rows to include |
143
+ | `sheet` | String | No | Sheet name. Defaults to `"Sheet1"`. |
144
+ | `row_slice` | List[Int\|"auto"] | No | Two-value zero-based crop bounds: `[start, stop]`. Each value may be an integer or `"auto"`. |
145
+ | `rows` | List[Int] | No | Zero-based row indices to keep after any `row_slice` crop. |
146
146
  | `reindex` | List[Reindex] | No | Conditional row filtering |
147
147
 
148
148
  **Example:**
@@ -153,7 +153,7 @@ source:
153
153
  url: https://example.com/data.xlsx
154
154
  sheet: "Sheet1"
155
155
  row_slice:
156
- - 2 # Start at row 2 (skip header)
156
+ - 1 # Start at the second physical row
157
157
  - auto # Read to end
158
158
  ```
159
159
 
@@ -161,12 +161,12 @@ source:
161
161
 
162
162
  | Field | Type | Required | Description |
163
163
  |-------|------|----------|-------------|
164
- | `kind` | String | Yes | Must be `"text"` |
164
+ | `kind` | String | No | Source kind. Model default is `"text"`, but specify it explicitly in configs. |
165
165
  | `local` | Path | Yes | Local file path for caching |
166
166
  | `url` | URL | Yes | Download URL |
167
- | `delimiter` | String | No | Column delimiter (default: `","`) |
168
- | `row_slice` | List[Int\|"auto"] | No | Row range |
169
- | `rows` | List[Int] | No | Specific rows |
167
+ | `delimiter` | String | No | Field delimiter. Defaults to `","`. |
168
+ | `row_slice` | List[Int\|"auto"] | No | Two-value zero-based crop bounds: `[start, stop]`. Each value may be an integer or `"auto"`. |
169
+ | `rows` | List[Int] | No | Zero-based row indices to keep after any `row_slice` crop. |
170
170
  | `reindex` | List[Reindex] | No | Conditional filtering |
171
171
 
172
172
  **Example:**
@@ -187,16 +187,16 @@ Filter rows based on column values.
187
187
 
188
188
  | Field | Type | Description |
189
189
  |-------|------|-------------|
190
- | `column` | String | Column name to evaluate |
191
- | `comparison` | String | Operator: `"eq"`, `"ne"`, `"lt"`, `"le"`, `"gt"`, `"ge"` |
190
+ | `column` | String | Source column letters to evaluate (`A`-`ZZZ`) |
191
+ | `comparison` | String | Operator. Defaults to `"ne"`; allowed values are `"eq"`, `"ne"`, `"lt"`, `"le"`, `"gt"`, `"ge"`. |
192
192
  | `comparator` | String\|Int\|Float | Value to compare against |
193
193
 
194
194
  **Example:**
195
195
  ```yaml
196
196
  reindex:
197
- - column: p_value
197
+ - column: C
198
198
  comparison: lt
199
- comparator: 0.05 # Keep rows where p_value < 0.05
199
+ comparator: 0.05 # Keep rows where column C < 0.05
200
200
  ```
201
201
 
202
202
  ### Statement (Triple Definition)
@@ -206,7 +206,7 @@ Defines subject-predicate-object relationships.
206
206
  | Field | Type | Required | Description |
207
207
  |-------|------|----------|-------------|
208
208
  | `subject` | NodeEncoding | Yes | Subject entity configuration |
209
- | `predicate` | String | Yes | Biolink predicate (e.g., `"associated_with"`) |
209
+ | `predicate` | String | No | Biolink predicate. Defaults to `"related_to"`. |
210
210
  | `object` | NodeEncoding | Yes | Object entity configuration |
211
211
  | `qualifiers` | List[Qualifier] | No | Edge qualifiers (context) |
212
212
 
@@ -215,12 +215,12 @@ Defines subject-predicate-object relationships.
215
215
  statement:
216
216
  subject:
217
217
  method: column
218
- encoding: gene_symbol
218
+ encoding: A
219
219
  prioritize: [Gene]
220
220
  predicate: treats
221
221
  object:
222
222
  method: column
223
- encoding: disease_name
223
+ encoding: B
224
224
  prioritize: [Disease]
225
225
  ```
226
226
 
@@ -230,11 +230,11 @@ Defines how to extract and resolve entities.
230
230
 
231
231
  | Field | Type | Required | Description |
232
232
  |-------|------|----------|-------------|
233
- | `method` | String | Yes | `"value"` (literal) or `"column"` (column reference) |
234
- | `encoding` | String\|Int\|Float | Yes | Literal value or column name |
233
+ | `method` | String | No | `"value"` (literal) or `"column"` (source column letters). Defaults to `"value"`. |
234
+ | `encoding` | String\|Int\|Float | Yes | Literal value or source column letters, depending on `method` |
235
235
  | `taxon` | Int | No | NCBI Taxon ID for filtering (e.g., `9606` for human) |
236
- | `prioritize` | List[String] | No | Preferred Biolink categories |
237
- | `avoid` | List[String] | No | Excluded Biolink categories |
236
+ | `prioritize` | List[String] | No | Preferred Biolink categories (must be valid `Categories` enum values such as `Gene`, `Protein`) |
237
+ | `avoid` | List[String] | No | Excluded Biolink categories (must be valid `Categories` enum values) |
238
238
  | `regex` | List[Regex] | No | Pattern replacements |
239
239
  | `fill` | String | No | Null-filling strategy: `"forward"`, `"backward"`, `"min"`, `"max"`, `"mean"`, `"zero"`, `"one"` |
240
240
  | `remove` | List[String] | No | Strings to filter out |
@@ -253,11 +253,12 @@ subject:
253
253
  encoding: CHEBI:41774 # All rows get this CURIE
254
254
  ```
255
255
 
256
- **`method: column`** - Reference a column
256
+ **`method: column`** - Reference a source column
257
257
 
258
- Excel columns use letters converted to `column_N`:
259
- - Column A `column_1` or just `"A"`
260
- - Column B `column_2` or just `"B"`
258
+ Source files are read without headers, so column references are Excel-style letters:
259
+ - Column A -> `"A"`
260
+ - Column B -> `"B"`
261
+ - Column AA -> `"AA"`
261
262
 
262
263
  ```yaml
263
264
  subject:
@@ -265,12 +266,7 @@ subject:
265
266
  encoding: A # Read from column A
266
267
  ```
267
268
 
268
- CSV/TSV columns use header names:
269
- ```yaml
270
- subject:
271
- method: column
272
- encoding: gene_symbol # Read from "gene_symbol" column
273
- ```
269
+ At runtime those letters are converted internally to Polars column names such as `column_1`, but those internal names are not valid configuration values.
274
270
 
275
271
  #### Taxonomic Filtering
276
272
 
@@ -278,7 +274,8 @@ subject:
278
274
 
279
275
  ```yaml
280
276
  subject:
281
- encoding: gene_column
277
+ method: column
278
+ encoding: A
282
279
  taxon: 9606 # Only human genes (Homo sapiens)
283
280
  ```
284
281
 
@@ -305,7 +302,8 @@ If "TP53" maps to both Gene and Protein, prefer Gene.
305
302
 
306
303
  ```yaml
307
304
  subject:
308
- encoding: organism_name
305
+ method: column
306
+ encoding: A
309
307
  prioritize:
310
308
  - OrganismTaxon
311
309
  avoid:
@@ -366,7 +364,8 @@ Available strategies:
366
364
 
367
365
  ```yaml
368
366
  subject:
369
- encoding: gene_symbol
367
+ method: column
368
+ encoding: A
370
369
  fill: forward # Propagate values down through null rows
371
370
  ```
372
371
 
@@ -374,7 +373,7 @@ subject:
374
373
  annotations:
375
374
  - annotation: expression_level
376
375
  method: column
377
- encoding: expression
376
+ encoding: C
378
377
  fill: mean # Replace nulls with column average
379
378
  ```
380
379
 
@@ -384,7 +383,8 @@ annotations:
384
383
 
385
384
  ```yaml
386
385
  object:
387
- encoding: pathway_list
386
+ method: column
387
+ encoding: B
388
388
  explode_by: ";" # "P1;P2;P3" → 3 separate edges
389
389
  ```
390
390
 
@@ -402,7 +402,7 @@ Add context to edges (anatomical location, species, etc.).
402
402
 
403
403
  | Field | Type | Description |
404
404
  |-------|------|-------------|
405
- | `qualifier` | String | Biolink qualifier (e.g., `"species_context_qualifier"`) |
405
+ | `qualifier` | String | Biolink qualifier from the `Qualifiers` enum (e.g., `"species_context_qualifier"`) |
406
406
  | (inherits NodeEncoding) | | All NodeEncoding fields available |
407
407
 
408
408
  **Example:**
@@ -419,7 +419,7 @@ Required metadata about data source.
419
419
 
420
420
  | Field | Type | Required | Description |
421
421
  |-------|------|----------|-------------|
422
- | `repo` | String | Yes | Repository: `"PMC"`, `"PMID"` |
422
+ | `repo` | String | No | Repository. Defaults to `"PMC"`; allowed values are `"PMC"`, `"PMID"`. |
423
423
  | `publication` | String | Yes | Repository-local identifier appended to `repo:` (e.g., `"11708054"`, `"123"`) |
424
424
  | `contributors` | List[Contributor] | Yes | Curation information |
425
425
 
@@ -427,7 +427,7 @@ Required metadata about data source.
427
427
 
428
428
  | Field | Type | Required | Description |
429
429
  |-------|------|----------|-------------|
430
- | `kind` | String | Yes | `"curation"`, `"validation"`, `"tool"` |
430
+ | `kind` | String | No | Contributor role. Defaults to `"curation"`; allowed values are `"curation"`, `"validation"`, `"tool"`. |
431
431
  | `name` | String | Yes | Contributor name |
432
432
  | `date` | String | Yes | Date (free format) |
433
433
  | `organizations` | List[String] | No | Affiliations |
@@ -500,12 +500,12 @@ template:
500
500
  statement:
501
501
  subject:
502
502
  method: column
503
- encoding: gene
503
+ encoding: A
504
504
  prioritize: [Gene]
505
505
  predicate: associated_with
506
506
  object:
507
507
  method: column
508
- encoding: disease
508
+ encoding: B
509
509
  prioritize: [Disease]
510
510
 
511
511
  provenance:
@@ -519,7 +519,7 @@ template:
519
519
  annotations:
520
520
  - annotation: p value
521
521
  method: column
522
- encoding: p_val
522
+ encoding: C
523
523
  ```
524
524
 
525
525
  ## Next Steps
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tablassert"
3
- version = "7.3.4"
3
+ version = "7.3.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" }
@@ -33,7 +33,9 @@ class TablaBase(BaseModel):
33
33
 
34
34
 
35
35
  class Reindex(TablaBase):
36
- column: str = Field(..., description="Source column letters used for row filtering.", examples=["A", "AA"])
36
+ column: str = Field(
37
+ ..., pattern=r"^[A-Z]{1,3}$", description="Source column letters used for row filtering.", examples=["A", "AA"]
38
+ )
37
39
  comparison: Comparisons = Field(
38
40
  Comparisons.NE,
39
41
  description="Comparison operator used in reindex filtering.",
@@ -2211,7 +2211,7 @@ wheels = [
2211
2211
 
2212
2212
  [[package]]
2213
2213
  name = "tablassert"
2214
- version = "7.3.4"
2214
+ version = "7.3.5"
2215
2215
  source = { editable = "." }
2216
2216
  dependencies = [
2217
2217
  { name = "duckdb" },
@@ -1,13 +0,0 @@
1
- # Changelog
2
-
3
- The canonical release history lives in the repository root at [`CHANGELOG.md`](https://github.com/SkyeAv/Tablassert/blob/main/CHANGELOG.md).
4
-
5
- ## Current Release Notes
6
-
7
- ### 7.3.4 - 2026-04-28
8
-
9
- - `downloader.from_url()` now handles URLs that respond with an immediate download instead of a navigable page — the Playwright session uses a download-aware browser context and tolerates the expected `net::ERR_ABORTED` navigation error.
10
- - Table configuration docs now describe `miscellaneous notes` as a freetext catch-all annotation for source context that doesn't map cleanly to a structured field.
11
- - Regex transform documentation now spells out the Polars `str.replace_all()` constraints — no capturing groups or lookarounds — so authors know to chain simple substitutions or fall back to `miscellaneous notes`.
12
-
13
- For older releases and the full project history, open the root `CHANGELOG.md` in the repository.
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