Skip to content

Commit

Permalink
Change encoding.DictToProtoMap() to match how AdditionalProperty mess…
Browse files Browse the repository at this point in the history
…ages are used in practice, and rename the method to better reflect what it does.
  • Loading branch information
kevinli7 committed Oct 4, 2017
1 parent 6cc020f commit 787e53f
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 47 deletions.
5 changes: 3 additions & 2 deletions apitools/base/py/encoding.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,8 @@ def MessageToDict(message):
return json.loads(MessageToJson(message))


def DictToProtoMap(properties, additional_property_type, sort_items=False):
def DictToAdditionalPropertyMessage(properties, additional_property_type,
sort_items=False):
"""Convert the given dictionary to an AdditionalProperty message."""
items = properties.items()
if sort_items:
Expand All @@ -125,7 +126,7 @@ def DictToProtoMap(properties, additional_property_type, sort_items=False):
for key, value in items:
map_.append(additional_property_type.AdditionalProperty(
key=key, value=value))
return additional_property_type(additional_properties=map_)
return additional_property_type(additionalProperties=map_)


def PyValueToMessage(message_type, value):
Expand Down
89 changes: 44 additions & 45 deletions apitools/base/py/encoding_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,29 +42,29 @@ class TimeMessage(messages.Message):
timefield = message_types.DateTimeField(3)


@encoding.MapUnrecognizedFields('additional_properties')
@encoding.MapUnrecognizedFields('additionalProperties')
class AdditionalPropertiesMessage(messages.Message):

class AdditionalProperty(messages.Message):
key = messages.StringField(1)
value = messages.StringField(2)

additional_properties = messages.MessageField(
additionalProperties = messages.MessageField(
'AdditionalProperty', 1, repeated=True)


@encoding.MapUnrecognizedFields('additional_properties')
@encoding.MapUnrecognizedFields('additionalProperties')
class AdditionalIntPropertiesMessage(messages.Message):

class AdditionalProperty(messages.Message):
key = messages.StringField(1)
value = messages.IntegerField(2)

additional_properties = messages.MessageField(
additionalProperties = messages.MessageField(
'AdditionalProperty', 1, repeated=True)


@encoding.MapUnrecognizedFields('additional_properties')
@encoding.MapUnrecognizedFields('additionalProperties')
class UnrecognizedEnumMessage(messages.Message):

class ThisEnum(messages.Enum):
Expand All @@ -75,7 +75,7 @@ class AdditionalProperty(messages.Message):
key = messages.StringField(1)
value = messages.EnumField('UnrecognizedEnumMessage.ThisEnum', 2)

additional_properties = messages.MessageField(
additionalProperties = messages.MessageField(
AdditionalProperty, 1, repeated=True)


Expand All @@ -95,14 +95,14 @@ class ThisEnum(messages.Enum):
ignored_field = messages.EnumField(ThisEnum, 3)


@encoding.MapUnrecognizedFields('additional_properties')
@encoding.MapUnrecognizedFields('additionalProperties')
class AdditionalMessagePropertiesMessage(messages.Message):

class AdditionalProperty(messages.Message):
key = messages.StringField(1)
value = messages.MessageField(CompoundPropertyType, 2)

additional_properties = messages.MessageField(
additionalProperties = messages.MessageField(
'AdditionalProperty', 1, repeated=True)


Expand Down Expand Up @@ -158,15 +158,15 @@ class SomeEnum(messages.Enum):
another_field = messages.StringField(2)


@encoding.MapUnrecognizedFields('additional_properties')
@encoding.MapUnrecognizedFields('additionalProperties')
class RepeatedJsonValueMessage(messages.Message):

class AdditionalProperty(messages.Message):
key = messages.StringField(1)
value = messages.MessageField(extra_types.JsonValue, 2, repeated=True)

additional_properties = messages.MessageField('AdditionalProperty', 1,
repeated=True)
additionalProperties = messages.MessageField('AdditionalProperty', 1,
repeated=True)


encoding.AddCustomJsonEnumMapping(MessageWithRemappings.SomeEnum,
Expand Down Expand Up @@ -279,14 +279,14 @@ def testIncludeFields(self):
def testNestedIncludeFields(self):
msg = HasNestedMessage(
nested=AdditionalPropertiesMessage(
additional_properties=[]))
additionalProperties=[]))
self.assertEqual(
'{"nested": null}',
encoding.MessageToJson(msg, include_fields=['nested']))
self.assertEqual(
'{"nested": {"additional_properties": []}}',
'{"nested": {"additionalProperties": []}}',
encoding.MessageToJson(
msg, include_fields=['nested.additional_properties']))
msg, include_fields=['nested.additionalProperties']))
msg = ExtraNestedMessage(nested=msg)
self.assertEqual(
'{"nested": {"nested": null}}',
Expand All @@ -298,13 +298,13 @@ def testNestedIncludeFields(self):
['{"nested": {"nested": {}, "nested_list": []}}',
'{"nested": {"nested_list": [], "nested": {}}}'])
self.assertEqual(
'{"nested": {"nested": {"additional_properties": []}}}',
'{"nested": {"nested": {"additionalProperties": []}}}',
encoding.MessageToJson(
msg, include_fields=['nested.nested.additional_properties']))
msg, include_fields=['nested.nested.additionalProperties']))

