alist.meta 源代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Author: Kai Peng

from copy import deepcopy
from alist import utils

empty_meta = {
    "path"              : None, # str
    "password"          : None, # str
    "hide"              : None, # list
    "only_shows"        : None, # list
    "upload"            : None, # bool
    "readme"            : None, # str
}

[文档]class AlistMeta(dict): """ 描述Alist meta信息。meta包含``path``、``password``、``hide``、``only_shows``、 ``upload``、``readme`` 和 ``id`` 字段。其中 ``hide`` 和 ``only_shows`` 是列表。 """ def __init__(self, **kwargs): super().__init__(deepcopy(empty_meta)) for key in kwargs: try: self[key] = kwargs[key] except KeyError: pass def __setitem__(self, __key, __value): if __key in self.keys() or __key == 'id': if __key in ['hide', 'only_shows'] and __value != None: return super().__setitem__(__key, ','.join(__value)) else: return super().__setitem__(__key, __value) else: raise KeyError(__key) def __delitem__(self, __key) -> None: raise NotImplemented
[文档]class AlistAdminMeta(object): """ ``/api/admin/meta`` 相关API的实现。 """ def __init__(self, alist, endpoint: str): self.alist = alist self.endpoint = f'{endpoint}/meta' def _post_create(self, account: AlistMeta): endpoint = f'{self.endpoint}/create' return self.alist.post(endpoint, json=account) def _create(self, **kwargs): # 检查必要的字段是否设置 if 'path' not in kwargs: raise ValueError(f"meta must set path") account = AlistMeta(**kwargs) return self._post_create(account)
[文档] def create(self, path, password = None, hide = None, only_shows = None, upload = False, readme = None): """ 创建meta :param path: 路径 :param password: 访问密码 :param hide: 隐藏文件列表 :type hide: list :param only_shows: 允许显示的文件列表 :type only_shows: list :param upload: 允许游客上传 :param readme: readme url >>> alist.admin.meta.create('/path', password='123', hide=['README.md']) True """ return self._create(path=path, password=password, hide=hide, only_shows=only_shows, upload=upload, readme=readme)
def _delete(self, id): params = {'id': id} return self.alist.delete(self.endpoint, params = params)
[文档] def delete(self, path): """ 删除meta :param path: 路径 >>> alist.admin.meta.delete('/path') True """ meta = self.alist.admin.metas.get_meta(path) return self._delete(meta['id'])
[文档] def save(self, meta: AlistMeta): """ 修改meta的设置并保存 :param meta: meta信息 :type meta: AlistMeta >>> meta = client.admin.metas.get_meta('/path') >>> meta['password'] = '789' >>> meta['upload'] = True >>> client.admin.meta.save(meta) True """ endpoint = f'{self.endpoint}/save' return self.alist.post(endpoint, json = meta)
[文档]class AlistAdminMetas(object): """ API ``/api/admin/metas`` 的实现。 """ metas = list() def __init__(self, alist, endpoint): self.alist = alist self.endpoint = f'{endpoint}/metas' self.metas = deepcopy(self.metas)
[文档] def get(self): """ 获取meta列表 >>> client.admin.metas.get() [{'path': '/path', 'password': '789', 'hide': 'README.md', 'only_shows': '', 'upload': True, 'readme': '', 'id': 1}] """ self.metas.clear() results = self.alist.get(self.endpoint) for r in results: self.metas.append(AlistMeta(**r)) return self.metas
[文档] def get_meta(self, id_or_path) -> AlistMeta: """ 获取指定meta :param id_or_path: meta id 或者是 meta path >>> client.admin.metas.get_meta('/path') {'path': '/path', 'password': '789', 'hide': 'README.md', 'only_shows': '', 'upload': True, 'readme': '', 'id': 1} """ metas = self.get() for meta in metas: if meta['id'] == id_or_path or meta['path'] == id_or_path: return meta raise KeyError(f'{id_or_path} not found')
def __getitem__(self, index): return self.get()[index] def __delitem__(self, __key): raise NotImplemented def __call__(self, *args, **kwds): return self.get()