| Index: appengine/findit/libs/meta_object.py
|
| diff --git a/appengine/findit/libs/meta_object.py b/appengine/findit/libs/meta_object.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ba65d2c0c542626b3fd09177591b8906625a66d0
|
| --- /dev/null
|
| +++ b/appengine/findit/libs/meta_object.py
|
| @@ -0,0 +1,61 @@
|
| +# Copyright 2017 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +
|
| +class MetaObject(object):
|
| + """Class that can be either one element or a collection of elements."""
|
| +
|
| + def IsElement(self): # pragma: no cover
|
| + return NotImplementedError()
|
| +
|
| +
|
| +class Element(MetaObject):
|
| + """Element class that cannot be divided anymore."""
|
| +
|
| + @property
|
| + def is_element(self):
|
| + return True
|
| +
|
| +
|
| +class MetaDict(MetaObject):
|
| + """Dict-like object containing a collection of ``MetaObject``s."""
|
| +
|
| + def __init__(self, value):
|
| + """Construct a meta dict from a dict of meta objects.
|
| +
|
| + Args:
|
| + value (dict): Dict of meta objects.
|
| + """
|
| + self._value = value
|
| +
|
| + @property
|
| + def is_element(self):
|
| + return False
|
| +
|
| + def __getitem__(self, key):
|
| + return self._value[key]
|
| +
|
| + def __setitem__(self, key, val):
|
| + self._value[key] = val
|
| +
|
| + def get(self, key, default=None):
|
| + return self._value.get(key, default)
|
| +
|
| + def __iter__(self):
|
| + return iter(self._value)
|
| +
|
| + def __eq__(self, other):
|
| + return self._value == other._value
|
| +
|
| + def iteritems(self):
|
| + return self._value.iteritems()
|
| +
|
| + def itervalues(self):
|
| + return self._value.itervalues()
|
| +
|
| + def keys(self):
|
| + return self._value.keys()
|
| +
|
| + def values(self):
|
| + return self._value.values()
|
|
|