Add support for pydantic dataclasses (#406)
This commit is contained in:
		| @@ -5,7 +5,13 @@ | ||||
| {% for i in output_file.python_module_imports|sort %} | ||||
| import {{ i }} | ||||
| {% endfor %} | ||||
|  | ||||
| {% if output_file.pydantic_dataclasses %} | ||||
| from pydantic.dataclasses import dataclass | ||||
| {%- else -%} | ||||
| from dataclasses import dataclass | ||||
| {% endif %} | ||||
|  | ||||
| {% if output_file.datetime_imports %} | ||||
| from datetime import {% for i in output_file.datetime_imports|sort %}{{ i }}{% if not loop.last %}, {% endif %}{% endfor %} | ||||
|  | ||||
| @@ -15,6 +21,11 @@ from typing import {% for i in output_file.typing_imports|sort %}{{ i }}{% if no | ||||
|  | ||||
| {% endif %} | ||||
|  | ||||
| {% if output_file.pydantic_imports %} | ||||
| from pydantic import {% for i in output_file.pydantic_imports|sort %}{{ i }}{% if not loop.last %}, {% endif %}{% endfor %} | ||||
|  | ||||
| {% endif %} | ||||
|  | ||||
| import betterproto | ||||
| {% if output_file.services %} | ||||
| from betterproto.grpc.grpclib_server import ServiceBase | ||||
| @@ -80,6 +91,11 @@ class {{ message.py_name }}(betterproto.Message): | ||||
|         {% endfor %} | ||||
|     {%  endif %} | ||||
|  | ||||
|     {% if output_file.pydantic_dataclasses and message.has_oneof_fields %} | ||||
|     @root_validator() | ||||
|     def check_oneof(cls, values): | ||||
|         return cls._validate_field_groups(values) | ||||
|     {%  endif %} | ||||
|  | ||||
| {% endfor %} | ||||
| {% for service in output_file.services %} | ||||
| @@ -226,3 +242,11 @@ class {{ service.py_name }}Base(ServiceBase): | ||||
|         } | ||||
|  | ||||
| {% endfor %} | ||||
|  | ||||
| {% if output_file.pydantic_dataclasses %} | ||||
| {% for message in output_file.messages %} | ||||
| {% if message.has_message_field %} | ||||
| {{ message.py_name }}.__pydantic_model__.update_forward_refs()  # type: ignore | ||||
| {% endif %} | ||||
| {% endfor %} | ||||
| {% endif %} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user