8000 Merge branch 'development' into master · mirror-dump/server-client-python@fea03b4 · GitHub
[go: up one dir, main page]

Skip to content

Commit fea03b4

Browse files
authored
Merge branch 'development' into master
2 parents 68b9157 + 1106673 commit fea03b4

File tree

6 files changed

+18
-56
lines changed
  • tableauserverclient
  • test
  • 6 files changed

    +18
    -56
    lines changed

    .gitignore

    Lines changed: 1 addition & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -155,3 +155,4 @@ $RECYCLE.BIN/
    155155
    docs/_site/
    156156
    docs/.jekyll-metadata
    157157
    docs/Gemfile.lock
    158+
    samples/credentials

    contributing.md

    Lines changed: 1 addition & 2 deletions
    Original file line numberDiff line numberDiff line change
    @@ -10,8 +10,7 @@ Contribution can include, but are not limited to, any of the following:
    1010
    * Fix an Issue/Bug
    1111
    * Add/Fix documentation
    1212

    13-
    Contributions must follow the guidelines outlined on the [Tableau Organization](http://tableau.github.io/) page, though filing an issue or requesting
    14-
    a feature do not require the CLA.
    13+
    Contributions must follow the guidelines outlined on the [Tableau Organization](http://tableau.github.io/) page, though filing an issue or requesting a feature do not require the CLA.
    1514

    1615
    ## Issues and Feature Requests
    1716

    samples/getting_started/3_hello_universe.py

    Lines changed: 4 additions & 8 deletions
    Original file line numberDiff line numberDiff line change
    @@ -62,11 +62,6 @@ def main():
    6262
    print("{} jobs".format(pagination.total_available))
    6363
    print(jobs[0])
    6464

    65-
    metrics, pagination = server.metrics.get()
    66-
    if metrics:
    67-
    print("{} metrics".format(pagination.total_available))
    68-
    print(metrics[0])
    69-
    7065
    schedules, pagination = server.schedules.get()
    7166
    if schedules:
    7267
    print("{} schedules".format(pagination.total_available))
    @@ -82,7 +77,7 @@ def main():
    8277
    print("{} webhooks".format(pagination.total_available))
    8378
    print(webhooks[0])
    8479

    85-
    users, pagination = server.metrics.get()
    80+
    users, pagination = server.users.get()
    8681
    if users:
    8782
    print("{} users".format(pagination.total_available))
    8883
    print(users[0])
    @@ -92,5 +87,6 @@ def main():
    9287
    print("{} groups".format(pagination.total_available))
    9388
    print(groups[0])
    9489

    95-
    if __name__ == "__main__":
    96-
    main()
    90+
    91+
    if __name__ == "__main__":
    92+
    main()

    tableauserverclient/models/interval_item.py

    Lines changed: 1 addition & 1 deletion
    Original file line numberDiff line numberDiff line change
    @@ -69,7 +69,7 @@ def interval(self):
    6969

    7070
    @interval.setter
    7171
    def interval(self, intervals):
    72-
    VALID_INTERVALS = {0.25, 0.5, 1, 2, 4, 6, 8, 12}
    72+
    VALID_INTERVALS = {0.25, 0.5, 1, 2, 4, 6, 8, 12, 24}
    7373
    for interval in intervals:
    7474
    # if an hourly interval is a string, then it is a weekDay interval
    7575
    if isinstance(interval, str) and not interval.isnumeric() and not hasattr(IntervalItem.Day, interval):

    tableauserverclient/server/endpoint/endpoint.py

    Lines changed: 3 additions & 40 deletions
    Original file line numberDiff line numberDiff line change
    @@ -1,5 +1,3 @@
    1-
    from threading import Thread
    2-
    from time import sleep
    31
    from tableauserverclient import datetime_helpers as datetime
    42

    53
    from packaging.version import Version
    @@ -76,55 +74,20 @@ def set_user_agent(parameters):
    7674
    return parameters
    7775

    7876
    def _blocking_request(self, method, url, parameters={}) -> Optional[Union["Response", Exception]]:
    79-
    self.async_response = None
    8077
    response = None
    8178
    logger.debug("[{}] Begin blocking request to {}".format(datetime.timestamp(), url))
    8279
    try:
    8380
    response = method(url, **parameters)
    84-
    self.async_response = response
    8581
    logger.debug("[{}] Call finished".format(datetime.timestamp()))
    8682
    except Exception as e:
    8783
    logger.debug("Error making request to server: {}".format(e))
    88-
    self.async_response = e
    89-
    finally:
    90-
    if response and not self.async_response:
    91-
    logger.debug("Request response not saved")
    92-
    return None
    93-
    logger.debug("[{}] Request complete".format(datetime.timestamp()))
    94-
    return self.async_response
    84+
    raise e
    85+
    return response
    9586

    9687
    def send_request_while_show_progress_threaded(
    9788
    self, method, url, parameters={}, request_timeout=None
    9889
    ) -> Optional[Union["Response", Exception]]:
    99-
    try:
    100-
    request_thread = Thread(target=self._blocking_request, args=(method, url, parameters))
    101-
    request_thread.start()
    102-
    except Exception as e:
    103-
    logger.debug("Error starting server request on separate thread: {}".format(e))
    104-
    return None
    105-
    seconds = 0.05
    106-
    minutes = 0
    107-
    last_log_minute = 0
    108-
    sleep(seconds)
    109-
    if self.async_response is not None:
    110-
    # a quick return for any immediate responses
    111-
    return self.async_response
    112-
    timed_out: bool = request_timeout is not None and seconds > request_timeout
    113-
    while (self.async_response is None) and not timed_out:
    114-
    sleep(DELAY_SLEEP_SECONDS)
    115-
    seconds = seconds + DELAY_SLEEP_SECONDS
    116-
    minutes = int(seconds / 60)
    117-
    last_log_minute = self.log_wait_time(minutes, last_log_minute, url)
    118-
    return self.async_response
    119-
    120-
    def log_wait_time(self, minutes, last_log_minute, url) -> int:
    121-
    logger.debug("{} Waiting....".format(datetime.timestamp()))
    122-
    if minutes > last_log_minute: # detailed log message ~every minute
    123-
    logger.info("[{}] Waiting ({} minutes so far) for request to {}".format(datetime.timestamp(), minutes, url))
    124-
    last_log_minute = minutes
    125-
    else:
    126-
    logger.debug("[{}] Waiting for request to {}".format(datetime.timestamp(), url))
    127-
    return last_log_minute
    90+
    return self._blocking_request(method, url, parameters)
    12891

    12992
    def _make_request(
    13093
    self,

    test/test_endpoint.py

    Lines changed: 8 additions & 5 deletions
    Original file line numberDiff line numberDiff line change
    @@ -1,4 +1,6 @@
    11
    from pathlib import Path
    2+
    import pytest
    3+
    import requests
    24
    import unittest
    35

    46
    import tableauserverclient as TSC
    @@ -35,11 +37,12 @@ def test_user_friendly_request_returns(self) -> None:
    3537
    )
    3638
    self.assertIsNotNone(response)
    3739

    38-
    def test_blocking_request_returns(self) -> None:
    39-
    url = "http://test/"
    40-
    endpoint = TSC.server.Endpoint(self.server)
    41-
    response = endpoint._blocking_request(endpoint.parent_srv.session.get, url=url)
    42-
    self.assertIsNotNone(response)
    40+
    def test_blocking_request_raises_request_error(self) -> None:
    41+
    with pytest.raises(requests.exceptions.ConnectionError):
    42+
    url = "http://test/"
    43+
    endpoint = TSC.server.Endpoint(self.server)
    44+
    response = endpoint._blocking_request(endpoint.parent_srv.session.get, url=url)
    45+
    self.assertIsNotNone(response)
    4346

    4447
    def test_get_request_stream(self) -> None:
    4548
    url = "http://test/"

    0 commit comments

    Comments
     (0)
    0