Skip to content

Latest commit

 

History

History
241 lines (180 loc) · 16.7 KB

CHANGELOG.md

File metadata and controls

241 lines (180 loc) · 16.7 KB

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.

  • Versions suffixed with b* are in beta and can be installed with pip install --pre betterproto.

[2.0.0b7] - 2024-08-11

  • Breaking: Support Pydantic v2 and dropping support for v1 #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 and README.md.

  • 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 for more info, this fixed many bugs related to Enum handling.

  • Add support for pickle methods #535

  • Add support for Struct and Value types #551

  • Add support for Rich package for pretty printing #508

  • Improve support for streaming messages #518 #529

  • Improve performance of serializing / de-serializing messages #545

  • Improve the handling of message name collisions with typing by allowing the method / type of imports to be configured. Refer to #582 and README.md.

  • Fix roundtrip parsing of datetimes #534

  • Fix accessing unset optional fields #523

  • Fix Message equality comparison #513

  • Fix behaviour with long comment messages #532

  • Add a warning when calling a deprecated message #596

[2.0.0b6] - 2023-06-25

  • Breaking: the minimum Python version has been bumped to 3.7 #444

  • Support generating Pydantic 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 and README.md for more information.

  • Added support for @generated marker #382

  • Pull down the include_default_values argument to to_json() #405

  • Pythonize input_type name in py_input_message #436

  • Widen from_dict() to accept any Mapping #451

  • Replace pkg_resources with importlib #462

  • Fix typechecker compatiblity checks in server streaming methods #413

  • Fix "empty-valued" repeated fields not being serialised #417

  • Fix dict encoding for timezone-aware datetimes #468

  • Fix to_pydict() serialization for optional fields #495

  • Handle empty value objects properly #481

[2.0.0b5] - 2022-08-01

  • Breaking: Client and Service Stubs no longer pack and unpack the input message fields as parameters #331

    Update your client calls and server handlers as follows:

    Clients before:

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

    Clients after:

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

    Servers before:

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

    Servers after:

    async def echo(self, echo_request: EchoRequest) -> EchoResponse:
        # Use echo_request.value
        # Use echo_request.extra_times
        ...
  • Add to/from_pydict() for Message #203

  • Format field comments also as docstrings #304

  • Implement __deepcopy__ for Message #339

  • Run isort on compiled code #355

  • Expose timeout, deadline and metadata parameters from grpclib #352

  • Make Message.__getattribute__ invisible to type checkers #359

  • Fix map field edge-case #254

  • Fix message text in NotImplementedError #325

  • Fix Message.from_dict() in the presence of optional datetime fields #329

  • Support Jinja2 3.0 to prevent version conflicts #330

  • Fix overwriting top level __init__.py #337

  • Remove deprecation warnings when fields are initialised with non-default values #348

  • Ensure nested class names are converted to PascalCase #353

  • Fix Message.to_dict() mutating the underlying Message #378

  • Fix some parameters being missing from services #381

[2.0.0b4] - 2022-01-03

  • Breaking: the minimum Python version has been bumped to 3.6.2

  • Always add AsyncIterator to imports if there are services #264

  • Allow parsing of messages from ByteStrings #266

  • Add support for proto3 optional #281

  • Fix compilation of fields with names identical to builtin types #294

  • Fix default values for enum service args #299

[2.0.0b3] - 2021-04-07

  • Generate grpclib service stubs #170

  • Add __version__ attribute to package #134

  • Use betterproto generated messages in the plugin #161

  • Sort the list of sources in generated file headers #164

  • Micro-optimization: use tuples instead of lists for conditions #228

  • Improve datestring parsing #213

  • Fix serialization of repeated fields with empty messages #180

  • Fix compilation of fields named 'bytes' or 'str' #226

  • Fix json serialization of infinite and nan floats/doubles #215

  • Fix template bug resulting in empty __post_init__ methods #162

  • Fix serialization of zero-value messages in a oneof group #176

  • Fix missing typing and datetime imports #183

  • Fix code generation for empty services #222

  • Fix Message.to_dict and from_dict handling of repeated timestamps and durations #211

  • Fix incorrect routes in generated client when service is not in a package #177

[2.0.0b2] - 2020-11-24

  • Add support for deprecated message and fields #126

  • Add support for recursive messages #130

  • Add support for bool(Message) #142

  • Improve support for Python 3.9 #140 #173

  • Improve keyword sanitisation for generated code #137

  • Fix missing serialized_on_wire when message contains only lists #81

  • Fix circular dependencies #100

  • Fix to_dict enum fields when numbering is not consecutive #102

  • Fix argument generation for stub methods when using import with proto definition #103

  • Fix missing async/await keywords when casing #104

  • Fix mutable default arguments in generated code #105

  • Fix serialisation of default values in oneofs when calling to_dict() or to_json() #110

  • Fix static type checking for grpclib client #124

  • Fix python3.6 compatibility issue with dataclasses #124

  • Fix handling of trailer-only responses #127

  • Refactor plugin.py to use modular dataclasses in tree-like structure to represent parsed data #121

  • Refactor template compilation logic #136

  • Replace use of platform provided protoc with development dependency on grpcio-tools #107

  • Switch to using poe from make to manage project development tasks #118

  • Improve CI platform coverage #128

[2.0.0b1] - 2020-07-04

Upgrade Guide

Several bugfixes and improvements required or will require small breaking changes, necessitating a new version. 2.0.0 will be released once the interface is stable.

  • Add support for gRPC and stream-stream #83

  • Switch from pipenv to poetry for development #75

  • Fix two packages with the same name suffix should not cause naming conflict #25

  • Fix Import child package from root #57

  • Fix Import child package from package #58

  • Fix Import parent package from child package #59

  • Fix Import root package from child package #60

  • Fix Import root package from root #61

  • Fix ALL_CAPS message fields are parsed incorrectly. #11

1.2.5 - 2020-04-27

  • Add .j2 suffix to python template names to avoid confusing certain build tools #72

1.2.4 - 2020-04-26

  • Enforce utf-8 for reading the readme in setup.py #67
  • Only import types from grpclib when type checking #52
  • Improve performance of serialize/deserialize by caching type information of fields in class #46
  • Support using Google's wrapper types as RPC output values #40
  • Fixes issue where protoc did not recognize plugin.py as win32 application #38
  • Fix services using non-pythonified field names #34
  • Add ability to provide metadata, timeout & deadline args to requests #32

1.2.3 - 2020-04-15

  • Exclude empty lists from to_dict by default #16
  • Add include_default_values parameter for to_dict #12
  • Fix class names being prepended with duplicates when using protocol buffers that are nested more than once #21
  • Add support for python 3.6 #30

1.2.2 - 2020-01-09

  • Mention lack of Proto 2 support in README.
  • Fix serialization of constructor parameters #10
  • Fix casing parameter propagation #7

1.2.1 - 2019-10-29

  • Fix comment indentation bug in rendered gRPC methods.

1.2.0 - 2019-10-28

  • Generated code output auto-formatting via Black
  • Simplified gRPC helper functions

1.1.0 - 2019-10-27

  • Better JSON casing support
  • Handle field names which clash with Python reserved words
  • Better handling of default values from type introspection
  • Support for Google Duration & Timestamp types
  • Support for Google wrapper types
  • Documentation updates

1.0.1 - 2019-10-22

  • README to the PyPI details page

1.0.0 - 2019-10-22

  • Initial release