Index: third_party/google/protobuf/internal/containers.py |
diff --git a/third_party/google/protobuf/internal/containers.py b/third_party/google/protobuf/internal/containers.py |
deleted file mode 100644 |
index 5797e81b2de2ade887df3e06add4d07ef26d8db9..0000000000000000000000000000000000000000 |
--- a/third_party/google/protobuf/internal/containers.py |
+++ /dev/null |
@@ -1,269 +0,0 @@ |
-# Protocol Buffers - Google's data interchange format |
-# Copyright 2008 Google Inc. All rights reserved. |
-# http://code.google.com/p/protobuf/ |
-# |
-# Redistribution and use in source and binary forms, with or without |
-# modification, are permitted provided that the following conditions are |
-# met: |
-# |
-# * Redistributions of source code must retain the above copyright |
-# notice, this list of conditions and the following disclaimer. |
-# * Redistributions in binary form must reproduce the above |
-# copyright notice, this list of conditions and the following disclaimer |
-# in the documentation and/or other materials provided with the |
-# distribution. |
-# * Neither the name of Google Inc. nor the names of its |
-# contributors may be used to endorse or promote products derived from |
-# this software without specific prior written permission. |
-# |
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- |
-"""Contains container classes to represent different protocol buffer types. |
- |
-This file defines container classes which represent categories of protocol |
-buffer field types which need extra maintenance. Currently these categories |
-are: |
- - Repeated scalar fields - These are all repeated fields which aren't |
- composite (e.g. they are of simple types like int32, string, etc). |
- - Repeated composite fields - Repeated fields which are composite. This |
- includes groups and nested messages. |
-""" |
- |
-__author__ = 'petar@google.com (Petar Petrov)' |
- |
- |
-class BaseContainer(object): |
- |
- """Base container class.""" |
- |
- # Minimizes memory usage and disallows assignment to other attributes. |
- __slots__ = ['_message_listener', '_values'] |
- |
- def __init__(self, message_listener): |
- """ |
- Args: |
- message_listener: A MessageListener implementation. |
- The RepeatedScalarFieldContainer will call this object's |
- Modified() method when it is modified. |
- """ |
- self._message_listener = message_listener |
- self._values = [] |
- |
- def __getitem__(self, key): |
- """Retrieves item by the specified key.""" |
- return self._values[key] |
- |
- def __len__(self): |
- """Returns the number of elements in the container.""" |
- return len(self._values) |
- |
- def __ne__(self, other): |
- """Checks if another instance isn't equal to this one.""" |
- # The concrete classes should define __eq__. |
- return not self == other |
- |
- def __hash__(self): |
- raise TypeError('unhashable object') |
- |
- def __repr__(self): |
- return repr(self._values) |
- |
- def sort(self, *args, **kwargs): |
- # Continue to support the old sort_function keyword argument. |
- # This is expected to be a rare occurrence, so use LBYL to avoid |
- # the overhead of actually catching KeyError. |
- if 'sort_function' in kwargs: |
- kwargs['cmp'] = kwargs.pop('sort_function') |
- self._values.sort(*args, **kwargs) |
- |
- |
-class RepeatedScalarFieldContainer(BaseContainer): |
- |
- """Simple, type-checked, list-like container for holding repeated scalars.""" |
- |
- # Disallows assignment to other attributes. |
- __slots__ = ['_type_checker'] |
- |
- def __init__(self, message_listener, type_checker): |
- """ |
- Args: |
- message_listener: A MessageListener implementation. |
- The RepeatedScalarFieldContainer will call this object's |
- Modified() method when it is modified. |
- type_checker: A type_checkers.ValueChecker instance to run on elements |
- inserted into this container. |
- """ |
- super(RepeatedScalarFieldContainer, self).__init__(message_listener) |
- self._type_checker = type_checker |
- |
- def append(self, value): |
- """Appends an item to the list. Similar to list.append().""" |
- self._values.append(self._type_checker.CheckValue(value)) |
- if not self._message_listener.dirty: |
- self._message_listener.Modified() |
- |
- def insert(self, key, value): |
- """Inserts the item at the specified position. Similar to list.insert().""" |
- self._values.insert(key, self._type_checker.CheckValue(value)) |
- if not self._message_listener.dirty: |
- self._message_listener.Modified() |
- |
- def extend(self, elem_seq): |
- """Extends by appending the given sequence. Similar to list.extend().""" |
- if not elem_seq: |
- return |
- |
- new_values = [] |
- for elem in elem_seq: |
- new_values.append(self._type_checker.CheckValue(elem)) |
- self._values.extend(new_values) |
- self._message_listener.Modified() |
- |
- def MergeFrom(self, other): |
- """Appends the contents of another repeated field of the same type to this |
- one. We do not check the types of the individual fields. |
- """ |
- self._values.extend(other._values) |
- self._message_listener.Modified() |
- |
- def remove(self, elem): |
- """Removes an item from the list. Similar to list.remove().""" |
- self._values.remove(elem) |
- self._message_listener.Modified() |
- |
- def __setitem__(self, key, value): |
- """Sets the item on the specified position.""" |
- if isinstance(key, slice): # PY3 |
- if key.step is not None: |
- raise ValueError('Extended slices not supported') |
- self.__setslice__(key.start, key.stop, value) |
- else: |
- self._values[key] = self._type_checker.CheckValue(value) |
- self._message_listener.Modified() |
- |
- def __getslice__(self, start, stop): |
- """Retrieves the subset of items from between the specified indices.""" |
- return self._values[start:stop] |
- |
- def __setslice__(self, start, stop, values): |
- """Sets the subset of items from between the specified indices.""" |
- new_values = [] |
- for value in values: |
- new_values.append(self._type_checker.CheckValue(value)) |
- self._values[start:stop] = new_values |
- self._message_listener.Modified() |
- |
- def __delitem__(self, key): |
- """Deletes the item at the specified position.""" |
- del self._values[key] |
- self._message_listener.Modified() |
- |
- def __delslice__(self, start, stop): |
- """Deletes the subset of items from between the specified indices.""" |
- del self._values[start:stop] |
- self._message_listener.Modified() |
- |
- def __eq__(self, other): |
- """Compares the current instance with another one.""" |
- if self is other: |
- return True |
- # Special case for the same type which should be common and fast. |
- if isinstance(other, self.__class__): |
- return other._values == self._values |
- # We are presumably comparing against some other sequence type. |
- return other == self._values |
- |
- |
-class RepeatedCompositeFieldContainer(BaseContainer): |
- |
- """Simple, list-like container for holding repeated composite fields.""" |
- |
- # Disallows assignment to other attributes. |
- __slots__ = ['_message_descriptor'] |
- |
- def __init__(self, message_listener, message_descriptor): |
- """ |
- Note that we pass in a descriptor instead of the generated directly, |
- since at the time we construct a _RepeatedCompositeFieldContainer we |
- haven't yet necessarily initialized the type that will be contained in the |
- container. |
- |
- Args: |
- message_listener: A MessageListener implementation. |
- The RepeatedCompositeFieldContainer will call this object's |
- Modified() method when it is modified. |
- message_descriptor: A Descriptor instance describing the protocol type |
- that should be present in this container. We'll use the |
- _concrete_class field of this descriptor when the client calls add(). |
- """ |
- super(RepeatedCompositeFieldContainer, self).__init__(message_listener) |
- self._message_descriptor = message_descriptor |
- |
- def add(self, **kwargs): |
- """Adds a new element at the end of the list and returns it. Keyword |
- arguments may be used to initialize the element. |
- """ |
- new_element = self._message_descriptor._concrete_class(**kwargs) |
- new_element._SetListener(self._message_listener) |
- self._values.append(new_element) |
- if not self._message_listener.dirty: |
- self._message_listener.Modified() |
- return new_element |
- |
- def extend(self, elem_seq): |
- """Extends by appending the given sequence of elements of the same type |
- as this one, copying each individual message. |
- """ |
- message_class = self._message_descriptor._concrete_class |
- listener = self._message_listener |
- values = self._values |
- for message in elem_seq: |
- new_element = message_class() |
- new_element._SetListener(listener) |
- new_element.MergeFrom(message) |
- values.append(new_element) |
- listener.Modified() |
- |
- def MergeFrom(self, other): |
- """Appends the contents of another repeated field of the same type to this |
- one, copying each individual message. |
- """ |
- self.extend(other._values) |
- |
- def remove(self, elem): |
- """Removes an item from the list. Similar to list.remove().""" |
- self._values.remove(elem) |
- self._message_listener.Modified() |
- |
- def __getslice__(self, start, stop): |
- """Retrieves the subset of items from between the specified indices.""" |
- return self._values[start:stop] |
- |
- def __delitem__(self, key): |
- """Deletes the item at the specified position.""" |
- del self._values[key] |
- self._message_listener.Modified() |
- |
- def __delslice__(self, start, stop): |
- """Deletes the subset of items from between the specified indices.""" |
- del self._values[start:stop] |
- self._message_listener.Modified() |
- |
- def __eq__(self, other): |
- """Compares the current instance with another one.""" |
- if self is other: |
- return True |
- if not isinstance(other, self.__class__): |
- raise TypeError('Can only compare repeated composite fields against ' |
- 'other repeated composite fields.') |
- return self._values == other._values |