Skip to content

Commit

Permalink
feat:add max retry if raise 105, 1003 error code
Browse files Browse the repository at this point in the history
  • Loading branch information
张白驹 committed Nov 17, 2022
1 parent 78f9835 commit ac6922e
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 9 deletions.
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "synology_drive_api"
version = "1.0.6"
version = "1.0.7"
description = "synology drive api python wrapper"
authors = ["zbjdonald <[email protected]>"]
license = "MIT"
Expand Down
42 changes: 34 additions & 8 deletions synology_drive_api/base.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import functools
from http import cookiejar
from typing import Optional, Union
from time import sleep
from urllib.parse import urlparse

import requests
import simplejson as json
import urllib3
from typing import Optional, Union

# Used for verify=False in requests
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
Expand Down Expand Up @@ -146,7 +147,8 @@ def __init__(self,
port: Optional[int] = None,
nas_domain: Optional[str] = None,
https: Optional[bool] = True,
dsm_version: str = '6') -> None:
dsm_version: str = '6',
max_retry: int = 3) -> None:
assert dsm_version in ('6', '7'), "dsm_version should be either '6' or '7'."

nas_address = concat_nas_address(ip_address, port, nas_domain, https)
Expand All @@ -155,6 +157,7 @@ def __init__(self,
self.dsm_version = dsm_version
self._base_url = f"{nas_address}/webapi/"
self.req_session.cookies.set_policy(BlockAll())
self.max_retries = max_retry

def _request(self, method: str, endpoint: str, **kwargs):
"""
Expand Down Expand Up @@ -188,12 +191,35 @@ def _request(self, method: str, endpoint: str, **kwargs):
# return true indicate adding verify=False to requests.
kwargs['verify'] = False
bio_flag = kwargs.pop('bio') if 'bio' in kwargs else None
res = self.req_session.request(
method=method,
url=url,
**kwargs
)
raise_synology_exception(res, bio_exist=bio_flag)
if not self.max_retries:
res = self.req_session.request(
method=method,
url=url,
**kwargs
)
raise_synology_exception(res, bio_exist=bio_flag)
else:
for retry in range(self.max_retries):
try:
res = self.req_session.request(
method=method,
url=url,
**kwargs
)
raise_synology_exception(res, bio_exist=bio_flag)
break
except SynologyException as e:
# retry
# 105: permission denied by anonymous
# 1003: update file information failed
if e.code in (105, 1003):
sleep(1)
if retry == self.max_retries - 1:
raise e
else:
continue
else:
raise e
if bio_flag:
return res.content
result = res.json() if res.text else {}
Expand Down

0 comments on commit ac6922e

Please sign in to comment.