Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Version 5.2.1 - Implicit Import Fox #7

Merged
merged 1 commit into from
Sep 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,21 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [5.2.1] - 2024-09-24

### Changed

- The line `from typing import *` in most templates to `import typing` and now
references to classes an such from `typing` are explicit (i.e. `List` ->
`typing.List`)

### Fixed

- Side-effects caused by `from typing import *` when messages/classes share a
name of classes in the `typing` package
- Bug where `datetime` was missing from imports in gRPC senders and receivers


## [5.2.0] - 2024-09-23

### Added
Expand Down
2 changes: 1 addition & 1 deletion neobuilder/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
__version__ = '5.2.0'
__version__ = '5.2.1'

__author__ = 'Thordur Matthiasson <[email protected]>'
__license__ = 'MIT License'
Expand Down
2 changes: 1 addition & 1 deletion neobuilder/data/templates/dataclass_module.jinja2
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ __all__ = [
import dataclasses
import datetime
import enum
from typing import *
import typing
from protoplasm.casting import dictators
from protoplasm import plasm
{{ imports }}
Expand Down
5 changes: 3 additions & 2 deletions neobuilder/data/templates/grpc_receiver.jinja2
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@ __all__ = [
'{{ a }}',
{% endfor %}
]
from typing import *
import datetime
import typing
from protoplasm import plasm
{{ imports }}
if TYPE_CHECKING:
if typing.TYPE_CHECKING:
from grpc import ServicerContext
{{ api_import }}

Expand Down
5 changes: 3 additions & 2 deletions neobuilder/data/templates/grpc_sender.jinja2
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@ __all__ = [
'{{ a }}',
{% endfor %}
]
from typing import *
import datetime
import typing
from protoplasm import plasm
{{ imports }}
if TYPE_CHECKING:
if typing.TYPE_CHECKING:
from grpc import ChannelCredentials

import logging
Expand Down
2 changes: 1 addition & 1 deletion neobuilder/data/templates/interface.jinja2
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ __all__ = [
{% endfor %}
]
import datetime
from typing import *
import typing
from protoplasm import plasm

{% for import_line in import_lines %}
Expand Down
2 changes: 1 addition & 1 deletion neobuilder/descwrap/_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class FieldKind(enum.IntFlag):
FIELD_ENUM_MAP = DATA_ENUM | KIND_MAP

def __repr__(self) -> str:
return self.name
return self.name or str(self.value)


@dataclasses.dataclass
Expand Down
2 changes: 1 addition & 1 deletion neobuilder/generators/servicebuilders/grpc_sender.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def render(self) -> str:
i = self.base_indent
return (
f'{i}class {self.service.service_descriptor.name}(plasm.BaseGrpcClientImplementation, {self.service.service_descriptor.name}Interface):\n'
f'{i}{__}def __init__(self, grpc_host: str = \'localhost:50051\', credentials: Optional[Union[bool, \'ChannelCredentials\']] = None, options: Optional[Dict] = None, *args, **kwargs):\n'
f'{i}{__}def __init__(self, grpc_host: str = \'localhost:50051\', credentials: typing.Optional[typing.Union[bool, \'ChannelCredentials\']] = None, options: typing.Optional[typing.Dict] = None, *args, **kwargs):\n'
f'{i}{__}{__}super().__init__(pb2_grpc.{self.service.service_descriptor.name}Stub, grpc_host, credentials, options, *args, **kwargs)\n'
f'\n'
f'{self.render_methods()}'
Expand Down
14 changes: 7 additions & 7 deletions neobuilder/generators/symbols/dataclass.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ def get_imports(self):

def output_google_type_proxy(self):
return {
'Empty': 'NoReturn'
'Empty': 'typing.NoReturn'
}.get(
self.get_class_name()
)
Expand Down Expand Up @@ -162,7 +162,7 @@ def render_api_request_arg(self, method_desc: MethodDescriptorWrapper):
type_hint = f'{self.self_import.get_import_name(method_desc.file_descriptor)}.{self.descriptor.name}'

if method_desc.io_type.is_input_stream():
return f', request_iterator: Iterable[{type_hint}]'
return f', request_iterator: typing.Iterable[{type_hint}]'
return f', {self.get_under_name()}: {type_hint}'

def render_forwarded_args(self):
Expand All @@ -179,8 +179,8 @@ def render_api_return_args(self, api_file: typing.Optional[pro_desc.FileDescript
if len(type_hint_list) == 1:
return type_hint_list[0]
else:
return f"Tuple[{', '.join(type_hint_list)}]"
return 'NoReturn'
return f"typing.Tuple[{', '.join(type_hint_list)}]"
return 'typing.NoReturn'

def render_api_return_dataclass(self, api_file: typing.Optional[pro_desc.FileDescriptor] = None):
if self.descriptor.file.package == 'google.protobuf':
Expand Down Expand Up @@ -280,11 +280,11 @@ def get_py_type_name(self, used_in_file: json_format.descriptor.FileDescriptor =

def get_type_hint(self, used_in_file: json_format.descriptor.FileDescriptor = None) -> str:
if self.is_struct():
return f'Dict[str, Any]'
return f'typing.Dict[str, typing.Any]'
elif self.is_map():
return f'Dict[{self.field_descriptor.key_py_type.name}, {self.get_py_type_name(used_in_file)}]'
return f'typing.Dict[{self.field_descriptor.key_py_type.name}, {self.get_py_type_name(used_in_file)}]'
elif self.is_list():
return f'List[{self.get_py_type_name(used_in_file)}]'
return f'typing.List[{self.get_py_type_name(used_in_file)}]'
elif self.is_empty():
return f'None'
return self.get_py_type_name(used_in_file)
Expand Down
4 changes: 2 additions & 2 deletions neobuilder/generators/symbols/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ def get_output_name(self):
def get_request_type_hint(self) -> str:
unary = f'{self.input.render_pb2_type_hint(self.service.module)}'
if self.io_type.is_input_stream():
return f'Iterable[{unary}]'
return f'typing.Iterable[{unary}]'
return unary

def get_request_dc_type_hint(self) -> str:
Expand All @@ -125,7 +125,7 @@ def get_response_type_hint(self) -> str:

def get_response_dc_type(self) -> str:
if self.io_type.is_output_stream():
return f'Iterable[{self.get_response_dc_class_type()}]'
return f'typing.Iterable[{self.get_response_dc_class_type()}]'
return self.get_response_dc_class_type()

def get_response_dc_class_type(self) -> str:
Expand Down
11 changes: 0 additions & 11 deletions neobuilder/neobuilder/render/renderer.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,3 @@ def render_file(self, template_name: str, **kwargs) -> str:
except Exception as ex:
log.exception(f'Error in template: {template_name}: {ex!r}')
raise ex


def main():
t = TemplateRenderer()
print(t.render_file('root_init',
version='(3, 1, 0, 0)',
protoplasm_version='(4, 0, 0, 0)'))


if __name__ == '__main__':
main()
2 changes: 1 addition & 1 deletion tests/res/expected/sandbox/test/alpha_dc.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import dataclasses
import datetime
import enum
from typing import *
import typing
from protoplasm.casting import dictators
from protoplasm import plasm

Expand Down
6 changes: 3 additions & 3 deletions tests/res/expected/sandbox/test/anytest_dc.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import dataclasses
import datetime
import enum
from typing import *
import typing
from protoplasm.casting import dictators
from protoplasm import plasm

Expand All @@ -23,7 +23,7 @@
class AnyMessage(plasm.DataclassBase):
__proto_cls__ = pb2.AnyMessage
my_any: plasm.DataclassBase = dataclasses.field(default=None, metadata={'dictator': dictators.AnyDictator})
my_any_list: List[plasm.DataclassBase] = dataclasses.field(default_factory=list, metadata={'dictator': dictators.AnyDictator, 'is_list': True})
my_any_map: Dict[str, plasm.DataclassBase] = dataclasses.field(default_factory=dict, metadata={'dictator': dictators.AnyDictator, 'is_map': True})
my_any_list: typing.List[plasm.DataclassBase] = dataclasses.field(default_factory=list, metadata={'dictator': dictators.AnyDictator, 'is_list': True})
my_any_map: typing.Dict[str, plasm.DataclassBase] = dataclasses.field(default_factory=dict, metadata={'dictator': dictators.AnyDictator, 'is_map': True})


2 changes: 1 addition & 1 deletion tests/res/expected/sandbox/test/beta_dc.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import dataclasses
import datetime
import enum
from typing import *
import typing
from protoplasm.casting import dictators
from protoplasm import plasm
from sandbox.test import alpha_dc as sandbox__test__alpha_dc
Expand Down
2 changes: 1 addition & 1 deletion tests/res/expected/sandbox/test/clones_dc.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import dataclasses
import datetime
import enum
from typing import *
import typing
from protoplasm.casting import dictators
from protoplasm import plasm

Expand Down
2 changes: 1 addition & 1 deletion tests/res/expected/sandbox/test/delta_dc.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import dataclasses
import datetime
import enum
from typing import *
import typing
from protoplasm.casting import dictators
from protoplasm import plasm
from sandbox.test import beta_dc as sandbox__test__beta_dc
Expand Down
18 changes: 9 additions & 9 deletions tests/res/expected/sandbox/test/enums_dc.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import dataclasses
import datetime
import enum
from typing import *
import typing
from protoplasm.casting import dictators
from protoplasm import plasm

Expand Down Expand Up @@ -64,10 +64,10 @@ class WithExternalEnum(plasm.DataclassBase):
__proto_cls__ = pb2.WithExternalEnum
my_enum: ExternalEnum = dataclasses.field(default=0, metadata={'dictator': dictators.EnumDictator, 'is_enum': True})
my_alias_enum: ExternalAliasEnum = dataclasses.field(default=0, metadata={'dictator': dictators.EnumDictator, 'is_enum': True})
my_enum_list: List[ExternalEnum] = dataclasses.field(default_factory=list, metadata={'dictator': dictators.EnumDictator, 'is_list': True, 'is_enum': True})
my_alias_enum_list: List[ExternalAliasEnum] = dataclasses.field(default_factory=list, metadata={'dictator': dictators.EnumDictator, 'is_list': True, 'is_enum': True})
my_enum_map: Dict[str, ExternalEnum] = dataclasses.field(default_factory=dict, metadata={'dictator': dictators.EnumDictator, 'is_map': True, 'is_enum': True})
my_alias_enum_map: Dict[str, ExternalAliasEnum] = dataclasses.field(default_factory=dict, metadata={'dictator': dictators.EnumDictator, 'is_map': True, 'is_enum': True})
my_enum_list: typing.List[ExternalEnum] = dataclasses.field(default_factory=list, metadata={'dictator': dictators.EnumDictator, 'is_list': True, 'is_enum': True})
my_alias_enum_list: typing.List[ExternalAliasEnum] = dataclasses.field(default_factory=list, metadata={'dictator': dictators.EnumDictator, 'is_list': True, 'is_enum': True})
my_enum_map: typing.Dict[str, ExternalEnum] = dataclasses.field(default_factory=dict, metadata={'dictator': dictators.EnumDictator, 'is_map': True, 'is_enum': True})
my_alias_enum_map: typing.Dict[str, ExternalAliasEnum] = dataclasses.field(default_factory=dict, metadata={'dictator': dictators.EnumDictator, 'is_map': True, 'is_enum': True})


@dataclasses.dataclass
Expand Down Expand Up @@ -108,10 +108,10 @@ class InternalAliasEnum(enum.IntEnum):

my_internal_enum: WithInternalEnum.InternalEnum = dataclasses.field(default=0, metadata={'dictator': dictators.EnumDictator, 'is_enum': True})
my_internal_alias_enum: WithInternalEnum.InternalAliasEnum = dataclasses.field(default=0, metadata={'dictator': dictators.EnumDictator, 'is_enum': True})
my_internal_enum_list: List[WithInternalEnum.InternalEnum] = dataclasses.field(default_factory=list, metadata={'dictator': dictators.EnumDictator, 'is_list': True, 'is_enum': True})
my_internal_alias_enum_list: List[WithInternalEnum.InternalAliasEnum] = dataclasses.field(default_factory=list, metadata={'dictator': dictators.EnumDictator, 'is_list': True, 'is_enum': True})
my_internal_enum_map: Dict[str, WithInternalEnum.InternalEnum] = dataclasses.field(default_factory=dict, metadata={'dictator': dictators.EnumDictator, 'is_map': True, 'is_enum': True})
my_internal_alias_enum_map: Dict[str, WithInternalEnum.InternalAliasEnum] = dataclasses.field(default_factory=dict, metadata={'dictator': dictators.EnumDictator, 'is_map': True, 'is_enum': True})
my_internal_enum_list: typing.List[WithInternalEnum.InternalEnum] = dataclasses.field(default_factory=list, metadata={'dictator': dictators.EnumDictator, 'is_list': True, 'is_enum': True})
my_internal_alias_enum_list: typing.List[WithInternalEnum.InternalAliasEnum] = dataclasses.field(default_factory=list, metadata={'dictator': dictators.EnumDictator, 'is_list': True, 'is_enum': True})
my_internal_enum_map: typing.Dict[str, WithInternalEnum.InternalEnum] = dataclasses.field(default_factory=dict, metadata={'dictator': dictators.EnumDictator, 'is_map': True, 'is_enum': True})
my_internal_alias_enum_map: typing.Dict[str, WithInternalEnum.InternalAliasEnum] = dataclasses.field(default_factory=dict, metadata={'dictator': dictators.EnumDictator, 'is_map': True, 'is_enum': True})


@dataclasses.dataclass
Expand Down
4 changes: 2 additions & 2 deletions tests/res/expected/sandbox/test/googlestruct_dc.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import dataclasses
import datetime
import enum
from typing import *
import typing
from protoplasm.casting import dictators
from protoplasm import plasm

Expand All @@ -22,5 +22,5 @@
@dataclasses.dataclass
class StructMessage(plasm.DataclassBase):
__proto_cls__ = pb2.StructMessage
my_struct: Dict[str, Any] = dataclasses.field(default_factory=dict, metadata={'dictator': dictators.StructDictator, 'is_struct': True})
my_struct: typing.Dict[str, typing.Any] = dataclasses.field(default_factory=dict, metadata={'dictator': dictators.StructDictator, 'is_struct': True})

2 changes: 1 addition & 1 deletion tests/res/expected/sandbox/test/illnamedfields_dc.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import dataclasses
import datetime
import enum
from typing import *
import typing
from protoplasm.casting import dictators
from protoplasm import plasm

Expand Down
2 changes: 1 addition & 1 deletion tests/res/expected/sandbox/test/illnamedservice_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
'ServiceWithBadRequestNamesInterface',
]
import datetime
from typing import *
import typing
from protoplasm import plasm

from sandbox.test import illnamedservice_dc as dc
Expand Down
2 changes: 1 addition & 1 deletion tests/res/expected/sandbox/test/illnamedservice_dc.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import dataclasses
import datetime
import enum
from typing import *
import typing
from protoplasm.casting import dictators
from protoplasm import plasm

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@
__all__ = [
'ServiceWithBadRequestNamesGrpcServicer',
]
from typing import *
import datetime
import typing
from protoplasm import plasm
from sandbox.test import illnamedservice_dc as dc
from sandbox.test import illnamedservice_pb2 as pb2
from sandbox.test import illnamedservice_pb2_grpc as pb2_grpc
if TYPE_CHECKING:
if typing.TYPE_CHECKING:
from grpc import ServicerContext
from sandbox.test import illnamedservice_api as api

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,22 @@
__all__ = [
'ServiceWithBadRequestNames',
]
from typing import *
import datetime
import typing
from protoplasm import plasm
from sandbox.test import illnamedservice_dc as dc
from sandbox.test import illnamedservice_pb2_grpc as pb2_grpc
from sandbox.test.illnamedservice_api import *

if TYPE_CHECKING:
if typing.TYPE_CHECKING:
from grpc import ChannelCredentials

import logging
log = logging.getLogger(__name__)


class ServiceWithBadRequestNames(plasm.BaseGrpcClientImplementation, ServiceWithBadRequestNamesInterface):
def __init__(self, grpc_host: str = 'localhost:50051', credentials: Optional[Union[bool, 'ChannelCredentials']] = None, options: Optional[Dict] = None, *args, **kwargs):
def __init__(self, grpc_host: str = 'localhost:50051', credentials: typing.Optional[typing.Union[bool, 'ChannelCredentials']] = None, options: typing.Optional[typing.Dict] = None, *args, **kwargs):
super().__init__(pb2_grpc.ServiceWithBadRequestNamesStub, grpc_host, credentials, options, *args, **kwargs)

def do_something(self, foo: str = None) -> str:
Expand Down
2 changes: 1 addition & 1 deletion tests/res/expected/sandbox/test/imported_enum_dc.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import dataclasses
import datetime
import enum
from typing import *
import typing
from protoplasm.casting import dictators
from protoplasm import plasm
from sandbox.test import enums_dc as sandbox__test__enums_dc
Expand Down
2 changes: 1 addition & 1 deletion tests/res/expected/sandbox/test/interfaceonly_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
'InterfaceOnlyServiceInterface',
]
import datetime
from typing import *
import typing
from protoplasm import plasm

from sandbox.test import interfaceonly_dc as dc
Expand Down
2 changes: 1 addition & 1 deletion tests/res/expected/sandbox/test/interfaceonly_dc.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import dataclasses
import datetime
import enum
from typing import *
import typing
from protoplasm.casting import dictators
from protoplasm import plasm

Expand Down
2 changes: 1 addition & 1 deletion tests/res/expected/sandbox/test/nested_dc.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import dataclasses
import datetime
import enum
from typing import *
import typing
from protoplasm.casting import dictators
from protoplasm import plasm

Expand Down
Loading
Loading