Skip to content

插件基类#

插件最基础的基类为 arkid.core.extension.Extension

支持热拔插的核心方法为 start()stop() 分别会调用load()unload()方法,这两个方法是各个插件子类中,用来自定义安装与卸载时所做的操作

  • load() 为抽象方法,要求每个插件都应实现。
  • unload() 也可以被重载。会将所有load()过程中注册过的API,事件,等等进行销毁。

因此,在插件中尽量避免直接使用内核的API,而要使用插件中封装好的以 register 开头的方法。调用 register 类型的方法时,相关操作的销毁都会在stop中已经执行,不需要在unload中去做。

部分对页面内容的更改,比如actions相关修改,则需要在unload中显示的销毁。

提示

事实上,在调用start()前会进行 migrate,是的!插件内的 migrations 依然有效。

arkid.core.extension.Extension (ABC) #

Parameters:

Name Type Description Default
name str,

插件名字,package中点“.”替换为下划线"_"

None

ext_dir property writable #

插件完整路径,用.分隔

full_name property readonly #

插件完整路径,用/分隔

model property readonly #

插件对应数据库model

__init__(self, package=None, version=None, name=None, logo=None, description=None, labels=None, homepage=None, author=None) special #

summary

Parameters:

Name Type Description Default
package str

插件包名,唯一标识

None
version str

版本号

None
name str

名称

None
logo str

插件的图标

None
description str

描述

None
labels List[str]

标签

None
homepage str

主页,URL

None
author str

作者

None

create_composite_config_schema(schema_cls_name, exclude=[], **field_definitions) classmethod #

创造复合类型 运行时配置 的Schema

Parameters:

Name Type Description Default
schema_cls_name str

复合类型运行时配置的Schema的名字

required
exclude list

去掉的字段列表. Defaults to [].

[]

Returns:

Type Description
Schema

创建好的Schema

create_config_schema(name, **field_definitions) classmethod #

创建并返回插件 运行时配置 的Schema

Parameters:

Name Type Description Default
name str

需要创建的 Schema Class 的名字

required
field_definitions Any

任意数量的field,格式为: field_name=(field_type, Field(...))

{}

create_profile_schema(name, **field_definitions) classmethod #

创建并返回插件配置的Schema

Parameters:

Name Type Description Default
name str

需要创建的 Schema Class 的名字

required
field_definitions Any

任意数量的field,格式为: field_name=(field_type, Field(...))

{}

create_settings_schema(name, **field_definitions) classmethod #

创建并返回插件 租户配置(settings) 的Schema

Parameters:

Name Type Description Default
name str

需要创建的 Schema Class 的名字

required
field_definitions Any

任意数量的field,格式为: field_name=(field_type, Field(...))

{}

create_tenant_config(self, tenant, config, name, type) #

创建运行时配置

Parameters:

Name Type Description Default
tenant Tenant

租户

required
config dict

config

required
name str

运行时配置名字

required
type str

配置类型

required

Returns:

Type Description
TenantExtensionConfig

创建的对象

delete_tenant_config(self, id) #

删除运行时配置

Parameters:

Name Type Description Default
id str

config_id

required

Returns:

Type Description
TenantExtensionConfig

删除的对象

dispatch_event(self, event) #

抛出事件

Parameters:

Name Type Description Default
event Event

事件实例

required

Returns:

Type Description
(tuple[Function, Result])

事件处理的返回值

error(self, enum=None, **kwargs) #

API接口错误dict

Parameters:

Name Type Description Default
enum Enum

错误的枚举类,如果为None,标识成功返回. Defaults to None.

None

Returns:

Type Description
dict

生成的错误dict

get_config_by_id(self, id) #

通过config_id来获取config

Parameters:

Name Type Description Default
id UUID

config_id

required

Returns:

Type Description
TenantExtensionConfig

config

get_settings(self, tenant) #

获取租户配置

Parameters:

Name Type Description Default
tenant Tenant

租户

required

Returns:

Type Description
TenantExtension

租户配置

get_tenant_configs(self, tenant) #

获取当前租户下所有的运行时配置

Parameters:

Name Type Description Default
tenant Tenant

租户

required

Returns:

Type Description
List[TenantExtensionConfig]

tenant下所有的运行时配置

listen_event(self, tag, func) #

