shenjack
fd5963bc0a
[build skip] add delete task and try upload [build skip] key error fix [build skip] key error? not use secret Update dsm.py Update dsm.py Update dsm.py Update dsm.py Update dsm.py Update dsm.py Update dsm.py [build skip] try use better 一些奇怪东西 update with md5_check Update page.yml Update page.yml try build fix: last md5 detect use local one add more mdbook extention reformat and add more add cmd run i18n not 18n try use local build mdbook Update page.yml try with openai Update page.yml Update page.yml Update page.yml Update page.yml Update page.yml Update page.yml Update dsm.py Update dsm.py Update dsm.py Update dsm.py Update dsm.py Update dsm.py Update dsm.py Update dsm.py try new one use custom TEMP use new path 逝逝 page toc later add back debug print try to add back pagetoc try to use pagetoc-0.1.7 [build skip] just upload the theme folder~ [build skip] get plant UML [build skip] add log out for dsm.py [build skip] clean up useless "f"
117 lines
4.5 KiB
Python
117 lines
4.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# -------------------------------
|
|
# Difficult Rocket
|
|
# Copyright © 2020-2023 by shenjackyuanjie 3695888@qq.com
|
|
# All rights reserved
|
|
# -------------------------------
|
|
|
|
import os
|
|
import time
|
|
from pprint import pprint
|
|
from synology_api import filestation
|
|
|
|
|
|
class DSM:
|
|
def __init__(self, docs_path: str, dsm_path: str):
|
|
self.docs_path = docs_path
|
|
self.dsm_path = dsm_path
|
|
self.token = os.environ['DSM_TOKEN']
|
|
self.fl = filestation.FileStation(ip_address='hws.shenjack.top',
|
|
port=5000,
|
|
username='github',
|
|
password=self.token,
|
|
secure=False,
|
|
cert_verify=False,
|
|
dsm_version=7,
|
|
debug=True,
|
|
interactive_output=False)
|
|
|
|
def list_files(self):
|
|
# 输出 文档构建目录 的内容
|
|
print(f'==========输出 {self.docs_path} 的内容==========')
|
|
for root, dirs, files in os.walk(self.docs_path):
|
|
print(root, dirs)
|
|
print('==========就这些==========')
|
|
|
|
def clear_dsm(self):
|
|
# 清空 DSM 的 /web/dr 目录
|
|
delete_task = self.fl.start_delete_task(self.dsm_path, recursive=True)
|
|
delete_task_id = delete_task['taskid']
|
|
time.sleep(1) # 等待 1 秒 保证任务已经完成
|
|
pprint(self.fl.get_delete_status(delete_task_id)['data']['finished'])
|
|
|
|
def check_md5(self, local_md5: str) -> bool:
|
|
"""
|
|
检查本地构建的文档和 DSM 上的文档的 md5 是否一致
|
|
:param local_md5:
|
|
:return: True: 一致 False: 不一致
|
|
"""
|
|
# 打开提供的md5文件
|
|
try:
|
|
with open(local_md5, 'r', encoding='utf-8') as f:
|
|
md5 = f.read()
|
|
except FileNotFoundError:
|
|
print(f'文件 {local_md5} 不存在')
|
|
return False
|
|
# 检测是否存在 dsm 上的 md5.txt
|
|
dsm_files = self.fl.get_file_list(folder_path='/web/dr')
|
|
if dsm_files.get('error'):
|
|
print(dsm_files['error'])
|
|
return False
|
|
dsm_files = dsm_files['data']['files']
|
|
if '/web/dr/md5.txt' not in [file['path'] for file in dsm_files]:
|
|
print('dsm md5.txt 不存在')
|
|
return False
|
|
# 下载 dsm 上的 md5.txt
|
|
try:
|
|
self.fl.get_file(path='/web/dr/md5.txt', mode='download', dest_path='./docs/book')
|
|
with open('./docs/book/md5.txt', 'r', encoding='utf-8') as f:
|
|
md5_last = f.read()
|
|
if md5 == md5_last:
|
|
return True
|
|
except Exception as e:
|
|
print(e)
|
|
return False
|
|
|
|
def upload_docs(self, local_md5: str):
|
|
# 上传本地构建的文档到 DSM
|
|
print(f'==========上传 {self.docs_path} 到 {self.dsm_path}==========')
|
|
# 使用 os.walk 递归遍历文件夹 依次按照对应路径上传
|
|
# 上传的时候 目标路径为本地路径的相对路径
|
|
for root, dirs, files in os.walk(self.docs_path):
|
|
for file in files:
|
|
file_path = os.path.join(root, file)
|
|
dest_path = f'{self.dsm_path}{root[len(self.docs_path):]}'
|
|
dest_path = dest_path.replace('\\', '/')
|
|
# 输出 文件路径 和 目标路径
|
|
print(f'{file_path} -> {dest_path}', end=' ')
|
|
pprint(self.fl.upload_file(dest_path=dest_path,
|
|
file_path=file_path,
|
|
overwrite=True))
|
|
# self.fl.upload_file(dest_path=dest_path,
|
|
# file_path=file_path,
|
|
# overwrite=True)
|
|
# 上传本地的 md5 文件
|
|
print(f'{local_md5} -> {self.dsm_path}', end=' ')
|
|
pprint(self.fl.upload_file(dest_path=self.dsm_path,
|
|
file_path=local_md5,
|
|
overwrite=True))
|
|
print('==========上传完成==========')
|
|
|
|
|
|
def main():
|
|
docs_path = 'docs/book/html'
|
|
dsm_path = '/web/dr'
|
|
dsm = DSM(docs_path, dsm_path)
|
|
dsm.list_files()
|
|
if dsm.check_md5('docs/md5.txt'):
|
|
print('md5 一致,不需要上传')
|
|
return 0
|
|
dsm.clear_dsm()
|
|
dsm.upload_docs('docs/md5.txt')
|
|
dsm.fl.session.logout('FileStation')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|