Commit d0df130e authored by wanli's avatar wanli

update

parent ea8f1d97
......@@ -110,11 +110,6 @@ def secondsToTime(seconds, sep=":"):
return sep.join([str(i) for i in [h, m, s]])
def writeFile(fpath, result):
with open(fpath, 'w') as f:
f.write(result)
def md5_salt(s):
md5 = hashlib.md5("EhuqUkwV".encode("utf-8"))
md5.update(s.encode('utf-8'))
......
'''
Author: your name
Date: 2021-04-29 12:12:01
LastEditTime: 2021-07-12 00:56:10
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\backend\utils\ccode.py
'''
# -*- coding: utf-8 -*-
import sys
......@@ -29,7 +37,7 @@ def cstr_encode(text, splitLines=True, escapePercent=False):
if splitLines:
output += "\\n\"\n\""
else:
output += "\\n";
output += "\\n";
elif text[i] == '\r':
output += "\\r"
elif text[i] == '\t':
......
123
456
789
123
\ No newline at end of file
123
456
789
123
\ No newline at end of file
<!--
* @Author: your name
* @Date: 2021-06-30 17:43:46
* @LastEditTime: 2021-07-11 13:48:10
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \evm-store\tools\build_out\README.md
-->
# Flask-Migrate
数据库迁移工具:使用Flask-Migrate数据库迁移框架可以保证数据库结构在发生变化时,改变数据库结构不至于丢失数据库的数据。
......@@ -68,4 +76,6 @@ python manager.py db migrate
python manager.py db upgrade
```
详情参考:https://zhuanlan.zhihu.com/p/307612189
\ No newline at end of file
详情参考:
+ https://zhuanlan.zhihu.com/p/307612189
+ https://file-manager.webmai.ru/
\ No newline at end of file
......@@ -32,7 +32,7 @@ handle_user_exception = app.handle_user_exception
def expired_token_callback(jwt_header, jwt_payload):
logger.info(jwt_payload)
return jsonify({
'code': 4011,
'code': 401,
'msg': 'token expired',
'data': jwt_header
})
......@@ -41,7 +41,7 @@ def expired_token_callback(jwt_header, jwt_payload):
@jwt.invalid_token_loader
def invalid_token_callback(error): # we have to keep the argument here, since it's passed in by the caller internally
return jsonify({
'code': 4012,
'code': 401,
'msg': 'invalid token',
'data': error
})
......@@ -50,7 +50,7 @@ def invalid_token_callback(error): # we have to keep the argument here, since i
@jwt.unauthorized_loader
def unauthorized_callback(error):
return jsonify({
'code': 4013,
'code': 401,
'msg': 'unauthorized',
'data': error
})
......@@ -60,13 +60,13 @@ def _custom_abort(http_status_code, **kwargs):
自定义abort 400响应数据格式
"""
if http_status_code == 400:
message = kwargs.get('message')
message = kwargs.get('msg')
if isinstance(message, dict):
param, info = list(message.items())[0]
data = '{}:{}!'.format(param, info)
return abort(jsonify(response_result(ResponseCode.PARAMETER_ERROR, data=data)))
return abort(jsonify(response_result(ResponseCode.HTTP_INVAILD_REQUEST, data=data)))
else:
return abort(jsonify(response_result(ResponseCode.PARAMETER_ERROR, data=message)))
return abort(jsonify(response_result(ResponseCode.HTTP_INVAILD_REQUEST, data=message)))
# return { 'code': http_status_code, 'msg': kwargs.get('message') }
return abort(http_status_code)
......
'''
Author: your name
Date: 2021-06-30 17:43:46
LastEditTime: 2021-07-12 01:19:46
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\application\config.py
'''
# -*- coding: utf-8 -*-
import os
import multiprocessing
MODE = 'develop' # develop: 开发模式; production: 生产模式
UPLOAD_ROOT_DIR = os.path.join(os.path.dirname(__file__), 'assets', 'upload')
EXPORT_ROOT_DIR = os.path.join(os.path.dirname(__file__), 'assets', 'export')
UPLOAD_ALLOWED = set(['doc', 'docs', 'csv', 'xls', 'xlsx'])
class ProductionConfig(object):
EPK_DIR = "D:\\projects\\scriptiot\\evm_app_store_files\epks"
UPLOAD_ROOT_DIR = "D:\\projects\\scriptiot\\evm_app_store_files"
UPLOAD_ALLOWED = set(['doc', 'docs', 'csv', 'xls', 'xlsx'])
BIND = '127.0.0.1:3000'
WORKERS = multiprocessing.cpu_count() * 2 + 1
WORKER_CONNECTIONS = 10000
......@@ -22,7 +30,7 @@ class ProductionConfig(object):
REDIS_PORT = 6379
REDIS_PASSWORD = ''
REDIS_MAX_CONNECTIONS = 100
JWT_HEADER_NAME = 'Auth'
JWT_HEADER_NAME = 'Authorization'
JWT_HEADER_TYPE = 'Bearer'
JWT_SECRET_KEY = '6UdxRgs2hvWpTLmj027d5vt7dXXQX'
JWT_ACCESS_TOKEN_EXPIRES = 7200
......@@ -44,6 +52,9 @@ class ProductionConfig(object):
class DevelopConfig(object):
EPK_DIR = "D:\\projects\\scriptiot\\evm_app_store_files\epks"
UPLOAD_ROOT_DIR = "D:\\projects\\scriptiot\\evm_app_store_files"
UPLOAD_ALLOWED = set(['doc', 'docs', 'csv', 'xls', 'xlsx'])
BIND = '127.0.0.1:3000'
WORKERS = 2
WORKER_CONNECTIONS = 1000
......@@ -58,7 +69,7 @@ class DevelopConfig(object):
REDIS_PORT = 6379
REDIS_PASSWORD = ''
REDIS_MAX_CONNECTIONS = 100
JWT_HEADER_NAME = 'Auth'
JWT_HEADER_NAME = 'Authorization'
JWT_HEADER_TYPE = 'Bearer'
JWT_SECRET_KEY = '6UdxRgs2hvWpTLmj027d5vt7dXXQX'
JWT_ACCESS_TOKEN_EXPIRES = 7200
......
......@@ -24,6 +24,24 @@ class SignalManager(object):
actionPostLogin = PySignal()
actionGetListLogin = PySignal()
actionGetLogin = PySignal()
actionPostDevice = PySignal()
actionDeleteDevice = PySignal()
actionGetListDevice = PySignal()
actionGetDevice = PySignal()
actionPutDevice = PySignal()
actionDeleteAnnex = PySignal()
actionGetListAnnex = PySignal()
actionGetAnnex = PySignal()
actionGetListMonitorWatch = PySignal()
actionGetMonitorWatch = PySignal()
actionGetListMonitorSystem = PySignal()
actionGetMonitorSystem = PySignal()
actionGetListMonitorLvgl = PySignal()
actionGetMonitorLvgl = PySignal()
actionGetListMonitorImage = PySignal()
actionGetMonitorImage = PySignal()
actionGetListMonitorEvm = PySignal()
actionGetMonitorEvm = PySignal()
# file manager api
actionGetFileInit = PySignal()
actionGetFileContent = PySignal()
......
'''
Author: your name
Date: 2021-06-30 17:43:46
LastEditTime: 2021-07-09 13:10:51
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\controllers\__init__.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
......@@ -15,7 +7,14 @@ from .app import appManager
from .package import packageManager
from .user import userManager
from .login import loginManager
from .file_manager import fileManager
from .device import deviceManager
from .annex import annexManager
from .monitorWatch import monitorWatchManager
from .monitorSystem import monitorSystemManager
from .monitorLvgl import monitorLvglManager
from .monitorImage import monitorImageManager
from .monitorEvm import monitorEvmManager
from .file import fileManager
def initConnect():
signalManager.actionPostArea.connect(areaManager.post)
......@@ -38,5 +37,28 @@ def initConnect():
signalManager.actionPostLogin.connect(loginManager.post)
signalManager.actionGetListLogin.connect(loginManager.getList)
signalManager.actionGetLogin.connect(loginManager.get)
signalManager.actionPostDevice.connect(deviceManager.post)
signalManager.actionDeleteDevice.connect(deviceManager.delete)
signalManager.actionGetListDevice.connect(deviceManager.getList)
signalManager.actionGetDevice.connect(deviceManager.get)
signalManager.actionPutDevice.connect(deviceManager.put)
signalManager.actionDeleteAnnex.connect(annexManager.delete)
signalManager.actionGetListAnnex.connect(annexManager.getList)
signalManager.actionGetAnnex.connect(annexManager.get)
signalManager.actionGetListMonitorWatch.connect(monitorWatchManager.getList)
signalManager.actionGetMonitorWatch.connect(monitorWatchManager.get)
signalManager.actionGetListMonitorSystem.connect(monitorSystemManager.getList)
signalManager.actionGetMonitorSystem.connect(monitorSystemManager.get)
signalManager.actionGetListMonitorLvgl.connect(monitorLvglManager.getList)
signalManager.actionGetMonitorLvgl.connect(monitorLvglManager.get)
signalManager.actionGetListMonitorImage.connect(monitorImageManager.getList)
signalManager.actionGetMonitorImage.connect(monitorImageManager.get)
signalManager.actionGetListMonitorEvm.connect(monitorEvmManager.getList)
signalManager.actionGetMonitorEvm.connect(monitorEvmManager.get)
# file manager api
signalManager.actionGetFileContent.connect(fileManager.content)
# signalManager.actionGEt
\ No newline at end of file
signalManager.actionGetFileDisk.connect(fileManager.disk)
signalManager.actionGetFileDown.connect(fileManager.download)
signalManager.actionGetFileInit.connect(fileManager.initialize)
signalManager.actionGetFilePreview.connect(fileManager.preview)
signalManager.actionGetFileTree.connect(fileManager.tree)
This diff is collapsed.
'''
Author: your name
Date: 2021-06-30 18:03:41
LastEditTime: 2021-07-09 16:35:34
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\controllers\area.py
'''
from datetime import datetime
from application.app import db
from models.area import AreaModel
from webcreator.log import logger
# from webcreator.response import ResponseCode, response_result
from webcreator.response import ResponseCode, response_result
class AreaResource(object):
def __init__(self):
......@@ -13,8 +21,8 @@ class AreaResource(object):
filters = [AreaModel.is_delete==False, AreaModel.uuid==uuid]
result = AreaModel.query.filter(*filters).first()
if result:
return (True, result)
return (False, result)
return result, ResponseCode.HTTP_SUCCESS
return result, ResponseCode.HTTP_NOT_FOUND
def getList(self, params):
# handle business
......@@ -22,7 +30,9 @@ class AreaResource(object):
filters = [AreaModel.is_delete==False]
result = AreaModel.query.filter(*filters).order_by(AreaModel.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
return (True, result.items, result.total)
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def post(self, params, jwt={}):
# handle business
......@@ -32,9 +42,9 @@ class AreaResource(object):
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return (True, None)
return True, ResponseCode.HTTP_SUCCESS
elif result and result.is_delete == False:
return (False, "record code exists")
return False, ResponseCode.HTTP_INVAILD_REQUEST
result = AreaModel(**params)
db.session.add(result)
......@@ -45,7 +55,7 @@ class AreaResource(object):
# handle business
result = AreaModel.query.filter(AreaModel.uuid==uuid).first()
if not result:
return (False, "record not exists")
return False, ResponseCode.HTTP_NOT_FOUND
if params:
for key, value in params.items():
......@@ -53,21 +63,21 @@ class AreaResource(object):
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return (True, None)
return True, ResponseCode.HTTP_SUCCESS
else:
return (False, "params is null")
return False, ResponseCode.HTTP_INVAILD_REQUEST
def delete(self, uuid, jwt={}):
# handle business
result = AreaModel.query.filter(AreaModel.uuid==uuid).first()
if not result:
return (False, "record not exists")
return False, ResponseCode.HTTP_NOT_FOUND
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
result.is_delete = True
db.session.delete(result)
db.session.commit()
return (True, None)
return True, ResponseCode.HTTP_SUCCESS
areaManager = AreaResource()
\ No newline at end of file
areaManager = AreaResource()
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import json
from datetime import datetime
from flask_jwt_extended import (
jwt_required, get_jwt_identity, create_access_token
)
from application.app import db
from models.login import LoginModel
from models.user import UserModel
from webcreator.log import logger
# from webcreator.response import ResponseCode, response_result
from webcreator import utils
from webcreator.response import ResponseCode
@utils.ThreadMaker
def update_login_information(ip, log_id):
try:
jsonData = utils.get_location_by_ip(ip)
logger.info(jsonData)
if (0 != jsonData['status']):
return None
record = LoginModel.query.filter(LoginModel.id==log_id).first()
record.geo_location = json.dumps(jsonData, ensure_ascii=False)
db.session.commit()
except Exception as e:
logger.error(e)
class LoginResource(object):
def __init__(self):
......@@ -13,8 +37,8 @@ class LoginResource(object):
filters = [LoginModel.is_delete==False, LoginModel.uuid==uuid]
result = LoginModel.query.filter(*filters).first()
if result:
return (True, result)
return (False, result)
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def getList(self, params):
# handle business
......@@ -22,30 +46,43 @@ class LoginResource(object):
filters = [LoginModel.is_delete==False]
result = LoginModel.query.filter(*filters).order_by(LoginModel.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
return (True, result.items, result.total)
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def post(self, params, jwt={}):
# handle business
result = LoginModel.query.filter(LoginModel.user == params.get('user')).first()
if result and result.is_delete:
result.is_delete = False
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return (True, None)
elif result and result.is_delete == False:
return (False, "record code exists")
user = UserModel.query.filter(UserModel.account==params.get("account")).first()
if not user:
return False, ResponseCode.USER_NOT_EXISTS
result = LoginModel(**params)
logger.info(params)
if user.password != utils.md5_encryption(params.get("password")):
return False, ResponseCode.USER_PASSWORD_ERROR
# 插入一条登录记录
obj = { 'user': user.id, 'user_agent': params.get("user_agent"), 'ip': params.get("ip"), 'geo_location': '', 'operator': '', 'login_at': datetime.now().strftime("%Y-%m-%d %H:%M:%S") }
result = LoginModel(**obj)
result.operator = ""
db.session.add(result)
db.session.commit()
return (True, None)
# 获取当前登录IP地理位置信息
update_login_information(params.get("ip"), result.id)
# 生成一个token,返回给前端
result = {
'uuid': user.uuid,
'name': user.username,
'token': create_access_token(identity={'uuid': user.uuid, 'name': user.username}),
}
return result, ResponseCode.HTTP_SUCCESS
def put(self, uuid, params, jwt={}):
# handle business
result = LoginModel.query.filter(LoginModel.uuid==uuid).first()
if not result:
return (False, "record not exists")
return None, ResponseCode.HTTP_NOT_FOUND
if params:
for key, value in params.items():
......@@ -53,21 +90,21 @@ class LoginResource(object):
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return (True, None)
return True, ResponseCode.HTTP_SUCCESS
else:
return (False, "params is null")
return False, ResponseCode.HTTP_INVAILD_REQUEST
def delete(self, uuid, jwt={}):
# handle business
result = LoginModel.query.filter(LoginModel.uuid==uuid).first()
if not result:
return (False, "record not exists")
return False, ResponseCode.HTTP_NOT_FOUND
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
result.is_delete = True
db.session.delete(result)
db.session.commit()
return (True, None)
return True, ResponseCode.HTTP_SUCCESS
loginManager = LoginResource()
\ No newline at end of file
loginManager = LoginResource()
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from datetime import datetime
from application.app import db
from models.package import PackageModel
from webcreator.log import logger
# from webcreator.response import ResponseCode, response_result
from webcreator.response import ResponseCode, response_result
class PackageResource(object):
def __init__(self):
......@@ -13,8 +16,8 @@ class PackageResource(object):
filters = [PackageModel.is_delete==False, PackageModel.uuid==uuid]
result = PackageModel.query.filter(*filters).first()
if result:
return (True, result)
return (False, result)
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def getList(self, params):
# handle business
......@@ -22,7 +25,9 @@ class PackageResource(object):
filters = [PackageModel.is_delete==False]
result = PackageModel.query.filter(*filters).order_by(PackageModel.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
return (True, result.items, result.total)
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def post(self, params, jwt={}):
# handle business
......@@ -32,20 +37,20 @@ class PackageResource(object):
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return (True, None)
return True, ResponseCode.HTTP_SUCCESS
elif result and result.is_delete == False:
return (False, "record code exists")
return False, ResponseCode.HTTP_INVAILD_REQUEST
result = PackageModel(**params)
db.session.add(result)
db.session.commit()
return (True, None)
return True, ResponseCode.HTTP_SUCCESS
def put(self, uuid, params, jwt={}):
# handle business
result = PackageModel.query.filter(PackageModel.uuid==uuid).first()
if not result:
return (False, "record not exists")
return None, ResponseCode.HTTP_NOT_FOUND
if params:
for key, value in params.items():
......@@ -53,21 +58,21 @@ class PackageResource(object):
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return (True, None)
return True, ResponseCode.HTTP_SUCCESS
else:
return (False, "params is null")
return False, ResponseCode.HTTP_INVAILD_REQUEST
def delete(self, uuid, jwt={}):
# handle business
result = PackageModel.query.filter(PackageModel.uuid==uuid).first()
if not result:
return (False, "record not exists")
return False, ResponseCode.HTTP_NOT_FOUND
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
result.is_delete = True
db.session.delete(result)
db.session.commit()
return (True, None)
return True, ResponseCode.HTTP_SUCCESS
packageManager = PackageResource()
\ No newline at end of file
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from datetime import datetime
from application.app import db
from models.user import UserModel
from webcreator.log import logger
# from webcreator.response import ResponseCode, response_result
from webcreator.response import ResponseCode, response_result
class UserResource(object):
def __init__(self):
......@@ -13,8 +16,8 @@ class UserResource(object):
filters = [UserModel.is_delete==False, UserModel.uuid==uuid]
result = UserModel.query.filter(*filters).first()
if result:
return (True, result)
return (False, result)
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def getList(self, params):
# handle business
......@@ -22,30 +25,37 @@ class UserResource(object):
filters = [UserModel.is_delete==False]
result = UserModel.query.filter(*filters).order_by(UserModel.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
return (True, result.items, result.total)
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def post(self, params, jwt={}):
# handle business
result = UserModel.query.filter(UserModel.app_name == params.get('app_name')).first()
result = UserModel.query.filter(UserModel.account == params.get('account')).first()
if result and result.is_delete:
result.is_delete = False
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return (True, None)
return True, ResponseCode.HTTP_SUCCESS
elif result and result.is_delete == False:
return (False, "record code exists")
return False, ResponseCode.USER_EXISTS
# 密码使用md5加密,可以使用元编程模式劫持,不用手动一个个修改了
# params.update({ "password": utils.md5_encryption(params.get("password")) })
result = UserModel(**params)
db.session.add(result)
db.session.commit()
return (True, None)
return True, ResponseCode.HTTP_SUCCESS
def put(self, uuid, params, jwt={}):
logger.info(uuid)
logger.info(params)
# handle business
result = UserModel.query.filter(UserModel.uuid==uuid).first()
if not result:
return (False, "record not exists")
return None, ResponseCode.HTTP_NOT_FOUND
if params:
for key, value in params.items():
......@@ -53,21 +63,21 @@ class UserResource(object):
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return (True, None)
return True, ResponseCode.HTTP_SUCCESS
else:
return (False, "params is null")
return False, ResponseCode.HTTP_INVAILD_REQUEST
def delete(self, uuid, jwt={}):
# handle business
result = UserModel.query.filter(UserModel.uuid==uuid).first()
if not result:
return (False, "record not exists")
return False, ResponseCode.HTTP_NOT_FOUND
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
result.is_delete = True
db.session.delete(result)
db.session.commit()
return (True, None)
return True, ResponseCode.HTTP_SUCCESS
userManager = UserResource()
\ No newline at end of file
userManager = UserResource()
This diff is collapsed.
'''
Author: your name
Date: 2021-06-15 17:40:09
LastEditTime: 2021-06-30 18:09:51
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\manager.py
'''
# -*- coding: utf-8 -*-
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
......
# -*- coding: utf-8 -*-
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from application.app import db, ma
from .base import PrimaryModel
......@@ -10,20 +11,20 @@ class AppModel(PrimaryModel):
app_name = db.Column(db.String(70), index = True, nullable = False)
app_icon = db.Column(db.String(200), nullable = False)
app_version = db.Column(db.String(20), nullable = False)
category = db.Column(db.Integer, nullable = False)
category_2th = db.Column(db.Integer, nullable = False)
developer = db.Column(db.Integer, nullable = False)
download_url = db.Column(db.String(20), nullable = False)
app_file_size = db.Column(db.Integer, nullable = False)
app_screen_size = db.Column(db.Integer, nullable = False)
app_arch = db.Column(db.String(20), nullable = False)
app_review = db.Column(db.String(100), nullable = False)
category = db.Column(db.Integer, nullable = False, default = 0)
category_2th = db.Column(db.Integer, nullable = False, default = 0)
developer = db.Column(db.Integer, nullable = False, default = 0)
download_url = db.Column(db.String(20), nullable = False, default = '')
app_file_size = db.Column(db.Integer, nullable = False, default = 0)
app_screen_size = db.Column(db.Integer, nullable = False, default = 0)
app_arch = db.Column(db.String(20), nullable = False, default = '')
app_review = db.Column(db.String(100), nullable = False, default = '')
# __table_args__ = (
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self, app_name, app_icon, app_version, category, category_2th, developer, download_url, app_file_size, app_screen_size, app_arch, app_review):
def __init__(self, app_name, app_icon, app_version, category=0, category_2th=0, developer=0, download_url='', app_file_size=0, app_screen_size=0, app_arch='', app_review=''):
self.app_name = app_name
self.app_icon = app_icon
self.app_version = app_version
......
# -*- coding: utf-8 -*-
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import uuid
from datetime import datetime
......
# -*- coding: utf-8 -*-
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import json
from application.app import db, ma
from .base import PrimaryModel
from .base import PrimaryModel
from marshmallow import Schema, fields, INCLUDE, EXCLUDE
from webcreator.log import logger
class LoginModel(PrimaryModel):
__tablename__ = 'evm_login'
......@@ -26,6 +29,15 @@ class LoginModel(PrimaryModel):
self.geo_location = geo_location
self.operator = operator
# def __getattr__(self, key):
# return self.__dict__[key]
# def __getitem__(self, key):
# return self.get(key)
# def __getattribute__(self, value):
# return value
def __repr__(self):
return '<LoginModel %r>' % (self.user)
......@@ -58,12 +70,12 @@ class GetListLoginSchema(ma.SQLAlchemySchema):
page = fields.Integer(required=False)
pageSize = fields.Integer(required=False)
user = ma.auto_field()
login_at = ma.auto_field()
user_agent = ma.auto_field()
ip = ma.auto_field()
geo_location = ma.auto_field()
operator = ma.auto_field()
user = fields.Integer(required=False)
login_at = fields.String(required=False)
user_agent = fields.String(required=False)
ip = fields.String(required=False)
geo_location = fields.String(required=False)
operator = fields.String(required=False)
getListLoginSchema = GetListLoginSchema()
getListLoginsSchema = GetListLoginSchema(many=True)
......@@ -74,11 +86,11 @@ class GetLoginSchema(ma.SQLAlchemySchema):
unknown = EXCLUDE # 未知字段默认排除
model = LoginModel
user = ma.auto_field()
login_at = ma.auto_field()
user_agent = ma.auto_field()
ip = ma.auto_field()
geo_location = ma.auto_field()
operator = ma.auto_field()
user = fields.Integer(required=False)
login_at = fields.String(required=False)
user_agent = fields.String(required=False)
ip = fields.String(required=False)
geo_location = fields.String(required=False)
operator = fields.String(required=False)
getLoginSchema = GetLoginSchema()
# -*- coding: utf-8 -*-
'''
Author: your name
Date: 2021-06-30 18:03:41
LastEditTime: 2021-07-12 01:59:31
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\models\package.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from application.app import db, ma
from .base import PrimaryModel
......@@ -22,7 +31,7 @@ class PackageModel(PrimaryModel):
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self, app, app_version, package_info, file_path, source, user_agent, download_url, ip, geo_location, operator):
def __init__(self, app, app_version, package_info, file_path, source="", user_agent="", download_url="", ip="", geo_location="", operator="", create_by=None, create_at=None, update_by=None, update_at=None):
self.app = app
self.app_version = app_version
self.package_info = package_info
......@@ -33,6 +42,10 @@ class PackageModel(PrimaryModel):
self.ip = ip
self.geo_location = geo_location
self.operator = operator
self.create_by = create_by
self.create_at = create_at
self.update_by = update_by
self.update_at = update_at
def __repr__(self):
return '<PackageModel %r>' % (self.app)
......
# -*- coding: utf-8 -*-
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from application.app import db, ma
from .base import PrimaryModel
from .base import PrimaryModel
from marshmallow import Schema, fields, INCLUDE, EXCLUDE
from webcreator import utils
from webcreator.log import logger
class UserModel(PrimaryModel):
__tablename__ = 'evm_user'
app_name = db.Column(db.String(70), index = True, nullable = False)
app_icon = db.Column(db.String(200), nullable = False)
app_version = db.Column(db.String(20), nullable = False)
category = db.Column(db.Integer, nullable = False)
category_2th = db.Column(db.Integer, nullable = False)
developer = db.Column(db.Integer, nullable = False)
download_url = db.Column(db.String(20), nullable = False)
app_file_size = db.Column(db.Integer, nullable = False)
app_screen_size = db.Column(db.Integer, nullable = False)
app_arch = db.Column(db.String(20), nullable = False)
app_review = db.Column(db.String(100), nullable = False)
username = db.Column(db.String(70), index = True, nullable = False)
account = db.Column(db.String(200), nullable = False)
password = db.Column(db.String(20), nullable = False)
role = db.Column(db.Integer, nullable = False, default = 0)
email = db.Column(db.String, nullable = False, default = '')
phone = db.Column(db.String, nullable = False, default = '')
# __table_args__ = (
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self, app_name, app_icon, app_version, category, category_2th, developer, download_url, app_file_size, app_screen_size, app_arch, app_review):
self.app_name = app_name
self.app_icon = app_icon
self.app_version = app_version
self.category = category
self.category_2th = category_2th
self.developer = developer
self.download_url = download_url
self.app_file_size = app_file_size
self.app_screen_size = app_screen_size
self.app_arch = app_arch
self.app_review = app_review
def __init__(self, username, account, password, role=0, email='', phone=''):
self.username = username
self.account = account
self.password = password
self.role = role
self.email = email
self.phone = phone
def __setattr__(self, key, value):
# logger.info(f"execute __setattr__:key={key}, value={value}")
if key == 'password':
self.__dict__[key] = utils.md5_encryption(value)
else:
self.__dict__[key] = value
def __repr__(self):
return '<UserModel %r>' % (self.app_name)
return '<UserModel %r>' % (self.username)
def to_json(self):
return {
'app_name': self.app_name,
'app_icon': self.app_icon,
'app_version': self.app_version,
'category': self.category,
'category_2th': self.category_2th,
'developer': self.developer,
'download_url': self.download_url,
'app_file_size': self.app_file_size,
'app_screen_size': self.app_screen_size,
'app_arch': self.app_arch,
'app_review': self.app_review,
'username': self.username,
'account': self.account,
'password': self.password,
'role': self.role,
'email': self.email,
'phone': self.phone,
}
......@@ -61,15 +56,9 @@ class PostUserSchema(ma.SQLAlchemySchema):
unknown = EXCLUDE # 未知字段默认排除
model = UserModel
app_name = ma.auto_field()
app_icon = ma.auto_field()
app_version = ma.auto_field()
category = ma.auto_field()
category_2th = ma.auto_field()
developer = ma.auto_field()
app_screen_size = ma.auto_field()
app_arch = ma.auto_field()
app_review = ma.auto_field()
username = ma.auto_field()
account = ma.auto_field()
password = ma.auto_field()
postUserSchema = PostUserSchema()
......@@ -88,13 +77,9 @@ class GetListUserSchema(ma.SQLAlchemySchema):
unknown = EXCLUDE # 未知字段默认排除
model = UserModel
page = fields.Integer(required=False)
pageSize = fields.Integer(required=False)
app_name = ma.auto_field()
app_version = ma.auto_field()
category = ma.auto_field()
category_2th = ma.auto_field()
app_arch = ma.auto_field()
uuid = ma.auto_field()
username = ma.auto_field()
account = ma.auto_field()
getListUserSchema = GetListUserSchema()
getListUsersSchema = GetListUserSchema(many=True)
......@@ -105,11 +90,8 @@ class GetUserSchema(ma.SQLAlchemySchema):
unknown = EXCLUDE # 未知字段默认排除
model = UserModel
app_name = ma.auto_field()
app_version = ma.auto_field()
category = ma.auto_field()
category_2th = ma.auto_field()
app_arch = ma.auto_field()
username = ma.auto_field()
account = ma.auto_field()
getUserSchema = GetUserSchema()
......@@ -119,13 +101,8 @@ class PutUserSchema(ma.SQLAlchemySchema):
unknown = EXCLUDE # 未知字段默认排除
model = UserModel
app_name = ma.auto_field()
app_icon = ma.auto_field()
app_version = ma.auto_field()
app_screen_size = ma.auto_field()
app_arch = ma.auto_field()
app_review = ma.auto_field()
category = ma.auto_field()
category_2th = ma.auto_field()
account = fields.String(required=False, allow_none=True)
username = fields.String(required=False, allow_none=True)
password = fields.String(required=False, allow_none=True)
putUserSchema = PutUserSchema()
# -*- coding: utf-8 -*-
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from flask import Blueprint
from flask_restful import Api
......@@ -7,6 +8,14 @@ from . import app
from . import package
from . import user
from . import login
from . import device
from . import annex
from . import file
from . import monitorWatch
from . import monitorSystem
from . import monitorLvgl
from . import monitorImage
from . import monitorEvm
api_v1 = Blueprint('api_v1', __name__)
......@@ -27,3 +36,31 @@ api.add_resource(user.UserResourceList, '/user')
api.add_resource(login.LoginResource, '/login/<string:uuid>')
api.add_resource(login.LoginResourceList, '/login')
api.add_resource(device.DeviceResource, '/device/<string:uuid>')
api.add_resource(device.DeviceResourceList, '/device')
api.add_resource(annex.AnnexResource, '/annex/<string:uuid>')
api.add_resource(annex.AnnexResourceList, '/annex')
api.add_resource(file.FileInit, "/file-manager/initialize")
api.add_resource(file.FileContent, "/file-manager/content")
api.add_resource(file.FileDisk, "/file-manager/disk")
api.add_resource(file.FileTree, "/file-manager/tree")
api.add_resource(file.FileDownload, "/file-manager/download")
api.add_resource(file.FilePrview, "/file-manager/preview")
api.add_resource(monitorWatch.MonitorWatchResource, '/monitorWatch/<string:uuid>')
api.add_resource(monitorWatch.MonitorWatchResourceList, '/monitorWatch')
api.add_resource(monitorSystem.MonitorSystemResource, '/monitorSystem/<string:uuid>')
api.add_resource(monitorSystem.MonitorSystemResourceList, '/monitorSystem')
api.add_resource(monitorLvgl.MonitorLvglResource, '/monitorLvgl/<string:uuid>')
api.add_resource(monitorLvgl.MonitorLvglResourceList, '/monitorLvgl')
api.add_resource(monitorImage.MonitorImageResource, '/monitorImage/<string:uuid>')
api.add_resource(monitorImage.MonitorImageResourceList, '/monitorImage')
api.add_resource(monitorEvm.MonitorEvmResource, '/monitorEvm/<string:uuid>')
api.add_resource(monitorEvm.MonitorEvmResourceList, '/monitorEvm')
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from flask import current_app, jsonify, request
from flask_restful import Resource
from flask_restful.reqparse import RequestParser
......@@ -23,31 +26,29 @@ class AppResourceList(Resource):
json_payload = request.json
logger.warn(json_payload)
data = getListAppSchema.load(json_payload)
result = signalManager.actionGetListApp.emit(data)
result, message = signalManager.actionGetListApp.emit(data)
json_dumps = getListAppSchema.dump(result)
if result[0]:
json_dumps = getListAppsSchema.dump(result[1])
if result:
json_dumps = getListAppsSchema.dump(result.items)
logger.warn(json_dumps)
return response_result(ResponseCode.OK, data=json_dumps, count=result[2])
return response_result(ResponseCode.REQUEST_ERROR)
return response_result(message, data=json_dumps, count=result.total)
return response_result(message)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
@jwt_required(locations=["headers"])
def post(self):
try:
json_payload = request.json
data = postAppSchema.load(json_payload)
result = signalManager.actionPostApp.emit(data)
if result[0] == False:
# json_dumps = postAppSchema.dump(result)
return response_result(ResponseCode.REQUEST_ERROR, msg=result[1])
logger.warn(result)
return response_result(ResponseCode.OK)
result, message = signalManager.actionPostApp.emit(data)
logger.info(result)
logger.warn(message)
return response_result(message)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
class AppResource(Resource):
......@@ -67,14 +68,14 @@ class AppResource(Resource):
json_payload = request.json
print("========>", uuid, json_payload)
data = getAppSchema.load(json_payload)
result = signalManager.actionGetApp.emit(uuid, data)
if result[0]:
json_dumps = getAppSchema.dump(result[1])
return response_result(ResponseCode.OK, data=json_dumps)
return response_result(ResponseCode.NO_DATA)
result, message = signalManager.actionGetApp.emit(uuid, data)
if result:
json_dumps = getAppSchema.dump(result)
return response_result(message, data=json_dumps)
return response_result(message)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
@jwt_required(locations=["headers"])
......@@ -83,14 +84,13 @@ class AppResource(Resource):
json_payload = request.json
print("========>", uuid, json_payload)
data = putAppSchema.load(json_payload)
result = signalManager.actionPutApp.emit(uuid, data)
if result[0] == True:
# json_dumps = putAppSchema.dump(result)
return response_result(ResponseCode.OK)
return response_result(ResponseCode.NOTHING_CHANGE, msg=result[1])
result, message = signalManager.actionPutApp.emit(uuid, data)
logger.info(result)
logger.info(message)
return response_result(message, data=result)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
@jwt_required(locations=["headers"])
......@@ -99,10 +99,8 @@ class AppResource(Resource):
json_payload = request.json
print("========>", uuid, json_payload)
# data = deleteAppSchema.load(json_payload)
result = signalManager.actionDeleteApp.emit(uuid)
if result[0] == True:
return response_result(ResponseCode.OK)
return response_result(ResponseCode.REQUEST_ERROR, msg=result[1])
result, message = signalManager.actionDeleteApp.emit(uuid)
return response_result(message, data=result)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
......@@ -28,11 +28,11 @@ class AreaResourceList(Resource):
if result[0]:
json_dumps = getListAreasSchema.dump(result[1])
logger.warn(json_dumps)
return response_result(ResponseCode.OK, data=json_dumps, count=result[2])
return response_result(ResponseCode.REQUEST_ERROR)
return response_result(ResponseCode.HTTP_SUCCESS, data=json_dumps, count=result[2])
return response_result(ResponseCode.HTTP_INVAILD_REQUEST)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
@jwt_required(locations=["headers"])
def post(self):
......@@ -42,12 +42,12 @@ class AreaResourceList(Resource):
result = signalManager.actionPostArea.emit(data)
if result[0] == False:
# json_dumps = postAreaSchema.dump(result)
return response_result(ResponseCode.REQUEST_ERROR, msg=result[1])
return response_result(ResponseCode.HTTP_INVAILD_REQUEST, msg=result[1])
logger.warn(result)
return response_result(ResponseCode.OK)
return response_result(ResponseCode.HTTP_SUCCESS)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
class AreaResource(Resource):
......@@ -70,11 +70,11 @@ class AreaResource(Resource):
result = signalManager.actionGetArea.emit(uuid, data)
if result[0]:
json_dumps = getAreaSchema.dump(result[1])
return response_result(ResponseCode.OK, data=json_dumps)
return response_result(ResponseCode.NO_DATA)
return response_result(ResponseCode.HTTP_SUCCESS, data=json_dumps)
return response_result(ResponseCode.HTTP_NOT_FOUND)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
@jwt_required(locations=["headers"])
......@@ -86,11 +86,11 @@ class AreaResource(Resource):
result = signalManager.actionPutArea.emit(uuid, data)
if result[0] == True:
# json_dumps = putAreaSchema.dump(result)
return response_result(ResponseCode.OK)
return response_result(ResponseCode.HTTP_SUCCESS)
return response_result(ResponseCode.NOTHING_CHANGE, msg=result[1])
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
@jwt_required(locations=["headers"])
......@@ -101,8 +101,8 @@ class AreaResource(Resource):
# data = deleteAreaSchema.load(json_payload)
result = signalManager.actionDeleteArea.emit(uuid)
if result[0] == True:
return response_result(ResponseCode.OK)
return response_result(ResponseCode.REQUEST_ERROR, msg=result[1])
return response_result(ResponseCode.HTTP_SUCCESS)
return response_result(ResponseCode.HTTP_INVAILD_REQUEST, msg=result[1])
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from flask import current_app, jsonify, request
from flask_restful import Resource
from flask_restful.reqparse import RequestParser
from flask_jwt_extended import ( jwt_required, get_jwt_identity )
from marshmallow.exceptions import ValidationError
from application.signal_manager import signalManager
from models.login import postLoginSchema, getListLoginSchema, getListLoginsSchema, getLoginSchema
from webcreator.log import logger
......@@ -23,30 +27,37 @@ class LoginResourceList(Resource):
json_payload = request.json
logger.warn(json_payload)
data = getListLoginSchema.load(json_payload)
result = signalManager.actionGetListLogin.emit(data)
result, message = signalManager.actionGetListLogin.emit(data)
json_dumps = getListLoginSchema.dump(result)
if result[0]:
json_dumps = getListLoginsSchema.dump(result[1])
logger.warn(json_dumps)
return response_result(ResponseCode.OK, data=json_dumps, count=result[2])
return response_result(ResponseCode.REQUEST_ERROR)
if result:
json_dumps = getListLoginsSchema.dump(result.items)
return response_result(message, data=json_dumps, count=result.total)
return response_result(message)
except ValidationError as e:
return response_result(ResponseCode.HTTP_INVAILD_REQUEST, data=e.messages)
except Exception as e:
data = None
if hasattr(e, 'args'):
data = e.args
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR, data=data)
def post(self):
try:
json_payload = request.json
data = postLoginSchema.load(json_payload)
result = signalManager.actionPostLogin.emit(data)
if result[0] == False:
# json_dumps = postLoginSchema.dump(result)
return response_result(ResponseCode.REQUEST_ERROR, msg=result[1])
logger.warn(result)
return response_result(ResponseCode.OK)
# 更新data,插入ip信息,如果没有转发ip,那么则获取请求ip
data.update({ "ip": request.headers.get('X-Forwarded-For', request.remote_addr), "user_agent": request.headers.get('User-Agent', "") })
result, message = signalManager.actionPostLogin.emit(data)
return response_result(message, data=result)
except ValidationError as e:
return response_result(ResponseCode.HTTP_INVAILD_REQUEST, data=e.messages)
except Exception as e:
data = None
if hasattr(e, 'args'):
data = e.args
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR, data=data)
class LoginResource(Resource):
......@@ -66,11 +77,11 @@ class LoginResource(Resource):
json_payload = request.json
print("========>", uuid, json_payload)
data = getLoginSchema.load(json_payload)
result = signalManager.actionGetLogin.emit(uuid, data)
if result[0]:
json_dumps = getLoginSchema.dump(result[1])
return response_result(ResponseCode.OK, data=json_dumps)
return response_result(ResponseCode.NO_DATA)
result, message = signalManager.actionGetLogin.emit(uuid, data)
if result:
json_dumps = getLoginSchema.dump(result)
return response_result(message, data=json_dumps)
return response_result(message)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from flask import current_app, jsonify, request
from flask_restful import Resource
from flask_restful.reqparse import RequestParser
......@@ -23,16 +26,16 @@ class PackageResourceList(Resource):
json_payload = request.json
logger.warn(json_payload)
data = getListPackageSchema.load(json_payload)
result = signalManager.actionGetListPackage.emit(data)
result, message = signalManager.actionGetListPackage.emit(data)
json_dumps = getListPackageSchema.dump(result)
if result[0]:
json_dumps = getListPackagesSchema.dump(result[1])
if result:
json_dumps = getListPackagesSchema.dump(result.items)
logger.warn(json_dumps)
return response_result(ResponseCode.OK, data=json_dumps, count=result[2])
return response_result(ResponseCode.REQUEST_ERROR)
return response_result(message, data=json_dumps, count=result.total)
return response_result(message)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
class PackageResource(Resource):
def __init__(self):
......@@ -51,11 +54,11 @@ class PackageResource(Resource):
json_payload = request.json
print("========>", uuid, json_payload)
data = getPackageSchema.load(json_payload)
result = signalManager.actionGetPackage.emit(uuid, data)
if result[0]:
json_dumps = getPackageSchema.dump(result[1])
return response_result(ResponseCode.OK, data=json_dumps)
return response_result(ResponseCode.NO_DATA)
result, message = signalManager.actionGetPackage.emit(uuid, data)
if result:
json_dumps = getPackageSchema.dump(result)
return response_result(message, data=json_dumps)
return response_result(message)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from flask import current_app, jsonify, request
from flask_restful import Resource
from flask_restful.reqparse import RequestParser
......@@ -23,31 +26,28 @@ class UserResourceList(Resource):
json_payload = request.json
logger.warn(json_payload)
data = getListUserSchema.load(json_payload)
result = signalManager.actionGetListUser.emit(data)
result, message = signalManager.actionGetListUser.emit(data)
json_dumps = getListUserSchema.dump(result)
if result[0]:
json_dumps = getListUsersSchema.dump(result[1])
if result:
json_dumps = getListUsersSchema.dump(result.items)
logger.warn(json_dumps)
return response_result(ResponseCode.OK, data=json_dumps, count=result[2])
return response_result(ResponseCode.REQUEST_ERROR)
return response_result(message, data=json_dumps, count=result.total)
return response_result(message)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
@jwt_required(locations=["headers"])
def post(self):
try:
json_payload = request.json
data = postUserSchema.load(json_payload)
result = signalManager.actionPostUser.emit(data)
if result[0] == False:
# json_dumps = postUserSchema.dump(result)
return response_result(ResponseCode.REQUEST_ERROR, msg=result[1])
logger.warn(result)
return response_result(ResponseCode.OK)
result, message = signalManager.actionPostUser.emit(data)
logger.info(result)
logger.warn(message)
return response_result(message)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
class UserResource(Resource):
......@@ -67,30 +67,26 @@ class UserResource(Resource):
json_payload = request.json
print("========>", uuid, json_payload)
data = getUserSchema.load(json_payload)
result = signalManager.actionGetUser.emit(uuid, data)
if result[0]:
json_dumps = getUserSchema.dump(result[1])
return response_result(ResponseCode.OK, data=json_dumps)
return response_result(ResponseCode.NO_DATA)
result, message = signalManager.actionGetUser.emit(uuid, data)
if result:
json_dumps = getUserSchema.dump(result)
return response_result(message, data=json_dumps)
return response_result(message)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
@jwt_required(locations=["headers"])
def put(self, uuid):
try:
json_payload = request.json
print("========>", uuid, json_payload)
data = putUserSchema.load(json_payload)
result = signalManager.actionPutUser.emit(uuid, data)
if result[0] == True:
# json_dumps = putUserSchema.dump(result)
return response_result(ResponseCode.OK)
return response_result(ResponseCode.NOTHING_CHANGE, msg=result[1])
result, message = signalManager.actionPutUser.emit(uuid, data)
return response_result(message, data=result)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
@jwt_required(locations=["headers"])
......@@ -99,10 +95,8 @@ class UserResource(Resource):
json_payload = request.json
print("========>", uuid, json_payload)
# data = deleteUserSchema.load(json_payload)
result = signalManager.actionDeleteUser.emit(uuid)
if result[0] == True:
return response_result(ResponseCode.OK)
return response_result(ResponseCode.REQUEST_ERROR, msg=result[1])
result, message = signalManager.actionDeleteUser.emit(uuid)
return response_result(message, data=result)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
'''
Author: your name
Date: 2021-06-15 17:40:14
LastEditTime: 2021-06-30 17:22:44
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\webcreator\event.py
'''
# -*- coding: utf_8 -*-
############################
# 信号槽
############################
class PySignal(object):
"""
Simple event class used to provide hooks for different types of events in Locust.
......@@ -45,7 +33,7 @@ class PySignal(object):
return self
def fire(self, *args, **kwargs):
return self.emit(*args, **kwargs)
def emit(self, *args, **kwargs):
......
'''
Author: your name
Date: 2021-04-22 18:04:15
LastEditTime: 2021-07-09 00:52:08
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\webcreator\log.py
'''
# -*- coding: utf_8 -*-
############################
# Log
# 日志
############################
import os
import logging
from logging.handlers import RotatingFileHandler
......@@ -34,4 +21,4 @@ ch.setFormatter(formatter)
logger = logging.root
logger.setLevel(logging.DEBUG)
logger.addHandler(fh)
logger.addHandler(ch)
\ No newline at end of file
logger.addHandler(ch)
# -*- coding: utf_8 -*-
############################
# Response
# 响应
############################
'''
请求方法:
OPTION : 用于获取资源支持的所有 HTTP 方法
HEAD : 用于只获取请求某个资源返回的头信息
GET : 用于从服务器获取资源信息
完成请求后返回状态码 200 OK
POST : 用于创建新资源
创建完成后返回状态码 201 Created
PUT : 用于完整的替换资源或者创建指定身份的资源
如果是创建了资源,则返回 201 Created
如果是替换了资源,则返回 200 OK
DELETE : 用于删除某个资源
完成请求后返回状态码 204 No Content
PATCH : 用于局部更新资源
完成请求后返回状态码 200 OK
================================================================================
状态码:
请求成功
200:请求执行成功并返回相应数据
201:创建成功并返回相应资源数据
202:接受请求,但无法立即完成创建行为
204:请求执行成功,不返回相应资源数据
重定向
301:被请求的资源已永久移动到新位置
302:请求的资源现在临时从不通的URI响应请求
303:对应当前请求的响应可以在另一个 URI 上被找到,客户端应该使用 GET 方法进行请求
307:对应当前请求的响应可以在另一个 URI 上被找到,客户端应该保持原有的请求方法进行请求
条件请求
304:资源自从上次请求后没有再次发生变化,主要使用场景在于实现数据缓存
409:请求操作和资源的当前状态存在冲突。主要使用场景在于实现并发控制
412:服务器在验证请求的头字段中给出先决条件时,没能满足其中的一个或多个。主要使用场景在于实现并发控制
客户端错误
400 : 请求体包含语法错误
401 : 需要验证用户身份
403 : 服务器拒绝执行
404 : 找不到目标资源
405 : 不允许执行目标方法,响应中应该带有 Allow 头,内容为对该资源有效的 HTTP 方法
406 : 服务器不支持客户端请求的内容格式
410 : 被请求的资源已被删除
413 : POST 或者 PUT 请求的消息实体过大
415 : 服务器不支持请求中提交的数据的格式
422 : 请求格式正确,但是由于含有语义错误,无法响应
428 : 要求先决条件,如果想要请求能成功必须满足一些预设的条件要求先决条件
服务端错误
500 : 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理
502 : 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应
501 : 服务器不支持当前请求所需要的某个功能
503 : 由于临时的服务器维护或者过载,服务器当前无法处理请求
'''
class ResponseCode(object):
OK = (200, 'ok')
NO_DATA = (204, 'no data')
NOT_FOUND = (404, 'not found')
NOTHING_CHANGE = (304, 'nothing change')
REQUEST_ERROR = (400, 'request error')
AUTHORIZATION_ERROR = (401, 'authentication error')
INVAILD_REQUEST = (403, 'invaild request')
PARAMETER_ERROR = (4001, 'parameter error')
PARAMETER_NULL = (4002, 'parameter is null')
PASSWORD_ERROR = (4003, 'password error')
EXISTS_ERROR = (4004, 'record exists')
INVAILD_ROLE_ERROR = (4005, 'invaild role error')
ACCOUNT_DISABLED = (4006, 'account is disabled')
SERVER_ERROR = (500, 'server error')
DB_ERROR = (5001, 'database error')
UNKNOWN_ERROR = (5003, 'unknown error')
def response_result(code, msg=None, data=None, **kwargs):
if msg is None:
msg = code[1]
result = { 'code': code[0], 'msg': msg, 'data': data }
# 通用状态码
HTTP_SUCCESS = (200, "success")
HTTP_NO_DATA = (204, "no data")
HTTP_NO_CHANGE = (304, 'nothing change')
HTTP_AUTH_FAIL = (401, 'authentication failed')
HTTP_INVAILD_REQUEST = (403, 'invaild request')
HTTP_NOT_FOUND = (404, "not found")
HTTP_SERVER_ERROR = (500, "server error")
# 用户模块
USER_NOT_EXISTS = (1010001, 'user not exists')
USER_EXISTS = (1010002, 'user already exists')
USER_PASSWORD_ERROR = (1010003, 'password error')
def response_result(response, msg=None, data=None, **kwargs):
c, m = response
if msg == None:
msg = m
result = { 'code': c, 'msg': msg, 'data': data }
result.update(kwargs)
return result
\ No newline at end of file
return result
......@@ -13,6 +13,154 @@ from typing import (
Sequence,
)
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import shutil
import time
import re
import os
import json
import functools
import hashlib
import random
import string
import datetime
import threading
import decimal
import urllib
from urllib import parse, request
from urllib.parse import urlparse, urljoin, urlencode
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
return float(o)
super(DecimalEncoder, self).default(o)
def ThreadMaker(f):
def runner(*args, **argv):
t = threading.Thread(target=f, args=args, kwargs=argv)
t.start()
return t
return runner
def copytree(src, dst, symlinks=False, ignore=None):
names = os.listdir(src)
if ignore is not None:
ignored_names = ignore
else:
ignored_names = set()
if not os.path.exists(dst):
os.makedirs(dst)
errors = []
for name in names:
if name in ignored_names:
continue
if re.match(r'.*?.pyc$', name):
continue
srcname = os.path.join(src, name)
dstname = os.path.join(dst, name)
try:
if symlinks and os.path.islink(srcname):
linkto = os.readlink(srcname)
os.symlink(linkto, dstname)
elif os.path.isdir(srcname):
copytree(srcname, dstname, symlinks, ignore)
else:
shutil.copy2(srcname, dstname)
# XXX What about devices, sockets etc.?
except (IOError, os.error) as why:
errors.append((srcname, dstname, str(why)))
# catch the Error from the recursive copytree so that we can
# continue with other files
except Exception as e:
errors.extend(e.args[0])
try:
shutil.copystat(src, dst)
except WindowsError:
# can't copy file access times on Windows
pass
except OSError as why:
errors.extend((src, dst, str(why)))
if errors:
raise Exception(errors)
def timing(f):
@functools.wraps(f)
def inner(*args, **kwargs):
startTime = time.time()
f(*args, **kwargs)
print("[function]: %s [finished in]: %fs" %
(f.__name__, time.time()-startTime))
return inner
def timeToSeconds(t, sep=":"):
if t == "":
t = "0:0:0"
ts = [int(i) for i in t.split(sep)]
return ts[0] * 60 * 60 + ts[1] * 60 + ts[2]
def secondsToTime(seconds, sep=":"):
h = seconds / 3600
m = seconds % 3600 / 60
s = (seconds - h * 3600 - m * 60) % 60
return sep.join([str(i) for i in [h, m, s]])
def md5_encryption(s):
md5 = hashlib.md5("EhuqUkwV".encode("utf-8"))
md5.update(s.encode('utf-8'))
return md5.hexdigest()
def filter_dict(source: dict, rules_list: list):
# 如果source中的词典数量过多,请使用itertools模块的ifilter。 它会返回一个迭代器,而不是立即用整个列表填充系统的内存
result = dict()
# res = [d for d in source.keys() if d in rules_list]
# res = list(filter(lambda d: d in rules_list, source.keys()))
for k in source.keys():
if k in rules_list:
result.update(k, source[k])
return result
def get_location_by_ip(ip):
params = { 'ak': 'aZEAgYG8wKuLd6DS9BmCloGtfnGGkRMn', 'coor': 'bd09ll' }
parameters = urllib.parse.urlencode(params)
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko' }
if ip != '127.0.0.1':
params.update({ 'ip': ip })
parameters = urllib.parse.urlencode(params)
url = 'http://api.map.baidu.com/location/ip'
req = request.Request(url='%s%s%s' % (url, '?', parameters), headers=headers)
ret = request.urlopen(req).read()
jsonData = json.loads(ret)
print("=====>", jsonData)
return jsonData
def sql_filter(sql):
return re.sub(r"[\"\\/*\'=\-#;<>+%$()!@]", "", sql)
def random_string(length=32):
return ''.join(random.sample(string.ascii_letters + string.digits, length))
def get_days_before_datetime(dt, dayAgo):
if not isinstance(dt, datetime.datetime):
dt = datetime.datetime.strptime(dt, "%Y-%m-%d %H:%M:%S")
# 先获得时间数组格式的日期
dayAgo = (dt - datetime.timedelta(days = dayAgo))
# 转换为其他字符串格式
return dayAgo.strftime("%Y-%m-%d %H:%M:%S")
class Klass:
def __init__(self):
pass
......@@ -37,4 +185,7 @@ class ObjectDict(Dict[str, Any]):
if __name__ == "__main__":
d = { 'a': 1, 'b': 2 }
print(dict2obj(d))
\ No newline at end of file
print(dict2obj(d))
print(os.path.abspath(__file__))
print(random_string(7))
This diff is collapsed.
from fs.copy import copy_fs
from jinja2 import Environment, FileSystemLoader
from pprint import pprint
from pathlib import Path
from difflib import Differ, HtmlDiff
from difflib import Differ
import fs
import json
import os
......@@ -10,6 +8,7 @@ import re
import hashlib
import time
import shutil
from jinja2 import Environment, FileSystemLoader
from resources.webcreator import log
'''
......@@ -75,7 +74,37 @@ output_dir = None
events = []
def copyFiles(src_dir, dst_dir):
copy_fs(src_dir, dst_dir)
if not os.path.exists(src_dir):
log.logger.error("%s 目录不存在" % src_dir)
return None
# 复制文件之前需要判断文件是否存在
if not os.path.exists(dst_dir):
os.makedirs(dst_dir)
# root 所指的是当前正在遍历的这个文件夹的本身的地址
# dirs 是一个 list,内容是该文件夹中所有的目录的名字(不包括子目录)
# files 同样是 list, 内容是该文件夹中所有的文件(不包括子目录)
for root, dirs, files in os.walk(src_dir):
save_path = dst_dir
if os.path.basename(root) == "__pycache__":
continue
for file in files:
if file == '__init__.py':
continue
src_file = os.path.join(root, file)
relative_path = os.path.relpath(src_file, src_dir)
if relative_path != file:
save_path = os.path.normpath(os.sep.join([dst_dir, relative_path]))
if not os.path.exists(save_path):
os.makedirs(save_path)
shutil.copy(src_file, save_path)
log.logger.info('copy files finished!')
def handleModuleConfig(config):
# 处理每一项配置文件
......@@ -111,11 +140,13 @@ def handleResources(config):
def handleSignal(config):
# 生成信号槽模块
target_file = os.sep.join(["application", "signal_manager.py"])
handleRender(config, 'signal_manager.tpl', target_file)
if config.get("framework").get("signal").get("regenerate"):
target_file = os.sep.join(["application", "signal_manager.py"])
handleRender(config.get("apis"), 'signal_manager.tpl', target_file)
target_file = os.sep.join(["controllers", "__init__.py"])
handleRender(config, 'signal_manager_init.tpl', target_file)
if config.get("framework").get("controllerInit").get("regenerate"):
target_file = os.sep.join(["controllers", "__init__.py"])
handleRender(config.get("apis"), 'signal_manager_init.tpl', target_file)
def handleModel(config, application):
# 判断是否有model字段,没有直接退出
......@@ -183,11 +214,14 @@ def handleRender(result, tpl, target_file, **kwargs):
def parseConfig(config):
# 解析配置文件
for cfg in config.get("apis"):
if not cfg.get("enable"):
continue
handleModel(cfg, config.get("application"))
handleView(cfg)
handleController(cfg)
# 全局配置
handleResources(config.get("apis"))
handleSignal(config.get("apis"))
handleSignal(config)
handleModules(config.get("modules"))
def readConfig():
......@@ -232,6 +266,7 @@ def run():
input_dir = os.sep.join([os.getcwd(), "resources"])
output_dir = os.sep.join([os.getcwd(), "build_out"])
backup_database()
# 复制文件到输出目录
copyFiles(input_dir, output_dir)
config = readConfig()
parseConfig(config)
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -172,7 +172,7 @@ class FileManager(object):
return result
def selectDisk(self, disk):
def disk(self, disk):
print(disk)
return True
......
'''
Author: your name
Date: 2021-06-15 17:40:06
LastEditTime: 2021-06-30 18:17:48
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\application\__init__.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
......@@ -13,4 +5,4 @@ import sys
sys.path.append("..")
from controllers import initConnect
initConnect()
\ No newline at end of file
initConnect()
......@@ -32,7 +32,7 @@ handle_user_exception = app.handle_user_exception
def expired_token_callback(jwt_header, jwt_payload):
logger.info(jwt_payload)
return jsonify({
'code': 4011,
'code': 401,
'msg': 'token expired',
'data': jwt_header
})
......@@ -41,7 +41,7 @@ def expired_token_callback(jwt_header, jwt_payload):
@jwt.invalid_token_loader
def invalid_token_callback(error): # we have to keep the argument here, since it's passed in by the caller internally
return jsonify({
'code': 4012,
'code': 401,
'msg': 'invalid token',
'data': error
})
......@@ -50,7 +50,7 @@ def invalid_token_callback(error): # we have to keep the argument here, since i
@jwt.unauthorized_loader
def unauthorized_callback(error):
return jsonify({
'code': 4013,
'code': 401,
'msg': 'unauthorized',
'data': error
})
......@@ -60,13 +60,13 @@ def _custom_abort(http_status_code, **kwargs):
自定义abort 400响应数据格式
"""
if http_status_code == 400:
message = kwargs.get('message')
message = kwargs.get('msg')
if isinstance(message, dict):
param, info = list(message.items())[0]
data = '{}:{}!'.format(param, info)
return abort(jsonify(response_result(ResponseCode.PARAMETER_ERROR, data=data)))
return abort(jsonify(response_result(ResponseCode.HTTP_INVAILD_REQUEST, data=data)))
else:
return abort(jsonify(response_result(ResponseCode.PARAMETER_ERROR, data=message)))
return abort(jsonify(response_result(ResponseCode.HTTP_INVAILD_REQUEST, data=message)))
# return { 'code': http_status_code, 'msg': kwargs.get('message') }
return abort(http_status_code)
......
......@@ -3,11 +3,10 @@ import os
import multiprocessing
MODE = 'develop' # develop: 开发模式; production: 生产模式
UPLOAD_ROOT_DIR = os.path.join(os.path.dirname(__file__), 'assets', 'upload')
EXPORT_ROOT_DIR = os.path.join(os.path.dirname(__file__), 'assets', 'export')
UPLOAD_ALLOWED = set(['doc', 'docs', 'csv', 'xls', 'xlsx'])
class ProductionConfig(object):
UPLOAD_ROOT_DIR = "D:\\projects\\scriptiot\\evm_app_store_files"
UPLOAD_ALLOWED = set(['doc', 'docs', 'csv', 'xls', 'xlsx'])
BIND = '127.0.0.1:3000'
WORKERS = multiprocessing.cpu_count() * 2 + 1
WORKER_CONNECTIONS = 10000
......@@ -22,7 +21,7 @@ class ProductionConfig(object):
REDIS_PORT = 6379
REDIS_PASSWORD = ''
REDIS_MAX_CONNECTIONS = 100
JWT_HEADER_NAME = 'Auth'
JWT_HEADER_NAME = 'Authorization'
JWT_HEADER_TYPE = 'Bearer'
JWT_SECRET_KEY = '6UdxRgs2hvWpTLmj027d5vt7dXXQX'
JWT_ACCESS_TOKEN_EXPIRES = 7200
......@@ -44,6 +43,8 @@ class ProductionConfig(object):
class DevelopConfig(object):
UPLOAD_ROOT_DIR = "D:\\projects\\scriptiot\\evm_app_store_files"
UPLOAD_ALLOWED = set(['doc', 'docs', 'csv', 'xls', 'xlsx'])
BIND = '127.0.0.1:3000'
WORKERS = 2
WORKER_CONNECTIONS = 1000
......@@ -58,7 +59,7 @@ class DevelopConfig(object):
REDIS_PORT = 6379
REDIS_PASSWORD = ''
REDIS_MAX_CONNECTIONS = 100
JWT_HEADER_NAME = 'Auth'
JWT_HEADER_NAME = 'Authorization'
JWT_HEADER_TYPE = 'Bearer'
JWT_SECRET_KEY = '6UdxRgs2hvWpTLmj027d5vt7dXXQX'
JWT_ACCESS_TOKEN_EXPIRES = 7200
......
'''
Author: your name
Date: 2021-06-15 17:40:09
LastEditTime: 2021-06-30 18:09:51
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\manager.py
'''
# -*- coding: utf-8 -*-
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
......
'''
Author: your name
Date: 2021-04-22 18:04:10
LastEditTime: 2021-06-30 17:22:15
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\models\__init__.py
'''
# -*- coding: utf-8 -*-
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String
......
'''
Author: your name
Date: 2021-06-15 17:40:14
LastEditTime: 2021-06-30 17:22:44
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\webcreator\event.py
'''
# -*- coding: utf_8 -*-
############################
# 信号槽
############################
class PySignal(object):
"""
Simple event class used to provide hooks for different types of events in Locust.
......@@ -45,7 +33,7 @@ class PySignal(object):
return self
def fire(self, *args, **kwargs):
return self.emit(*args, **kwargs)
def emit(self, *args, **kwargs):
......
'''
Author: your name
Date: 2021-04-22 18:04:15
LastEditTime: 2021-07-09 00:52:08
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\webcreator\log.py
'''
# -*- coding: utf_8 -*-
############################
# Log
# 日志
############################
import os
import logging
from logging.handlers import RotatingFileHandler
......@@ -34,4 +21,4 @@ ch.setFormatter(formatter)
logger = logging.root
logger.setLevel(logging.DEBUG)
logger.addHandler(fh)
logger.addHandler(ch)
\ No newline at end of file
logger.addHandler(ch)
# -*- coding: utf_8 -*-
############################
# Response
# 响应
############################
'''
请求方法:
OPTION : 用于获取资源支持的所有 HTTP 方法
HEAD : 用于只获取请求某个资源返回的头信息
GET : 用于从服务器获取资源信息
完成请求后返回状态码 200 OK
POST : 用于创建新资源
创建完成后返回状态码 201 Created
PUT : 用于完整的替换资源或者创建指定身份的资源
如果是创建了资源,则返回 201 Created
如果是替换了资源,则返回 200 OK
DELETE : 用于删除某个资源
完成请求后返回状态码 204 No Content
PATCH : 用于局部更新资源
完成请求后返回状态码 200 OK
================================================================================
状态码:
请求成功
200:请求执行成功并返回相应数据
201:创建成功并返回相应资源数据
202:接受请求,但无法立即完成创建行为
204:请求执行成功,不返回相应资源数据
重定向
301:被请求的资源已永久移动到新位置
302:请求的资源现在临时从不通的URI响应请求
303:对应当前请求的响应可以在另一个 URI 上被找到,客户端应该使用 GET 方法进行请求
307:对应当前请求的响应可以在另一个 URI 上被找到,客户端应该保持原有的请求方法进行请求
条件请求
304:资源自从上次请求后没有再次发生变化,主要使用场景在于实现数据缓存
409:请求操作和资源的当前状态存在冲突。主要使用场景在于实现并发控制
412:服务器在验证请求的头字段中给出先决条件时,没能满足其中的一个或多个。主要使用场景在于实现并发控制
客户端错误
400 : 请求体包含语法错误
401 : 需要验证用户身份
403 : 服务器拒绝执行
404 : 找不到目标资源
405 : 不允许执行目标方法,响应中应该带有 Allow 头,内容为对该资源有效的 HTTP 方法
406 : 服务器不支持客户端请求的内容格式
410 : 被请求的资源已被删除
413 : POST 或者 PUT 请求的消息实体过大
415 : 服务器不支持请求中提交的数据的格式
422 : 请求格式正确,但是由于含有语义错误,无法响应
428 : 要求先决条件,如果想要请求能成功必须满足一些预设的条件要求先决条件
服务端错误
500 : 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理
502 : 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应
501 : 服务器不支持当前请求所需要的某个功能
503 : 由于临时的服务器维护或者过载,服务器当前无法处理请求
'''
class ResponseCode(object):
OK = (200, 'ok')
NO_DATA = (204, 'no data')
NOT_FOUND = (404, 'not found')
NOTHING_CHANGE = (304, 'nothing change')
REQUEST_ERROR = (400, 'request error')
AUTHORIZATION_ERROR = (401, 'authentication error')
INVAILD_REQUEST = (403, 'invaild request')
PARAMETER_ERROR = (4001, 'parameter error')
PARAMETER_NULL = (4002, 'parameter is null')
PASSWORD_ERROR = (4003, 'password error')
EXISTS_ERROR = (4004, 'record exists')
INVAILD_ROLE_ERROR = (4005, 'invaild role error')
ACCOUNT_DISABLED = (4006, 'account is disabled')
SERVER_ERROR = (500, 'server error')
DB_ERROR = (5001, 'database error')
UNKNOWN_ERROR = (5003, 'unknown error')
def response_result(code, msg=None, data=None, **kwargs):
if msg is None:
msg = code[1]
result = { 'code': code[0], 'msg': msg, 'data': data }
# 通用状态码
HTTP_SUCCESS = (200, "success")
HTTP_NO_DATA = (204, "no data")
HTTP_NO_CHANGE = (304, 'nothing change')
HTTP_AUTH_FAIL = (401, 'authentication failed')
HTTP_INVAILD_REQUEST = (403, 'invaild request')
HTTP_NOT_FOUND = (404, "not found")
HTTP_SERVER_ERROR = (500, "server error")
# 用户模块
USER_NOT_EXISTS = (1010001, 'user not exists')
USER_EXISTS = (1010002, 'user already exists')
USER_PASSWORD_ERROR = (1010003, 'password error')
def response_result(response, msg=None, data=None, **kwargs):
c, m = response
if msg == None:
msg = m
result = { 'code': c, 'msg': msg, 'data': data }
result.update(kwargs)
return result
\ No newline at end of file
return result
......@@ -13,6 +13,136 @@ from typing import (
Sequence,
)
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import shutil
import time
import re
import os
import json
import functools
import hashlib
import random
import string
import datetime
import threading
import decimal
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
return float(o)
super(DecimalEncoder, self).default(o)
def ThreadMaker(f):
def runner(*args, **argv):
t = threading.Thread(target=f, args=args, kwargs=argv)
t.start()
return t
return runner
def copytree(src, dst, symlinks=False, ignore=None):
names = os.listdir(src)
if ignore is not None:
ignored_names = ignore
else:
ignored_names = set()
if not os.path.exists(dst):
os.makedirs(dst)
errors = []
for name in names:
if name in ignored_names:
continue
if re.match(r'.*?.pyc$', name):
continue
srcname = os.path.join(src, name)
dstname = os.path.join(dst, name)
try:
if symlinks and os.path.islink(srcname):
linkto = os.readlink(srcname)
os.symlink(linkto, dstname)
elif os.path.isdir(srcname):
copytree(srcname, dstname, symlinks, ignore)
else:
shutil.copy2(srcname, dstname)
# XXX What about devices, sockets etc.?
except (IOError, os.error) as why:
errors.append((srcname, dstname, str(why)))
# catch the Error from the recursive copytree so that we can
# continue with other files
except Exception as e:
errors.extend(e.args[0])
try:
shutil.copystat(src, dst)
except WindowsError:
# can't copy file access times on Windows
pass
except OSError as why:
errors.extend((src, dst, str(why)))
if errors:
raise Exception(errors)
def timing(f):
@functools.wraps(f)
def inner(*args, **kwargs):
startTime = time.time()
f(*args, **kwargs)
print("[function]: %s [finished in]: %fs" %
(f.__name__, time.time()-startTime))
return inner
def timeToSeconds(t, sep=":"):
if t == "":
t = "0:0:0"
ts = [int(i) for i in t.split(sep)]
return ts[0] * 60 * 60 + ts[1] * 60 + ts[2]
def secondsToTime(seconds, sep=":"):
h = seconds / 3600
m = seconds % 3600 / 60
s = (seconds - h * 3600 - m * 60) % 60
return sep.join([str(i) for i in [h, m, s]])
def md5_salt(s):
md5 = hashlib.md5("EhuqUkwV".encode("utf-8"))
md5.update(s.encode('utf-8'))
return md5.hexdigest()
def filter_dict(source: dict, rules_list: list):
# 如果source中的词典数量过多,请使用itertools模块的ifilter。 它会返回一个迭代器,而不是立即用整个列表填充系统的内存
result = dict()
# res = [d for d in source.keys() if d in rules_list]
# res = list(filter(lambda d: d in rules_list, source.keys()))
for k in source.keys():
if k in rules_list:
result.update(k, source[k])
return result
def sql_filter(sql):
return re.sub(r"[\"\\/*\'=\-#;<>+%$()!@]", "", sql)
def random_string(length=32):
return ''.join(random.sample(string.ascii_letters + string.digits, length))
def get_days_before_datetime(dt, dayAgo):
if not isinstance(dt, datetime.datetime):
dt = datetime.datetime.strptime(dt, "%Y-%m-%d %H:%M:%S")
# 先获得时间数组格式的日期
dayAgo = (dt - datetime.timedelta(days = dayAgo))
# 转换为其他字符串格式
return dayAgo.strftime("%Y-%m-%d %H:%M:%S")
class Klass:
def __init__(self):
pass
......@@ -37,4 +167,7 @@ class ObjectDict(Dict[str, Any]):
if __name__ == "__main__":
d = { 'a': 1, 'b': 2 }
print(dict2obj(d))
\ No newline at end of file
print(dict2obj(d))
print(os.path.abspath(__file__))
print(random_string(7))
\ No newline at end of file
# -*- coding: utf-8 -*-
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import uuid
from datetime import datetime
......@@ -35,4 +36,4 @@ class UuidBaseModel(BaseModel):
class SortBaseModel(BaseModel):
__abstract__ = True
sort = db.Column(db.Integer, default=0)
\ No newline at end of file
sort = db.Column(db.Integer, default=0)
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from datetime import datetime
from application.app import db
from models.{{ config['name'] }} import {{ config['name'] | letterUpper }}Model
from webcreator.log import logger
# from webcreator.response import ResponseCode, response_result
from webcreator.response import ResponseCode
class {{ config['name'] | letterUpper }}Resource(object):
def __init__(self):
......@@ -13,8 +16,8 @@ class {{ config['name'] | letterUpper }}Resource(object):
filters = [{{ config['name'] | letterUpper }}Model.is_delete==False, {{ config['name'] | letterUpper }}Model.uuid==uuid]
result = {{ config['name'] | letterUpper }}Model.query.filter(*filters).first()
if result:
return (True, result)
return (False, result)
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def getList(self, params):
# handle business
......@@ -22,7 +25,9 @@ class {{ config['name'] | letterUpper }}Resource(object):
filters = [{{ config['name'] | letterUpper }}Model.is_delete==False]
result = {{ config['name'] | letterUpper }}Model.query.filter(*filters).order_by({{ config['name'] | letterUpper }}Model.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
return (True, result.items, result.total)
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def post(self, params, jwt={}):
# handle business
......@@ -32,20 +37,20 @@ class {{ config['name'] | letterUpper }}Resource(object):
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return (True, None)
return True, ResponseCode.HTTP_SUCCESS
elif result and result.is_delete == False:
return (False, "record code exists")
return False, ResponseCode.HTTP_INVAILD_REQUEST
result = {{ config['name'] | letterUpper }}Model(**params)
db.session.add(result)
db.session.commit()
return (True, None)
return True, ResponseCode.HTTP_SUCCESS
def put(self, uuid, params, jwt={}):
# handle business
result = {{ config['name'] | letterUpper }}Model.query.filter({{ config['name'] | letterUpper }}Model.uuid==uuid).first()
if not result:
return (False, "record not exists")
return None, ResponseCode.HTTP_NOT_FOUND
if params:
for key, value in params.items():
......@@ -53,21 +58,21 @@ class {{ config['name'] | letterUpper }}Resource(object):
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return (True, None)
return True, ResponseCode.HTTP_SUCCESS
else:
return (False, "params is null")
return False, ResponseCode.HTTP_INVAILD_REQUEST
def delete(self, uuid, jwt={}):
# handle business
result = {{ config['name'] | letterUpper }}Model.query.filter({{ config['name'] | letterUpper }}Model.uuid==uuid).first()
if not result:
return (False, "record not exists")
return False, ResponseCode.HTTP_NOT_FOUND
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
result.is_delete = True
db.session.delete(result)
db.session.commit()
return (True, None)
return True, ResponseCode.HTTP_SUCCESS
{{ config["name"] }}Manager = {{ config['name'] | letterUpper }}Resource()
\ No newline at end of file
{{ config["name"] }}Manager = {{ config['name'] | letterUpper }}Resource()
# -*- coding: utf-8 -*-
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from application.app import db, ma
from .base import PrimaryModel
......@@ -7,14 +8,14 @@ from marshmallow import Schema, fields, INCLUDE, EXCLUDE
{%- endif %}
class {{ config['name'] | letterUpper }}Model(PrimaryModel):
__tablename__ = '{{ application["tablePrefix"] }}{{ config['name'] }}'
__tablename__ = {% if config.get("model").get("tableName", None) != None %}'{{ config.get("model").get("tableName") }}'{% else %}'{{ application["tablePrefix"] }}{{ config['name'] }}'{% endif %}
{% for value in config['model']['fields'] %}
{%- if value.get('primaryKey', None) %}
{{ value.get('name') }} = db.Column(db.{{ value.get('dataType') }}, primary_key = True)
{%- elif value.get('dataType') == "Int" or value.get('dataType') == "Integer" %}
{{ value.get('name') }} = db.Column(db.{{ value.get('dataType') }}{% if value.get("length", None) %}{% endif %}{% if value.get("index", False) %}, index = True{% endif %}{% if value.get("required", False) %}, nullable = False{% else %}, nullable = True{% endif %}{% if value.get("default", None) %}, default = {{value.get("default")}}{% endif %})
{{ value.get('name') }} = db.Column(db.{{ value.get('dataType') }}{% if value.get("length", None) %}{% endif %}{% if value.get("index", False) %}, index = True{% endif %}{% if value.get("required", False) %}, nullable = False{% else %}, nullable = True{% endif %}{% if value.get("default", None) != None %}, default = {{value.get("default")}}{% endif %})
{%- else %}
{{ value.get('name') }} = db.Column(db.{{ value.get('dataType') }}{% if value.get("length", None) %}({{value.get("length")}}){% endif %}{% if value.get("index", False) %}, index = True{% endif %}{% if value.get("required", False) %}, nullable = False{% else %}, nullable = True{% endif %}{% if value.get("default", None) %}, default = {{value.get("default")}}{% endif %})
{{ value.get('name') }} = db.Column(db.{{ value.get('dataType') }}{% if value.get("length", None) %}({{value.get("length")}}){% endif %}{% if value.get("index", False) %}, index = True{% endif %}{% if value.get("required", False) %}, nullable = False{% else %}, nullable = True{% endif %}{% if value.get("default", None) != None %}, default = {{value.get("default")}}{% endif %})
{%- endif %}
{%- endfor %}
......@@ -22,7 +23,7 @@ class {{ config['name'] | letterUpper }}Model(PrimaryModel):
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self{% for value in config['model']['fields'] %}, {{ value.get("name") }}{% endfor %}):
def __init__(self{% for value in config['model']['fields'] %}, {% if value.get("default", None) != None %}{{ value.get("name") }}={{ value.get("default") }}{% else %}{{ value.get("name") }}{% endif %}{% endfor %}):
{%- for value in config['model']['fields'] %}
self.{{ value.get("name") }} = {{ value.get("name") }}
{%- endfor %}
......@@ -48,8 +49,8 @@ class {{ key | letterUpper }}{{ config['name'] | letterUpper }}Schema(ma.SQLAlch
{%- if config['model']['foreignKey'] %}
include_fk = {{ config['model']['foreignKey'] }}
{% endif %}
{#
这里需要判断下,如果是数据库表的字段,则使用auto_field(),否则应该使用json配置中的字段信息
{#
这里需要判断下,如果是数据库表的字段,则使用auto_field(),否则应该使用json配置中的字段信息
class BandMembersSchema(Schema):
# missing用来指定反序列化时默认缺省值,default用来指定序列化时默认缺省值
......@@ -82,4 +83,4 @@ class {{ key | letterUpper }}{{ config['name'] | letterUpper }}Schema(ma.SQLAlch
{%- if key == "getList" %}
{{ key }}{{ config['name'] | letterUpper }}sSchema = {{ key | letterUpper }}{{ config['name'] | letterUpper }}Schema(many=True)
{%- endif %}
{% endfor %}
\ No newline at end of file
{% endfor %}
# -*- coding: utf-8 -*-
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from flask import Blueprint
from flask_restful import Api
......
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from flask import current_app, jsonify, request
from flask_restful import Resource
from flask_restful.reqparse import RequestParser
......@@ -30,16 +33,16 @@ class {{ config['name'] | letterUpper }}ResourceList(Resource):
json_payload = request.json
logger.warn(json_payload)
data = getList{{ config['name'] | letterUpper }}Schema.load(json_payload)
result = signalManager.actionGetList{{ config["name"] | letterUpper }}.emit(data)
result, message = signalManager.actionGetList{{ config["name"] | letterUpper }}.emit(data)
json_dumps = getList{{ config['name'] | letterUpper }}Schema.dump(result)
if result[0]:
json_dumps = getList{{ config['name'] | letterUpper }}sSchema.dump(result[1])
if result:
json_dumps = getList{{ config['name'] | letterUpper }}sSchema.dump(result.items)
logger.warn(json_dumps)
return response_result(ResponseCode.OK, data=json_dumps, count=result[2])
return response_result(ResponseCode.REQUEST_ERROR)
return response_result(message, data=json_dumps, count=result.total)
return response_result(message)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
{%- endif %}
{%- if config["view"]["post"] %}
......@@ -50,15 +53,13 @@ class {{ config['name'] | letterUpper }}ResourceList(Resource):
try:
json_payload = request.json
data = post{{ config['name'] | letterUpper }}Schema.load(json_payload)
result = signalManager.actionPost{{ config["name"] | letterUpper }}.emit(data)
if result[0] == False:
# json_dumps = post{{ config["name"] | letterUpper }}Schema.dump(result)
return response_result(ResponseCode.REQUEST_ERROR, msg=result[1])
logger.warn(result)
return response_result(ResponseCode.OK)
result, message = signalManager.actionPost{{ config["name"] | letterUpper }}.emit(data)
logger.info(result)
logger.warn(message)
return response_result(message)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
{% endif %}
class {{ config['name'] | letterUpper }}Resource(Resource):
......@@ -81,14 +82,14 @@ class {{ config['name'] | letterUpper }}Resource(Resource):
json_payload = request.json
print("========>", uuid, json_payload)
data = get{{ config['name'] | letterUpper }}Schema.load(json_payload)
result = signalManager.actionGet{{ config["name"] | letterUpper }}.emit(uuid, data)
if result[0]:
json_dumps = get{{ config['name'] | letterUpper }}Schema.dump(result[1])
return response_result(ResponseCode.OK, data=json_dumps)
return response_result(ResponseCode.NO_DATA)
result, message = signalManager.actionGet{{ config["name"] | letterUpper }}.emit(uuid, data)
if result:
json_dumps = get{{ config['name'] | letterUpper }}Schema.dump(result)
return response_result(message, data=json_dumps)
return response_result(message)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
{% endif %}
{%- if config["view"]["put"] %}
......@@ -100,14 +101,13 @@ class {{ config['name'] | letterUpper }}Resource(Resource):
json_payload = request.json
print("========>", uuid, json_payload)
data = put{{ config['name'] | letterUpper }}Schema.load(json_payload)
result = signalManager.actionPut{{ config["name"] | letterUpper }}.emit(uuid, data)
if result[0] == True:
# json_dumps = put{{ config['name'] | letterUpper }}Schema.dump(result)
return response_result(ResponseCode.OK)
return response_result(ResponseCode.NOTHING_CHANGE, msg=result[1])
result, message = signalManager.actionPut{{ config["name"] | letterUpper }}.emit(uuid, data)
logger.info(result)
logger.info(message)
return response_result(message, data=result)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
{% endif %}
{%- if config["view"]["delete"] %}
......@@ -119,11 +119,9 @@ class {{ config['name'] | letterUpper }}Resource(Resource):
json_payload = request.json
print("========>", uuid, json_payload)
# data = delete{{ config['name'] | letterUpper }}Schema.load(json_payload)
result = signalManager.actionDelete{{ config["name"] | letterUpper }}.emit(uuid)
if result[0] == True:
return response_result(ResponseCode.OK)
return response_result(ResponseCode.REQUEST_ERROR, msg=result[1])
result, message = signalManager.actionDelete{{ config["name"] | letterUpper }}.emit(uuid)
return response_result(message, data=result)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
{% endif %}
\ No newline at end of file
return response_result(ResponseCode.HTTP_SERVER_ERROR)
{% endif %}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment