Skip to content

Releases: fairspec/fairspec-python

v0.1.7

15 Jun 18:06

Choose a tag to compare

v0.1.7 (2026-06-15)

Bug Fixes

  • terminal: Set non-zero exit code on validation failure (a566051)

Validate commands (table, data, file, dataset, tableSchema, dataSchema) route through Session.render_report_result, which printed the report but never signalled failure, so CI relying on $? passed on invalid data. Raise typer.Exit(1) when the report is invalid, including silent mode.

Mirrors fairspec-typescript 9fe1ded.

Testing

  • Write validate fixture as LF to avoid CRLF on windows (b6abbb0)

open("w") translates \n to os.linesep, so on Windows the CRLF made a valid table parse as invalid and the exit-code assertion failed. Write the CSV with newline="" so it is LF on every platform.


Detailed Changes: v0.1.6...v0.1.7

v0.1.6

15 Jun 17:21

Choose a tag to compare

v0.1.6 (2026-06-15)

Bug Fixes

  • dataset: Make dataset copy persist to a new folder (2bbe158)

The folder plugin only claimed targets that already existed as a directory, while the save action requires a vacant path, so a folder copy was a silent no-op. Detect folder-like targets without requiring existence, pass a Dataset model, and fail loudly if no plugin saves.

Found via smoke testing 0.1.5.

  • terminal: Coerce loaded descriptor to Dataset for resource selection (d8834da)

select_resource and dataset script accessed .resources on the dict that load_dataset returns, so --dataset/--resource lookups always failed and the script REPL exposed a dict. Coerce to a Dataset model first.

Found via smoke testing 0.1.5; same root cause as #11.

Documentation

  • terminal: Correct --schema and --dataset/--resource flag names (b7ea93d)

Docs referenced --table-schema, --from-dataset and --from-resource, but the CLI exposes --schema, --dataset (-d) and --resource (-r).


Detailed Changes: v0.1.5...v0.1.6

v0.1.5

15 Jun 15:56

Choose a tag to compare

v0.1.5 (2026-06-15)

Bug Fixes

  • library: Accept dict descriptor in validate_dataset (aa40290)

A dict argument fell through to normalize_dataset and raised AttributeError; coerce it and return the structured report instead.

Fixes #15

  • library: Infer data schema from top-level JSON arrays (67f813c)

Load JSON data via json.loads instead of the descriptor parser, which rejected any non-object top-level value.

Fixes #12

  • metadata: Accept object integrity in dataset profile (236591b)

The dataset profile declared integrity as a string while the model and every emitter use the object form, so inferred datasets never validated.

Fixes #13

  • table: Infer file dialect for json and jsonl (7c0b9fb)

JsonPlugin was missing an infer_file_dialect override, so data infer-dialect could not detect .json/.jsonl files.

Fixes #14

  • terminal: List dataset resources via model coercion (1754eed)

load_dataset returns a descriptor dict, so getattr(dataset, "resources") was always None. Coerce to a Dataset model before listing resource names.

Fixes #11

Chores

  • Ignore .worktrees directory (69b91a9)

Documentation

  • Point remote dataset example at a fairspec descriptor (16856c0)

The previous URL was a Frictionless data package incompatible with the fairspec profile; also wrap load_dataset output in Dataset.model_validate.

Fixes #16

Testing

  • Use ascii fixture in dataset round-trip spec (7c266d0)

write_text used the platform default encoding, so the non-ascii content failed on Windows (cp1252). The round-trip test does not need unicode.

Fixes #13

  • Write round-trip fixture as bytes to avoid CRLF on windows (8012e1d)

write_text translates \n to os.linesep, so on Windows the CRLF corrupted type inference (name -> [string, null]) and failed profile validation. write_bytes writes identical LF content on every platform.

Fixes #13


Detailed Changes: v0.1.4...v0.1.5

v0.1.4

26 May 17:18

Choose a tag to compare

v0.1.4 (2026-05-26)

Bug Fixes

  • Move ty ignore to assignment line after format (2d1db70)

