Releases: jodal/biip
v4.0.0
This release contains a number of breaking changes, thus the version bump to 4.0. See the upgrade guide for the full details and steps for quickly updating your code to work with Biip 4.0.
Breaking changes
- Result objects are now immutable. (PR: #393)
biip.parse()
no longer raisesParseError
when all parsers fail. (PR: #376)- All configuration options must be passed via the new
ParseConfig
class. (PR: #385) - Several classes and fields in the low-level API have been moved or renamed. (PR: #375, #379, #380, #381, #382, #391, #392)
- Python 3.9 is no longer supported. (PR: #383)
See the upgrade guide for full details.
Support for GS1 Web URIs
Biip can now work with GS1 Web URIs. (Fixes: #83, PR: #387)
All GS1 Application Identifiers are supported:
>>> import biip
>>> result = biip.parse("https://www.example.com/products/gtin/07032069804988?10=0329&15=210526")
>>> result.gs1_web_uri.as_canonical_uri()
'https://id.gs1.org/01/07032069804988/10/0329?15=210526'
Conversion back and forth between GS1 Web URIs and GS1 Messages are fully supported:
>>> message = result.gs1_web_uri.as_gs1_message()
>>> message.as_hri()
'(01)07032069804988(10)0329(15)210526'
>>> web_uri = message.as_gs1_web_uri()
>>> web_uri.as_uri(domain="example.com", prefix="products")
'https://example.com/products/01/07032069804988/10/0329?15=210526'
See the GS1 Web URIs section in the quickstart guide for an introduction.
Date validation in GS1 element strings can now be disabled
It is now possible to disable validation of the dates in GS1 element strings with the gs1_element_strings_verify_date
option. When validation is disabled, invalid date values are still available as text in the GS1ElementString.value
field, but the GS1ElementString.date
field is None
. (Fixes: #247, PR: 386, #389)
Revamped documentation
This release comes with revamped documentation, where all parts of the documentation has been reviewed and polished. Also, the documentation system has been switched from Sphinx to MkDocs.
Support for pretty-printing with Rich
All objects returned from Biip now supports the Rich pretty-printing protocol, making them a lot nicer to work with in the terminal. Biip does not depend on Rich, so you have to install it yourself, and then use Rich's print function to print Biip objects.
>>> from rich import print
>>> import biip
>>> print(biip.parse("7032069804988"))
Fixes
v3.6.0
This release has no changes for users, only for distribution packagers.
Changes
- Switched build backend from
poetry
tohatchling
. - Development is now done using
uv
andtox-uv
. - Replaced
darglint
docs linter with Ruff'spydoclint
rules. - Bumped some dev tooling versions.
v3.5.2
v3.5.1
Changes
- Use Trusted Publishing when releasing to PyPI.
If you're using Biip, please add yourself to the list of users!
v3.5.0
Breaking changes
- Drop support for Python 3.8 (PR: #326)
Changes
- Use
importlib.resources
to load bundled data files so that Biip can be installed as a zip file. (PR: #324, #327) - Update all bundled GS1 datasets. The GS1 Company prefixes is the only dataset with any changes.
- Test on Python 3.13
If you're using Biip, please add yourself to the list of users!
v3.4.0
Changes
- Accept redundant GS1 Message separator chars, both after fixed-length fields and at the end of the GS1 Message. The specification says that the separator characters "should not" be present in these locations, but doesn't forbid it. Multiple separator characters are also ignored. (Fixes: #176, PR: #304)
If you're using Biip, please add yourself to the list of users!
v3.3.0
Changes
- Add support for extracting dates and potentially datetimes from GS1 messages with AI 4324/4325/4326/7003/7006/7007/7011/8008. (PR: #301)
Fixes
- In the new GS1 AI dataset introduced in Biip 3.2.0, there are four AIs with optional pattern groups. When the value matches everything but the optional pattern group, the group's value becomes
None
. This caused Biip to crash when we tried building a string of the characters matching the pattern. (Fixes: #295, PR: #300)
If you're using Biip, please add yourself to the list of users!
v3.2.0
Changes
- Update all bundled GS1 datasets (PR: #292)
- GS1 Application Identifiers including many stricter regexp patterns
- GS1 Member Organization prefixes
- GS1 Company prefixes
Development environment
- Replace Black with ruff. (PR: #239)
If you're using Biip, please add yourself to the list of users!
v3.1.0
Breaking changes
- Drop support for Python 3.7, as it reached end-of-life this summer. (#207)
Changes
- Add Python 3.12 to the test matrix. (#232)
Development environment
- Type check with pyright in addition to mypy, and fix all typing issues indicated by pyright. (#186)
- Replace flake8 and all flake8 plugins with ruff. (#184)
If you're using Biip, please add yourself to the list of users!
v3.0.0
This release contains a couple of breaking changes, thus the version bump to 3.0.
Breaking changes
- Parsing and validation errors of GLNs, GTINs, and SSCCs nested inside GS1 Element Strings no longer raises
ParseError
. Instead, the exception message is exposed on theGS1ElementString
class as the new fieldsgln_error
,gtin_error
, andsscc_error
. This is a breaking change, but makes it possible to extract some information from GS1 Element Strings that are not entirely valid. (Fixes: #157, PR: #169) - Remove
RcnRegion.from_iso_3166_1_numeric_code()
class method which as been deprecated since Biip 2.2. (Fixes: #161, PR: #166)
GS1 Company Prefix support
- Add
GS1CompanyPrefix
class that can extract the company prefix from any GLN, GTIN, or SSCC. This is based on a data set from GS1 that is bundled with Biip, just like the GS1 Prefixes and GS1 Application Identifiers. The data set is preprocessed into a trie data structure, making company prefix length lookups fast. (Fixes: #160, PR: #172) - Add and set
company_prefix
fields on theGln
,Gtin
, andSssc
classes, based on the newGS1CompanyPrefix
class. (Fixes: #160, PR: #174) - Change
Sscc.as_hri()
to useGS1CompanyPrefix
to automatically group the company prefix and the serial when rendering SSCC's for human consumption. The existingcompany_prefix_length
parameter is now only used as an override in case you're rendering an SSCC whose company prefix is not included in the data set yet, or where you disagree with the data set. (Fixes: #160, PR: #173)
Other changes
- Add
rcn_verify_variable_measure
parameter to all functions and methods takingrcn_region
as a parameter. The parameter defaults toTrue
and the old behavior. By setting this parameter toFalse
, it is possible to parse and extract variable measure from RCNs that have separate check digit for the variable measure, but where the check digit is either incorrect or simply not in use as a check digit. This parameter only has any effect on RCN regions with formats including check digits, e.g. Great Britain and Germany. (PR: #171) - Update the bundled GS1 Application Identifier definitions. (PR: #164)
- Update the bundled GS1 Prefix definitions, and add script to automate future updates. (PR: #165)
- Add Python 3.11 to the test matrix, and updated development tooling. (PR: #163)
If you're using Biip, please add yourself to the list of users!