Merge pull request #66 from Winifred43/master

add download args and retry pull info
This commit is contained in:
栾鹏 2022-08-20 17:13:11 +08:00 committed by GitHub
commit a146933c3d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 81 additions and 5 deletions

View File

@ -2,13 +2,51 @@
from flask_appbuilder.fieldwidgets import BS3TextFieldWidget
from wtforms import Field
from flask_appbuilder.fieldwidgets import BS3TextFieldWidget,BS3PasswordFieldWidget,DatePickerWidget,DateTimePickerWidget,Select2ManyWidget,Select2Widget
from wtforms import widgets
from myapp import app
conf = app.config
from wtforms.validators import DataRequired, Length, NumberRange, Optional,Regexp,ValidationError
# from myapp.models.base import MyappModelBase
# model_base=MyappModelBase()
#
# class StringField(Field):
# """
# This field is the base for most of the more complicated fields, and
# represents an ``<input type="text">``.
# """
# widget = widgets.TextInput()
#
#
# def __init__(self, label=None, validators=None, filters=tuple(),
# description='', id=None, default=None, widget=None,
# render_kw=None, _form=None, _name=None, _prefix='',
# _translations=None, _meta=None):
# label=_(model_base.lab('server')) if label==None else label
# default='' if default==None else default
# widget=BS3TextFieldWidget() if widget==None else widget
# description=description if description else ''
# validators = [] if validators==None else validators
#
# return super(StringField, self).__init__(label=label,default=default,widget=widget,validators=validators,description=description)
#
# # @pysnooper.snoop()
# def process_formdata(self, valuelist):
# # aa = self.data
# if not self.data:
# self.data=''
# if valuelist:
# self.data = valuelist[0]
# elif self.data is None:
# self.data = ''
# aa = self.data
#
# # @pysnooper.snoop()
# def _value(self):
# return text_type(self.data) if self.data is not None else ''
# 处理完再校验
class JsonValidator(object):

View File

@ -9,7 +9,8 @@ from inspect import isfunction
from sqlalchemy import create_engine
from flask_appbuilder.actions import action
from apispec import yaml_utils
from flask_appbuilder.fieldwidgets import BS3TextFieldWidget
from wtforms import Field
from flask_babel import gettext as __
from flask_babel import lazy_gettext as _
from flask_appbuilder.actions import ActionItem
@ -29,6 +30,7 @@ from sqlalchemy.orm.relationships import RelationshipProperty
from werkzeug.exceptions import BadRequest
from flask import render_template,redirect
import yaml
from wtforms import widgets
from marshmallow import validate
from wtforms import validators
from flask_appbuilder.api.convert import Model2SchemaConverter
@ -94,7 +96,9 @@ API_PERMISSIONS_RIS_KEY="permissions"
API_USER_PERMISSIONS_RIS_KEY="user_permissions"
API_RELATED_RIS_KEY="related"
API_COLS_WIDTH_RIS_KEY='cols_width'
API_EXIST_ADD_ARGS_RIS_KEY='exist_add_args'
API_IMPORT_DATA_RIS_KEY = 'import_data'
API_DOWNLOAD_DATA_RIS_KEY = 'download_data'
def get_error_msg():
if current_app.config.get("FAB_API_SHOW_STACKTRACE"):
@ -282,7 +286,9 @@ class MyappModelRestApi(ModelRestApi):
base_permissions=['can_add','can_show','can_edit','can_list','can_delete']
cols_width={}
import_data=False
download_data=False
pre_upload = None
set_columns_related=None
# def pre_list(self,**kargs):
# return
@ -381,6 +387,10 @@ class MyappModelRestApi(ModelRestApi):
def _init_model_schemas(self):
# Create Marshmalow schemas if one is not specified
for column_name in self.edit_columns:
if column_name not in self.add_columns:
self.add_columns.append(column_name)
if self.list_model_schema is None:
self.list_model_schema = self.model2schemaconverter.convert(
self.list_columns
@ -439,13 +449,35 @@ class MyappModelRestApi(ModelRestApi):
# 固定常用的几个字段的宽度
# print(self.cols_width)
# 将列宽信息加入
def merge_cols_width(self, response, **kwargs):
response[API_COLS_WIDTH_RIS_KEY] = self.cols_width
def merge_import_data(self, response, **kwargs):
# 将是否批量导入加入
def merge_ops_data(self, response, **kwargs):
response[API_IMPORT_DATA_RIS_KEY] = self.import_data
response[API_DOWNLOAD_DATA_RIS_KEY] = self.download_data
# 重新渲染add界面
# @pysnooper.snoop()
def merge_exist_add_args(self, response, **kwargs):
exist_add_args = request.args.get('exist_add_args','')
if exist_add_args:
exist_add_args = json.loads(exist_add_args)
# 把这些值转为add_column中的默认值
# print(response[API_ADD_COLUMNS_RIS_KEY])
response_add_columns = {}
for column in response[API_ADD_COLUMNS_RIS_KEY]:
if column['name'] in exist_add_args and exist_add_args[column['name']]:
column['default']=exist_add_args[column['name']]
response_add_columns[column['name']]=column
# 提供字段变换内容
if self.set_columns_related:
try:
self.set_columns_related(exist_add_args,response_add_columns)
response[API_ADD_COLUMNS_RIS_KEY] = list(response_add_columns.values())
except Exception as e:
print(e)
# 根据columnsfields 转化为 info的json信息
# @pysnooper.snoop()
@ -529,6 +561,10 @@ class MyappModelRestApi(ModelRestApi):
self.edit_query_rel_fields,
**_kwargs,
)
# 处理retry_info如果有这种类型就禁止编辑
for column in edit_columns:
if column.get('retry_info',False):
column['disable']=True
response[API_EDIT_COLUMNS_RES_KEY] = edit_columns
@ -790,7 +826,8 @@ class MyappModelRestApi(ModelRestApi):
@expose("/_info", methods=["GET"])
@merge_response_func(merge_more_info,'more_info')
@merge_response_func(merge_import_data, API_IMPORT_DATA_RIS_KEY)
@merge_response_func(merge_ops_data, API_IMPORT_DATA_RIS_KEY)
@merge_response_func(merge_exist_add_args, API_EXIST_ADD_ARGS_RIS_KEY)
@merge_response_func(merge_cols_width, API_COLS_WIDTH_RIS_KEY)
@merge_response_func(merge_base_permissions, API_PERMISSIONS_RIS_KEY)
@merge_response_func(merge_user_permissions, API_USER_PERMISSIONS_RIS_KEY)
@ -1630,6 +1667,7 @@ class MyappModelRestApi(ModelRestApi):
if 'widget' in column_field_kwargs:
ret['widget']=column_field_kwargs['widget'].__class__.__name__.replace('Widget','').replace('Field','').replace('My','')
ret['disable']=column_field_kwargs['widget'].readonly if hasattr(column_field_kwargs['widget'],'readonly') else False
ret['retry_info'] = column_field_kwargs['widget'].retry_info if hasattr(column_field_kwargs['widget'],'retry_info') else False
# if hasattr(column_field_kwargs['widget'],'can_input'):
# print(field.name,column_field_kwargs['widget'].can_input)
ret['ui-type'] = 'input-select' if hasattr(column_field_kwargs['widget'],'can_input') and column_field_kwargs['widget'].can_input else False