-
Notifications
You must be signed in to change notification settings - Fork 95
Support encoding any Enum value type #680
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Comments
gcf-merge-on-green bot
pushed a commit
to GoogleCloudPlatform/microservices-demo
that referenced
this issue
Mar 17, 2025
This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [python-json-logger](https://github.com/nhairs/python-json-logger) | `==3.2.1` -> `==3.3.0` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>nhairs/python-json-logger (python-json-logger)</summary> ### [`v3.3.0`](https://github.com/nhairs/python-json-logger/releases/tag/v3.3.0): 3.3.0 [Compare Source](https://github.com/nhairs/python-json-logger/compare/v3.2.1...v3.3.0) ##### Added - `exc_info_as_array` and `stack_info_as_array` options are added to `pythonjsonlogger.core.BaseJsonFormatter` allowing both to be encoded as list of lines instead of a single multi-line string. [#​35](https://github.com/nhairs/python-json-logger/issues/35) ##### Security - Remove `msgspec-python313-pre` from `dev` dependencies preventing potential RCE. Details: [GHSA-wmxh-pxcx-9w24](https://github.com/nhairs/python-json-logger/security/advisories/GHSA-wmxh-pxcx-9w24#advisory-comment-121307) Thanks [@​1hakusai1](https://github.com/1hakusai1) and [@​omnigodz](https://github.com/omnigodz) ### [`v3.2.1`](https://github.com/nhairs/python-json-logger/releases/tag/v3.2.1): 3.2.1 [Compare Source](https://github.com/nhairs/python-json-logger/compare/v3.2.0...v3.2.1) ##### Fixed - Import error on `import pythonjsonlogger.jsonlogger` [#​29](https://github.com/nhairs/python-json-logger/issues/29) ### [`v3.2.0`](https://github.com/nhairs/python-json-logger/releases/tag/v3.2.0): 3.2.0 [Compare Source](https://github.com/nhairs/python-json-logger/compare/v3.1.0...v3.2.0) ##### Changed - `pythonjsonlogger.[ORJSON,MSGSPEC]_AVAILABLE` no longer imports the respective package when determining availability. - `pythonjsonlogger.[orjson,msgspec]` now throws a `pythonjsonlogger.exception.MissingPackageError` when required libraries are not available. These contain more information about what is missing whilst still being an `ImportError`. - `defaults` parameter is no longer ignored and now conforms to the standard library. Setting a defaults dictionary will add the specified keys if the those keys do not exist in a record or weren't passed by the `extra` parameter when logging a message. - `typing_extensions` is only installed on Python version < 3.10. - Support Python 3.13 - `msgspec` has only been tested against pre-release versions. Thanks [@​cjwatson](https://github.com/cjwatson) and [@​bharel](https://github.com/bharel) ### [`v3.1.0`](https://github.com/nhairs/python-json-logger/releases/tag/v3.1.0) [Compare Source](https://github.com/nhairs/python-json-logger/compare/v3.0.1...v3.1.0) This splits common funcitonality out to allow supporting other JSON encoders. Although this is a large refactor, backwards compatibility has been maintained. ##### Added - `pythonjsonlogger.core` - more details below. - `pythonjsonlogger.defaults` module that provides many functions for handling unsupported types. - Orjson encoder support via `pythonjsonlogger.orjson.OrjsonFormatter` with the following additions: - bytes are URL safe base64 encoded. - Exceptions are "pretty printed" using the exception name and message e.g. `"ValueError: bad value passed"` - Enum values use their value, Enum classes now return all values as a list. - Tracebacks are supported - Classes (aka types) are support - Will fallback on `__str__` if available, else `__repr__` if available, else will use `__could_not_encode__` - MsgSpec encoder support via `pythonjsonlogger.msgspec.MsgspecFormatter` with the following additions: - Exceptions are "pretty printed" using the exception name and message e.g. `"ValueError: bad value passed"` - Enum classes now return all values as a list. - Tracebacks are supported - Classes (aka types) are support - Will fallback on `__str__` if available, else `__repr__` if available, else will use `__could_not_encode__` - Note: msgspec only supprts enum values of type `int` or `str` [jcrist/msgspec#680](https://github.com/jcrist/msgspec/issues/680) ##### Changed - `pythonjsonlogger.jsonlogger` has been moved to `pythonjsonlogger.json` with core functionality moved to `pythonjsonlogger.core`. - `pythonjsonlogger.core.BaseJsonFormatter` properly supports all `logging.Formatter` arguments: - `fmt` is unchanged. - `datefmt` is unchanged. - `style` can now support non-standard arguments by setting `validate` to `False` - `validate` allows non-standard `style` arguments or prevents calling `validate` on standard `style` arguments. - `default` is ignored. - `pythonjsonlogger.json.JsonFormatter` default encodings changed: - bytes are URL safe base64 encoded. - Exception formatting detected using `BaseException` instead of `Exception`. Now "pretty prints" the exception using the exception name and message e.g. `"ValueError: bad value passed"` - Dataclasses are now supported - Enum values now use their value, Enum classes now return all values as a list. - Will fallback on `__str__` if available, else `__repr__` if available, else will use `__could_not_encode__` - Renaming fields now preserves order ([#​7](https://github.com/nhairs/python-json-logger/issues/7)) and ignores missing fields ([#​6](https://github.com/nhairs/python-json-logger/issues/6)). - Documentation - Generated documentation using `mkdocs` is stored in `docs/` - Documentation within `README.md` has been moved to `docs/index.md` and `docs/qucikstart.md`. - `CHANGELOG.md` has been moved to `docs/change-log.md` - `SECURITY.md` has been moved and replaced with a symbolic link to `docs/security.md`. ##### Deprecated - `pythonjsonlogger.jsonlogger` is now `pythonjsonlogger.json` - `pythonjsonlogger.jsonlogger.RESERVED_ATTRS` is now `pythonjsonlogger.core.RESERVED_ATTRS`. - `pythonjsonlogger.jsonlogger.merge_record_extra` is now `pythonjsonlogger.core.merge_record_extra`. ##### Removed - Python 3.7 support dropped - `pythonjsonlogger.jsonlogger.JsonFormatter._str_to_fn` replaced with `pythonjsonlogger.core.str_to_object`. ### [`v3.0.1`](https://github.com/nhairs/python-json-logger/releases/tag/v3.0.1) [Compare Source](https://github.com/nhairs/python-json-logger/compare/v3.0.0...v3.0.1) ##### Fixes - Fix spelling of parameter `json_serialiser` -> `json_serializer` ([#​8](https://github.com/nhairs/python-json-logger/issues/8)) - [@​juliangilbey](https://github.com/juliangilbey) ### [`v3.0.0`](https://github.com/nhairs/python-json-logger/releases/tag/v3.0.0) [Compare Source](https://github.com/nhairs/python-json-logger/compare/v2.0.7...v3.0.0) Note: using new major version to separate changes from this fork and the original (upstream). See [#​1](https://github.com/nhairs/python-json-logger/issues/1) for details. ##### Changes - Update supported Python versions - [@​nhairs](https://github.com/nhairs) - Drop 3.6 - The following versions are supported and tested: - CPython 3.7-3.12 (ubuntu, windows, mac) - PyPy 3.7-3.10 (ubuntu, wundows, mac) - `RESERVED_ATTRS` is now a list and version dependent - Fix `JsonFormatter.__init__` return type (`None`) - [@​nhairs](https://github.com/nhairs) - Moved to `pyproject.toml` - [@​nhairs](https://github.com/nhairs) - Update linting and testing - [@​nhairs](https://github.com/nhairs) - Split lint and test steps in GHA - Use validate-pyproject, black, pylint, mypy #### New Contributors **Full Changelog**: https://github.com/nhairs/python-json-logger/compare/v2.0.7...v3.0.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "* 0-3 * * 1" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/GoogleCloudPlatform/microservices-demo). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMDAuMCIsInVwZGF0ZWRJblZlciI6IjM5LjIwMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJsYW5nOiBweXRob24iXX0=-->
# for free
to join this conversation on GitHub.
Already have an account?
# to comment
Description
Currently msgspec only supports encoding Enum values that strings or integers, throwing
msgspec.EncodeError: Only enums with int or str values are supported
when attempting to encode anything else.As far as I can tell this affects the following encoders:
It feels like any value supported by the encoder should be encoded rather than just these two specific types.
Alternatively, in the case of the JSON encoder (I haven't checked the other encoders), it should be possible to use the
enc_hook
to handle the other types. Currently this is not possible as the error is thrown before theenc_hook
is called.The specific use case that I'm hitting this on is in adding support for the msgspec encoder to
python-json-logger
(nhairs/python-json-logger#12)The text was updated successfully, but these errors were encountered: