@ -0,0 +1 @@ | |||
README.md |
@ -0,0 +1,12 @@ | |||
[[source]] | |||
name = "pypi" | |||
url = "https://pypi.org/simple" | |||
verify_ssl = true | |||
[dev-packages] | |||
[packages] | |||
flask = "*" | |||
[requires] | |||
python_version = "3.6" |
@ -0,0 +1,90 @@ | |||
{ | |||
"_meta": { | |||
"hash": { | |||
"sha256": "8ec50e78e90ad609e540d41d1ed90f3fb880ffbdf6049b0a6b2f1a00158a3288" | |||
}, | |||
"pipfile-spec": 6, | |||
"requires": { | |||
"python_version": "3.6" | |||
}, | |||
"sources": [ | |||
{ | |||
"name": "pypi", | |||
"url": "https://pypi.org/simple", | |||
"verify_ssl": true | |||
} | |||
] | |||
}, | |||
"default": { | |||
"click": { | |||
"hashes": [ | |||
"sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13", | |||
"sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7" | |||
], | |||
"version": "==7.0" | |||
}, | |||
"flask": { | |||
"hashes": [ | |||
"sha256:2271c0070dbcb5275fad4a82e29f23ab92682dc45f9dfbc22c02ba9b9322ce48", | |||
"sha256:a080b744b7e345ccfcbc77954861cb05b3c63786e93f2b3875e0913d44b43f05" | |||
], | |||
"index": "pypi", | |||
"version": "==1.0.2" | |||
}, | |||
"itsdangerous": { | |||
"hashes": [ | |||
"sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19", | |||
"sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749" | |||
], | |||
"version": "==1.1.0" | |||
}, | |||
"jinja2": { | |||
"hashes": [ | |||
"sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013", | |||
"sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b" | |||
], | |||
"version": "==2.10.1" | |||
}, | |||
"markupsafe": { | |||
"hashes": [ | |||
"sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", | |||
"sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", | |||
"sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", | |||
"sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", | |||
"sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", | |||
"sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", | |||
"sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", | |||
"sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", | |||
"sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", | |||
"sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", | |||
"sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", | |||
"sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", | |||
"sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", | |||
"sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", | |||
"sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", | |||
"sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", | |||
"sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", | |||
"sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", | |||
"sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", | |||
"sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", | |||
"sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", | |||
"sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", | |||
"sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", | |||
"sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", | |||
"sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", | |||
"sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", | |||
"sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", | |||
"sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7" | |||
], | |||
"version": "==1.1.1" | |||
}, | |||
"werkzeug": { | |||
"hashes": [ | |||
"sha256:0a73e8bb2ff2feecfc5d56e6f458f5b99290ef34f565ffb2665801ff7de6af7a", | |||
"sha256:7fad9770a8778f9576693f0cc29c7dcc36964df916b83734f4431c0e612a7fbc" | |||
], | |||
"version": "==0.15.2" | |||
} | |||
}, | |||
"develop": {} | |||
} |
@ -0,0 +1,46 @@ | |||
# Python Flask on ZEIT Now | |||
[Demo](https://python-flask.now-examples.now.sh) | |||
This directory is a brief example and starter app for [Flask](http://flask.pocoo.org), ready to deploy on [ZEIT Now](https://zeit.co/now). | |||
To get started with this project yourself, use the following command from [Now CLI](https://zeit.co/docs/v2/getting-started/installation#now-cli): | |||
```shell | |||
$ now init python-flask | |||
``` | |||
> Alternatively, create a project, and Git repository, with this example template [using the ZEIT dashboard](https://zeit.co/new/python-flask). | |||
Once initialized locally, you will see the files `/index.py` and `/about/index.py` which each correspond to a route, `/` and `/about`, respectively. Each file defines a [Flask wildcard catch-all](http://flask.pocoo.org/snippets/57/) so that we can utilize the routing layer in the Now Platform defined in `now.json`. | |||
In this case, no routes are defined in `now.json`, so we can rely on the filesystem for routing. | |||
To [deploy](https://zeit.co/docs/v2/deployments/basics) this application, with [Now installed](https://zeit.co/docs/v2/getting-started/installation), run the following from your terminal: | |||
```shell | |||
$ now | |||
``` | |||
Alternatively, your new Flask app can be automatically deployed and aliased using [Now for GitHub](https://zeit.co/docs/v2/integrations/now-for-github) or [Now for GitLab](https://zeit.co/docs/v2/integrations/now-for-gitlab). Pushing these files to a new repository with a `now.json` file in the root, and with either [Now for GitHub](https://zeit.co/docs/v2/integrations/now-for-github) or [Now for GitLab](https://zeit.co/docs/v2/integrations/now-for-gitlab) configured for that repository, means your site will be automatically deployed for every push and pull/merge request, and aliased for every push to the default branch! | |||
## Included In This Starter | |||
This starter project includes: | |||
- A `/index.py` file that responds to the `/` route. | |||
- A `/about/index.py` file that responds to the `/about` route. | |||
- A pre-defined `Pipfile` that installs Flask as a dependency and defines the Python runtime version. | |||
- A generated `Pipfile.lock` that ensures exact versions of dependencies to avoid the risk of automatically upgrading packages that depend upon each other and breaking your project dependency tree. | |||
## Resources | |||
For more resources on how to configure your new Flask app to do more with Now or to deploy any other kind of application, see the following: | |||
- [New to Now? Get a quick introduction](https://zeit.co/docs/v2/getting-started/introduction-to-now) | |||
- [Learn the basics of deployment on Now](https://zeit.co/docs/v2/deployments/basics) | |||
- [Learn how to configure your Now deployments](https://zeit.co/docs/v2/deployments/configuration) | |||
- [Learn how to configure Now Routes for redirects, caching, and more](https://zeit.co/docs/v2/deployments/routes) | |||
- [Learn how to alias your deployment to a domain or other unique shareable URLs](https://zeit.co/docs/v2/domains-and-aliases/introduction) | |||
For more information on Flask itself, [see their documentation](http://flask.pocoo.org/docs/). | |||
@ -0,0 +1,11 @@ | |||
from flask import Flask, Response, __version__ | |||
app = Flask(__name__) | |||
source = 'https://github.com/zeit/now-examples/tree/master/python-flask' | |||
css = '<link rel="stylesheet" href="/css/style.css" />' | |||
@app.route('/', defaults={'path': ''}) | |||
@app.route('/<path:path>') | |||
def catch_all(path): | |||
name = path.upper() | |||
v = __version__ | |||
return Response("%s<h1>%s</h1><ul><li>WSGI Enabled</li><li>Flask version <em>%s</em></li></ul><p>Visit the <a href='./'>home</a> page or view the <a href='%s'>source code</a>.</p>" % (css, name, v, source), mimetype='text/html') |
@ -0,0 +1,139 @@ | |||
body { | |||
font-family: "SF Pro Text", "SF Pro Icons", "Helvetica Neue", "Helvetica", | |||
"Arial", sans-serif; | |||
padding: 20px 20px 60px; | |||
max-width: 680px; | |||
margin: 0 auto; | |||
font-size: 16px; | |||
line-height: 1.65; | |||
word-break: break-word; | |||
font-kerning: auto; | |||
font-variant: normal; | |||
-webkit-font-smoothing: antialiased; | |||
-moz-osx-font-smoothing: grayscale; | |||
text-rendering: optimizeLegibility; | |||
hyphens: auto; | |||
} | |||
h2, | |||
h3, | |||
h4 { | |||
margin-top: 1.5em; | |||
} | |||
a { | |||
cursor: pointer; | |||
color: #0076ff; | |||
text-decoration: none; | |||
transition: all 0.2s ease; | |||
border-bottom: 1px solid white; | |||
} | |||
a:hover { | |||
border-bottom: 1px solid #0076ff; | |||
} | |||
ul, | |||
ol { | |||
padding: 0; | |||
margin-left: 1.5em; | |||
} | |||
ul { | |||
list-style-type: none; | |||
} | |||
li { | |||
margin-bottom: 10px; | |||
} | |||
ul li:before { | |||
content: "–"; | |||
} | |||
li:before { | |||
display: inline-block; | |||
color: #999; | |||
position: absolute; | |||
margin-left: -18px; | |||
transition: color 0.2s ease; | |||
} | |||
code, | |||
pre { | |||
font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, | |||
Bitstream Vera Sans Mono, Courier New, monospace, serif; | |||
font-size: 0.92em; | |||
color: #d400ff; | |||
} | |||
code:before, | |||
code:after { | |||
content: "`"; | |||
} | |||
blockquote { | |||
margin: 1.6em 0; | |||
padding: 5px 24px; | |||
background: #efefef; | |||
} | |||
input, | |||
button, | |||
textarea { | |||
margin: 0; | |||
border: 1px solid #d1d1d1; | |||
border-radius: 5px; | |||
padding: 0.5em; | |||
vertical-align: middle; | |||
white-space: normal; | |||
background: none; | |||
line-height: 1; | |||
font-size: 1rem; | |||
font-family: inherit; | |||
transition: all 0.2s ease; | |||
} | |||
button { | |||
padding: 0.65em 1em; | |||
background: #0076ff; | |||
color: #fff; | |||
border: none; | |||
cursor: pointer; | |||
text-transform: uppercase; | |||
transition: all 0.2s ease; | |||
} | |||
input:focus, | |||
textarea:focus, | |||
button:focus { | |||
outline: 0; | |||
border-color: #0076ff; | |||
} | |||
button:hover { | |||
background: rgba(0, 118, 255, 0.8); | |||
} | |||
button:focus { | |||
box-shadow: 0 0 0 2px rgba(0, 118, 255, 0.5); | |||
} | |||
button:disabled { | |||
pointer-events: none; | |||
background: #999; | |||
} | |||
img { | |||
max-width: 100%; | |||
} | |||
textarea { | |||
min-height: 300px; | |||
width: 100%; | |||
resize: none; | |||
margin: 1.4em 0; | |||
box-sizing: border-box; | |||
} | |||
hr { | |||
border: none; | |||
border-bottom: 1px solid #efefef; | |||
margin: 6em auto; | |||
} |
@ -0,0 +1,9 @@ | |||
from flask import Flask, Response, __version__ | |||
app = Flask(__name__) | |||
source = 'https://github.com/zeit/now-examples/tree/master/python-flask' | |||
css = '<link rel="stylesheet" href="/css/style.css" />' | |||
@app.route('/', defaults={'path': ''}) | |||
@app.route('/<path:path>') | |||
def catch_all(path): | |||
return Response("%s<h1>Flask on Now 2.0</h1><p>You are viewing a Flask application written in Python running on Now 2.0.</p><p>Visit the <a href='./about'>about</a> page or view the <a href='%s'>source code</a>.</p>" % (css, source), mimetype='text/html') |
@ -0,0 +1 @@ | |||
{"version":2,"name":"osm-conflate-audit","builds":[{"src":"**/*.py","use":"@now/python@canary"},{"src":"css/**","use":"@now/static"}]} |