def testAdditionalPropertyMapping(self):
msg = AdditionalPropertiesMessage()
msg.additional_properties = [
msg.additionalProperties = [
AdditionalPropertiesMessage.AdditionalProperty(
key='key_one', value='value_one'),
AdditionalPropertiesMessage.AdditionalProperty(
Expand All @@ -319,24 +319,24 @@ def testAdditionalPropertyMapping(self):
new_msg = encoding.JsonToMessage(type(msg), encoded_msg)
self.assertEqual(
set(('key_one', u'key_twð')),
set([x.key for x in new_msg.additional_properties]))
set([x.key for x in new_msg.additionalProperties]))
self.assertIsNot(msg, new_msg)

new_msg.additional_properties.pop()
self.assertEqual(1, len(new_msg.additional_properties))
self.assertEqual(2, len(msg.additional_properties))
new_msg.additionalProperties.pop()
self.assertEqual(1, len(new_msg.additionalProperties))
self.assertEqual(2, len(msg.additionalProperties))

def testNumericPropertyName(self):
json_msg = '{"nested": {"123": "def"}}'
msg = encoding.JsonToMessage(HasNestedMessage, json_msg)
self.assertEqual(1, len(msg.nested.additional_properties))
self.assertEqual(1, len(msg.nested.additionalProperties))

def testNumericPropertyValue(self):
json_msg = '{"key_one": "123"}'
msg = encoding.JsonToMessage(AdditionalIntPropertiesMessage, json_msg)
self.assertEqual(
AdditionalIntPropertiesMessage(
additional_properties=[
additionalProperties=[
AdditionalIntPropertiesMessage.AdditionalProperty(
key='key_one', value=123)]),
msg)
Expand All @@ -345,20 +345,20 @@ def testAdditionalMessageProperties(self):
json_msg = '{"input": {"index": 0, "name": "output"}}'
result = encoding.JsonToMessage(
AdditionalMessagePropertiesMessage, json_msg)
self.assertEqual(1, len(result.additional_properties))
self.assertEqual(0, result.additional_properties[0].value.index)
self.assertEqual(1, len(result.additionalProperties))
self.assertEqual(0, result.additionalProperties[0].value.index)

def testUnrecognizedEnum(self):
json_msg = '{"input": "VALUE_ONE"}'
result = encoding.JsonToMessage(
UnrecognizedEnumMessage, json_msg)
self.assertEqual(1, len(result.additional_properties))
self.assertEqual(1, len(result.additionalProperties))
self.assertEqual(UnrecognizedEnumMessage.ThisEnum.VALUE_ONE,
result.additional_properties[0].value)
result.additionalProperties[0].value)

def testNestedFieldMapping(self):
nested_msg = AdditionalPropertiesMessage()
nested_msg.additional_properties = [
nested_msg.additionalProperties = [
AdditionalPropertiesMessage.AdditionalProperty(
key='key_one', value='value_one'),
AdditionalPropertiesMessage.AdditionalProperty(
Expand All @@ -374,11 +374,11 @@ def testNestedFieldMapping(self):
new_msg = encoding.JsonToMessage(type(msg), encoded_msg)
self.assertEqual(
set(('key_one', 'key_two')),
set([x.key for x in new_msg.nested.additional_properties]))
set([x.key for x in new_msg.nested.additionalProperties]))

new_msg.nested.additional_properties.pop()
self.assertEqual(1, len(new_msg.nested.additional_properties))
self.assertEqual(2, len(msg.nested.additional_properties))
new_msg.nested.additionalProperties.pop()
self.assertEqual(1, len(new_msg.nested.additionalProperties))
self.assertEqual(2, len(msg.nested.additionalProperties))

def testValidEnums(self):
message_json = '{"field_one": "VALUE_ONE"}'
Expand Down Expand Up @@ -570,40 +570,39 @@ def testRepeatedJsonValuesAsRepeatedProperty(self):
msg = encoding.JsonToMessage(RepeatedJsonValueMessage, encoded_msg)
self.assertEqual(encoded_msg, encoding.MessageToJson(msg))

def testDictToProtoMap(self):
def testDictToAdditionalPropertyMessage(self):
dict_ = {'key': 'value'}

encoded_msg = encoding.DictToProtoMap(dict_,
AdditionalPropertiesMessage)
encoded_msg = encoding.DictToAdditionalPropertyMessage(
dict_, AdditionalPropertiesMessage)
expected_msg = AdditionalPropertiesMessage()
expected_msg.additional_properties = [
expected_msg.additionalProperties = [
AdditionalPropertiesMessage.AdditionalProperty(
key='key', value='value')
]
self.assertEqual(encoded_msg, expected_msg)

def testDictToProtoMapSorted(self):
def testDictToAdditionalPropertyMessageSorted(self):
tuples = [('key{0:02}'.format(i), 'value') for i in range(100)]
dict_ = dict(tuples)

encoded_msg = encoding.DictToProtoMap(dict_,
AdditionalPropertiesMessage,
sort_items=True)
encoded_msg = encoding.DictToAdditionalPropertyMessage(
dict_, AdditionalPropertiesMessage, sort_items=True)
expected_msg = AdditionalPropertiesMessage()
expected_msg.additional_properties = [
expected_msg.additionalProperties = [
AdditionalPropertiesMessage.AdditionalProperty(
key=key, value=value)
for key, value in tuples
]
self.assertEqual(encoded_msg, expected_msg)

def testDictToProtoMapNumeric(self):
def testDictToAdditionalPropertyMessageNumeric(self):
dict_ = {'key': 1}

encoded_msg = encoding.DictToProtoMap(dict_,
AdditionalIntPropertiesMessage)
encoded_msg = encoding.DictToAdditionalPropertyMessage(
dict_, AdditionalIntPropertiesMessage)
expected_msg = AdditionalIntPropertiesMessage()
expected_msg.additional_properties = [
expected_msg.additionalProperties = [
AdditionalIntPropertiesMessage.AdditionalProperty(
key='key', value=1)
]
Expand Down

0 comments on commit 787e53f

Please sign in to comment.