Python Betterproto Versions Save

Clean, modern, Python 3.6+ code generator & library for Protobuf 3 and async gRPC

v.2.0.0b6

11 months ago

Enhancements

  • 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

Bug Fixes

  • Fix typechecker compatibility 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

Thank you to all the contributors to this release and everyone for being so patient with its release.

New Contributors

Full Changelog: https://github.com/danielgtaylor/python-betterproto/compare/v2.0.0b5...v.2.0.0b6

v2.0.0b5

1 year ago

Enhancements

  • 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
        ...
    
  • Format field comments also as docstrings #304

  • Implement __deepcopy__ for Message #339

  • Implement to/from_pydict() for Message #203

  • Run isort on compiled code #355

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

  • Make Message.__getattribute__ invisible to type checkers #359

Bug Fixes

  • 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 #330 & #402
  • 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

v2.0.0b4

2 years ago

Enhancements

  • 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 ByteString #266

  • Add support for proto3 optional #281

Bugfixes

  • Fix compilation of fields with names identical to builtin types #294
  • Fix default values for enum service args #299

v2.0.0b3

3 years ago

Enhancements

  • 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

Bugfixes

  • 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

v2.0.0b2

3 years ago
  • 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

v2.0.0b1

3 years ago

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.

Upgrade Guide

  • 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

v1.2.5

4 years ago
  • Add .j2 suffix to python template names to avoid confusing certain build tools.

v1.2.4

4 years ago
  • 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