mirror of
https://github.com/langgenius/dify.git
synced 2026-04-26 18:27:15 +08:00
add app description
add update app api
This commit is contained in:
parent
124aa9db08
commit
7724d010b6
@ -1,5 +1,5 @@
|
|||||||
from flask_login import current_user
|
from flask_login import current_user
|
||||||
from flask_restful import Resource, abort, inputs, marshal_with, reqparse
|
from flask_restful import Resource, inputs, marshal_with, reqparse
|
||||||
from werkzeug.exceptions import Forbidden, BadRequest
|
from werkzeug.exceptions import Forbidden, BadRequest
|
||||||
|
|
||||||
from controllers.console import api
|
from controllers.console import api
|
||||||
@ -53,6 +53,7 @@ class AppListApi(Resource):
|
|||||||
"""Create app"""
|
"""Create app"""
|
||||||
parser = reqparse.RequestParser()
|
parser = reqparse.RequestParser()
|
||||||
parser.add_argument('name', type=str, required=True, location='json')
|
parser.add_argument('name', type=str, required=True, location='json')
|
||||||
|
parser.add_argument('description', type=str, location='json')
|
||||||
parser.add_argument('mode', type=str, choices=ALLOW_CREATE_APP_MODES, location='json')
|
parser.add_argument('mode', type=str, choices=ALLOW_CREATE_APP_MODES, location='json')
|
||||||
parser.add_argument('icon', type=str, location='json')
|
parser.add_argument('icon', type=str, location='json')
|
||||||
parser.add_argument('icon_background', type=str, location='json')
|
parser.add_argument('icon_background', type=str, location='json')
|
||||||
@ -86,6 +87,7 @@ class AppImportApi(Resource):
|
|||||||
parser = reqparse.RequestParser()
|
parser = reqparse.RequestParser()
|
||||||
parser.add_argument('data', type=str, required=True, nullable=False, location='json')
|
parser.add_argument('data', type=str, required=True, nullable=False, location='json')
|
||||||
parser.add_argument('name', type=str, location='json')
|
parser.add_argument('name', type=str, location='json')
|
||||||
|
parser.add_argument('description', type=str, location='json')
|
||||||
parser.add_argument('icon', type=str, location='json')
|
parser.add_argument('icon', type=str, location='json')
|
||||||
parser.add_argument('icon_background', type=str, location='json')
|
parser.add_argument('icon_background', type=str, location='json')
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
@ -144,6 +146,25 @@ class AppApi(Resource):
|
|||||||
|
|
||||||
return app_model
|
return app_model
|
||||||
|
|
||||||
|
@setup_required
|
||||||
|
@login_required
|
||||||
|
@account_initialization_required
|
||||||
|
@get_app_model
|
||||||
|
@marshal_with(app_detail_fields_with_site)
|
||||||
|
def put(self, app_model):
|
||||||
|
"""Update app"""
|
||||||
|
parser = reqparse.RequestParser()
|
||||||
|
parser.add_argument('name', type=str, required=True, nullable=False, location='json')
|
||||||
|
parser.add_argument('description', type=str, location='json')
|
||||||
|
parser.add_argument('icon', type=str, location='json')
|
||||||
|
parser.add_argument('icon_background', type=str, location='json')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
app_service = AppService()
|
||||||
|
app_model = app_service.update_app(app_model, args)
|
||||||
|
|
||||||
|
return app_model
|
||||||
|
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@account_initialization_required
|
@account_initialization_required
|
||||||
|
|||||||
@ -5,6 +5,7 @@ from libs.helper import TimestampField
|
|||||||
app_detail_kernel_fields = {
|
app_detail_kernel_fields = {
|
||||||
'id': fields.String,
|
'id': fields.String,
|
||||||
'name': fields.String,
|
'name': fields.String,
|
||||||
|
'description': fields.String,
|
||||||
'mode': fields.String,
|
'mode': fields.String,
|
||||||
'icon': fields.String,
|
'icon': fields.String,
|
||||||
'icon_background': fields.String,
|
'icon_background': fields.String,
|
||||||
@ -41,6 +42,7 @@ model_config_fields = {
|
|||||||
app_detail_fields = {
|
app_detail_fields = {
|
||||||
'id': fields.String,
|
'id': fields.String,
|
||||||
'name': fields.String,
|
'name': fields.String,
|
||||||
|
'description': fields.String,
|
||||||
'mode': fields.String,
|
'mode': fields.String,
|
||||||
'icon': fields.String,
|
'icon': fields.String,
|
||||||
'icon_background': fields.String,
|
'icon_background': fields.String,
|
||||||
@ -62,6 +64,7 @@ model_config_partial_fields = {
|
|||||||
app_partial_fields = {
|
app_partial_fields = {
|
||||||
'id': fields.String,
|
'id': fields.String,
|
||||||
'name': fields.String,
|
'name': fields.String,
|
||||||
|
'description': fields.String,
|
||||||
'mode': fields.String,
|
'mode': fields.String,
|
||||||
'icon': fields.String,
|
'icon': fields.String,
|
||||||
'icon_background': fields.String,
|
'icon_background': fields.String,
|
||||||
@ -109,6 +112,7 @@ site_fields = {
|
|||||||
app_detail_fields_with_site = {
|
app_detail_fields_with_site = {
|
||||||
'id': fields.String,
|
'id': fields.String,
|
||||||
'name': fields.String,
|
'name': fields.String,
|
||||||
|
'description': fields.String,
|
||||||
'mode': fields.String,
|
'mode': fields.String,
|
||||||
'icon': fields.String,
|
'icon': fields.String,
|
||||||
'icon_background': fields.String,
|
'icon_background': fields.String,
|
||||||
|
|||||||
32
api/migrations/versions/f9107f83abab_add_desc_for_apps.py
Normal file
32
api/migrations/versions/f9107f83abab_add_desc_for_apps.py
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
"""add desc for apps
|
||||||
|
|
||||||
|
Revision ID: f9107f83abab
|
||||||
|
Revises: cc04d0998d4d
|
||||||
|
Create Date: 2024-02-28 08:16:14.090481
|
||||||
|
|
||||||
|
"""
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = 'f9107f83abab'
|
||||||
|
down_revision = 'cc04d0998d4d'
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
with op.batch_alter_table('apps', schema=None) as batch_op:
|
||||||
|
batch_op.add_column(sa.Column('description', sa.Text(), server_default=sa.text("''::character varying"), nullable=False))
|
||||||
|
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
with op.batch_alter_table('apps', schema=None) as batch_op:
|
||||||
|
batch_op.drop_column('description')
|
||||||
|
|
||||||
|
# ### end Alembic commands ###
|
||||||
@ -14,7 +14,6 @@ from extensions.ext_database import db
|
|||||||
from libs.helper import generate_string
|
from libs.helper import generate_string
|
||||||
|
|
||||||
from .account import Account, Tenant
|
from .account import Account, Tenant
|
||||||
from .workflow import Workflow, WorkflowRun
|
|
||||||
|
|
||||||
|
|
||||||
class DifySetup(db.Model):
|
class DifySetup(db.Model):
|
||||||
@ -59,6 +58,7 @@ class App(db.Model):
|
|||||||
id = db.Column(UUID, server_default=db.text('uuid_generate_v4()'))
|
id = db.Column(UUID, server_default=db.text('uuid_generate_v4()'))
|
||||||
tenant_id = db.Column(UUID, nullable=False)
|
tenant_id = db.Column(UUID, nullable=False)
|
||||||
name = db.Column(db.String(255), nullable=False)
|
name = db.Column(db.String(255), nullable=False)
|
||||||
|
description = db.Column(db.Text, nullable=False, server_default=db.text("''::character varying"))
|
||||||
mode = db.Column(db.String(255), nullable=False)
|
mode = db.Column(db.String(255), nullable=False)
|
||||||
icon = db.Column(db.String(255))
|
icon = db.Column(db.String(255))
|
||||||
icon_background = db.Column(db.String(255))
|
icon_background = db.Column(db.String(255))
|
||||||
@ -279,6 +279,7 @@ class AppModelConfig(db.Model):
|
|||||||
@property
|
@property
|
||||||
def workflow(self):
|
def workflow(self):
|
||||||
if self.workflow_id:
|
if self.workflow_id:
|
||||||
|
from api.models.workflow import Workflow
|
||||||
return db.session.query(Workflow).filter(Workflow.id == self.workflow_id).first()
|
return db.session.query(Workflow).filter(Workflow.id == self.workflow_id).first()
|
||||||
|
|
||||||
return None
|
return None
|
||||||
@ -692,6 +693,7 @@ class Message(db.Model):
|
|||||||
@property
|
@property
|
||||||
def workflow_run(self):
|
def workflow_run(self):
|
||||||
if self.workflow_run_id:
|
if self.workflow_run_id:
|
||||||
|
from api.models.workflow import WorkflowRun
|
||||||
return db.session.query(WorkflowRun).filter(WorkflowRun.id == self.workflow_run_id).first()
|
return db.session.query(WorkflowRun).filter(WorkflowRun.id == self.workflow_run_id).first()
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|||||||
@ -5,7 +5,6 @@ from sqlalchemy.dialects.postgresql import UUID
|
|||||||
|
|
||||||
from extensions.ext_database import db
|
from extensions.ext_database import db
|
||||||
from models.account import Account
|
from models.account import Account
|
||||||
from models.model import EndUser
|
|
||||||
|
|
||||||
|
|
||||||
class CreatedByRole(Enum):
|
class CreatedByRole(Enum):
|
||||||
@ -242,6 +241,7 @@ class WorkflowRun(db.Model):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def created_by_end_user(self):
|
def created_by_end_user(self):
|
||||||
|
from models.model import EndUser
|
||||||
created_by_role = CreatedByRole.value_of(self.created_by_role)
|
created_by_role = CreatedByRole.value_of(self.created_by_role)
|
||||||
return EndUser.query.get(self.created_by) \
|
return EndUser.query.get(self.created_by) \
|
||||||
if created_by_role == CreatedByRole.END_USER else None
|
if created_by_role == CreatedByRole.END_USER else None
|
||||||
@ -356,6 +356,7 @@ class WorkflowNodeExecution(db.Model):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def created_by_end_user(self):
|
def created_by_end_user(self):
|
||||||
|
from models.model import EndUser
|
||||||
created_by_role = CreatedByRole.value_of(self.created_by_role)
|
created_by_role = CreatedByRole.value_of(self.created_by_role)
|
||||||
return EndUser.query.get(self.created_by) \
|
return EndUser.query.get(self.created_by) \
|
||||||
if created_by_role == CreatedByRole.END_USER else None
|
if created_by_role == CreatedByRole.END_USER else None
|
||||||
@ -418,6 +419,7 @@ class WorkflowAppLog(db.Model):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def created_by_end_user(self):
|
def created_by_end_user(self):
|
||||||
|
from models.model import EndUser
|
||||||
created_by_role = CreatedByRole.value_of(self.created_by_role)
|
created_by_role = CreatedByRole.value_of(self.created_by_role)
|
||||||
return EndUser.query.get(self.created_by) \
|
return EndUser.query.get(self.created_by) \
|
||||||
if created_by_role == CreatedByRole.END_USER else None
|
if created_by_role == CreatedByRole.END_USER else None
|
||||||
|
|||||||
@ -97,10 +97,11 @@ class AppService:
|
|||||||
|
|
||||||
app = App(**app_template['app'])
|
app = App(**app_template['app'])
|
||||||
app.name = args['name']
|
app.name = args['name']
|
||||||
|
app.description = args.get('description', '')
|
||||||
app.mode = args['mode']
|
app.mode = args['mode']
|
||||||
app.icon = args['icon']
|
app.icon = args['icon']
|
||||||
app.icon_background = args['icon_background']
|
app.icon_background = args['icon_background']
|
||||||
app.tenant_id = account.current_tenant_id
|
app.tenant_id = tenant_id
|
||||||
|
|
||||||
db.session.add(app)
|
db.session.add(app)
|
||||||
db.session.flush()
|
db.session.flush()
|
||||||
@ -145,6 +146,7 @@ class AppService:
|
|||||||
tenant_id=tenant_id,
|
tenant_id=tenant_id,
|
||||||
mode=app_data.get('mode'),
|
mode=app_data.get('mode'),
|
||||||
name=args.get("name") if args.get("name") else app_data.get('name'),
|
name=args.get("name") if args.get("name") else app_data.get('name'),
|
||||||
|
description=args.get("description") if args.get("description") else app_data.get('description', ''),
|
||||||
icon=args.get("icon") if args.get("icon") else app_data.get('icon'),
|
icon=args.get("icon") if args.get("icon") else app_data.get('icon'),
|
||||||
icon_background=args.get("icon_background") if args.get("icon_background") \
|
icon_background=args.get("icon_background") if args.get("icon_background") \
|
||||||
else app_data.get('icon_background'),
|
else app_data.get('icon_background'),
|
||||||
@ -205,6 +207,22 @@ class AppService:
|
|||||||
|
|
||||||
return yaml.dump(export_data)
|
return yaml.dump(export_data)
|
||||||
|
|
||||||
|
def update_app(self, app: App, args: dict) -> App:
|
||||||
|
"""
|
||||||
|
Update app
|
||||||
|
:param app: App instance
|
||||||
|
:param args: request args
|
||||||
|
:return: App instance
|
||||||
|
"""
|
||||||
|
app.name = args.get('name')
|
||||||
|
app.description = args.get('description', '')
|
||||||
|
app.icon = args.get('icon')
|
||||||
|
app.icon_background = args.get('icon_background')
|
||||||
|
app.updated_at = datetime.utcnow()
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
return app
|
||||||
|
|
||||||
def update_app_name(self, app: App, name: str) -> App:
|
def update_app_name(self, app: App, name: str) -> App:
|
||||||
"""
|
"""
|
||||||
Update app name
|
Update app name
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user