mirror of
https://github.com/zbjdonald/synology-drive-api.git
synced 2025-07-25 16:40:06 +00:00
76 lines
2.3 KiB
Python
76 lines
2.3 KiB
Python
import urllib.parse
|
|
import warnings
|
|
import functools
|
|
|
|
import simplejson as json
|
|
from selenium import webdriver
|
|
|
|
|
|
def get_local_ip_by_quick_connect_id(q_id):
|
|
"""
|
|
# if nas local ip changed, get ip according to quick_connect
|
|
# see https://quickconnect.to/
|
|
:param q_id: QuickConnect ID
|
|
:return:
|
|
"""
|
|
url = f"https://{q_id}.quickconnect.to/"
|
|
driver = webdriver.Chrome()
|
|
driver.implicitly_wait(20)
|
|
driver.get(url)
|
|
driver.implicitly_wait(20)
|
|
cookie = driver.get_cookies()
|
|
dict1 = cookie[2]
|
|
value1 = dict1['value']
|
|
return value1.split('ipv4.')[1].split('.wan')[0]
|
|
|
|
|
|
def form_urlencoded(data: dict) -> str:
|
|
"""
|
|
Generate urlencoded data for body data
|
|
:param data: ready for post data
|
|
:return: return form data
|
|
"""
|
|
data_list = []
|
|
for key, value in data.items():
|
|
value_encode = urllib.parse.quote(json.dumps(value) if not isinstance(value, str) else value, safe='')
|
|
# [key, '=', value_encode]
|
|
data_list.append(f"{key}={value_encode}")
|
|
urlencoded_data = '&'.join(data_list)
|
|
return urlencoded_data
|
|
|
|
|
|
def concat_drive_path(dest_path: str, end_point: str, default_folder: str = 'mydrive') -> str:
|
|
"""
|
|
Generate file path
|
|
:param dest_path: parent path
|
|
:param end_point: file_name or folder_name
|
|
:param default_folder: if dest_path is None, use your drive home folder instead
|
|
:return:
|
|
"""
|
|
if dest_path is None:
|
|
display_path = f"/{default_folder}/{end_point}"
|
|
elif dest_path.startswith('id'):
|
|
display_path = f"{dest_path}/{end_point}"
|
|
else:
|
|
# add start position /
|
|
dest_path = f"/{dest_path}" if not dest_path.startswith('/') else dest_path
|
|
# add end position /
|
|
dest_path = f"{dest_path}/" if not dest_path.endswith('/') else dest_path
|
|
display_path = f"{dest_path}{end_point}"
|
|
return display_path
|
|
|
|
|
|
def deprecate(alt_func_names):
|
|
def outer_wrapper(f):
|
|
@functools.wraps(f)
|
|
def inner(*args, **kwargs):
|
|
hint = ', '.join(alt_func_names)
|
|
warnings.warn(
|
|
f'[Deprecation] {f.__name__} will be deprecated in the future.'
|
|
f'Substitutions are: {hint}',
|
|
FutureWarning
|
|
)
|
|
return f(*args, **kwargs)
|
|
return inner
|
|
return outer_wrapper
|