Skip to content

Commit

Permalink
Merge pull request #4 from panamap-object-mapper/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
kirillsulim committed Jul 28, 2020
2 parents 796c6b5 + 7591b31 commit 430bfbb
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 14 deletions.
9 changes: 8 additions & 1 deletion panamap_proto/panamap_proto.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Type, Any, Set, Callable, Dict, List
from typing import Type, Any, Set, Callable, Dict, List, Optional

from google.protobuf.internal.enum_type_wrapper import EnumTypeWrapper
from google.protobuf.message import Message
Expand Down Expand Up @@ -37,6 +37,11 @@ def supports_type(cls, t: Type[Any]) -> bool:
return True
return issubclass(t, Message)

@classmethod
def resolve_type_name(cls, t: Type[Any]) -> Optional[str]:
if isinstance(t, EnumTypeWrapper):
return t.DESCRIPTOR.name

def __init__(self, t: Type[T]):
super(ProtoMappingDescriptor, self).__init__(t)
descriptor = t.DESCRIPTOR
Expand Down Expand Up @@ -89,6 +94,8 @@ def _get_field_type(self, field: FieldDescriptor) -> Type[Any]:

if field.message_type is not None:
type = field.message_type._concrete_class
elif field.enum_type is not None:
type = field.enum_type.name
else:
code = field.type
field_type = self.FIELD_CODE_TO_PYTHON_TYPE.get(code)
Expand Down
2 changes: 1 addition & 1 deletion panamap_proto/panamap_proto.version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.1.0.post2
1.1.1
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ def load_from(file_name):
packages=find_packages(include=["panamap_proto",]),
package_data={"panamap_proto": ["panamap_proto.version",]},
test_suite="tests",
install_requires=["panamap>=1.2.0", "protobuf",],
install_requires=["panamap>=1.2.2", "protobuf",],
classifiers=[
"Development Status :: 4 - Beta",
"License :: OSI Approved :: MIT License",
Expand Down
2 changes: 1 addition & 1 deletion tests/messages.proto
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ enum Lang {
JAVA = 2;
}

message LangCarrier {
message LangCarrier {
Lang lang = 1;
}
17 changes: 7 additions & 10 deletions tests/test_proto_mapping.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from dataclasses import dataclass
from typing import List
from typing import List, Optional
from unittest import TestCase
from enum import Enum

Expand Down Expand Up @@ -31,7 +31,7 @@ class ListOfSimpleData:

@dataclass
class PyLangCarrier:
value: str
value: Optional["PyLang"]


class PyLang(Enum):
Expand Down Expand Up @@ -112,14 +112,6 @@ def test_list_to_proto_mapping(self):
self.assertEqual(data.value[1].__class__, SimpleData)
self.assertEqual(data.value[1].value, "xyz")

def test_map_proto_enum_value(self):
mapper = Mapper(custom_descriptors=[ProtoMappingDescriptor])

mapper.mapping(PyLangCarrier, LangCarrier).l_to_r("value", "lang").register()
mapper.mapping(PyLang, Lang)
a = mapper.map(PyLangCarrier("CPP"), LangCarrier)
self.assertEqual(a.lang, Lang.Value("CPP"))

def test_map_proto_enum_value_with_converter(self):
mapper = Mapper(custom_descriptors=[ProtoMappingDescriptor])
mapper.mapping(PyLang, Lang).l_to_r_converter(lambda l: Lang.Value(l.name)).register()
Expand All @@ -139,7 +131,12 @@ def test_map_proto_with_value_map(self):
mapper.mapping(PyLang, Lang).l_to_r_converter(values_map({py: proto for py, proto in pairs})).r_to_l_converter(
values_map({proto: py for py, proto in pairs})
).register()
mapper.mapping(PyLangCarrier, LangCarrier).bidirectional("value", "lang").register()

self.assertEqual(mapper.map(PyLang.JAVA, Lang), Lang.Value("JAVA"))
self.assertEqual(mapper.map(PyLang.PYTHON, Lang), Lang.Value("PYTHON"))
self.assertEqual(mapper.map(PyLang.CPP, Lang), Lang.Value("CPP"))

c = mapper.map(PyLangCarrier(PyLang.CPP), LangCarrier)
self.assertEqual(c.__class__, LangCarrier)
self.assertEqual(c.lang, Lang.Value("CPP"))

0 comments on commit 430bfbb

Please sign in to comment.