|
9 | 9 | from typing import Optional, List, Union, Tuple, Iterator, MutableMapping, Any |
10 | 10 |
|
11 | 11 | import google |
| 12 | +import urllib3 |
12 | 13 | from fs import ResourceType, errors, tools |
13 | 14 | from fs.base import FS |
14 | 15 | from fs.info import Info |
|
19 | 20 | from fs.time import datetime_to_epoch |
20 | 21 | from google.cloud.storage import Client |
21 | 22 | from google.cloud.storage.blob import Blob |
| 23 | +from packaging import version |
22 | 24 | from requests.adapters import HTTPAdapter |
23 | 25 | from urllib3.util.retry import Retry |
24 | 26 |
|
@@ -76,10 +78,16 @@ def __init__(self, |
76 | 78 | self.client = Client() |
77 | 79 |
|
78 | 80 | if retry: |
79 | | - adapter = HTTPAdapter(max_retries=Retry(total=retry, |
80 | | - status_forcelist=[429, 502, 503, 504], |
81 | | - allowed_methods=False, # retry on any HTTP method |
82 | | - backoff_factor=0.5)) |
| 81 | + # urllib3: "method_whitelist" was deprecated in favour of "allowed_methods" in version 1.26.0 |
| 82 | + # Ensure compatibility with versions < 1.26.0 while at the same time avoiding the `DeprecationWarning` |
| 83 | + # for versions >= 1.26.0 |
| 84 | + key = "allowed_methods" if version.parse(urllib3.__version__) >= version.parse("1.26.0") else "method_whitelist" |
| 85 | + kwargs = {key: False} # retry on any HTTP method |
| 86 | + max_retries = Retry(total=retry, |
| 87 | + status_forcelist=[429, 502, 503, 504], |
| 88 | + backoff_factor=0.5, |
| 89 | + **kwargs) |
| 90 | + adapter = HTTPAdapter(max_retries=max_retries) |
83 | 91 | self.client._http.mount("https://", adapter) |
84 | 92 |
|
85 | 93 | self.bucket = self.client.bucket(self._bucket_name) |
|
0 commit comments