Changelog¶
Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.1.0] - 2026-10-02¶
Added¶
data_sourcesconfig option: named sources for@load_examples:<name>tags andload(<name>)calls. Required for sources Behave’s tag sanitizer can’t carry (paths with/, URLs, SQL queries).@load_examples:tags can now be placed on an individualExamples:block, overriding the scenario/feature tag for that block.context.resolved_text: doc strings are placeholder-resolved alongsidecontext.resolved_table.{placeholder}resolution supports dict key access ({user.email}works whencontext.useris a dict).diff()acceptslist[dict]anddictfor theexpectedargument too.Configis now hashable.Re-registering a builder/fixture name logs a warning.
Fixed¶
@load_examplesnever matched: the tag pattern required a leading@, but Behave deliversscenario.tags/feature.tagswithout it. The feature now works; integration tests assert real loaded data.before_step_hookleaked the previous step’sresolved_tableinto steps without a table; bothresolved_tableandresolved_textare now reset toNone.A non-callable entry in
_behave_data_cleanup_funcsaborted all subsequent cleanups; it’s now collected like other cleanup errors.diff()silently ignored dict keys that appeared only in lateractualrows; headers are now the union of all row keys.@needs_data:/@with_fixture:with parametrized names (user:alice) created unusablecontext."user:alice"attributes; the base name is set instead, and reserved names (data,config, …) are skipped.RawTablerenderedNonecell values as the literal string"None"; they now become"".is_null/resolve_nullraisedTypeErroron unhashable values (lists, dicts).Config.from_dictsilently dropped unknown keys; it now logs a warning.DataManager.mask()only masked exact matches; secrets embedded in larger strings are now replaced too.BuilderRegistry/FixtureRegistrysnapshots missed builders/fixtures registered after instantiation; lookups now fall back to the global registries.revert_patches()deleted attributes that other code had replaced afterapply_patches(); it now only restores/removes attributes that are still ours.setup_data()only triedbehave_data.yml; it now picks the first existing of.yml/.yaml/.json.
Changed¶
Minimum behave version is now 1.3.0 (was 1.2.6). On behave 1.2.x,
Context.__getattr__raisesKeyError(notAttributeError) for missing_-prefixed attributes, which crashedbefore_scenario/after_scenariohooks onhasattr/getattrdefaults. Rather than carry compat shims, the floor was raised to the current stable line.CI now runs the test matrix against behave 1.3.0 and latest.
Docs¶
hooks.mdno longer claims step-text placeholders are resolved before matching (impossible — matching happens first); documentsresolved_table/resolved_textand dict access.dynamic_examples.mddocuments tag character limitations anddata_sources; all path examples useload_base_dir-relative names.
[1.0.2] - 2026-07-19¶
Fixed¶
Move empty-source validation before
import requestsinHttpLoader.load()soValueErroris raised regardless of whetherrequestsis installed.Add
httpextra to CI dependencies so HTTP loader tests can run withrequestsinstalled.
[1.0.1] - 2026-07-19¶
Fixed¶
Fixed mypy cross-version compatibility: removed
--strictflag from CI command (already inpyproject.toml), allowingwarn_unused_ignores = falseto take effect across Python 3.11–3.14.Removed redundant
cast()inTypedTableWrapper.headingsproperty.
[1.0.0] - 2026-07-19¶
First stable release. The API is frozen and ready for production use.
Added¶
excelschema alias for@load_examplestags (in addition toxlsx).wrapandTableWrapperre-exports documented in the API reference.docs/migration.md— step-by-step migration guide from behave-tables.MANIFEST.into ensure LICENSE and README are included in the sdist.pre-committo thedevextras.Regression tests for
TableLikecompatibility,resolve_placeholdertype checking, andConfigmarker validation.
Fixed¶
TypedTableWrappernow fully satisfies theTableLikeprotocol, exposingheadingsandrowsproperties.TypedTableWrappercan re-wrap an existingTableWrapperorTypedTableWrapperwithout re-extracting rows.resolve_placeholderraises a clearTypeErrorwhen given a non-string value.Configvalidates thatnull_markersandnull_markers_by_columncontain only string values.Codecov action updated to v4 with token authentication in CI.
Changed¶
Version bumped to 1.0.0 — API is considered stable.
Development Statusclassifier set toProduction/Stable.Coverage threshold enforced at 90% in
Makefileandpyproject.toml.Polished README, documentation, contributing guidelines, security policy, and package metadata for public release.
Improved
TypedTableWrapper.typed_dicts()performance by precomputing column type and null-marker metadata once per call.
[0.1.4] - 2026-07-17¶
Added¶
Sphinx documentation site with furo theme
13 documentation pages: quickstart, installation, typed tables, null handling, diff, raw tables, dynamic examples, fixtures, builders, secrets, tags, hooks, configuration, API reference, migration guide, changelog
GitHub Actions workflow
docs.ymlto build and deploy docs to GitHub PagesDocumentation URL in
pyproject.tomldocsandalloptional dependency extras
Fixed¶
test_to_pandas_raises_without_pandasnow usesmonkeypatchonsys.modules["pandas"]for robustness whenpandasextra is installed
[0.1.3] - 2026-07-17¶
Added¶
75 edge case unit tests covering hooks, secrets, examples, raw_table, yaml, types, diff, fixtures, loaders, config, and manager
4 new E2E Behave integration features: fixtures_builders, secrets, typed_table_edge, dynamic_examples
27 E2E scenarios with 64 steps testing all behave-data features in real Behave
Fixed¶
tags.pynow strips@prefix from Behave tags (Behave strips@from scenario tags)tags.py@needs_datanow sets attribute on context in addition to_behave_data_loadedtags.pycleanup functions now support bothfunc(context)andfunc()signatures
Changed¶
Coverage increased from 94% to 98%
Total tests: 411 passed, 1 skipped (pandas optional)
[0.1.2] - 2026-07-17¶
Fixed¶
mypy --strictpasses with zero errorsAdded
[tool.mypy]config withignore_missing_imports = trueFixed
RawTable.__hash__type signatureFixed
secrets.pyvault/aws return type annotationsFixed
loaders/__init__.pyloader return type annotationFixed
examples.py_SimpleRow._headersattributeRemoved unused
type: ignorecomments inpatch.pyandraw_table.py
[0.1.1] - 2026-07-17¶
Added¶
Fixtures registry with scoping, nesting (
ref:), and parametrization (@data_fixture)Builders registry with derived fields, overrides, and count support (
@data_builder)Full
DataManager— unified access to fixtures, builders, and secret resolutionSecret masking — values resolved via
secret:are automatically masked with***Advanced secret backends:
env,vault(HashiCorp Vault via hvac),aws(AWS Secrets Manager via boto3)Declarative tags:
@needs_data:name,@with_fixture:name,@cleanup_afterbefore_feature_hook— loads dynamic Examples before a feature runsbefore_scenario_hook/after_scenario_hook— tag processing and cleanupprocess_tags_before_scenario/process_tags_after_scenario— tag processing functionsComprehensive README with full API reference, examples, and migration guide
Changed¶
DataManageris no longer a stub — full implementation withfixture(),build(),resolve(),mask()resolve_placeholdernow supportssecret:prefix with configurable backendssetup_datanow acceptsConfig | None(defaults toConfig())
[0.1.0] - 2026-07-17¶
Added¶
Core types:
int,float,bool,str,date,datetimewithregister_type()andconvert_cell()Null resolution: configurable null markers, per-column overrides,
is_null(),resolve_null()TypedTableWrapperwithtyped_dicts()andtyped_objects()RawTablefor headerless table accessTable diff with Cucumber-style output and
TableDiffErrorConfigdataclass withfrom_file()forbehave_data.ymlBehave patches:
apply_patches()/revert_patches()Data loaders: CSV, JSON, YAML, Excel, SQL, HTTP with lazy imports
Dynamic Examples loading via
@load_examples:sourcetagsSecret placeholders:
env:VAR,file:path,ref:fixturesetup_data()andbefore_step_hook()for Behave integrationDataManagerstub (full implementation in 0.1.1)Project scaffolding: CI/CD, community files, Makefile, pre-commit