Chores

  • Bump ruff line-length to 90 (cf7681a)

  • deps: Bump idna in the uv group across 1 directory (#10, 1ec4fb0)

Bumps the uv group with 1 update in the / directory: idna.

Updates idna from 3.11 to 3.15


updated-dependencies:

  • dependency-name: idna dependency-version: '3.15'

dependency-type: indirect

dependency-group: uv ...

Signed-off-by: dependabot[bot] support@github.com

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>


Detailed Changes: v0.1.3...v0.1.4

v0.1.3

16 May 10:32

Choose a tag to compare

v0.1.3 (2026-05-16)

Bug Fixes

  • Correct keywords in nested pyproject.toml files (d9d9c4e)

Chores

  • Add CITATION.cff (025a6a4)

  • Add format:staged pre-commit hook (da85f95)

  • Added cursor/claude (874a105)

  • Added json coverate report (3727d61)

  • Added pytest-cov (35bce34)

  • Align docs navigation with fairspec-typescript (c440c4f)

Bump livemark to 0.18.0 and consolidate header links into sections (type: "custom" with icons), matching the fairspec-typescript layout. Reorder Terminal before Python and replace renamed lucide icons (terminal-square -> square-terminal, file-type-2 -> file-code) so they render under lucide-react 0.577.0.

Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com

Adds the same GitHub Actions plumbing that fairspec-standard and fairspec-typescript run: weekly + on-PR semgrep + gitleaks scans (scan.yaml), the @claude mention bot (mention.yaml), and the OWASP-themed automated PR review (review.yaml), along with the matching .gitleaks.toml allowlist. package.json gains leaks / vulns scripts (semgrep targets p/python here) plus a scan alias, along with engines and packageManager so the scan workflow can resolve a pinned Node and pnpm. The allowedTools list in mention/ review is adjusted from pnpm scripts to the uv run task ... commands this repo uses, and the pre-commit format job is scoped to *.py since ruff format only handles Python.

Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com

  • Migrate docs from Astro/Starlight to livemark (b2d16f2)

Replace the website/ workspace package with livemark at the project root. Move docs from website/content/docs/ to docs/, public assets to .livemark/public/, and route the README as the landing page. Drop the overview/contributing.md duplicate and use livemark patches instead.

Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com

  • Migrate to lefthook (a5ccd03)

  • Pin actions by SHA in workflows (2f81605)

  • Rebase on allowBuilds (e308968)

  • Rename mention to comment workflow and add @claude/review trigger (ecd92c6)

  • Restrict mention workflow to users with repo association (428548b)

  • Update comment/review workflow job names (ac41795)

  • Update navigation (e0b698e)

  • Update navigation (da79a5c)

  • Updated links (ea8e1aa)

  • deps: Bump gitpython from 3.1.46 to 3.1.50 (#6, a08141f)

Bumps gitpython from 3.1.46 to 3.1.50.


updated-dependencies:

  • dependency-name: gitpython dependency-version: 3.1.50

dependency-type: indirect ...

Signed-off-by: dependabot[bot] support@github.com

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

  • deps: Bump mermaid in the npm_and_yarn group across 1 directory (#9, a894aaf)

Bumps the npm_and_yarn group with 1 update in the / directory: mermaid.

Updates mermaid from 11.14.0 to 11.15.0


updated-dependencies:

  • dependency-name: mermaid dependency-version: 11.15.0

dependency-type: indirect

dependency-group: npm_and_yarn ...

Signed-off-by: dependabot[bot] support@github.com

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

  • deps: Bump pygments from 2.19.2 to 2.20.0 (#7, abde099)

Bumps pygments from 2.19.2 to 2.20.0.


updated-dependencies:

  • dependency-name: pygments dependency-version: 2.20.0

dependency-type: indirect ...

Signed-off-by: dependabot[bot] support@github.com

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

  • deps: Bump the uv group across 1 directory with 2 updates (#8, 7e66204)

Bumps the uv group with 2 updates in the / directory: requests and urllib3.

Updates requests from 2.32.5 to 2.33.0 - Release notes - Changelog - Commits

Updates urllib3 from 2.6.3 to 2.7.0 - Release notes - Changelog - Commits

--- updated-dependencies: - dependency-name: requests dependency-version: 2.33.0

dependency-type: indirect

dependency-group: uv

  • dependency-name: urllib3 dependency-version: 2.7.0

dependency-group: uv ...

Signed-off-by: dependabot[bot] support@github.com

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

Documentation

  • Add high-level Python guides for dataset, table, data, file (bca330c)

Add four conceptual API guides modelled on docs/terminal/{dataset,table, data,file}.md, using the programming API (load_dataset, validate_table, infer_data_schema, copy_file, …) instead of CLI subcommands. Sit above the format-specific pages in the sidebar (orders 1-4); the existing format guides are renumbered to 10-20. docs/python/table.md is rewritten in place to become the high-level Table guide while keeping the existing Polars-Table-type content (normalize/denormalize/inspect).

Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com


Detailed Changes: v0.1.2...v0.1.3

v0.1.2

12 Feb 16:34

Choose a tag to compare

v0.1.2 (2026-02-12)

Bug Fixes


Detailed Changes: v0.1.1...v0.1.2