Difficult-Rocket/.github/workflows/dsm.py
shenjack fd5963bc0a [build skip] use dsm with secret
[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"
2023-03-19 11:46:27 +08:00

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()