Welcome to mirror list, hosted at ThFree Co, Russian Federation.

Decorators.py « Utils « cura - github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 9275ee6ce9281abd4101a218849fedfb56797b0f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.

import functools
import re
from typing import Callable

# An API version must be a semantic version "x.y.z" where ".z" is optional. So the valid formats are as follows:
#  - x.y.z
#  - x.y
SEMANTIC_VERSION_REGEX = re.compile(r"^[0-9]+\.[0-9]+(\.[0-9]+)?$")


##  Decorator for functions that belong to a set of APIs. For now, this should only be used for officially supported
#   APIs, meaning that those APIs should be versioned and maintained.
#
#   \param since_version The earliest version since when this API becomes supported. This means that since this version,
#                        this API function is supposed to behave the same. This parameter is not used. It's just a
#                        documentation.
def api(since_version: str) -> Callable:
    # Make sure that APi versions are semantic versions
    if not SEMANTIC_VERSION_REGEX.fullmatch(since_version):
        raise ValueError("API since_version [%s] is not a semantic version." % since_version)

    def api_decorator(function):
        @functools.wraps(function)
        def api_wrapper(*args, **kwargs):
            return function(*args, **kwargs)
        return api_wrapper
    return api_decorator