Betterproto

Latest version: v1.2.5

Safety actively analyzes 681775 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 3

2.0.0b7

- **Breaking**: Support `Pydantic` v2 and dropping support for v1 [588](https://github.com/danielgtaylor/python-betterproto/pull/588)
- **Breaking**: The attempting to access an unset `oneof` now raises an `AttributeError`
field. To see how to access `oneof` fields now, refer to [558](https://github.com/danielgtaylor/python-betterproto/pull/558)
and [README.md](https://github.com/danielgtaylor/python-betterproto#one-of-support).
- **Breaking**: A custom `Enum` has been implemented to match the behaviour of being an open set. Any checks for `isinstance(enum_member, enum.Enum)` and `issubclass(EnumSubclass, enum.Enum)` will now return `False`. This change also has the side effect of
preventing any passthrough of `Enum` members (i.e. `Foo.RED.GREEN` doesn't work any more). See [293](https://github.com/danielgtaylor/python-betterproto/pull/293) for more info, this fixed many bugs related to `Enum` handling.

- Add support for `pickle` methods [535](https://github.com/danielgtaylor/python-betterproto/pull/535)
- Add support for `Struct` and `Value` types [551](https://github.com/danielgtaylor/python-betterproto/pull/551)
- Add support for [`Rich` package](https://rich.readthedocs.io/en/latest/index.html) for pretty printing [#508](https://github.com/danielgtaylor/python-betterproto/pull/508)
- Improve support for streaming messages [518](https://github.com/danielgtaylor/python-betterproto/pull/518) [#529](https://github.com/danielgtaylor/python-betterproto/pull/529)
- Improve performance of serializing / de-serializing messages [545](https://github.com/danielgtaylor/python-betterproto/pull/545)
- Improve the handling of message name collisions with typing by allowing the method / type of imports to be configured.
Refer to [582](https://github.com/danielgtaylor/python-betterproto/pull/582)
and [README.md](https://github.com/danielgtaylor/python-betterproto#configuration-typing-imports).
- Fix roundtrip parsing of `datetime`s [534](https://github.com/danielgtaylor/python-betterproto/pull/534)
- Fix accessing unset optional fields [523](https://github.com/danielgtaylor/python-betterproto/pull/523)
- Fix `Message` equality comparison [513](https://github.com/danielgtaylor/python-betterproto/pull/513)
- Fix behaviour with long comment messages [532](https://github.com/danielgtaylor/python-betterproto/pull/532)
- Add a warning when calling a deprecated message [596](https://github.com/danielgtaylor/python-betterproto/pull/596)

2.0.0b6

- **Breaking**: the minimum Python version has been bumped to `3.7` [444](https://github.com/danielgtaylor/python-betterproto/pull/444)

- Support generating [Pydantic dataclasses](https://docs.pydantic.dev/latest/usage/dataclasses).
Pydantic dataclasses are are drop-in replacement for dataclasses in the standard library that additionally supports validation.
Pass `--python_betterproto_opt=pydantic_dataclasses` to enable this feature.
Refer to [406](https://github.com/danielgtaylor/python-betterproto/pull/406)
and [README.md](https://github.com/danielgtaylor/python-betterproto#generating-pydantic-models) for more information.

- Added support for `generated` marker [382](https://github.com/danielgtaylor/python-betterproto/pull/382)
- Pull down the `include_default_values` argument to `to_json()` [405](https://github.com/danielgtaylor/python-betterproto/pull/405)
- Pythonize input_type name in py_input_message [436](https://github.com/danielgtaylor/python-betterproto/pull/436)
- Widen `from_dict()` to accept any `Mapping` [451](https://github.com/danielgtaylor/python-betterproto/pull/451)
- Replace `pkg_resources` with `importlib` [462](https://github.com/danielgtaylor/python-betterproto/pull/462)

- Fix typechecker compatiblity checks in server streaming methods [413](https://github.com/danielgtaylor/python-betterproto/pull/413)
- Fix "empty-valued" repeated fields not being serialised [417](https://github.com/danielgtaylor/python-betterproto/pull/417)
- Fix `dict` encoding for timezone-aware `datetimes` [468](https://github.com/danielgtaylor/python-betterproto/pull/468)
- Fix `to_pydict()` serialization for optional fields [495](https://github.com/danielgtaylor/python-betterproto/pull/495)
- Handle empty value objects properly [481](https://github.com/danielgtaylor/python-betterproto/pull/481)

2.0.0b5

- **Breaking**: Client and Service Stubs no longer pack and unpack the input message fields as parameters [331](https://github.com/danielgtaylor/python-betterproto/pull/311)

Update your client calls and server handlers as follows:

Clients before:

py
response = await service.echo(value="hello", extra_times=1)


Clients after:

py
response = await service.echo(EchoRequest(value="hello", extra_times=1))


Servers before:

py
async def echo(self, value: str, extra_times: int) -> EchoResponse: ...


Servers after:

py
async def echo(self, echo_request: EchoRequest) -> EchoResponse:
Use echo_request.value
Use echo_request.extra_times
...


- Add `to/from_pydict()` for `Message` [203](https://github.com/danielgtaylor/python-betterproto/pull/203)
- Format field comments also as docstrings [304](https://github.com/danielgtaylor/python-betterproto/pull/304)
- Implement `__deepcopy__` for `Message` [339](https://github.com/danielgtaylor/python-betterproto/pull/339)
- Run isort on compiled code [355](https://github.com/danielgtaylor/python-betterproto/pull/355)
- Expose timeout, deadline and metadata parameters from grpclib [352](https://github.com/danielgtaylor/python-betterproto/pull/352)
- Make `Message.__getattribute__` invisible to type checkers [359](https://github.com/danielgtaylor/python-betterproto/pull/359)

- Fix map field edge-case [254](https://github.com/danielgtaylor/python-betterproto/pull/254)
- Fix message text in `NotImplementedError` [325](https://github.com/danielgtaylor/python-betterproto/pull/325)
- Fix `Message.from_dict()` in the presence of optional datetime fields [329](https://github.com/danielgtaylor/python-betterproto/pull/329)
- Support Jinja2 3.0 to prevent version conflicts [330](https://github.com/danielgtaylor/python-betterproto/pull/330)
- Fix overwriting top level `__init__.py` [337](https://github.com/danielgtaylor/python-betterproto/pull/337)
- Remove deprecation warnings when fields are initialised with non-default values [348](https://github.com/danielgtaylor/python-betterproto/pull/348)
- Ensure nested class names are converted to PascalCase [353](https://github.com/danielgtaylor/python-betterproto/pull/353)
- Fix `Message.to_dict()` mutating the underlying Message [378](https://github.com/danielgtaylor/python-betterproto/pull/378)
- Fix some parameters being missing from services [381](https://github.com/danielgtaylor/python-betterproto/pull/381)

2.0.0b4

- **Breaking**: the minimum Python version has been bumped to `3.6.2`

- Always add `AsyncIterator` to imports if there are services [264](https://github.com/danielgtaylor/python-betterproto/pull/264)
- Allow parsing of messages from `ByteStrings` [266](https://github.com/danielgtaylor/python-betterproto/pull/266)
- Add support for proto3 optional [281](https://github.com/danielgtaylor/python-betterproto/pull/281)

- Fix compilation of fields with names identical to builtin types [294](https://github.com/danielgtaylor/python-betterproto/pull/294)
- Fix default values for enum service args [299](https://github.com/danielgtaylor/python-betterproto/pull/299)

2.0.0b3

- Generate grpclib service stubs [170](https://github.com/danielgtaylor/python-betterproto/pull/170)
- Add \_\_version\_\_ attribute to package [134](https://github.com/danielgtaylor/python-betterproto/pull/134)
- Use betterproto generated messages in the plugin [161](https://github.com/danielgtaylor/python-betterproto/pull/161)
- Sort the list of sources in generated file headers [164](https://github.com/danielgtaylor/python-betterproto/pull/164)
- Micro-optimization: use tuples instead of lists for conditions [228](https://github.com/danielgtaylor/python-betterproto/pull/228)
- Improve datestring parsing [213](https://github.com/danielgtaylor/python-betterproto/pull/213)

- Fix serialization of repeated fields with empty messages [180](https://github.com/danielgtaylor/python-betterproto/pull/180)
- Fix compilation of fields named 'bytes' or 'str' [226](https://github.com/danielgtaylor/python-betterproto/pull/226)
- Fix json serialization of infinite and nan floats/doubles [215](https://github.com/danielgtaylor/python-betterproto/pull/215)
- Fix template bug resulting in empty \_\_post_init\_\_ methods [162](https://github.com/danielgtaylor/python-betterproto/pull/162)
- Fix serialization of zero-value messages in a oneof group [176](https://github.com/danielgtaylor/python-betterproto/pull/176)
- Fix missing typing and datetime imports [183](https://github.com/danielgtaylor/python-betterproto/pull/183)
- Fix code generation for empty services [222](https://github.com/danielgtaylor/python-betterproto/pull/222)
- Fix Message.to_dict and from_dict handling of repeated timestamps and durations [211](https://github.com/danielgtaylor/python-betterproto/pull/211)
- Fix incorrect routes in generated client when service is not in a package [177](https://github.com/danielgtaylor/python-betterproto/pull/177)

2.0.0b2

- Add support for deprecated message and fields [126](https://github.com/danielgtaylor/python-betterproto/pull/126)
- Add support for recursive messages [130](https://github.com/danielgtaylor/python-betterproto/pull/130)
- Add support for `bool(Message)` [142](https://github.com/danielgtaylor/python-betterproto/pull/142)
- Improve support for Python 3.9 [140](https://github.com/danielgtaylor/python-betterproto/pull/140) [#173](https://github.com/danielgtaylor/python-betterproto/pull/173)
- Improve keyword sanitisation for generated code [137](https://github.com/danielgtaylor/python-betterproto/pull/137)

- Fix missing serialized_on_wire when message contains only lists [81](https://github.com/danielgtaylor/python-betterproto/pull/81)
- Fix circular dependencies [100](https://github.com/danielgtaylor/python-betterproto/pull/100)
- Fix to_dict enum fields when numbering is not consecutive [102](https://github.com/danielgtaylor/python-betterproto/pull/102)
- Fix argument generation for stub methods when using `import` with proto definition [103](https://github.com/danielgtaylor/python-betterproto/pull/103)
- Fix missing async/await keywords when casing [104](https://github.com/danielgtaylor/python-betterproto/pull/104)
- Fix mutable default arguments in generated code [105](https://github.com/danielgtaylor/python-betterproto/pull/105)
- Fix serialisation of default values in oneofs when calling to_dict() or to_json() [110](https://github.com/danielgtaylor/python-betterproto/pull/110)
- Fix static type checking for grpclib client [124](https://github.com/danielgtaylor/python-betterproto/pull/124)
- Fix python3.6 compatibility issue with dataclasses [124](https://github.com/danielgtaylor/python-betterproto/pull/124)
- Fix handling of trailer-only responses [127](https://github.com/danielgtaylor/python-betterproto/pull/127)

- Refactor plugin.py to use modular dataclasses in tree-like structure to represent parsed data [121](https://github.com/danielgtaylor/python-betterproto/pull/121)
- Refactor template compilation logic [136](https://github.com/danielgtaylor/python-betterproto/pull/136)

- Replace use of platform provided protoc with development dependency on grpcio-tools [107](https://github.com/danielgtaylor/python-betterproto/pull/107)
- Switch to using `poe` from `make` to manage project development tasks [118](https://github.com/danielgtaylor/python-betterproto/pull/118)
- Improve CI platform coverage [128](https://github.com/danielgtaylor/python-betterproto/pull/128)

Page 1 of 3

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.