侦听事件

Parameters:

Name Type Description Default
tag str

事件的tag

required
func Function

回调函数, event, **kwargs为必有参数。其中只有当前插件的package在event.packages中时,该插件才响应该事件。

required

load(self) #

抽象方法,插件加载的入口方法

register_api(self, path, method, view_func, *, tenant_path=False, auth=ninja.constants.NOT_SET_TYPE, response=ninja.constants.NOT_SET_TYPE, operation_id=None, summary=None, description=None, tags=None, deprecated=None, by_alias=False, exclude_unset=False, exclude_defaults=False, exclude_none=False, url_name=None, include_in_schema=True) #

Django-ninja的方式注册自定义API

Parameters:

Name Type Description Default
path str

请求路径

required
method str

请求方法,值为:GET,POST,DELETE,PUT等

required
view_func Callable

api方法

required
tenant_path bool

是否需要tenant开头,为Ture时,path前自动加上'/tenant/{tenant_id}'的结构. Defaults to False.

False
auth Any

认证方法. Defaults to NOT_SET.

ninja.constants.NOT_SET_TYPE
response Any

response schema. Defaults to NOT_SET.

ninja.constants.NOT_SET_TYPE
operation_id Optional[str]

Defaults to None.

None
summary Optional[str]

Defaults to None.

None
description Optional[str]

Defaults to None.

None
tags Optional[List[str]]

Defaults to None.

None
deprecated Optional[bool]

Defaults to None.

None
by_alias bool

Defaults to False.

False
exclude_unset bool

Defaults to False.

False
exclude_defaults bool

Defaults to False.

False
exclude_none bool

Defaults to False.

False
url_name Optional[str]

Defaults to None.

None
include_in_schema bool

Defaults to True.

True

Returns:

Type Description
str

真实的地址path

register_composite_config_schema(self, schema, composite_value, exclude=[], package=None) #

注册复合类型 运行时配置 的Schema

Parameters:

Name Type Description Default
schema class

Schema类

required
composite_value str

复合类型

required
exclude list

从schema的字段中删掉的字段列表. Defaults to [].

[]
package str

自定义package名字,不传就使用self.package, 正常情况不用设置.

None

register_config_schema(self, schema, schema_tag=None) #

注册插件的 运行时配置 config schema

Parameters:

Name Type Description Default
schema class

schema的类

required
schema_tag str

shema的标识, 默认为self.package

None

register_event(self, tag, name, data_schema=None, description='') #

注册事件

Parameters:

Name Type Description Default
tag str

事件标识

required
name str

事件名字

required
data_schema schema class

event.data的schema. Defaults to None.

None
description str

事件描述. Defaults to ''.

''

Returns:

Type Description
str

真实事件标识tag,为self.package +'.'+ tag

register_event_type(self, event_type) #

注册事件类型

Parameters:

Name Type Description Default
event_type EventType

事件类型对象

required

Returns:

Type Description
EventType

tag = package+'.'+tag

register_extend_api(self, *api_schema_cls, **field_definitions) #

注册扩展内核API

Parameters:

Name Type Description Default
api_schema_cls class

API Schema Class

