test
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
VERSION="4.0.0"
|
VERSION="4.0.0"
|
||||||
from support import d
|
from support import d
|
||||||
|
|
||||||
from .init_main import Framework
|
from .init_main import Framework
|
||||||
|
|
||||||
frame = Framework.get_instance()
|
frame = Framework.get_instance()
|
||||||
F = frame
|
F = frame
|
||||||
logger = frame.logger
|
logger = frame.logger
|
||||||
@@ -13,11 +15,13 @@ path_app_root = frame.path_app_root
|
|||||||
path_data = frame.path_data
|
path_data = frame.path_data
|
||||||
get_logger = frame.get_logger
|
get_logger = frame.get_logger
|
||||||
|
|
||||||
from .init_declare import check_api, User
|
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
|
|
||||||
|
from .init_declare import User, check_api
|
||||||
from .scheduler import Job
|
from .scheduler import Job
|
||||||
|
|
||||||
frame.initialize_system()
|
frame.initialize_system()
|
||||||
from system.setup import SystemModelSetting
|
from system.setup import SystemModelSetting
|
||||||
|
|
||||||
frame.initialize_plugin()
|
frame.initialize_plugin()
|
||||||
|
|
||||||
@@ -1,12 +1,13 @@
|
|||||||
from flask import request, abort
|
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from flask import request
|
|
||||||
|
from flask import abort, request
|
||||||
|
|
||||||
|
|
||||||
def check_api(original_function):
|
def check_api(original_function):
|
||||||
@wraps(original_function)
|
@wraps(original_function)
|
||||||
def wrapper_function(*args, **kwargs): #1
|
def wrapper_function(*args, **kwargs): #1
|
||||||
from framework import F
|
from framework import F
|
||||||
|
|
||||||
#logger.debug('CHECK API... {} '.format(original_function.__module__))
|
#logger.debug('CHECK API... {} '.format(original_function.__module__))
|
||||||
#logger.warning(request.url)
|
#logger.warning(request.url)
|
||||||
#logger.warning(request.form)
|
#logger.warning(request.form)
|
||||||
@@ -31,6 +32,8 @@ def check_api(original_function):
|
|||||||
|
|
||||||
# Suuport를 logger 생성전에 쓰지 않기 위해 중복 선언
|
# Suuport를 logger 생성전에 쓰지 않기 위해 중복 선언
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
|
||||||
class CustomFormatter(logging.Formatter):
|
class CustomFormatter(logging.Formatter):
|
||||||
"""Logging Formatter to add colors and count warning / errors"""
|
"""Logging Formatter to add colors and count warning / errors"""
|
||||||
|
|
||||||
@@ -61,8 +64,8 @@ class CustomFormatter(logging.Formatter):
|
|||||||
# Suuport를 logger 생성전에 쓰지 않기 위해 중복 선언
|
# Suuport를 logger 생성전에 쓰지 않기 위해 중복 선언
|
||||||
def read_yaml(filepath):
|
def read_yaml(filepath):
|
||||||
import yaml
|
import yaml
|
||||||
#with open(filepath, encoding='utf8') as file:
|
with open(filepath, encoding='utf8') as file:
|
||||||
with open(filepath, 'rb') as file:
|
#with open(filepath, 'rb') as file:
|
||||||
data = yaml.load(file, Loader=yaml.FullLoader)
|
data = yaml.load(file, Loader=yaml.FullLoader)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,23 @@
|
|||||||
import os, sys, traceback, time, logging, logging.handlers, shutil, platform
|
import logging
|
||||||
|
import logging.handlers
|
||||||
|
import os
|
||||||
|
import platform
|
||||||
|
import shutil
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import traceback
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from pytz import timezone, utc
|
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
from flask_sqlalchemy import SQLAlchemy
|
|
||||||
from flask_socketio import SocketIO
|
|
||||||
from flask_cors import CORS
|
from flask_cors import CORS
|
||||||
from flaskext.markdown import Markdown
|
|
||||||
from flask_login import LoginManager, login_required
|
from flask_login import LoginManager, login_required
|
||||||
|
from flask_socketio import SocketIO
|
||||||
|
from flask_sqlalchemy import SQLAlchemy
|
||||||
|
from flaskext.markdown import Markdown
|
||||||
|
from pytz import timezone, utc
|
||||||
|
|
||||||
|
from .init_declare import CustomFormatter, check_api
|
||||||
|
|
||||||
from .init_declare import check_api, CustomFormatter
|
|
||||||
|
|
||||||
class Framework:
|
class Framework:
|
||||||
__instance = None
|
__instance = None
|
||||||
@@ -63,7 +71,7 @@ class Framework:
|
|||||||
self.db = SQLAlchemy(self.app, session_options={"autoflush": False})
|
self.db = SQLAlchemy(self.app, session_options={"autoflush": False})
|
||||||
|
|
||||||
if True or self.config['run_flask']:
|
if True or self.config['run_flask']:
|
||||||
from .scheduler import Scheduler, Job
|
from .scheduler import Job, Scheduler
|
||||||
self.scheduler = Scheduler(self)
|
self.scheduler = Scheduler(self)
|
||||||
self.Job = Job
|
self.Job = Job
|
||||||
|
|
||||||
@@ -85,6 +93,7 @@ class Framework:
|
|||||||
def __init_celery(self):
|
def __init_celery(self):
|
||||||
try:
|
try:
|
||||||
from celery import Celery
|
from celery import Celery
|
||||||
|
|
||||||
#if frame.config['use_celery'] == False or platform.system() == 'Windows':
|
#if frame.config['use_celery'] == False or platform.system() == 'Windows':
|
||||||
if self.config['use_celery'] == False:
|
if self.config['use_celery'] == False:
|
||||||
raise Exception('no celery')
|
raise Exception('no celery')
|
||||||
@@ -106,6 +115,7 @@ class Framework:
|
|||||||
from celery import bootsteps
|
from celery import bootsteps
|
||||||
#from celery.bin.base import CeleryOption
|
#from celery.bin.base import CeleryOption
|
||||||
from click import Option
|
from click import Option
|
||||||
|
|
||||||
#from celery.bin import Option # 4.3.0
|
#from celery.bin import Option # 4.3.0
|
||||||
celery.user_options['worker'].add(
|
celery.user_options['worker'].add(
|
||||||
Option(('--config_filepath',), help='')
|
Option(('--config_filepath',), help='')
|
||||||
@@ -154,6 +164,7 @@ class Framework:
|
|||||||
|
|
||||||
def initialize_plugin(self):
|
def initialize_plugin(self):
|
||||||
from system.setup import P as SP
|
from system.setup import P as SP
|
||||||
|
|
||||||
from .init_web import jinja_initialize
|
from .init_web import jinja_initialize
|
||||||
jinja_initialize(self.app)
|
jinja_initialize(self.app)
|
||||||
|
|
||||||
@@ -173,8 +184,7 @@ class Framework:
|
|||||||
if self.config.get('port') == None:
|
if self.config.get('port') == None:
|
||||||
self.config['port'] = SP.SystemModelSetting.get_int('port')
|
self.config['port'] = SP.SystemModelSetting.get_int('port')
|
||||||
|
|
||||||
from . import log_viewer
|
from . import init_route, log_viewer
|
||||||
from . import init_route
|
|
||||||
|
|
||||||
self.__make_default_logger()
|
self.__make_default_logger()
|
||||||
self.logger.info('### LAST')
|
self.logger.info('### LAST')
|
||||||
@@ -187,6 +197,7 @@ class Framework:
|
|||||||
if self.config['run_flask'] and self.config.get('use_celery') == True:
|
if self.config['run_flask'] and self.config.get('use_celery') == True:
|
||||||
try:
|
try:
|
||||||
from gevent import monkey
|
from gevent import monkey
|
||||||
|
|
||||||
#from gevent import monkey;monkey.patch_all()
|
#from gevent import monkey;monkey.patch_all()
|
||||||
#print('[MAIN] gevent mokey patch!!')
|
#print('[MAIN] gevent mokey patch!!')
|
||||||
#sys.getfilesystemencoding = lambda: 'UTF-8'
|
#sys.getfilesystemencoding = lambda: 'UTF-8'
|
||||||
@@ -263,6 +274,7 @@ class Framework:
|
|||||||
|
|
||||||
def __load_config(self):
|
def __load_config(self):
|
||||||
from .init_declare import read_yaml
|
from .init_declare import read_yaml
|
||||||
|
|
||||||
#if self.config['run_flask']:
|
#if self.config['run_flask']:
|
||||||
if self.config['arg_config'] == '.':
|
if self.config['arg_config'] == '.':
|
||||||
#self.config['config_filepath'] = os.path.join(self.path_app_root, 'config.yaml')
|
#self.config['config_filepath'] = os.path.join(self.path_app_root, 'config.yaml')
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
import os, sys, traceback, threading, platform
|
import os
|
||||||
from framework import F, d
|
import sys
|
||||||
|
import threading
|
||||||
|
import traceback
|
||||||
|
|
||||||
|
from framework import F
|
||||||
|
|
||||||
|
|
||||||
class PluginManager:
|
class PluginManager:
|
||||||
plugin_list = {}
|
plugin_list = {}
|
||||||
|
|||||||
@@ -1,15 +1,9 @@
|
|||||||
import json
|
|
||||||
import os
|
import os
|
||||||
import sys
|
|
||||||
import traceback
|
import traceback
|
||||||
from datetime import datetime, timedelta
|
|
||||||
|
|
||||||
import system
|
from flask import jsonify, redirect, request, send_from_directory
|
||||||
from flask import (Response, jsonify, redirect, render_template, request,
|
from flask_login import login_required
|
||||||
send_from_directory)
|
|
||||||
from flask_login import current_user, login_required, login_user, logout_user
|
|
||||||
|
|
||||||
# sjva 공용
|
|
||||||
from framework import VERSION, F
|
from framework import VERSION, F
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import re
|
import re
|
||||||
from flask_login import current_user
|
|
||||||
from framework import F
|
from framework import F
|
||||||
|
|
||||||
|
|
||||||
def get_menu(full_query):
|
def get_menu(full_query):
|
||||||
match = re.compile(r'\/(?P<menu>.*?)\/manual\/(?P<sub2>.*?)($|\?)').match(full_query)
|
match = re.compile(r'\/(?P<menu>.*?)\/manual\/(?P<sub2>.*?)($|\?)').match(full_query)
|
||||||
if match:
|
if match:
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
import os, traceback, time, threading
|
import os
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
import traceback
|
||||||
|
|
||||||
from flask import request
|
from flask import request
|
||||||
from framework import F
|
|
||||||
from support.base.util import SingletonClass
|
from support.base.util import SingletonClass
|
||||||
|
|
||||||
|
from framework import F
|
||||||
|
|
||||||
namespace = 'log'
|
namespace = 'log'
|
||||||
|
|
||||||
@F.socketio.on('connect', namespace='/%s' % namespace)
|
@F.socketio.on('connect', namespace='/%s' % namespace)
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
|
import threading
|
||||||
import traceback
|
import traceback
|
||||||
from pytz import timezone
|
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from random import randint
|
from random import randint
|
||||||
|
|
||||||
from apscheduler.jobstores.base import JobLookupError
|
from apscheduler.jobstores.base import JobLookupError
|
||||||
from apscheduler.triggers.cron import CronTrigger
|
from apscheduler.triggers.cron import CronTrigger
|
||||||
import traceback, threading
|
|
||||||
from datetime import datetime
|
|
||||||
from pytz import timezone
|
from pytz import timezone
|
||||||
from random import randint
|
|
||||||
from support.base.util import pt
|
from support.base.util import pt
|
||||||
|
|
||||||
|
|
||||||
class Scheduler(object):
|
class Scheduler(object):
|
||||||
job_list = []
|
job_list = []
|
||||||
first_run_check_thread = None
|
first_run_check_thread = None
|
||||||
|
|||||||
@@ -1,18 +1,9 @@
|
|||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
#########################################################
|
|
||||||
# python
|
|
||||||
import os
|
import os
|
||||||
import json
|
|
||||||
import traceback
|
import traceback
|
||||||
import platform
|
|
||||||
import subprocess
|
|
||||||
# third-party
|
|
||||||
from sqlalchemy.ext.declarative import DeclarativeMeta
|
|
||||||
# sjva 공용
|
|
||||||
from framework import app, logger
|
|
||||||
|
|
||||||
#########################################################
|
from framework import F
|
||||||
|
|
||||||
|
|
||||||
class Util(object):
|
class Util(object):
|
||||||
|
|
||||||
@@ -52,11 +43,11 @@ class Util(object):
|
|||||||
paging['next_page'] = False
|
paging['next_page'] = False
|
||||||
paging['current_page'] = current_page
|
paging['current_page'] = current_page
|
||||||
paging['count'] = count
|
paging['count'] = count
|
||||||
logger.debug('paging : c:%s %s %s %s %s %s', count, paging['total_page'], paging['prev_page'], paging['next_page'] , paging['start_page'], paging['last_page'])
|
F.logger.debug('paging : c:%s %s %s %s %s %s', count, paging['total_page'], paging['prev_page'], paging['next_page'] , paging['start_page'], paging['last_page'])
|
||||||
return paging
|
return paging
|
||||||
except Exception as exception:
|
except Exception as exception:
|
||||||
logger.debug('Exception:%s', exception)
|
F.logger.debug('Exception:%s', exception)
|
||||||
logger.debug(traceback.format_exc())
|
F.logger.debug(traceback.format_exc())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -95,8 +86,8 @@ class Util(object):
|
|||||||
ret['max_size'] = max_size
|
ret['max_size'] = max_size
|
||||||
return ret
|
return ret
|
||||||
except Exception as exception:
|
except Exception as exception:
|
||||||
logger.error('Exception:%s', exception)
|
F.logger.error('Exception:%s', exception)
|
||||||
logger.error(traceback.format_exc())
|
F.logger.error(traceback.format_exc())
|
||||||
|
|
||||||
|
|
||||||
# 압축할 폴더 경로를 인자로 받음. 폴더명.zip 생성
|
# 압축할 폴더 경로를 인자로 받음. 폴더명.zip 생성
|
||||||
@@ -116,8 +107,8 @@ class Util(object):
|
|||||||
shutil.rmtree(zip_path)
|
shutil.rmtree(zip_path)
|
||||||
return True
|
return True
|
||||||
except Exception as exception:
|
except Exception as exception:
|
||||||
logger.error('Exception:%s', exception)
|
F.logger.error('Exception:%s', exception)
|
||||||
logger.error(traceback.format_exc())
|
F.logger.error(traceback.format_exc())
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
from .setup import *
|
|
||||||
import platform
|
import platform
|
||||||
|
|
||||||
from support.base.util import SupportUtil
|
from support.base.util import SupportUtil
|
||||||
|
|
||||||
|
from .setup import *
|
||||||
|
|
||||||
name = 'home'
|
name = 'home'
|
||||||
|
|
||||||
class ModuleHome(PluginModuleBase):
|
class ModuleHome(PluginModuleBase):
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
import random, string
|
from flask_login import current_user, login_user, logout_user
|
||||||
|
|
||||||
from .setup import *
|
from .setup import *
|
||||||
from flask_login import login_user, current_user, logout_user
|
|
||||||
|
|
||||||
name = 'route'
|
name = 'route'
|
||||||
|
|
||||||
|
|
||||||
class ModuleRoute(PluginModuleBase):
|
class ModuleRoute(PluginModuleBase):
|
||||||
def __init__(self, P):
|
def __init__(self, P):
|
||||||
super(ModuleRoute, self).__init__(P, name=name)
|
super(ModuleRoute, self).__init__(P, name=name)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import random, string
|
import random
|
||||||
|
import string
|
||||||
|
|
||||||
from .setup import *
|
from .setup import *
|
||||||
|
|
||||||
|
|||||||
@@ -50,9 +50,9 @@ try:
|
|||||||
P = create_plugin_instance(setting)
|
P = create_plugin_instance(setting)
|
||||||
|
|
||||||
SystemModelSetting = P.ModelSetting
|
SystemModelSetting = P.ModelSetting
|
||||||
from .mod_setting import ModuleSetting
|
|
||||||
from .mod_home import ModuleHome
|
from .mod_home import ModuleHome
|
||||||
from .mod_route import ModuleRoute
|
from .mod_route import ModuleRoute
|
||||||
|
from .mod_setting import ModuleSetting
|
||||||
|
|
||||||
P.set_module_list([ModuleSetting, ModuleHome, ModuleRoute])
|
P.set_module_list([ModuleSetting, ModuleHome, ModuleRoute])
|
||||||
|
|
||||||
|
|||||||
4
main.py
4
main.py
@@ -3,8 +3,10 @@
|
|||||||
print('[MAIN] gevent mokey patch!!')
|
print('[MAIN] gevent mokey patch!!')
|
||||||
except:
|
except:
|
||||||
print('[MAIN] gevent not installed!!')
|
print('[MAIN] gevent not installed!!')
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import traceback
|
||||||
|
|
||||||
import os, sys, traceback
|
|
||||||
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'lib'))
|
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'lib'))
|
||||||
sys.path.insert(1, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'lib2'))
|
sys.path.insert(1, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'lib2'))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user