test
This commit is contained in:
1
__init__.py
Normal file
1
__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import main
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
# 윈도우의 경우 폴더 구분 기호 \ 를 두개 사용
|
# 윈도우의 경우 폴더 구분 기호 \ 를 두개 사용
|
||||||
# 예) data_folder: "C:\\work\\data"
|
# 예) data_folder: "C:\\work\\data"
|
||||||
# 현재 폴더인 경우 .
|
# 현재 폴더인 경우 .
|
||||||
path_data: "C:\\work\\FlaskFarm\\working"
|
path_data: "."
|
||||||
#path_data: "/mnt/c/work/FlaskFarm/working"
|
#path_data: "/mnt/c/work/FlaskFarm/working"
|
||||||
|
|
||||||
# gevent 사용여부
|
# gevent 사용여부
|
||||||
@@ -26,23 +26,20 @@ port: 9999
|
|||||||
|
|
||||||
# 소스 수정시 재로딩
|
# 소스 수정시 재로딩
|
||||||
# 두번 로딩되는 것을 감안하여 코딩해야 함. 기본실행, subporcess 실행
|
# 두번 로딩되는 것을 감안하여 코딩해야 함. 기본실행, subporcess 실행
|
||||||
# 기본적으로 main.py 하위 파일의 변경만 감시
|
debug: false
|
||||||
debug: true
|
|
||||||
|
|
||||||
use_reloader: true
|
use_reloader: false
|
||||||
|
|
||||||
# 플러그인 업데이트 여부
|
# 플러그인 업데이트 여부
|
||||||
# - true인 경우 로딩시 플러그인을 업데이트 함.
|
# - true인 경우 로딩시 플러그인을 업데이트 함.
|
||||||
# 데이터폴더/plugins 폴더 안에 플러그인 만을 대상으로 함.
|
# 데이터폴더/plugins 폴더 안에 플러그인 만을 대상으로 함.
|
||||||
# - debug 값이 true인 경우에는 항상 false
|
# - debug 값이 true인 경우에는 항상 false
|
||||||
plugin_update: false
|
plugin_update: true
|
||||||
|
|
||||||
# url subpath
|
|
||||||
url_prefix: "/sf"
|
|
||||||
|
|
||||||
# running_type
|
# running_type
|
||||||
# termux, entware 인 경우 입력 함. (이외 사용하는 값 native, docker)
|
# termux, entware 인 경우 입력 함. (이외 사용하는 값 native, docker)
|
||||||
running_type: "native"
|
#running_type: "native"
|
||||||
|
|
||||||
|
|
||||||
# 개발용 폴더만 로딩할 경우 사용
|
# 개발용 폴더만 로딩할 경우 사용
|
||||||
@@ -56,6 +53,5 @@ running_type: "native"
|
|||||||
|
|
||||||
|
|
||||||
# 로딩 제외할 플러그인 package 명
|
# 로딩 제외할 플러그인 package 명
|
||||||
plugin_except_list: ['terminal', 'membership']
|
#plugin_except_list: ['terminal', 'membership']
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
216
files/memo.txt
216
files/memo.txt
@@ -1,216 +0,0 @@
|
|||||||
"env": {
|
|
||||||
"GEVENT_SUPPORT": "True",
|
|
||||||
"use_coverage": "False"
|
|
||||||
},
|
|
||||||
|
|
||||||
"cwd": "${workspaceFolder}\\..\\working",
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
플로그인 보안
|
|
||||||
|
|
||||||
|
|
||||||
secure_member
|
|
||||||
|
|
||||||
|
|
||||||
secure 접미사가 붙은 플러그인은
|
|
||||||
사용자가 임의로 변경하는 것을 방지하기 위해
|
|
||||||
파일크기를 비교한다.
|
|
||||||
|
|
||||||
무조건 git update를 한다
|
|
||||||
git이 없다면 로딩하지 않음
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
코드에서 url 통신하여 인증한다.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
"name": "Python: Celery",
|
|
||||||
"type": "python",
|
|
||||||
"request": "launch",
|
|
||||||
"module": "celery",
|
|
||||||
"console": "integratedTerminal",
|
|
||||||
"args": [
|
|
||||||
"-A",
|
|
||||||
"main.celery",
|
|
||||||
"worker",
|
|
||||||
"-l",
|
|
||||||
"info",
|
|
||||||
"-P",
|
|
||||||
"gevent",
|
|
||||||
|
|
||||||
|
|
||||||
celery -A main.celery worker -l info -P gevent --user_option
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 기존 소스에서 이름만 변경
|
|
||||||
// get_formdata => getFormdata
|
|
||||||
|
|
||||||
m_modal => showModal
|
|
||||||
|
|
||||||
use_collapse = > useCollapse
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
jQuery로 id 접근시 $(“#id”),
|
|
||||||
ex) $(“#header_area”)
|
|
||||||
class로 접근시 $(“.class”),
|
|
||||||
ex) $(“.section_nav”)
|
|
||||||
name으로 접근시 $(tag_name[name=name]),
|
|
||||||
ex) $(“input[name=search_value]“)
|
|
||||||
|
|
||||||
|
|
||||||
$("input:checkbox[id='ID']").is(":checked") == true : false /* by ID */
|
|
||||||
$("input:checkbox[name='NAME']").is(":checked") == true : false /* by NAME */
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## FlaskFarm과 SJVA용 플러그인과 차이점
|
|
||||||
|
|
||||||
- Visual Studio Code 에서 디버깅이 가능하다.
|
|
||||||
개별 플러그인 뿐만 아니라 Framework와 celery task도 Breakpoint 설정하여 디버깅이 가능하다.
|
|
||||||
|
|
||||||
- flask 디버그 모드를 지원한다. 코드 변경시 자동으로 다시 로딩되며, 로딩시간 단축을 위해 로딩 플러그인 목록을 지정할 수 있다.
|
|
||||||
|
|
||||||
- config.yaml 파일을 사용한다. 실행시 파일 위치를 지정할 수 있고 파일 내용 중 데이터 폴더 위치 및 port를 지정할 수 있다. 이를 활용해서 같은 소스지만 운영용으로 구동하면서 다른 config.yaml 파일을 사용하여 개발이 가능하다.
|
|
||||||
TODO: celery 실행시 파일지정
|
|
||||||
|
|
||||||
- info.json 대신 info.yaml을 사용한다.
|
|
||||||
info.yaml은 자동으로 생성되지 않기 때문에 수동으로 변경한다.
|
|
||||||
|
|
||||||
- UI가 전혀 없는 라이브러리 플러그인의 경우 info.yaml 이 없으면 플러그인 목록에 나타나지 않는다. 가능한 info.yaml 파일을 작성하여 FF에서 사용하는 것을 명시한다. pip 로 설치하지 않는 package 폴더도 플러그인에 폴더에 넣어서 import 하여 사용할 수는 있지만 같은 이유로 플러그인 목록에는 나타나지 않는다.
|
|
||||||
|
|
||||||
- __init__.py 를 사용하지 않는다.
|
|
||||||
package를 CLI 환경에서 사용할 경우 __init__.py에 플랫폼 관련 함수를 import 함으로서 플러그인 전용으로만 사용해야 했지만, FF에서는 setup.py 파일을 직접 import하기 때문에 플러그인용, 일반 CLI용 겸용으로 사용 가능하다.
|
|
||||||
|
|
||||||
- 메뉴 구성이 변경되었고, plugin 패키지 클래스, 함수명이 변경되었다.
|
|
||||||
|
|
||||||
- blueprint, db 파일 설정 등 이전에 복붙하였던 코드는 framework에서 처리한다.
|
|
||||||
|
|
||||||
- framework에 연동되는 부분만 변경되었고 기본적인 flow는 거의 같다.
|
|
||||||
|
|
||||||
- logic, sub, sub2 등등 애매한 단어 개념이 변경되었다.
|
|
||||||
Plugin - Module - Page 단위이며 v4에서는 플러그인은 하나 이상의 모듈을 가져야한다.
|
|
||||||
일반적이지 않는 플러그인(파일매니저 등)은 여전히 직접 route를 지정하여 작성할 수 있다.
|
|
||||||
|
|
||||||
- 사용자 제한이 있는 기능은 membership 플러그인을 사용하여 적절하게 처리해야 한다.
|
|
||||||
예: 등급 정보를 얻어와 낮은 등급인 경우 로딩 중단 등.
|
|
||||||
|
|
||||||
- from .setup import *
|
|
||||||
문장이 대부분의 파일에 들어갈 것으로 가정하였다.
|
|
||||||
import에 F 와 P 가 있으며 F는 framework instance로 F.config['path_data]
|
|
||||||
F.db, F.plugin_list 과 같이 framework 값에 접근에 사용하며,
|
|
||||||
P는 plugin instance로 P.logger, P.ModelSetting 에 사용한다.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## TODO
|
|
||||||
- celery 실행시 config.yaml 위치 지정
|
|
||||||
|
|
||||||
## 코드보안
|
|
||||||
- klive+ 에서 사용한 decrypt 를 framework 단위에서 지원
|
|
||||||
- 어짜피 pyc to py는 가능함.
|
|
||||||
- 코드 변경하여 사용하는 것을 막기 위해 filesize 체크.
|
|
||||||
- 이것도 framework 수정하여 우회 가능
|
|
||||||
- c 코드를 적절하게 사용
|
|
||||||
- 인증 같은 경우의 처리는 서버단에서 가능하도록 함.
|
|
||||||
-
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# info.yaml
|
|
||||||
## 필수
|
|
||||||
'title': "번역",
|
|
||||||
'version': '1.0.0.0',
|
|
||||||
'package_name' : 'trans',
|
|
||||||
'developer': 'TEAM',
|
|
||||||
'description': '번역 관련 설정 및 API 제공',
|
|
||||||
'home': 'https://github.com/flaskfarm/trans',
|
|
||||||
|
|
||||||
## 생략가능
|
|
||||||
'more': 'https://raw.githubusercontent.com/flaskfarm/flaskfarm/main/README.md',
|
|
||||||
|
|
||||||
'require_plugin': "",
|
|
||||||
'require_os' : "",
|
|
||||||
'need_decrypt_code': False,
|
|
||||||
'need_filesize_check': False,
|
|
||||||
'filesize': 0,
|
|
||||||
|
|
||||||
setting = {
|
|
||||||
'title': "번역",
|
|
||||||
'version': '1.0.0.0',
|
|
||||||
'package_name' : 'trans',
|
|
||||||
'developer': 'TEAM',
|
|
||||||
'description': '번역 관련 설정 및 API 제공',
|
|
||||||
'home': 'https://github.com/flaskfarm/trans',
|
|
||||||
'more': 'https://raw.githubusercontent.com/flaskfarm/flaskfarm/main/README.md',
|
|
||||||
|
|
||||||
'require_plugin': "",
|
|
||||||
'require_os' : "",
|
|
||||||
'need_decrypt_code': False,
|
|
||||||
'need_filesize_check': False,
|
|
||||||
'filesize': 0,
|
|
||||||
|
|
||||||
'filepath' : __file__,
|
|
||||||
'use_db': True,
|
|
||||||
'use_default_setting': True,
|
|
||||||
'home_module': 'base',
|
|
||||||
'menu': __menu,
|
|
||||||
'setting_menu': None,
|
|
||||||
'use_default_route': True,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
title: "번역"
|
|
||||||
version: "1.0.0.0"
|
|
||||||
package_name: "trans"
|
|
||||||
developer: "TEAM"
|
|
||||||
description': "번역 관련 설정 및 API 제공"
|
|
||||||
home: "https://github.com/flaskfarm/trans"
|
|
||||||
more: "https://raw.githubusercontent.com/flaskfarm/flaskfarm/main/README.md"
|
|
||||||
|
|
||||||
require_plugin: ""
|
|
||||||
require_os' : ""
|
|
||||||
need_decrypt_code: false
|
|
||||||
need_filesize_check': false
|
|
||||||
filesize: 0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
curl -Lo flaskfarm.sh https://flaskfarm.github.io/file/ubuntu/flaskfarm.sh
|
|
||||||
|
|
||||||
|
|
||||||
docker run -it --name test-ubuntu ubuntu:22.04 /bin/bash
|
|
||||||
|
|
||||||
|
|
||||||
apt update
|
|
||||||
apt install -y curl vim
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
docker rm -f test-ubuntu
|
|
||||||
|
|
||||||
curl -Lo flaskfarm.sh https://flaskfarm.github.io/file/ubuntu/flaskfarm.sh
|
|
||||||
|
|
||||||
chmod 777 ./flaskfarm.sh
|
|
||||||
./flaskfarm.sh prepare
|
|
||||||
|
|
||||||
./flaskfarm.sh install
|
|
||||||
2
main.py
2
main.py
@@ -12,7 +12,7 @@ sys.path.insert(1, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'lib
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
from framework import frame
|
from framework import frame
|
||||||
if __name__ == '__main__':
|
if __name__ in ['__main__', 'flaskfarm.main']:
|
||||||
frame.start()
|
frame.start()
|
||||||
else:
|
else:
|
||||||
app = frame.app
|
app = frame.app
|
||||||
|
|||||||
61
native
61
native
@@ -1,61 +0,0 @@
|
|||||||
# 데이터 폴더 루트 경로
|
|
||||||
# 윈도우의 경우 폴더 구분 기호 \ 를 두개 사용
|
|
||||||
# 예) data_folder: "C:\\work\\data"
|
|
||||||
# 현재 폴더인 경우 .
|
|
||||||
path_data: "C:\\work\\FlaskFarm\\working"
|
|
||||||
#path_data: "/mnt/c/work/FlaskFarm/working"
|
|
||||||
|
|
||||||
# gevent 사용여부
|
|
||||||
# 거의 항상 true로 사용.
|
|
||||||
# 플러그인 개발이나 termux 환경에서의 실행 같이 특수한 경우에만 false로 사용.
|
|
||||||
# 실행환경에 gevent 관련 패키지가 설치되어 있지 않는다면 값과 상관 없이 false로 동작.
|
|
||||||
# false인 경우
|
|
||||||
use_gevent: true
|
|
||||||
|
|
||||||
|
|
||||||
# celery 사용 여부
|
|
||||||
use_celery: true
|
|
||||||
|
|
||||||
# redis port
|
|
||||||
# celery를 사용하는 경우 사용하는 redis 포트
|
|
||||||
redis_port: 6379
|
|
||||||
|
|
||||||
# 포트
|
|
||||||
# 생략시 DB 값을 사용.
|
|
||||||
port: 9999
|
|
||||||
|
|
||||||
# 소스 수정시 재로딩
|
|
||||||
# 두번 로딩되는 것을 감안하여 코딩해야 함. 기본실행, subporcess 실행
|
|
||||||
# 기본적으로 main.py 하위 파일의 변경만 감시
|
|
||||||
debug: true
|
|
||||||
|
|
||||||
use_reloader: true
|
|
||||||
|
|
||||||
# 플러그인 업데이트 여부
|
|
||||||
# - true인 경우 로딩시 플러그인을 업데이트 함.
|
|
||||||
# 데이터폴더/plugins 폴더 안에 플러그인 만을 대상으로 함.
|
|
||||||
# - debug 값이 true인 경우에는 항상 false
|
|
||||||
plugin_update: false
|
|
||||||
|
|
||||||
# url subpath
|
|
||||||
url_prefix: "/sf"
|
|
||||||
|
|
||||||
# running_type
|
|
||||||
# termux, entware 인 경우 입력 함. (이외 사용하는 값 native, docker)
|
|
||||||
running_type: "native"
|
|
||||||
|
|
||||||
|
|
||||||
# 개발용 폴더만 로딩할 경우 사용
|
|
||||||
#plugin_loading_only_devpath: true
|
|
||||||
|
|
||||||
|
|
||||||
# 로딩할 플러그인 package 명
|
|
||||||
# 타 플러그인과 연동되는 플러그인 개발시 사용.
|
|
||||||
# import 로 런타임에 로딩할 수 있지만 타 패키지 메뉴 등은 표시되지 않음.
|
|
||||||
#plugin_loading_list: ['command', 'flaskcode']
|
|
||||||
|
|
||||||
|
|
||||||
# 로딩 제외할 플러그인 package 명
|
|
||||||
plugin_except_list: ['terminal', 'membership']
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user