()
field_definitions name=tuple(Type,Field

需要增加的字段,example:name=(str, Field(title='名字'))

{}

register_extend_field(self, model_cls, model_field, alias=None) #

注册扩展数据库字段,对原本数据库字段进行扩展

Parameters:

Name Type Description Default
model_cls Union[ core_expand.TenantExpandAbstract, core_expand.UserExpandAbstract, core_expand.UserGroupExpandAbstract, core_expand.AppExpandAbstract, core_expand.AppGroupExpandAbstract, ]

扩展定义的model

required
model_field str

扩展的字段

required
alias str

扩展字段在原model中的别名. None意味着就使用model_field作为其在原model中的别名

None

Exceptions:

Type Description
Exception

非法的扩展字段类对应的父类

register_front_pages(self, page) #

注册前端页面

Parameters:

Name Type Description Default
page core_pages.FrontPage

前端页面

required

register_front_routers(self, router, primary=None) #

注册前端路由

Parameters:

Name Type Description Default
router core_routers.FrontRouter

前端路由实例

required
primary core_routers.FrontRouter

一级路由名字,由 core_routers 文件提供定义. Defaults to None.

None

register_profile_schema(self, schema, schema_tag=None) #

注册插件配置 profile schema

Parameters:

Name Type Description Default
schema class

schema的类

required
schema_tag str

shema的标识, 默认为self.package

None

register_routers(self, urls_ext, tenant_urls=False) #

注册路由

Parameters:

Name Type Description Default
urls_ext List[partial]

需要注册的路由

required
tenant_urls bool

是否要添加 tenant/{tenant_id}/ 前缀. Defaults to False.

False

register_settings_schema(self, schema, schema_tag=None) #

注册插件的 租户配置 settings schema

Parameters:

Name Type Description Default
schema class

schema的类

required
schema_tag str

shema的标识, 默认为self.package

None

stop(self) #

插件卸载

success(self, data=None, **kwargs) #

API接口成功dict

Parameters:

Name Type Description Default
data dict

成功时需要返回的数据. Defaults to None.

None

Returns:

Type Description
dict

生成的成功dict

unregister_extend_api(self, *api_schema_cls, *, field_keys=[]) #

移除扩展内核API

Parameters:

Name Type Description Default
api_schema_cls class

API Schema Class

()
field_keys list

需要移除的字段名称,example:field_keys=['nickname','mobile'])

[]

update_or_create_settings(self, tenant, settings, is_active, use_platform_config) #

更新或创建租户配置

Parameters:

Name Type Description Default
tenant Tenant

租户

required
settings dict

租户配置

required
is_active bool

是否启用

required
use_platform_config bool

是否使用平台配置

required

Returns:

Type Description
TenantExtension

更新或创建的对象

update_tenant_config(self, id, config, name, type) #

更新运行时配置

Parameters:

Name Type Description Default
id str

config_id

required
config dict

config

required
name str

运行时配置名字

required
type str

配置类型

required

Returns:

Type Description
bool

更新成功True,没有找到该配置返回False

arkid.core.extension.create_extension_schema(name, file_path, fields=None, base_schema=<class 'ninja.schema.Schema'>, exclude=[]) #

提供给插件用来创建Schema的方法

注意

插件必须使用此方法来定义Schema,避免与其它Schema的命名冲突

Parameters:

Name Type Description Default
name str

Schema的类名

required
file_path str

指插件__init__.py文件所在的路径, 用来通过插件的config.toml文件获取package,从而避免schema的命名冲突

required
fields Optional[List[Tuple[str, Any, Any]]]

Schema的字段定义

None
base_schema Type[Schema]

Schema的基类. 默认为: ninja.Schema

<class 'ninja.schema.Schema'>

Returns:

Type Description
ninja.Schema

创建的Schema类

arkid.core.extension.create_extension_schema_by_package(name, package='', fields=None, base_schema=<class 'ninja.schema.Schema'>, exclude=[]) #

提供给插件用来创建Schema的方法

注意

插件必须使用此方法来定义Schema,避免与其它Schema的命名冲突

Parameters:

Name Type Description Default
name str

Schema的类名

required
package str

如果是插件调用的该方法,一定要将插件的package传过来,以避免命名冲突

''
fields Optional[List[Tuple[str, Any, Any]]]

Schema的字段定义

None
base_schema Type[Schema]

Schema的基类. 默认为: ninja.Schema

<class 'ninja.schema.Schema'>

Returns:

Type Description
ninja.Schema

创建的Schema类

arkid.core.extension.create_extension_schema_from_django_model(model, *, name='', depth=0, fields=None, exclude=None, custom_fields=None, base_class=<class 'ninja.schema.Schema'>) #

提供给插件通过Django.Model创建Schema的方法

注意

插件必须使用此方法来定义Schema,避免与其它Schema的命名冲突

Parameters:

Name Type Description Default
model Type[Model]

基于的 Django Model

required
name str

Schema的类名.

''
depth int

遍历Django Model的深度.

0
fields Optional[List[str]]

从Django Model中获取的字段名, 如果是所有的就设为 __all__ .

None
exclude Optional[List[str]]

从Django Model中排除的字段名.

None
custom_fields Optional[List[Tuple[str, Any, Any]]]

添加的自定义字段.

None
base_class Type[Schema]

Schema的基类.

<class 'ninja.schema.Schema'>

Returns:

Type Description
ninjia.Schema

新创建的Schema类

评论