Changelog
Here described only the breaking and most significant changes. The full changelog and documentation for all released versions could be found in nicely formatted commit history.
v5.18.1
- feat: add pass_row as configurable parameter for field_update
(#1729)
- fix: vendor unmaintained stringcase library
(#1727)
- Various bug fixes
v5.18
- Support ignore_constraintsoption for theIndexer(#1691)
- Various bug fixes
v5.17.1
- fix: deprecated dependencies (PR 1674)
- fix: unexpected "missing-label" error with option header_case = False(#1635)
- fix: KeyError when a "primaryKey" is missing (#1633)
- fix: unexpected field-error for a boolean "example" with "trueValues" or
"falseValues" properties (#1610)
v5.15
- Local development has been migrated to using Hatch
v5.14
- Rebased packaging on PEP 621
- Extracted experimental application/server from the codebase
v5.13
- Implemented "Metadata.from_descriptor(allow_invalid=False)" (#1501)
v5.10
- 
Various architectural and standards-compatibility improvements (minor breaking changes):
- 
Added new Console commands:
- list
- explore
- query
- script
- convert
- publish
 
- Rebased Console commands on Rich (nice output in the Console)
- Fixed extractreturning the results depends on the source type (now it's always a dictionary indexed by the resource name)
- Enforced type safety -- many tabular command will be marked as impossible for non-tabular resources if a type checker is used
- Improved frictionless.Resource(source)guessing abilities; if you just like to open a table resource usefrictionless.resources.TableResource(path=path)
 
v5.8
- Implemented Implemented catalog/dataset/package/resource.deference(#1451)
v5.7
- 
Various architectural and standards-compatibility improvements (minor breaking changes):
- Improved type detection mechanism (including remote descriptors)
- Added resourcesmodule includingFile/Text/Json/TableResource
- Deprecated resource.typeargument -- use the classes above
- Changed catalog.packages[]tocatalog.datasets[].package
- Made resource.schemaoptional (resource.has_schemais removed)
- Made resource.normpathoptional (resource.normdatais removed)
- Standards-compatability improvements: profile, stats
- Renamed system/plugin.select_Check/etctosystem/plugin.select_check_class/etc
 
v5.6
- Added support for sqlalchemy@2(#1427)
v5.5
- Implemented program/resource.indexpreview (#1395)
v5.4
- Support dialect.skip_blank_rows(#1387)
v5.3
- Support steps.resource_updatefor resource transformations (#1381)
v5.2
- Added support for wktformat infields.StringField(#1363 by @jze)
v5.1
- Support descriptorargument foractions/program.extract(#1372)
v5.0
- Frictionless Framework (v5) is out of Beta and released on PyPi
v5.0.0b19
v5.0.0b8
- ForeignKeyError has been extended with additional information: fieldNames,fieldCells,referenceName, andreferenceFieldNames
v5.0.0b2
v5.0.0b1
v4.40
- Added Dialect support to packages (#1137)
v4.39
- Fixed processing of incompatible decimal char in table schema and data (#1089)
- Added support for Time Zone data (#1097)
- Improved validation messages by adding summaryand partial validation details (#1106)
- 
Implemented new feature summary(#1127)
- schema.to_summary
- report.to_summary
- Added CLI command summary
 
- Fixed file compression package.to_zip(#1104)
- Implemented feature to validate single resource (#1112)
- Improved error message to notify about invalid fields (#1117)
- Fixed type conversion of NaN values for data of type Int64 (#1115)
- Exposed valid/invalid flags in CLI extractcommand (#1130)
- Implemented feature package.to_er_diagram(#1135)
v4.38
- Implemented checks.ascii_value(#1064)
- Implemented checks.deviated_cell(#1069)
- Implemented detector.field_true/false_values(#1074)
v4.37
- 
Deprecated high-level legacy actions (use class-based alternatives):
- describe_*
- extract_*
- transform_*
- validate_*
 
v4.36
- 
Implemented pipeline actions:
- pipeline.validate(will replace- validate_pipelinein v5)
- pipeline.transform(will replace- transform_pipelinein v5)
 
- 
Implemented inqiury actions:
- inqiury.validate(will replace- validate_inqiuryin v5)
 
v4.35
- 
Implemented schema actions:
- Schema.describe(will replace- describe_schemain v5)
- schema.validate(will replace- validate_schemain v5)
 
- 
Implemented new transform steps:
- steps.field_merge
- steps.field_pack
 
v4.34
- 
Implemented package actions:
- Package.describe(will replace- describe_packagein v5)
- package.extract(will replace- extract_packagein v5)
- package.validate(will replace- validate_packagein v5)
- package.transform(will replace- transform_packagein v5)
 
v4.33
- 
Implemented resource actions:
- Resource.describe(will replace- describe_resourcein v5)
- resource.extract(will replace- extract_resourcein v5)
- resource.validate(will replace- validate_resourcein v5)
- resource.transform(will replace- transform_resourcein v5)
 
v4.32
- Added to_markdown() feature to metadata (#1052)
v4.31
- Added a feature that allows to export table schema as excel (#1040)
- Added nontabular note to validation results to indicate nontabular file (#1046)
- Excel stats now shows bytes and hash (#1045)
- Added pprint feature which displays metadata in a readable and pretty way (#1039)
- Improved error message if resource.data is not a string (#1036)
v4.29
- Made Detector's private properties public and writable (#1025)
v4.28
- Improved an order of the metadata in YAML representation
v4.27
- Exposed Dialect options via CLI such as sheet,table,keys, andkeyed(#886)
v4.26
- Validate 'schema.fields[].example' (#998)
v4.25
- Allows descriptors that subclass collections.abc.Mapping (#985)
v4.24
v4.23
- Added table dimensions check (#985)
v4.22
- Added "extract --trusted" flag
v4.21
- Added "--json/yaml" CLI options for transform
v4.20
- Improved layout/schema detection algorithms (#945)
v4.19
- Renamed inlineDialect.keystoinlineDialect.data_keysdue to a conflict withdict.keysproperty
v4.18
- Normalized metadata properties (increased type safety)
v4.17
- Add fields, limit, sort and filter options to CkanDialect (#912)
v4.16
- Implemented system/plugin.create_candidates(#893)
v4.15
- Implemented system.get/use_http_session(#892)
v4.14
v4.13
- Implemented descriptor type detection for extract/validate(#881)
v4.12
- Support external profiles for data package (#864)
v4.11
- Added jsonargument toresource.to_snap
v4.10
- Support resource/field renaming in transform (#843)
v4.9
- Support --pathCLI argument (#829)
v4.8
- Added support for Package(innerpath)argument for unzipping a data package's descriptor
v4.7
- Support control/dialect as JSON in CLI (#806)
v4.6
- Implemented describe_dialectanddescribe(path, type="dialect")
- Support --dialectargument in CLI
v4.5
- Implemented Schema.from_jsonschema(#797)
v4.4
- Use field.constraints.maxLengthfor SQL's VARCHAR (#795)
v4.3
- Implemented resource.to_view()(#781)
v4.2
- Make fields[].arrayItemerrors more granular (#767)
v4.1
- Added support for fields[].arrayItem(#750)
v4.0
- Released frictionless@4:tada:
v4.0.0a15
- 
Updated loaders (#658) (BREAKING)
- Renamed filelikeloader tostreamloader
- Migrated from textloader tobufferloader
 
v4.0.0a14
- 
Improve transform API (#657) (BREAKING)
- Swithed to the transform_resource(resource)signature
- Swithed to the transform_package(package)signature
 
v4.0.0a13
- 
Improved resource/package import/export (#655) (BREAKING)
- Reworked parser.write_row_streamAPI
- Reworked resource.from/toAPI
- Reworked package.from/toAPI
- Reworked StorageAPI
- Reworked system.create_storageAPI
- Merged PandasStorageintoPandasParser
- Merged SpssStorageintoSpssParser
 
v4.0.0a12
- 
Improved transformation steps (#650) (BREAKING)
- Split value/formula/function concepts
- Renamed a few minor step arguments
 
v4.0.0a11
- 
Improved layout and data streams concepts (#648) (BREAKING)
- Renamed data_streamtolist_stream
- Renamed readDatatoreadLists
- Renamed sampletofragment(samplenow is raw lists)
- Implemented loader.buffer
- Implemented parser.sample
- Added support for function based checks
- Added support for function based steps
 
v4.0.0a10
- Reworked Error.tags (BREAKING)
- Reworked Check API and split labels/header (BREAKING)
v4.0.0a9
- 
Rebased on Detectorclass (BREAKING)
- Migrated all infer_*, sync/patch_schema and detect_encoding parameters to Detector
- Made resource.inferomit empty objects
- Added resource.read_*(size)argument
- Added resource.labelsproperty
 
v4.0.0a8
- 
Improved checks/steps API (#621) (BREAKING)
- Updated validate(extra_checks=[...])tovalidate(checks=[{"code": 'code', ...}])
 
v4.0.0a7
- 
Updated describe/extract/transform/validate APIs (BREAKING)
- Removed validate_table(usevalidate_resource)
- Removed legacy TableandFileclasses
- Removed dataflowsplugin
- Replaced nopoolbyparallel(not parallel by default)
- Renamed report.tablestoreport.tasks
- Rebased on report.tasks[].resource(instead of plain path/scheme/format/etc)
- Flatten Pipeline steps signature
 
v4.0.0a6
- 
Introduced Layout class (BREAKING)
- Renamed Queryclass and arguments/properties toLayout
- Moved headeroptions fromDialecttoLayout
 
v4.0.0a5
- 
Updated transform API
- Added transform(type)argument
 
v4.0.0a4
- 
Updated describe API (BREAKING)
- Renamed describe(source_type)argument totype
 
v4.0.0a3
- 
Updated extract API (BREAKING)
- Removed extract_table(useextract_resourcewith the same API)
- Renamed extract(source_type)argument totype
 
v4.0.0a1
- 
Initial API/codebase improvements for v4 (BREAKING)
- Allow Package/Resource(source)notation (guess descriptor/path/etc)
- Renamed schema.infer->Schema.from_sample
- Renamed resource.inline->resource.memory
- Renamed compression_path->innerpath
- Renamed compression: no->compression: ""
- Updated Package/Resource.infernot to infer stats (usestats=True)
- Removed Package/Resource.infer(only_sample)argument
- Removed Resouce.from/to_zip(usePackage.from/to_zip)
- Removed Resouce.source(useResource.dataorResource.fullpath)
- Removed package/resource.infer(source)argument (use constructors)
- Added some new API (will be covered in the updated docs after the v4 release)
 
v3.48
- 
Make Resource independent from Table/File (#607) (BREAKING)
- Resource can be opened like Table (it's recommended to use Resource instead of Table)
- Renamed resource.read_sample()toresource.sample
- Renamed resource.read_header()toresource.header
- Renamed resource.read_stats()toresource.stats
- Removed resource.to_table()
- Removed resource.to_file()
 
v3.47
- 
Optimize Row/Header/Table and rename header errors (#601) (BREAKING)
- Row object is now lazy; it casts data on-demand preserving the same API
- Method resource/table.read_data(_stream)now includes a header row if present
- Renamed errors.ExtraHeaderError->ExtraLabelError(extra-label-error)
- Renamed errors.MissingHeaderError->MissingLabelError(missing-label-error)
- Renamed errors.BlankHeaderError->BlankLabelError(blank-label-error)
- Renamed errors.DuplicateHeaderError->DuplicateLabelError(duplicate-label-error)
- Renamed errors.NonMatchingHeaderError->IncorrectLabelError(incorrect-label-error)
- Renamed schema.read/write_data->read/write_cells
 
v3.46
- Renamed aws plugin to s3 (#594) (BREAKING)
$ pip install frictionless[aws] # before
$ pip install frictionless[s3] # after
v3.45
- Drafted support for writing Multipart Data (#583)
v3.44
- Added support for writing to Remote Data (#582)
v3.43
- Add support to writing to Google Sheets (#581)
- Renamed gsheetplugin/format togsheets(BREAKING: minor)
v3.42
- Added support for writing to S3 (#580)
v3.41
- Update Loader/Parser API to write to different targets (#579) (BREAKING: minor)
v3.40
- Implemented a standalone multipart loader (#573)
v3.39
- Fixed Header not being an original one (#572)
- Fix bad format validation (#571)
- Added default errors limit equals to 1000 (#570)
- Added support for field.float_number (#569)
v3.38
- Improved ckan plugin (#560)
v3.37
- Remove not working elastic plugin draft (#558)
v3.36
- Support custom types (#557)
v3.35
- Added "resolve" option to "resource/package.to_zip" (#556)
v3.34
- Moved frictionless.controlstofrictionless.plugins.*(BREAKING)
- Moved frictionless.dialectstofrictionless.plugins.*(BREAKING)
- Moved frictionless.exceptions.FrictionlessExceptiontofrictionless.FrictionlessException(BREAKING)
- Moved exceldependencies tofrictionless[excel]extras (BREAKING)
- Moved jsondependencies tofrictionless[json]extras (BREAKING)
- Consider jsonfiles to be a metadata by default (BREAKING)
Code example:
# Before
# pip install frictionless
from frictionless import dialects, exceptions
excel_dialect = dialects.ExcelDialect()
json_dialect = dialects.JsonDialect()
exception = exceptions.FrictionlessException()
# After
# pip install frictionless[excel,json]
from frictionless import FrictionlessException
from frictionless.plugins.excel import ExcelDialect
from frictionless.plugins.json import JsonDialect
excel_dialect = dialects.ExcelDialect()
json_dialect = dialects.JsonDialect()
exception = FrictionlessException()
v3.33
- Implemented resource.write (#537)
v3.32
- Added url parameter to SQL import/export (#535)
v3.31
- Made tables with header and no data rows valid (#534) (BREAKING: minor)
v3.30
- 
Various CLI improvements (#532)
- Added autocompletion
- Added stdin support
- Added "extract --csv"
- Exposed more options
 
v3.29
- Added experimental CKAN support (#528)
v3.28
- Add a "nopool" argument to validate (#527)
v3.27
- Stop sorting keyed sources as the order is now guaranteed by Python (#512) (BREAKING)
v3.26
- Added "nolookup" argument for validate_package (#515)
v3.25
- Add transform functionality (#505)
- Methods schema.get/remove_fieldnow raise if not found (#505) (BREAKING)
- Methods package.get/remove_resourcenow raise if not found (#505) (BREAKING)
v3.24
- Lower case resource.scheme/format/hashing/encoding/compression (#499) (BREAKING)
v3.23
- Support "header_case" option for dialects (#488)
v3.22
- Added suppport for DB2 format (#485)
v3.21
- Improved SPSS plugin (#483)
- Improved BigQuery plugin (#470)
v3.20
- Added support for SQL Views (#466)
v3.19
- Rebased AwsLoader on streaming (#460)
v3.18
- Added hashingparameter todescribe/describe_package
- Removed table.onerrorproperty (BREAKING)
v3.17
- Added timezone for datetime/time parsing (#457) (BREAKING)
v3.16
- Fixed metadata.to_yaml (#455)
- Removed the expandargument frommetadata.to_dict(BREAKING)
v3.15
- Added native schema support to SqlParser (#452)
v3.14
- Make Resource the main internal interface (#446) (BREAKING: for plugin authors)
- Move Resource's stats to resource.stats(BREAKING)
- Rename on_errortoonerror(BREAKING)
- Added resource.stats.fields
v3.13
- Add an on_errorargument to Table/Resource/Package (#445)
v3.12
- Added streaming to the extract functions (#442)
v3.11
- Added experimental BigQuery support (#424)
v3.10
- Added experimental SPSS support (#421)
v3.9
- Rebased on a goodtablessuccessor versioning
v3.8
- Add support SQL/Pandas import/export (#31)
v3.7
- Add support for custom JSONEncoder classes (#24)
v3.6
- Normalize header terminology
v3.5