diff --git a/Pipfile b/Pipfile index 81cadd0d..4110ccbf 100644 --- a/Pipfile +++ b/Pipfile @@ -4,20 +4,23 @@ verify_ssl = true name = "pypi" [packages] -tornado = "==5.0.2" -webassets = "==0.12.1" -Unipath = "==1.1" +tornado = "*" +webassets = "*" +Unipath = "*" wtforms-tornado = "*" pendulum = "*" redis = "*" sqlalchemy = "*" alembic = "*" "psycopg2-binary" = "*" +flask = "*" +flask-sqlalchemy = "*" +flask-assets = "*" [dev-packages] bandit = "*" -pytest = "==3.6.0" -pytest-tornado = "==0.5.0" +pytest = "*" +pytest-tornado = "*" ipython = "*" ipdb = "*" pylint = "*" diff --git a/Pipfile.lock b/Pipfile.lock index d87dfa97..d6e5cf64 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "7cd87f2c2c42bc776a6aa6f72fcbb8b30d4e703e50b6480ce1c8ace6ae6dd0a4" + "sha256": "2ee6dd90ff3784e7b1781c680d690ac59118b4e3d72e8da3adf9e93d6e512bc7" }, "pipfile-spec": 6, "requires": { @@ -24,6 +24,49 @@ "index": "pypi", "version": "==1.0.0" }, + "click": { + "hashes": [ + "sha256:29f99fc6125fbc931b758dc053b3114e55c77a6e4c6c3a2674a2dc986016381d", + "sha256:f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b" + ], + "version": "==6.7" + }, + "flask": { + "hashes": [ + "sha256:2271c0070dbcb5275fad4a82e29f23ab92682dc45f9dfbc22c02ba9b9322ce48", + "sha256:a080b744b7e345ccfcbc77954861cb05b3c63786e93f2b3875e0913d44b43f05" + ], + "index": "pypi", + "version": "==1.0.2" + }, + "flask-assets": { + "hashes": [ + "sha256:6031527b89fb3509d1581d932affa5a79dd348cfffb58d0aef99a43461d47847" + ], + "index": "pypi", + "version": "==0.12" + }, + "flask-sqlalchemy": { + "hashes": [ + "sha256:3bc0fac969dd8c0ace01b32060f0c729565293302f0c4269beed154b46bec50b", + "sha256:5971b9852b5888655f11db634e87725a9031e170f37c0ce7851cf83497f56e53" + ], + "index": "pypi", + "version": "==2.3.2" + }, + "itsdangerous": { + "hashes": [ + "sha256:cbb3fcf8d3e33df861709ecaf89d9e6629cff0a217bc2848f1b41cd30d360519" + ], + "version": "==0.24" + }, + "jinja2": { + "hashes": [ + "sha256:74c935a1b8bb9a3947c50a54766a969d4846290e1e788ea44c1392163723c3bd", + "sha256:f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4" + ], + "version": "==2.10" + }, "mako": { "hashes": [ "sha256:4e02fde57bd4abb5ec400181e4c314f56ac3e49ba4fb8b0d50bba18cb27d25ae" @@ -38,19 +81,22 @@ }, "pendulum": { "hashes": [ - "sha256:0643d45824e6789b88187728337dfa6075a0233f6976c2abefba00d064156309", - "sha256:3cc271195d8054bec06f54ff7d56ea6c2e2b5ad5dd6b532d787b34d2cabe6a65", - "sha256:544e44d8a92954e5ef4db4fa8b662d3282f2ac7b7c2cbf4227dc193ba78b9e1e", - "sha256:846478ab5f7480b3d850a09e44fe03830d448633c84f0b1066615ff6c34293aa", - "sha256:8bb523f759daeecfc0649369f198cbeb27a6608347354f4f847d21d579003db6", - "sha256:a449142063100f1b3c1119453c7569667c9ba79897305a1c50ca83a8c790f1e4", - "sha256:b7ff156b3d7cccbdeeb63465578d9a4e6f57d463f6ff6d4474254208d08f8353", - "sha256:d8822a592bbc16576c44ec4625bff9187ed9b649d47714e4905a55adc5b25339", - "sha256:dd45c7b349faab69714df9835cdf8bf8bce50bf6fc471419d3b23ba33e1915a5", - "sha256:fac088b637b5db5a047a0e89194d8c3c9e9e9ce1665089240003bb7c05b92536" + "sha256:0ec5371949e147753661e1e98721273170638034dfceb578f29d69d93d3d474b", + "sha256:10ccdc8c6d004ba97883dd0f57503963ddf6cb83e849a16c4675ba18da657564", + "sha256:37bb54bcbb9d7fccd725f3fda69702e51ab3de9971b4c1c986505fbb3bc58bed", + "sha256:51803352e40778f914ff7af3494788b404260b415d9a9d607a8cf73e5e120994", + "sha256:5de295ca85761d9adf4020e6f3bed6eb933846ccf23b74e04b071f6d677f11a4", + "sha256:73f850265adcf0986fcc0af83ae9c8c5a7ca3c4a2525184110478a8bfd1a77b3", + "sha256:8fe289356322f6b0f4510082b4c412a1496a64054a37ae86b24411868a1901c6", + "sha256:c0401482dfa9fbd7005f2dfbf54ec61fd2c8130df37651ac2a3722d1f049ae4e", + "sha256:c358ee65ddb99c2b1bf301458e43ed09ff6d40465bcc9928265246912fad4d0f", + "sha256:d07962450e808556b3e6209a5830e2bbf8c7747129580c3b5b09e641f72617ab", + "sha256:dc05e6186c9c3b9969326aded9cba7a796744918581b25457f5148a5e3475d55", + "sha256:ee9466eea403e8e308c284d3055e285b97905a5ffb1566df0ef200b4f39c0f15", + "sha256:f7fa6220251a636112721e8158b9dd59018d818ec121047900934d80864eca62" ], "index": "pypi", - "version": "==2.0.2" + "version": "==2.0.3" }, "psycopg2-binary": { "hashes": [ @@ -106,7 +152,7 @@ "sha256:1d936da41ee06216d89fdc7ead1ee9a5da2811a8787515a976b646e110c3f622", "sha256:e4ef42e82b0b493c5849eed98b5ab49d6767caf982127e9a33167f1153b36cc5" ], - "markers": "python_version != '3.1.*' and python_version != '3.2.*' and python_version != '3.0.*' and python_version != '3.3.*' and python_version >= '2.7'", + "markers": "python_version != '3.0.*' and python_version != '3.1.*' and python_version != '3.2.*' and python_version >= '2.7' and python_version != '3.3.*'", "version": "==2018.5" }, "redis": { @@ -133,14 +179,16 @@ }, "tornado": { "hashes": [ - "sha256:1b83d5c10550f2653380b4c77331d6f8850f287c4f67d7ce1e1c639d9222fbc7", - "sha256:408d129e9d13d3c55aa73f8084aa97d5f90ed84132e38d6932e63a67d5bec563", - "sha256:88ce0282cce70df9045e515f578c78f1ebc35dcabe1d70f800c3583ebda7f5f5", - "sha256:ba9fbb249ac5390bff8a1d6aa4b844fd400701069bda7d2e380dfe2217895101", - "sha256:c050089173c2e9272244bccfb6a8615fb9e53b79420a5551acfa76094ecc3111" + "sha256:1c0816fc32b7d31b98781bd8ebc7a9726d7dce67407dc353a2e66e697e138448", + "sha256:4f66a2172cb947387193ca4c2c3e19131f1c70fa8be470ddbbd9317fd0801582", + "sha256:5327ba1a6c694e0149e7d9126426b3704b1d9d520852a3e4aa9fc8fe989e4046", + "sha256:6a7e8657618268bb007646b9eae7661d0b57f13efc94faa33cd2588eae5912c9", + "sha256:a9b14804783a1d77c0bd6c66f7a9b1196cbddfbdf8bceb64683c5ae60bd1ec6f", + "sha256:c58757e37c4a3172949c99099d4d5106e4d7b63aa0617f9bb24bfbff712c7866", + "sha256:d8984742ce86c0855cccecd5c6f54a9f7532c983947cff06f3a0e2115b47f85c" ], "index": "pypi", - "version": "==5.0.2" + "version": "==5.1" }, "unipath": { "hashes": [ @@ -157,6 +205,13 @@ "index": "pypi", "version": "==0.12.1" }, + "werkzeug": { + "hashes": [ + "sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c", + "sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b" + ], + "version": "==0.14.1" + }, "wtforms": { "hashes": [ "sha256:0cdbac3e7f6878086c334aa25dc5a33869a3954e9d1e015130d65a69309b3b61", @@ -197,10 +252,10 @@ }, "astroid": { "hashes": [ - "sha256:0a0c484279a5f08c9bcedd6fa9b42e378866a7dcc695206b92d59dc9f2d9760d", - "sha256:218e36cf8d98a42f16214e8670819ce307fa707d1dcf7f9af84c7aede1febc7f" + "sha256:a48b57ede295c3188ef5c84273bc2a8eadc46e4cbb001eae0d49fb5d1fabbb19", + "sha256:d066cdeec5faeb51a4be5010da612680653d844b57afd86a5c8315f2f801b4cc" ], - "version": "==2.0.1" + "version": "==2.0.2" }, "atomicwrites": { "hashes": [ @@ -279,7 +334,7 @@ "sha256:0e9a1227a3a0f3297a485715e72ee6eb77081b17b629367042b586e38c03c867", "sha256:b4840807a94a3bad0217d6ed3f9b65a1cc6e1db1c99e1184673056ae2c0a4c4d" ], - "markers": "python_version != '3.2.*' and python_version != '3.0.*' and python_version >= '2.7' and python_version != '3.1.*'", + "markers": "python_version != '3.1.*' and python_version != '3.2.*' and python_version >= '2.7' and python_version != '3.0.*'", "version": "==0.8.17" }, "gitdb2": { @@ -305,11 +360,11 @@ }, "ipython": { "hashes": [ - "sha256:a0c96853549b246991046f32d19db7140f5b1a644cc31f0dc1edc86713b7676f", - "sha256:eca537aa61592aca2fef4adea12af8e42f5c335004dfa80c78caf80e8b525e5c" + "sha256:007dcd929c14631f83daff35df0147ea51d1af420da303fd078343878bd5fb62", + "sha256:b0f2ef9eada4a68ef63ee10b6dde4f35c840035c50fd24265f8052c98947d5a4" ], "index": "pypi", - "version": "==6.4.0" + "version": "==6.5.0" }, "ipython-genutils": { "hashes": [ @@ -324,7 +379,7 @@ "sha256:b9c40e9750f3d77e6e4d441d8b0266cf555e7cdabdcff33c4fd06366ca761ef8", "sha256:ec9ef8f4a9bc6f71eec99e1806bfa2de401650d996c59330782b89a5555c1497" ], - "markers": "python_version >= '2.7' and python_version != '3.1.*' and python_version != '3.3.*' and python_version != '3.0.*' and python_version != '3.2.*'", + "markers": "python_version != '3.3.*' and python_version >= '2.7' and python_version != '3.1.*' and python_version != '3.0.*' and python_version != '3.2.*'", "version": "==4.3.4" }, "jedi": { @@ -377,11 +432,11 @@ }, "more-itertools": { "hashes": [ - "sha256:2b6b9893337bfd9166bee6a62c2b0c9fe7735dcf85948b387ec8cba30e85d8e8", - "sha256:6703844a52d3588f951883005efcf555e49566a48afd4db4e965d69b883980d3", - "sha256:a18d870ef2ffca2b8463c0070ad17b5978056f403fb64e3f15fe62a52db21cc0" + "sha256:c187a73da93e7a8acc0001572aebc7e3c69daf7bf6881a2cea10650bd4420092", + "sha256:c476b5d3a34e12d40130bc2f935028b5f636df8f372dc2c1c01dc19681b2039e", + "sha256:fcbfeaea0be121980e15bc97b3817b5202ca73d0eae185b4550cbfce2a3ebb3d" ], - "version": "==4.2.0" + "version": "==4.3.0" }, "parso": { "hashes": [ @@ -398,10 +453,10 @@ }, "pbr": { "hashes": [ - "sha256:754e766b4f4bad3aa68cfd532456298da1aa39375da8748392dbae90860d5f18", - "sha256:c6bddbad814f23c7faaf88d8a186e9965243cc6206a23361b73023648e645794" + "sha256:1b8be50d938c9bb75d0eaf7eda111eec1bf6dc88a62a6412e33bf077457e0f45", + "sha256:b486975c0cafb6beeb50ca0e17ba047647f229087bd74e37f4a7e2cac17d2caa" ], - "version": "==4.1.1" + "version": "==4.2.0" }, "pexpect": { "hashes": [ @@ -420,12 +475,11 @@ }, "pluggy": { "hashes": [ - "sha256:7f8ae7f5bdf75671a718d2daf0a64b7885f74510bcd98b1a0bb420eb9a9d0cff", - "sha256:d345c8fe681115900d6da8d048ba67c25df42973bda370783cd58826442dcd7c", - "sha256:e160a7fcf25762bb60efc7e171d4497ff1d8d2d75a3d0df7a21b76821ecbf5c5" + "sha256:6e3836e39f4d36ae72840833db137f7b7d35105079aee6ec4a62d9f80d594dd1", + "sha256:95eb8364a4708392bae89035f45341871286a333f749c3141c20573d2b3876e1" ], - "markers": "python_version >= '2.7' and python_version != '3.1.*' and python_version != '3.3.*' and python_version != '3.0.*' and python_version != '3.2.*'", - "version": "==0.6.0" + "markers": "python_version != '3.3.*' and python_version >= '2.7' and python_version != '3.1.*' and python_version != '3.0.*' and python_version != '3.2.*'", + "version": "==0.7.1" }, "prompt-toolkit": { "hashes": [ @@ -447,7 +501,7 @@ "sha256:3fd59af7435864e1a243790d322d763925431213b6b8529c6ca71081ace3bbf7", "sha256:e31fb2767eb657cbde86c454f02e99cb846d3cd9d61b318525140214fdc0e98e" ], - "markers": "python_version >= '2.7' and python_version != '3.1.*' and python_version != '3.3.*' and python_version != '3.0.*' and python_version != '3.2.*'", + "markers": "python_version != '3.3.*' and python_version >= '2.7' and python_version != '3.1.*' and python_version != '3.0.*' and python_version != '3.2.*'", "version": "==1.5.4" }, "pygments": { @@ -459,19 +513,19 @@ }, "pylint": { "hashes": [ - "sha256:2c90a24bee8fae22ac98061c896e61f45c5b73c2e0511a4bf53f99ba56e90434", - "sha256:454532779425098969b8f54ab0f056000b883909f69d05905ea114df886e3251" + "sha256:0edfec21270725c5aa8e8d8d06ef5666f766e0e748ed2f1ab23624727303b935", + "sha256:4cadcaa4f1fb19123d4baa758d9fbe6286c5b3aa513af6ea42a2d51d405db205" ], "index": "pypi", - "version": "==2.0.1" + "version": "==2.1.0" }, "pytest": { "hashes": [ - "sha256:39555d023af3200d004d09e51b4dd9fdd828baa863cded3fd6ba2f29f757ae2d", - "sha256:c76e93f3145a44812955e8d46cdd302d8a45fbfc7bf22be24fe231f9d8d8853a" + "sha256:8214ab8446104a1d0c17fbd218ec6aac743236c6ffbe23abc038e40213c60b88", + "sha256:e2b2c6e1560b8f9dc8dd600b0923183fbd68ba3d9bdecde04467be6dd296a384" ], "index": "pypi", - "version": "==3.6.0" + "version": "==3.7.0" }, "pytest-tornado": { "hashes": [ @@ -547,14 +601,16 @@ }, "tornado": { "hashes": [ - "sha256:1b83d5c10550f2653380b4c77331d6f8850f287c4f67d7ce1e1c639d9222fbc7", - "sha256:408d129e9d13d3c55aa73f8084aa97d5f90ed84132e38d6932e63a67d5bec563", - "sha256:88ce0282cce70df9045e515f578c78f1ebc35dcabe1d70f800c3583ebda7f5f5", - "sha256:ba9fbb249ac5390bff8a1d6aa4b844fd400701069bda7d2e380dfe2217895101", - "sha256:c050089173c2e9272244bccfb6a8615fb9e53b79420a5551acfa76094ecc3111" + "sha256:1c0816fc32b7d31b98781bd8ebc7a9726d7dce67407dc353a2e66e697e138448", + "sha256:4f66a2172cb947387193ca4c2c3e19131f1c70fa8be470ddbbd9317fd0801582", + "sha256:5327ba1a6c694e0149e7d9126426b3704b1d9d520852a3e4aa9fc8fe989e4046", + "sha256:6a7e8657618268bb007646b9eae7661d0b57f13efc94faa33cd2588eae5912c9", + "sha256:a9b14804783a1d77c0bd6c66f7a9b1196cbddfbdf8bceb64683c5ae60bd1ec6f", + "sha256:c58757e37c4a3172949c99099d4d5106e4d7b63aa0617f9bb24bfbff712c7866", + "sha256:d8984742ce86c0855cccecd5c6f54a9f7532c983947cff06f3a0e2115b47f85c" ], "index": "pypi", - "version": "==5.0.2" + "version": "==5.1" }, "traitlets": { "hashes": [ @@ -563,6 +619,42 @@ ], "version": "==4.3.2" }, + "typed-ast": { + "hashes": [ + "sha256:0948004fa228ae071054f5208840a1e88747a357ec1101c17217bfe99b299d58", + "sha256:10703d3cec8dcd9eef5a630a04056bbc898abc19bac5691612acba7d1325b66d", + "sha256:1f6c4bd0bdc0f14246fd41262df7dfc018d65bb05f6e16390b7ea26ca454a291", + "sha256:25d8feefe27eb0303b73545416b13d108c6067b846b543738a25ff304824ed9a", + "sha256:29464a177d56e4e055b5f7b629935af7f49c196be47528cc94e0a7bf83fbc2b9", + "sha256:2e214b72168ea0275efd6c884b114ab42e316de3ffa125b267e732ed2abda892", + "sha256:3e0d5e48e3a23e9a4d1a9f698e32a542a4a288c871d33ed8df1b092a40f3a0f9", + "sha256:519425deca5c2b2bdac49f77b2c5625781abbaf9a809d727d3a5596b30bb4ded", + "sha256:57fe287f0cdd9ceaf69e7b71a2e94a24b5d268b35df251a88fef5cc241bf73aa", + "sha256:668d0cec391d9aed1c6a388b0d5b97cd22e6073eaa5fbaa6d2946603b4871efe", + "sha256:68ba70684990f59497680ff90d18e756a47bf4863c604098f10de9716b2c0bdd", + "sha256:6de012d2b166fe7a4cdf505eee3aaa12192f7ba365beeefaca4ec10e31241a85", + "sha256:79b91ebe5a28d349b6d0d323023350133e927b4de5b651a8aa2db69c761420c6", + "sha256:8550177fa5d4c1f09b5e5f524411c44633c80ec69b24e0e98906dd761941ca46", + "sha256:898f818399cafcdb93cbbe15fc83a33d05f18e29fb498ddc09b0214cdfc7cd51", + "sha256:94b091dc0f19291adcb279a108f5d38de2430411068b219f41b343c03b28fb1f", + "sha256:a26863198902cda15ab4503991e8cf1ca874219e0118cbf07c126bce7c4db129", + "sha256:a8034021801bc0440f2e027c354b4eafd95891b573e12ff0418dec385c76785c", + "sha256:bc978ac17468fe868ee589c795d06777f75496b1ed576d308002c8a5756fb9ea", + "sha256:c05b41bc1deade9f90ddc5d988fe506208019ebba9f2578c622516fd201f5863", + "sha256:c9b060bd1e5a26ab6e8267fd46fc9e02b54eb15fffb16d112d4c7b1c12987559", + "sha256:edb04bdd45bfd76c8292c4d9654568efaedf76fe78eb246dde69bdb13b2dad87", + "sha256:f19f2a4f547505fe9072e15f6f4ae714af51b5a681a97f187971f50c283193b6" + ], + "version": "==1.1.0" + }, + "typing": { + "hashes": [ + "sha256:3a887b021a77b292e151afb75323dea88a7bc1b3dfa92176cff8e44c8b68bddf", + "sha256:b2c689d54e1144bbcfd191b0832980a21c2dbcf7b5ff7a66248a60c90e951eb8", + "sha256:d400a9344254803a2368533e4533a4200d21eb7b6b729c173bc38201a74db3f2" + ], + "version": "==3.6.4" + }, "watchdog": { "hashes": [ "sha256:7e65882adb7746039b6f3876ee174952f8eaaa34491ba34333ddf1fe35de4162" diff --git a/app.py b/app.py index b6d66f53..6d786f34 100755 --- a/app.py +++ b/app.py @@ -1,15 +1,11 @@ #!/usr/bin/env python -import tornado.ioloop - -from atst.app import make_app, make_deps, make_config +from atst.app import make_app, make_config config = make_config() -deps = make_deps(config) -app = make_app(config, deps) +app = make_app(config) if __name__ == "__main__": - port = int(config["default"]["PORT"]) - app.listen(port) + port = int(config["PORT"]) + app.run(port=port) print("Listening on http://localhost:%i" % port) - tornado.ioloop.IOLoop.current().start() diff --git a/atst/app.py b/atst/app.py index a94a93ec..5128117f 100644 --- a/atst/app.py +++ b/atst/app.py @@ -1,160 +1,166 @@ import os from configparser import ConfigParser -import tornado.web -from tornado.web import url from redis import StrictRedis +from flask import Flask +from unipath import Path -from atst.handlers.main import Main -from atst.handlers.root import Root -from atst.handlers.login_redirect import LoginRedirect -from atst.handlers.workspaces import Workspaces -from atst.handlers.workspace import Workspace -from atst.handlers.workspace_members import WorkspaceMembers -from atst.handlers.request import Request -from atst.handlers.request_financial_verification import RequestFinancialVerification -from atst.handlers.request_new import RequestNew -from atst.handlers.request_submit import RequestsSubmit -from atst.handlers.dev import Dev -from atst.home import home from atst.api_client import ApiClient from atst.sessions import RedisSessions -from atst import ui_modules -from atst import ui_methods -from atst.database import make_db +from atst.database import db +from atst.assets import assets +from atst.routes import bp ENV = os.getenv("TORNADO_ENV", "dev") -def make_app(config, deps, **kwargs): +def make_app(config): - routes = [ - url(r"/", Root, {"page": "root"}, name="root"), - url( - r"/login-redirect", - LoginRedirect, - { - "sessions": deps["sessions"], - "authnid_client": deps["authnid_client"], - "db_session": deps["db_session"], - }, - name="login_redirect", - ), - url(r"/home", Main, {"page": "home"}, name="home"), - url(r"/styleguide", Main, {"page": "styleguide"}, name="styleguide"), - url( - r"/workspaces/blank", - Main, - {"page": "workspaces_blank"}, - name="workspaces_blank", - ), - url( - r"/workspaces", - Workspaces, - {"page": "workspaces", "db_session": deps["db_session"]}, - name="workspaces", - ), - url( - r"/requests", - Request, - {"page": "requests", "db_session": deps["db_session"]}, - name="requests", - ), - url( - r"/requests/new", - RequestNew, - { - "page": "requests_new", - "db_session": deps["db_session"], - }, - name="request_new", - ), - url( - r"/requests/new/([0-9])", - RequestNew, - { - "page": "requests_new", - "db_session": deps["db_session"], - }, - name="request_form_new", - ), - url( - r"/requests/new/([0-9])/(\S+)", - RequestNew, - { - "page": "requests_new", - "db_session": deps["db_session"], - }, - name="request_form_update", - ), - url( - r"/requests/submit/(\S+)", - RequestsSubmit, - {"db_session": deps["db_session"]}, - name="requests_submit", - ), - # Dummy request/approval screen - url( - r"/request/approval", - Main, - {"page": "request_approval"}, - name="request_approval", - ), - url( - r"/requests/verify/(\S+)", - RequestFinancialVerification, - { - "page": "financial_verification", - "db_session": deps["db_session"], - }, - name="financial_verification", - ), - url( - r"/requests/financial_verification_submitted", - Main, - {"page": "requests/financial_verification_submitted"}, - name="financial_verification_submitted", - ), - url(r"/users", Main, {"page": "users"}, name="users"), - url(r"/reports", Main, {"page": "reports"}, name="reports"), - url(r"/calculator", Main, {"page": "calculator"}, name="calculator"), - url( - r"/workspaces/(\S+)/members", WorkspaceMembers, {}, name="workspace_members" - ), - url(r"/workspaces/(\S+)/projects", Workspace, {}, name="workspace_projects"), - url(r"/workspaces/123456/projects/789/edit", Main, {"page": "project_edit"}, name="project_edit"), - url(r"/workspaces/123456/members/789/edit", Main, {"page": "member_edit"}, name="member_edit"), - ] + parent_dir = Path().parent - if not ENV == "production": - routes += [ - url( - r"/login-dev", - Dev, - { - "action": "login", - "sessions": deps["sessions"], - "db_session": deps["db_session"], - }, - name="dev-login", - ) - ] - - app = tornado.web.Application( - routes, - login_url="/", - template_path=home.child("templates"), - static_path=home.child("static"), - cookie_secret=config["default"]["COOKIE_SECRET"], - debug=config["default"].getboolean("DEBUG"), - ui_modules=ui_modules, - ui_methods=ui_methods, - **kwargs + app = Flask( + __name__, + template_folder=parent_dir.child("templates").absolute(), + static_folder=parent_dir.child("static").absolute() ) - app.config = config - app.sessions = deps["sessions"] + app.config.update(config) + + db.init_app(app) + assets.init_app(app) + + app.register_blueprint(bp) + return app +# def make_app(config, deps, **kwargs): +# routes = [ +# url(r"/", Root, {"page": "root"}, name="root"), +# url( +# r"/login-redirect", +# LoginRedirect, +# { +# "sessions": deps["sessions"], +# "authnid_client": deps["authnid_client"], +# "db_session": deps["db_session"], +# }, +# name="login_redirect", +# ), +# url(r"/home", Main, {"page": "home"}, name="home"), +# url(r"/styleguide", Main, {"page": "styleguide"}, name="styleguide"), +# url( +# r"/workspaces/blank", +# Main, +# {"page": "workspaces_blank"}, +# name="workspaces_blank", +# ), +# url( +# r"/workspaces", +# Workspaces, +# {"page": "workspaces", "db_session": deps["db_session"]}, +# name="workspaces", +# ), +# url( +# r"/requests", +# Request, +# {"page": "requests", "db_session": deps["db_session"]}, +# name="requests", +# ), +# url( +# r"/requests/new", +# RequestNew, +# { +# "page": "requests_new", +# "db_session": deps["db_session"], +# }, +# name="request_new", +# ), +# url( +# r"/requests/new/([0-9])", +# RequestNew, +# { +# "page": "requests_new", +# "db_session": deps["db_session"], +# }, +# name="request_form_new", +# ), +# url( +# r"/requests/new/([0-9])/(\S+)", +# RequestNew, +# { +# "page": "requests_new", +# "db_session": deps["db_session"], +# }, +# name="request_form_update", +# ), +# url( +# r"/requests/submit/(\S+)", +# RequestsSubmit, +# {"db_session": deps["db_session"]}, +# name="requests_submit", +# ), +# # Dummy request/approval screen +# url( +# r"/request/approval", +# Main, +# {"page": "request_approval"}, +# name="request_approval", +# ), +# url( +# r"/requests/verify/(\S+)", +# RequestFinancialVerification, +# { +# "page": "financial_verification", +# "db_session": deps["db_session"], +# }, +# name="financial_verification", +# ), +# url( +# r"/requests/financial_verification_submitted", +# Main, +# {"page": "requests/financial_verification_submitted"}, +# name="financial_verification_submitted", +# ), +# url(r"/users", Main, {"page": "users"}, name="users"), +# url(r"/reports", Main, {"page": "reports"}, name="reports"), +# url(r"/calculator", Main, {"page": "calculator"}, name="calculator"), +# url( +# r"/workspaces/(\S+)/members", WorkspaceMembers, {}, name="workspace_members" +# ), +# url(r"/workspaces/(\S+)/projects", Workspace, {}, name="workspace_projects"), +# url(r"/workspaces/123456/projects/789/edit", Main, {"page": "project_edit"}, name="project_edit"), +# url(r"/workspaces/123456/members/789/edit", Main, {"page": "member_edit"}, name="member_edit"), +# ] + +# if not ENV == "production": +# routes += [ +# url( +# r"/login-dev", +# Dev, +# { +# "action": "login", +# "sessions": deps["sessions"], +# "db_session": deps["db_session"], +# }, +# name="dev-login", +# ) +# ] + +# app = tornado.web.Application( +# routes, +# login_url="/", +# template_path=home.child("templates"), +# static_path=home.child("static"), +# cookie_secret=config["default"]["COOKIE_SECRET"], +# debug=config["default"].getboolean("DEBUG"), +# ui_modules=ui_modules, +# ui_methods=ui_methods, +# **kwargs +# ) +# app.config = config +# app.sessions = deps["sessions"] +# return app + + def make_deps(config): # we do not want to do SSL verify services in test and development validate_cert = ENV == "production" @@ -206,4 +212,4 @@ def make_config(): ) config.set("default", "DATABASE_URI", database_uri) - return config + return config["default"] diff --git a/atst/assets.py b/atst/assets.py index 7f723f75..bed898ac 100644 --- a/atst/assets.py +++ b/atst/assets.py @@ -1,16 +1,13 @@ -from webassets import Environment, Bundle +from flask_assets import Environment, Bundle from atst.home import home -environment = Environment( - directory=home.child("scss"), - url="/static" -) +assets = Environment() css = Bundle( - "atat.scss", + "../scss/atat.scss", filters="scss", output="../static/assets/out.%(version)s.css", depends=("**/*.scss"), ) -environment.register("css", css) +assets.register("css", css) diff --git a/atst/database.py b/atst/database.py index 6191f62e..f0b13d6f 100644 --- a/atst/database.py +++ b/atst/database.py @@ -1,8 +1,3 @@ -from sqlalchemy import create_engine -from sqlalchemy.orm import sessionmaker, scoped_session +from flask_sqlalchemy import SQLAlchemy - -def make_db(config): - engine = create_engine(config['default']['DATABASE_URI']) - session = scoped_session(sessionmaker(bind=engine)) - return session +db = SQLAlchemy() diff --git a/atst/handler.py b/atst/handler.py index bcbcf879..bc931a8d 100644 --- a/atst/handler.py +++ b/atst/handler.py @@ -1,9 +1,8 @@ import tornado.web -from atst.assets import environment from atst.sessions import SessionNotFoundError from atst.domain.users import Users -helpers = {"assets": environment} +helpers = {"assets": None} class BaseHandler(tornado.web.RequestHandler): diff --git a/atst/routes/__init__.py b/atst/routes/__init__.py new file mode 100644 index 00000000..c6b03baf --- /dev/null +++ b/atst/routes/__init__.py @@ -0,0 +1,7 @@ +from flask import Blueprint, render_template + +bp = Blueprint("atst", __name__) + +@bp.route("/") +def home(): + return render_template("home.html")