Source code for flow.labels

# Copyright (c) 2018 The Regents of the University of Michigan
# All rights reserved.
# This software is licensed under the BSD 3-Clause License.
"""Implementation of decorators for label functions.

This module implements the label, classlabel, and staticlabel decorator
functions which can be used to decorate label functions which are part
of a FlowProject class definition.
"""


[docs] class label: """Decorate a :class:`~.FlowProject` class function as a label function. For example: .. code-block:: python class MyProject(FlowProject): @label() def foo(self, job): return True """ def __init__(self, name=None): self.name = name
[docs] def __call__(self, func): """Add the function as a label. This call operator allows the class to be used as a decorator. Parameters ---------- func : callable The function to decorate. Returns ------- callable The decorated function. """ func._label = True if self.name is not None: func._label_name = self.name return func
[docs] class staticlabel(label): """A label decorator for staticmethods. This decorator implies "staticmethod"! """
[docs] def __call__(self, func): """Add the function as a label. This call operator allows the class to be used as a decorator. Parameters ---------- func : callable The function to decorate. Returns ------- callable The decorated function. """ return staticmethod(super().__call__(func))
[docs] class classlabel(label): """A label decorator for classmethods. This decorator implies "classmethod"! """
[docs] def __call__(self, func): """Add the function as a label. This call operator allows the class to be used as a decorator. Parameters ---------- func : callable The function to decorate. Returns ------- callable The decorated function. """ return classmethod(super().__call__(func))
def _is_label_func(func): return getattr(getattr(func, "__func__", func), "_label", False)