From dcec4e34741e0906e66d0fa1d22b7a876daab09f Mon Sep 17 00:00:00 2001 From: bozokopic Date: Tue, 25 Apr 2017 13:06:23 +0200 Subject: build refactoring --- README.rst | 4 +--- requirements.pacman.linux.txt | 5 +++++ requirements.txt | 1 + setup.py | 1 + src_py/opcut/doit/main.py | 14 +++++++++++++- src_py/opcut/doit/pyopcut.py | 25 ++++++++++++++++--------- src_py/opcut/main.py | 24 +++++++++++++----------- 7 files changed, 50 insertions(+), 24 deletions(-) create mode 100644 requirements.pacman.linux.txt diff --git a/README.rst b/README.rst index f1f974e..c0d4b7b 100644 --- a/README.rst +++ b/README.rst @@ -48,11 +48,10 @@ TODO * global - * organize build actions using pydoit and webpack - * create heroku configuration * create CONTRIBUTING * cleanup package.json * cleanup webpack.config.js + * write setup.py * optimizer @@ -70,6 +69,5 @@ TODO * front-end - * create temporary web page * implement communication with back-end * additional GUI refactoring diff --git a/requirements.pacman.linux.txt b/requirements.pacman.linux.txt new file mode 100644 index 0000000..6b5d366 --- /dev/null +++ b/requirements.pacman.linux.txt @@ -0,0 +1,5 @@ +git +nodejs +yarn +python +python-pip diff --git a/requirements.txt b/requirements.txt index 4db3939..4608c66 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,3 +2,4 @@ doit pyyaml jsonschema aiohttp +flake8 diff --git a/setup.py b/setup.py index f111e36..8646e5a 100644 --- a/setup.py +++ b/setup.py @@ -1 +1,2 @@ # this project uses pydoit as build tool - see README.rst +# setup.py will be generated in dist folder during build diff --git a/src_py/opcut/doit/main.py b/src_py/opcut/doit/main.py index d45859b..98844af 100644 --- a/src_py/opcut/doit/main.py +++ b/src_py/opcut/doit/main.py @@ -30,6 +30,13 @@ def task_gen_all(): 'jsopcut_gen']} +def task_check_all(): + """Check all""" + + return {'actions': None, + 'task_dep': ['pyopcut_check']} + + def task_dist_clean(): """Distribution - clean""" @@ -39,9 +46,14 @@ def task_dist_clean(): def task_dist_build(): """Distribution - build (DEFAULT)""" + def generate_setup_py(): + with open('dist/setup.py', 'w', encoding='utf-8') as f: + f.write('\n') + return {'actions': [(_common.rm_rf, ['dist']), (_common.cp_r, ['build/pyopcut', 'dist']), - (_common.cp_r, ['build/jsopcut', 'dist/web'])], + (_common.cp_r, ['build/jsopcut', 'dist/opcut/web']), + generate_setup_py], 'task_dep': [ 'gen_all', 'pyopcut_build', diff --git a/src_py/opcut/doit/pyopcut.py b/src_py/opcut/doit/pyopcut.py index 8582f95..98cd1af 100644 --- a/src_py/opcut/doit/pyopcut.py +++ b/src_py/opcut/doit/pyopcut.py @@ -1,13 +1,14 @@ -import py_compile +# import py_compile import os import yaml from pathlib import Path +from doit.action import CmdAction from opcut.doit import _common -__all__ = ['task_pyopcut_clean', 'task_pyopcut_build', 'task_pyopcut_gen', - 'task_pyopcut_gen_json_validator'] +__all__ = ['task_pyopcut_clean', 'task_pyopcut_build', 'task_pyopcut_check', + 'task_pyopcut_gen', 'task_pyopcut_gen_json_validator'] def task_pyopcut_clean(): @@ -24,15 +25,15 @@ def task_pyopcut_build(): def compile(src_path, dst_path): _common.mkdir_p(dst_path.parent) - if src_path.suffix == '.py': - py_compile.compile(src_path, dst_path, doraise=True) - else: - _common.cp_r(src_path, dst_path) + # if src_path.suffix == '.py': + # py_compile.compile(src_path, dst_path.with_suffix('.pyc'), + # doraise=True) + # else: + # _common.cp_r(src_path, dst_path) + _common.cp_r(src_path, dst_path) def create_subtask(src_path): dst_path = Path('build/pyopcut') / src_path.relative_to('src_py') - if dst_path.suffix == '.py': - dst_path = dst_path.with_suffix('.pyc') return {'name': str(src_path), 'actions': [(compile, [src_path, dst_path])], 'file_dep': [src_path], @@ -50,6 +51,12 @@ def task_pyopcut_build(): yield create_subtask(src_path) +def task_pyopcut_check(): + """PyOpcut - run flake8""" + + return {'actions': [CmdAction('python -m flake8 .', cwd='src_py')]} + + def task_pyopcut_gen(): """PyOpcut - generate additional python modules""" diff --git a/src_py/opcut/main.py b/src_py/opcut/main.py index 917cbb2..9ca2e18 100644 --- a/src_py/opcut/main.py +++ b/src_py/opcut/main.py @@ -7,6 +7,7 @@ import aiohttp.web import ssl import asyncio import contextlib +import os.path from opcut import util import opcut.json_validator @@ -21,23 +22,26 @@ def main(): opcut.json_validator.validate(log_conf, 'opcut://logging.yaml#') logging.config.dictConfig(log_conf) - util.run_until_complete_without_interrupt(async_main(args)) + addr = urllib.parse.urlparse(args.ui_addr) + pem_path = args.ui_pem_path + ui_path = args.ui_path or os.path.join(os.path.dirname(__file__), 'web') + util.run_until_complete_without_interrupt( + async_main(addr, pem_path, ui_path)) -async def async_main(args): - addr = urllib.parse.urlparse(args.ui_addr) +async def async_main(addr, pem_path, ui_path): if addr.scheme == 'https': ssl_ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23) - ssl_ctx.load_cert_chain(args.ui_pem_path) + ssl_ctx.load_cert_chain(pem_path) else: ssl_ctx = None app = aiohttp.web.Application() app.router.add_route('GET', '/', lambda req: aiohttp.web.HTTPFound('/index.html')) - app.router.add_static('/', args.ui_path) + app.router.add_static('/', ui_path) app_handler = app.make_handler() srv = await asyncio.get_event_loop().create_server( @@ -63,13 +67,11 @@ def _create_parser(): " is hostname; is tcp port number " "(default http://0.0.0.0:8080)") parser.add_argument( - '--ui-path', default='web', - metavar='path', dest='ui_path', - help="web front-end path (default web)") - parser.add_argument( - '--ui-pem', default=None, - metavar='path', dest='ui_pem_path', + '--ui-pem', default=None, metavar='path', dest='ui_pem_path', help="web front-end pem file path - required for https") + parser.add_argument( + '--ui-path', default=None, metavar='path', dest='ui_path', + help="override path to front-end web app") parser.add_argument( '--log', default=None, metavar='path', dest='log_conf_path', help="logging configuration") -- cgit v1.2.3-70-g09d2