diff --git a/apitools/base/protorpclite/messages.py b/apitools/base/protorpclite/messages.py index 0d564e9..5b2346a 100644 --- a/apitools/base/protorpclite/messages.py +++ b/apitools/base/protorpclite/messages.py @@ -757,6 +757,7 @@ class Message(six.with_metaclass(_MessageClass, object)): order.check_initialized() """ + __hash__ = None def __init__(self, **kwargs): """Initialize internal messages state. @@ -1079,9 +1080,9 @@ class FieldList(list): if not field_instance.repeated: raise FieldDefinitionError( 'FieldList may only accept repeated fields') - self.__field = field_instance - self.__field.validate(sequence) - list.__init__(self, sequence) + self._field = field_instance + self._field.validate(sequence) + super().__init__(sequence) def __getstate__(self): """Enable pickling. @@ -1098,10 +1099,10 @@ class FieldList(list): None. """ - message_class = self.__field.message_definition() + message_class = self._field.message_definition() if message_class is None: - return self.__field, None, None - return None, message_class, self.__field.number + return self._field, None, None + return None, message_class, self._field.number def __setstate__(self, state): """Enable unpickling. @@ -1115,41 +1116,43 @@ class FieldList(list): """ field_instance, message_class, number = state if field_instance is None: - self.__field = message_class.field_by_number(number) + self._field = message_class.field_by_number(number) else: - self.__field = field_instance + self._field = field_instance @property def field(self): """Field that validates list.""" - return self.__field + return self._field def __setslice__(self, i, j, sequence): """Validate slice assignment to list.""" - self.__field.validate(sequence) + self._field.validate(sequence) list.__setslice__(self, i, j, sequence) def __setitem__(self, index, value): """Validate item assignment to list.""" if isinstance(index, slice): - self.__field.validate(value) + self._field.validate(value) else: - self.__field.validate_element(value) + self._field.validate_element(value) list.__setitem__(self, index, value) def append(self, value): """Validate item appending to list.""" - self.__field.validate_element(value) + if hasattr(self, '_field'): + self._field.validate_element(value) return list.append(self, value) def extend(self, sequence): """Validate extension of list.""" - self.__field.validate(sequence) + if hasattr(self, '_field'): + self._field.validate(sequence) return list.extend(self, sequence) def insert(self, index, value): """Validate item insertion to list.""" - self.__field.validate_element(value) + self._field.validate_element(value) return list.insert(self, index, value) diff --git a/apitools/base/protorpclite/messages_test.py b/apitools/base/protorpclite/messages_test.py index 3ad75e4..1acdab3 100644 --- a/apitools/base/protorpclite/messages_test.py +++ b/apitools/base/protorpclite/messages_test.py @@ -508,7 +508,8 @@ class FieldListTest(test_util.TestCase): def testPickle(self): """Testing pickling and unpickling of FieldList instances.""" field_list = messages.FieldList(self.integer_field, [1, 2, 3, 4, 5]) - unpickled = pickle.loads(pickle.dumps(field_list)) + pickled = pickle.dumps(field_list) + unpickled = pickle.loads(pickled) self.assertEquals(field_list, unpickled) self.assertIsInstance(unpickled.field, messages.IntegerField) self.assertEquals(1, unpickled.field.number) diff --git a/apitools/base/protorpclite/protojson_test.py b/apitools/base/protorpclite/protojson_test.py index 7a8f875..69804f5 100644 --- a/apitools/base/protorpclite/protojson_test.py +++ b/apitools/base/protorpclite/protojson_test.py @@ -440,7 +440,7 @@ class ProtojsonTest(test_util.TestCase, """Test decoding improperly encoded base64 bytes value.""" self.assertRaisesWithRegexpMatch( messages.DecodeError, - 'Base64 decoding error: Incorrect padding', + 'Base64 decoding error: (?:Incorrect padding|Invalid base64-encoded string: .*)', protojson.decode_message, test_util.OptionalMessage, '{"bytes_value": "abcdefghijklmnopq"}') diff --git a/apitools/base/py/batch_test.py b/apitools/base/py/batch_test.py index 90cf4fb..e1384c5 100644 --- a/apitools/base/py/batch_test.py +++ b/apitools/base/py/batch_test.py @@ -357,7 +357,7 @@ class BatchTest(unittest.TestCase): self._DoTestConvertIdToHeader('blah', '<%s+blah>') def testConvertIdThatNeedsEscaping(self): - self._DoTestConvertIdToHeader('~tilde1', '<%s+%%7Etilde1>') + self._DoTestConvertIdToHeader('#hash1', r'<%s+%%23hash1>') def _DoTestConvertHeaderToId(self, header, expected_id): batch_request = batch.BatchHttpRequest('https://www.example.com') diff --git a/apitools/gen/client_generation_test.py b/apitools/gen/client_generation_test.py index 4e382dd..c26db39 100644 --- a/apitools/gen/client_generation_test.py +++ b/apitools/gen/client_generation_test.py @@ -42,6 +42,7 @@ class ClientGenerationTest(unittest.TestCase): self.gen_client_binary = 'gen_client' @test_utils.SkipOnWindows + @unittest.skip('needs network access') def testGeneration(self): for api in _API_LIST: with test_utils.TempDir(change_to=True):