|
1 |
| -from .exceptions import ServerResponseError |
| 1 | +from .exceptions import ServerResponseError, EndpointUnavailableError |
| 2 | +from functools import wraps |
| 3 | + |
2 | 4 | import logging
|
3 | 5 |
|
| 6 | +try: |
| 7 | + from distutils2.version import NormalizedVersion as Version |
| 8 | +except ImportError: |
| 9 | + from distutils.version import LooseVersion as Version |
4 | 10 |
|
5 | 11 | logger = logging.getLogger('tableau.endpoint')
|
6 | 12 |
|
@@ -69,3 +75,35 @@ def post_request(self, url, xml_request, content_type='text/xml'):
|
69 | 75 | content=xml_request,
|
70 | 76 | auth_token=self.parent_srv.auth_token,
|
71 | 77 | content_type=content_type)
|
| 78 | + |
| 79 | + |
| 80 | +def api(version): |
| 81 | + '''Annotate the minimum supported version for an endpoint. |
| 82 | +
|
| 83 | + Checks the version on the server object and compares normalized versions. |
| 84 | + It will raise an exception if the server version is > the version specified. |
| 85 | +
|
| 86 | + Args: |
| 87 | + `version` minimum version that supports the endpoint. String. |
| 88 | + Raises: |
| 89 | + EndpointUnavailableError |
| 90 | + Returns: |
| 91 | + None |
| 92 | +
|
| 93 | + Example: |
| 94 | + >>> @api(version="2.3") |
| 95 | + >>> def get(self, req_options=None): |
| 96 | + >>> ... |
| 97 | + ''' |
| 98 | + def _decorator(func): |
| 99 | + @wraps(func) |
| 100 | + def wrapper(self, *args, **kwargs): |
| 101 | + server_version = Version(self.parent_srv.version) |
| 102 | + minimum_supported = Version(version) |
| 103 | + if server_version < minimum_supported: |
| 104 | + error = "This endpoint is not available in API version {}. Requires {}".format( |
| 105 | + server_version, minimum_supported) |
| 106 | + raise EndpointUnavailableError(error) |
| 107 | + return func(self, *args, **kwargs) |
| 108 | + return wrapper |
| 109 | + return _decorator |
0 commit comments