# Path: armet/utils/functional.py
# def compose(*functions):
# 
#     def composed(x):
#         for func in functions:
#             x = func(x)
# 
#         return x
# 
#     return composed


from armet.utils import compose
from collections import defaultdict
from functools import partial
        """Retrieve the value of this attribute from the passed object.
        """

        # Attempt to resolve an accessor for the specific target. Creates
        # the accessor if not available.
        return self._get[target](target)

    def set(self, target, value):
        """Set the value of this attribute for the passed object.
        """

        if not self._set:
            return

        if self.path is None:
            # There is no path defined on this resource.
            # We can do no magic to set the value.
            self.set = lambda *a: None
            return None

        if self._segments[target.__class__]:
            # Attempt to resolve access to this attribute.
            self.get(target)

        if self._segments[target.__class__]:
            # Attribute is not fully resolved; an interim segment is null.
            return

        # Resolve access to the parent object.
        # For a single-segment path this will effectively be a no-op.

# Path: armet/utils/functional.py
# def compose(*functions):
# 
#     def composed(x):
#         for func in functions:
#             x = func(x)
# 
#         return x
# 
#     return composed


# Path: armet/attributes/attribute.py
from armet.utils import compose
from collections import defaultdict
from functools import partial

        """Retrieve the value of this attribute from the passed object.
        """

        # Attempt to resolve an accessor for the specific target. Creates
        # the accessor if not available.
        return self._get[target](target)

    def set(self, target, value):
        """Set the value of this attribute for the passed object.
        """

        if not self._set:
            return

        if self.path is None:
            # There is no path defined on this resource.
            # We can do no magic to set the value.
            self.set = lambda *a: None
            return None

        if self._segments[target.__class__]:
            # Attempt to resolve access to this attribute.
            self.get(target)

        if self._segments[target.__class__]:
            # Attribute is not fully resolved; an interim segment is null.
            return

        # Resolve access to the parent object.
        # For a single-segment path this will effectively be a no-op.

        parent_getter = compose(*self._getters[target.__class__][:-1])