Flask setup

This commit is contained in:
richard-dds 2018-08-01 10:51:14 -04:00
parent 1a6d42f385
commit 6a5d3d57cf
8 changed files with 318 additions and 223 deletions

13
Pipfile
View File

@ -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 = "*"

196
Pipfile.lock generated
View File

@ -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"

12
app.py
View File

@ -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()

View File

@ -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 = Flask(
__name__,
template_folder=parent_dir.child("templates").absolute(),
static_folder=parent_dir.child("static").absolute()
)
]
app.config.update(config)
db.init_app(app)
assets.init_app(app)
app.register_blueprint(bp)
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_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"]

View File

@ -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)

View File

@ -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()

View File

@ -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):

7
atst/routes/__init__.py Normal file
View File

@ -0,0 +1,7 @@
from flask import Blueprint, render_template
bp = Blueprint("atst", __name__)
@bp.route("/")
def home():
return render_template("home.html")