Skip to content

Commit 7f512a9

Browse files
committed
feat: implement Tool model and related API for Tool management
1 parent 342ef6d commit 7f512a9

File tree

22 files changed

+316
-0
lines changed

22 files changed

+316
-0
lines changed

apps/common/constants/permission_constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ class PermissionConstants(Enum):
109109
RoleConstants.USER])
110110
USER_EDIT = Permission(group=Group.USER, operate=Operate.EDIT, role_list=[RoleConstants.ADMIN])
111111
USER_DELETE = Permission(group=Group.USER, operate=Operate.DELETE, role_list=[RoleConstants.ADMIN])
112+
TOOL_CREATE = Permission(group=Group.USER, operate=Operate.CREATE, role_list=[RoleConstants.ADMIN,
113+
RoleConstants.USER])
112114

113115
def get_workspace_application_permission(self):
114116
return lambda r, kwargs: Permission(group=self.value.group, operate=self.value.operate,

apps/maxkb/settings/base.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
'drf_spectacular',
4040
'drf_spectacular_sidecar',
4141
'users.apps.UsersConfig',
42+
'tools.apps.ToolConfig',
4243
'common',
4344
'system_manage'
4445
]

apps/maxkb/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
SpectacularRedocView.authentication_classes = [AnonymousAuthentication]
3131
urlpatterns = [
3232
path("api/", include("users.urls")),
33+
path("api/", include("tools.urls"))
3334
]
3435
urlpatterns += [
3536
path('schema/', SpectacularAPIView.as_view(), name='schema'), # schema的配置文件的路由,下面两个ui也是根据这个配置文件来生成的

apps/tools/__init__.py

Whitespace-only changes.

apps/tools/admin.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.contrib import admin
2+
3+
# Register your models here.

apps/tools/api/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# coding=utf-8

apps/tools/api/py_lint.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# coding=utf-8
2+
3+
from django.utils.translation import gettext_lazy as _
4+
from drf_yasg import openapi
5+
from rest_framework import serializers
6+
7+
8+
class PyLintApi(serializers.Serializer):
9+
@staticmethod
10+
def get_request_body_api():
11+
return openapi.Schema(
12+
type=openapi.TYPE_OBJECT,
13+
required=['code'],
14+
properties={
15+
'code': openapi.Schema(type=openapi.TYPE_STRING, title=_('tool content'),
16+
description=_('tool content'))
17+
}
18+
)

apps/tools/api/tool.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# coding=utf-8
2+
3+
from common.mixins.api_mixin import APIMixin
4+
from common.result import ResultSerializer
5+
from tools.serializers.tool import ToolModelSerializer, ToolCreateRequest
6+
7+
8+
class ToolCreateResponse(ResultSerializer):
9+
def get_data(self):
10+
return ToolModelSerializer()
11+
12+
13+
class ToolCreateAPI(APIMixin):
14+
@staticmethod
15+
def get_request():
16+
return ToolCreateRequest
17+
18+
@staticmethod
19+
def get_response():
20+
return ToolCreateResponse

apps/tools/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class ToolConfig(AppConfig):
5+
default_auto_field = 'django.db.models.BigAutoField'
6+
name = 'tools'
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Generated by Django 5.2 on 2025-04-16 09:49
2+
3+
import django.contrib.postgres.fields
4+
import django.db.models.deletion
5+
import uuid_utils.compat
6+
from django.db import migrations, models
7+
8+
9+
class Migration(migrations.Migration):
10+
11+
initial = True
12+
13+
dependencies = [
14+
('users', '0001_initial'),
15+
]
16+
17+
operations = [
18+
migrations.CreateModel(
19+
name='Tool',
20+
fields=[
21+
('id', models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, verbose_name='主键id')),
22+
('name', models.CharField(max_length=64, verbose_name='函数名称')),
23+
('desc', models.CharField(max_length=128, verbose_name='描述')),
24+
('code', models.CharField(max_length=102400, verbose_name='python代码')),
25+
('input_field_list', django.contrib.postgres.fields.ArrayField(base_field=models.JSONField(default=dict, verbose_name='输入字段'), default=list, size=None, verbose_name='输入字段列表')),
26+
('init_field_list', models.JSONField(default=list, verbose_name='启动字段列表')),
27+
('icon', models.CharField(default='/ui/favicon.ico', max_length=256, verbose_name='函数库icon')),
28+
('is_active', models.BooleanField(default=True)),
29+
('permission_type', models.CharField(choices=[('SHARED', '共享'), ('PRIVATE', '私有')], default='PRIVATE', max_length=20, verbose_name='权限类型')),
30+
('tool_type', models.CharField(choices=[('INTERNAL', '内置'), ('PUBLIC', '公开')], default='PUBLIC', max_length=20, verbose_name='函数类型')),
31+
('template_id', models.UUIDField(default=None, null=True, verbose_name='模版id')),
32+
('module_id', models.UUIDField(default='root', null=True, verbose_name='模块id')),
33+
('init_params', models.CharField(max_length=102400, null=True, verbose_name='初始化参数')),
34+
('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
35+
('update_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
36+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.user', verbose_name='用户id')),
37+
],
38+
options={
39+
'db_table': 'tool',
40+
},
41+
),
42+
]

0 commit comments

Comments
 (0)