diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..deec4a8 --- /dev/null +++ b/__init__.py @@ -0,0 +1 @@ +from . import main \ No newline at end of file diff --git a/files/config.yaml.template b/files/config.yaml.template index 054f8f3..64d3295 100644 --- a/files/config.yaml.template +++ b/files/config.yaml.template @@ -2,7 +2,7 @@ # 윈도우의 경우 폴더 구분 기호 \ 를 두개 사용 # 예) data_folder: "C:\\work\\data" # 현재 폴더인 경우 . -path_data: "C:\\work\\FlaskFarm\\working" +path_data: "." #path_data: "/mnt/c/work/FlaskFarm/working" # gevent 사용여부 @@ -26,23 +26,20 @@ port: 9999 # 소스 수정시 재로딩 # 두번 로딩되는 것을 감안하여 코딩해야 함. 기본실행, subporcess 실행 -# 기본적으로 main.py 하위 파일의 변경만 감시 -debug: true +debug: false -use_reloader: true +use_reloader: false # 플러그인 업데이트 여부 # - true인 경우 로딩시 플러그인을 업데이트 함. # 데이터폴더/plugins 폴더 안에 플러그인 만을 대상으로 함. # - debug 값이 true인 경우에는 항상 false -plugin_update: false +plugin_update: true -# url subpath -url_prefix: "/sf" # running_type # termux, entware 인 경우 입력 함. (이외 사용하는 값 native, docker) -running_type: "native" +#running_type: "native" # 개발용 폴더만 로딩할 경우 사용 @@ -56,6 +53,5 @@ running_type: "native" # 로딩 제외할 플러그인 package 명 -plugin_except_list: ['terminal', 'membership'] - +#plugin_except_list: ['terminal', 'membership'] diff --git a/files/memo.txt b/files/memo.txt deleted file mode 100644 index 9c6a094..0000000 --- a/files/memo.txt +++ /dev/null @@ -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 \ No newline at end of file diff --git a/main.py b/main.py index 6c1da8f..38317ed 100644 --- a/main.py +++ b/main.py @@ -12,7 +12,7 @@ sys.path.insert(1, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'lib try: from framework import frame - if __name__ == '__main__': + if __name__ in ['__main__', 'flaskfarm.main']: frame.start() else: app = frame.app diff --git a/native b/native deleted file mode 100644 index 054f8f3..0000000 --- a/native +++ /dev/null @@ -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'] - -