Source code for wolframclient.utils.decorators

# -*- coding: utf-8 -*-

from __future__ import absolute_import, print_function, unicode_literals

from functools import wraps

from wolframclient.utils.datastructures import Association
from wolframclient.utils.functional import composition


[docs]def decorate(*func): def annotation(fn): return wraps(fn)(composition(fn, *func)) return annotation
to_tuple = decorate(tuple) to_dict = decorate(Association)
[docs]class cached_property(object): """ Decorator that converts a method with a single self argument into a property cached on the instance. Optional ``name`` argument allows you to make cached properties of other methods. (e.g. url = cached_property(get_absolute_url, name='url') ) """ def __init__(self, func, name=None): self.func = func self.__doc__ = getattr(func, "__doc__") self.name = name or func.__name__ def __get__(self, instance, cls=None): if instance is None: return self res = instance.__dict__[self.name] = self.func(instance) return res