| Index: third_party/recipe_engine/field_composer.py
|
| diff --git a/third_party/recipe_engine/field_composer.py b/third_party/recipe_engine/field_composer.py
|
| deleted file mode 100644
|
| index 37c72934c69a7e763274ff0f9b4c7be68481e9a0..0000000000000000000000000000000000000000
|
| --- a/third_party/recipe_engine/field_composer.py
|
| +++ /dev/null
|
| @@ -1,86 +0,0 @@
|
| -# Copyright 2013-2015 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 FieldComposerError(BaseException):
|
| - """Base error class for this module."""
|
| - pass
|
| -
|
| -
|
| -class RegistryConflict(FieldComposerError):
|
| - pass
|
| -
|
| -
|
| -class DegenerateRegistryError(FieldComposerError):
|
| - pass
|
| -
|
| -
|
| -class CompositionUndefined(FieldComposerError):
|
| - pass
|
| -
|
| -
|
| -class FieldComposer(object):
|
| -
|
| - def __init__(self, fields, registered_functors):
|
| - """Initialize the internal registry mapping names to functors."""
|
| - try:
|
| - self._registry = {
|
| - name: {'combine': value['combine']}
|
| - for name, value in registered_functors.iteritems()}
|
| - except KeyError:
|
| - raise DegenerateRegistryError(
|
| - 'Registry entries must contain key "combine."')
|
| - self._fields = fields
|
| -
|
| - def __contains__(self, key):
|
| - return key in self._fields
|
| -
|
| - def __getitem__(self, key):
|
| - return self._fields[key]
|
| -
|
| - def get(self, index, default=None):
|
| - """Wrapper for self._fields.get."""
|
| - return self._fields.get(index, default)
|
| -
|
| - def iteritems(self):
|
| - """Wrapper for self._fields.iteritems."""
|
| - return self._fields.iteritems()
|
| -
|
| - def compose(self, second_compositor):
|
| - """Return the monoidal composition of two FieldComposers."""
|
| - # If second_compositor is a FieldComposer, registries shouldn't conflict.
|
| - if isinstance(second_compositor, dict):
|
| - second_compositor = FieldComposer(second_compositor, {})
|
| - new_registry = self._registry.copy()
|
| - second_registry = second_compositor._registry
|
| - for key, value in second_registry.iteritems():
|
| - if key in self._registry and value != self._registry[key]:
|
| - raise RegistryConflict('Conflicting values for key %s.' % key)
|
| - new_registry[key] = value
|
| -
|
| - # populate new field dictionary with composed values
|
| - all_keys = set().union(self._fields, second_compositor._fields)
|
| - new_fields = {}
|
| - for name in all_keys:
|
| - if name not in new_registry:
|
| - raise CompositionUndefined(
|
| - "No combine function registered for %s." % name)
|
| - if name in second_compositor:
|
| - new_value = self.get_with_context(name, second_compositor[name])
|
| - else:
|
| - # Name is in exactly one compositor, so get that value.
|
| - new_value = self[name]
|
| - new_fields[name] = new_value
|
| -
|
| - # create and return the new compositor
|
| - return FieldComposer(new_fields, new_registry)
|
| -
|
| - def get_with_context(self, key, value):
|
| - """Combine the current value for key (if any) with value."""
|
| - if key not in self._registry:
|
| - raise CompositionUndefined(
|
| - "No combine function registered for %s." % key)
|
| - if key in self:
|
| - return self._registry[key]['combine'](self.get(key), value)
|
| - return value
|
|
|