anylearn.config 源代码

import os
from pathlib import Path
import requests
import shutil

from anylearn.utils import logger
from anylearn.utils.errors import InvalidArguments, AnyLearnAuthException


[文档]class AnylearnConfig(object): """ Anylearn SDK配置类, 包含Anylearn后端引擎的连接配置和SDK的本地存储配置。 """ cluster_address = None """Anylearn后端引擎集群网关地址""" username = None """Anylearn后端引擎账户用户名""" user_id = None """Anylearn后端引擎账户ID""" password = None """Anylearn后端引擎账户密码""" token = None """Anylearn后端引擎API令牌""" workspace_path = Path().home() / ".anylearn" """SDK本地存储工作区路径""" db_path = workspace_path / "anylearn.db" """SDK本地存储元信息数据库文件( :obj:`sqlite`)路径""" _db_scheme = "sqlite:///" if os.name == 'nt' else "sqlite:////" db_uri = f"{_db_scheme}{db_path.absolute()}" """SDK本地存储元信息数据库( :obj:`sqlite`)的URI""" git_ready = False
[文档] @classmethod def init(cls, cluster_address=None, username=None, password=None, token=None, workspace=None, disable_git=False): """ 初始化SDK与后端连接以及本地存储。 可通过用户名密码建立后端连接,也可直接传入有效的后端API令牌。 Parameters ---------- cluster_address : :obj:`str`, optional Anylearn后端引擎集群网关地址。 username : :obj:`str`, optional Anylearn后端引擎账户用户名。 password : :obj:`str`, optional Anylearn后端引擎账户密码。 token : :obj:`str`, optional Anylearn后端引擎API令牌。 workspace : :obj:`str`, optional SDK本地存储工作区路径, 默认将工作区建立在 :obj:`<home>/.anylearn` 目录下。 disable_git : :obj:`bool`, optional 是否禁用基于本地git的算法同步, 默认为否。 """ # Cluster Auth cls.init_cluster(cluster_address, username, password, token) # Local workspace cls.init_workspace(workspace) # Detect git try: from git import Repo cls.git_ready = not disable_git except: logger.warning("Git executable not found.") cls.git_ready = False
[文档] @classmethod def init_cluster(cls, cluster_address=None, username=None, password=None, token=None): """ 仅初始化SDK与后端连接。 可通过用户名密码建立后端连接,也可直接传入有效的后端API令牌。 Parameters ---------- cluster_address : :obj:`str`, optional Anylearn后端引擎集群网关地址。 username : :obj:`str`, optional Anylearn后端引擎账户用户名。 password : :obj:`str`, optional Anylearn后端引擎账户密码。 token : :obj:`str`, optional Anylearn后端引擎API令牌。 """ if not all([ cluster_address, isinstance(cluster_address, str), any([username and password, token]), ]): raise InvalidArguments('无有效登录配置') if cluster_address.endswith('/'): cluster_address = cluster_address[:-1] cls.cluster_address = cluster_address cls.username = username cls.password = password cls.token = token if token is None: cls.cluster_login()
[文档] @classmethod def cluster_login(cls): """ 通过用户名密码建立SDK与后端连接, 获取后端API令牌。 在以用户名密码的方式初始化后方可调用。 """ res = requests.post('%s/api/user/login' % cls.cluster_address, { 'username': cls.username, 'password': cls.password, }) if res.status_code == 200: res = res.json() cls.token = res['token'] cls.user_id = res['id'] cls.username = res['username'] else: raise AnyLearnAuthException()
[文档] @classmethod def init_workspace(cls, workspace=None): """ 仅初始化SDK本地存储。 Parameters ---------- workspace : :obj:`str`, optional SDK本地存储工作区路径, 默认将工作区建立在 :obj:`<home>/.anylearn` 目录下。 """ cls.workspace_path = Path(workspace) if workspace \ else cls.workspace_path cls.db_path = cls.workspace_path / "anylearn.db" cls.db_uri = f"{cls._db_scheme}{cls.db_path}" # Remove if workspace path points to a file if cls.workspace_path.is_file(): cls.workspace_path.unlink() # Ensure workspace folder exists cls.workspace_path.mkdir(exist_ok=True) # Ensure DB file exists if not cls.db_path.exists(): cls.db_path.touch()
[文档] @classmethod def clear_workspace(cls): """ 清空SDK本地存储。 本地元信息存储、临时文件、资源缓存等均会被删除。 请谨慎调用。 """ shutil.rmtree(cls.workspace_path)
[文档]def init_sdk(cluster_address, username, password, disable_git=False): """ 初始化SDK与后端连接的接口。 调用本接口并传入后端地址、用户名和密码, SDK将自动以相应账户进行登录并获取后端API令牌。 Parameters ---------- cluster_address : :obj:`str` Anylearn后端引擎集群网关地址。 username : :obj:`str` Anylearn后端引擎账户用户名。 password : :obj:`str` Anylearn后端引擎账户密码。 """ AnylearnConfig.init( cluster_address=cluster_address, username=username, password=password, disable_git=disable_git, )
[文档]def init_sdk_incontainer(cluster_address): """ 初始化无鉴权信息的SDK与后端连接的接口。 调用本接口仅需传入后端地址, 无需账户信息。 以此方式初始化的SDK将无法调用需要鉴权信息的接口, 仅可调用无需API令牌的公共接口。 此接口的使用场景多为任务执行容器内与后端建立通信, 不建议用户使用。 Parameters ---------- cluster_address : :obj:`str` Anylearn后端引擎集群网关地址。 """ AnylearnConfig.init( cluster_address=cluster_address, token="INCONTAINER" )
def print_config(): print(AnylearnConfig.cluster_address)