diff --git a/examples/api-datadisplay/api_datadisplay/main.py b/examples/api-datadisplay/api_datadisplay/main.py
index dc5a14e..8e81435 100644
--- a/examples/api-datadisplay/api_datadisplay/main.py
+++ b/examples/api-datadisplay/api_datadisplay/main.py
@@ -1,31 +1,38 @@
-from starlette.applications import Starlette
-from starlette.templating import Jinja2Templates
-from starlette.routing import Route, Mount
-from starlette.staticfiles import StaticFiles
+from fastapi import FastAPI, Header, Path
+from pydantic import BaseModel
+from typing import List
-templates = Jinja2Templates(directory='templates')
+app = FastAPI()
-async def home(request):
- return templates.TemplateResponse(
- 'index.html',
- {'request': request},
- )
+class MetricResponse(BaseModel):
+ data: List = [1, 2, 3]
+ metrics: str
-routes = [
- Route('/', endpoint=home),
- Mount('/static', StaticFiles(directory='../static'), name='static'),
- Mount(
- '/node_modules',
- StaticFiles(directory='../node_modules'),
- name='node_modules',
+
+@app.get("/metrics/{metric}", response_model=MetricResponse)
+def get_metrics(
+ metric: str = Path(
+ ...,
+ title='Metric',
+ description='The metric needed. Must be one of "bets", "deposits" or '
+ '"registrations"',
+ regex=r'^(bets$)|(deposits$)|(registrations$)',
),
- Mount(
- '/bower_components',
- StaticFiles(directory='../bower_components'),
- name='bower_components',
- ),
-]
+ earliest: str = Header(None, title='Earliest time',),
+):
+ var = MetricResponse(metrics='s')
+ return {'metric': 's'}
-app = Starlette(debug=True, routes=routes)
+
+class Item(BaseModel):
+ name: str
+ description: str = None
+ price: float
+ tax: float = None
+
+
+@app.post("/items/")
+async def create_item(item: Item):
+ return item
diff --git a/examples/api-datadisplay/api_datadisplay/templates/index.html b/examples/api-datadisplay/api_datadisplay/templates/index.html
index 489120d..20024f7 100644
--- a/examples/api-datadisplay/api_datadisplay/templates/index.html
+++ b/examples/api-datadisplay/api_datadisplay/templates/index.html
@@ -25,13 +25,12 @@
-
-
+
Hello, world!
This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.
diff --git a/examples/api-datadisplay/bower.json b/examples/api-datadisplay/bower.json
new file mode 100644
index 0000000..5397452
--- /dev/null
+++ b/examples/api-datadisplay/bower.json
@@ -0,0 +1,17 @@
+{
+ "name": "api-datadisplay",
+ "description": "",
+ "main": "index.js",
+ "authors": [
+ "dtomlinson
"
+ ],
+ "license": "ISC",
+ "homepage": "",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests"
+ ]
+}
diff --git a/examples/api-datadisplay/poetry.lock b/examples/api-datadisplay/poetry.lock
index 1ee50ab..b9d3532 100644
--- a/examples/api-datadisplay/poetry.lock
+++ b/examples/api-datadisplay/poetry.lock
@@ -28,6 +28,17 @@ dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.int
docs = ["sphinx", "zope.interface"]
tests = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"]
+[[package]]
+category = "dev"
+description = "A tool that automatically formats Python code to conform to the PEP 8 style guide"
+name = "autopep8"
+optional = false
+python-versions = "*"
+version = "1.5"
+
+[package.dependencies]
+pycodestyle = ">=2.5.0"
+
[[package]]
category = "main"
description = "Python package for providing Mozilla's CA Bundle."
@@ -123,6 +134,20 @@ zipp = ">=0.5"
docs = ["sphinx", "rst.linker"]
testing = ["packaging", "importlib-resources"]
+[[package]]
+category = "dev"
+description = "An autocompletion tool for Python that can be used for text editors."
+name = "jedi"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+version = "0.15.2"
+
+[package.dependencies]
+parso = ">=0.5.2"
+
+[package.extras]
+testing = ["colorama (0.4.1)", "docopt", "pytest (>=3.9.0,<5.0.0)"]
+
[[package]]
category = "main"
description = "A very fast and expressive template engine."
@@ -145,6 +170,14 @@ optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
version = "1.1.1"
+[[package]]
+category = "dev"
+description = "McCabe checker, plugin for flake8"
+name = "mccabe"
+optional = false
+python-versions = "*"
+version = "0.6.1"
+
[[package]]
category = "dev"
description = "More routines for operating on iterables, beyond itertools"
@@ -153,6 +186,17 @@ optional = false
python-versions = ">=3.5"
version = "8.2.0"
+[[package]]
+category = "dev"
+description = "A Python Parser"
+name = "parso"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+version = "0.6.1"
+
+[package.extras]
+testing = ["docopt", "pytest (>=3.0.7)"]
+
[[package]]
category = "dev"
description = "plugin and hook calling mechanisms for python"
@@ -169,6 +213,18 @@ version = ">=0.12"
[package.extras]
dev = ["pre-commit", "tox"]
+[[package]]
+category = "dev"
+description = "A full-screen, console-based Python debugger"
+name = "pudb"
+optional = false
+python-versions = "*"
+version = "2019.2"
+
+[package.dependencies]
+pygments = ">=1.0"
+urwid = ">=1.1.1"
+
[[package]]
category = "dev"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
@@ -177,6 +233,14 @@ optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "1.8.1"
+[[package]]
+category = "dev"
+description = "Python style guide checker"
+name = "pycodestyle"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+version = "2.5.0"
+
[[package]]
category = "main"
description = "Data validation and settings management using python 3.6 type hinting"
@@ -190,6 +254,33 @@ dotenv = ["python-dotenv (>=0.10.4)"]
email = ["email-validator (>=1.0.3)"]
typing_extensions = ["typing-extensions (>=3.7.2)"]
+[[package]]
+category = "dev"
+description = "Python docstring style checker"
+name = "pydocstyle"
+optional = false
+python-versions = ">=3.5"
+version = "5.0.2"
+
+[package.dependencies]
+snowballstemmer = "*"
+
+[[package]]
+category = "dev"
+description = "passive checker of Python programs"
+name = "pyflakes"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+version = "2.1.1"
+
+[[package]]
+category = "dev"
+description = "Pygments is a syntax highlighting package written in Python."
+name = "pygments"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+version = "2.5.2"
+
[[package]]
category = "dev"
description = "pytest: simple powerful testing with Python"
@@ -208,6 +299,47 @@ py = ">=1.5.0"
setuptools = "*"
six = ">=1.10.0"
+[[package]]
+category = "dev"
+description = "JSON RPC 2.0 server library"
+name = "python-jsonrpc-server"
+optional = false
+python-versions = "*"
+version = "0.3.4"
+
+[package.dependencies]
+ujson = "<=1.35"
+
+[package.extras]
+test = ["versioneer", "pylint", "pycodestyle", "pyflakes", "pytest", "mock", "pytest-cov", "coverage"]
+
+[[package]]
+category = "dev"
+description = "Python Language Server for the Language Server Protocol"
+name = "python-language-server"
+optional = false
+python-versions = "*"
+version = "0.31.8"
+
+[package.dependencies]
+jedi = ">=0.14.1,<0.16"
+pluggy = "*"
+python-jsonrpc-server = ">=0.3.2"
+ujson = "<=1.35"
+
+[package.extras]
+all = ["autopep8", "flake8", "mccabe", "pycodestyle", "pydocstyle (>=2.0.0)", "pyflakes (>=1.6.0)", "pylint", "rope (>=0.10.5)", "yapf"]
+autopep8 = ["autopep8"]
+flake8 = ["flake8"]
+mccabe = ["mccabe"]
+pycodestyle = ["pycodestyle"]
+pydocstyle = ["pydocstyle (>=2.0.0)"]
+pyflakes = ["pyflakes (>=1.6.0)"]
+pylint = ["pylint"]
+rope = ["rope (>0.10.5)"]
+test = ["versioneer", "pylint", "pytest", "mock", "pytest-cov", "coverage", "numpy", "pandas", "matplotlib", "pyqt5"]
+yapf = ["yapf"]
+
[[package]]
category = "main"
description = "Python HTTP for Humans."
@@ -226,6 +358,17 @@ urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26"
security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)"]
socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"]
+[[package]]
+category = "dev"
+description = "a python refactoring library..."
+name = "rope"
+optional = false
+python-versions = "*"
+version = "0.16.0"
+
+[package.extras]
+dev = ["pytest"]
+
[[package]]
category = "dev"
description = "Python 2 and 3 compatibility utilities"
@@ -234,6 +377,14 @@ optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
version = "1.14.0"
+[[package]]
+category = "dev"
+description = "This package provides 26 stemmers for 25 languages generated from Snowball algorithms."
+name = "snowballstemmer"
+optional = false
+python-versions = "*"
+version = "2.0.0"
+
[[package]]
category = "main"
description = "The little ASGI library that shines."
@@ -245,6 +396,15 @@ version = "0.12.9"
[package.extras]
full = ["aiofiles", "graphene", "itsdangerous", "jinja2", "python-multipart", "pyyaml", "requests", "ujson"]
+[[package]]
+category = "dev"
+description = "Ultra fast JSON encoder and decoder for Python"
+marker = "platform_system != \"Windows\""
+name = "ujson"
+optional = false
+python-versions = "*"
+version = "1.35"
+
[[package]]
category = "main"
description = "HTTP library with thread-safe connection pooling, file post, and more."
@@ -258,6 +418,14 @@ brotli = ["brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"]
+[[package]]
+category = "dev"
+description = "A full-featured console (xterm et al.) user interface library"
+name = "urwid"
+optional = false
+python-versions = "*"
+version = "2.1.0"
+
[[package]]
category = "main"
description = "The lightning-fast ASGI server."
@@ -290,6 +458,14 @@ optional = false
python-versions = ">=3.6.1"
version = "8.1"
+[[package]]
+category = "dev"
+description = "A formatter for Python code."
+name = "yapf"
+optional = false
+python-versions = "*"
+version = "0.29.0"
+
[[package]]
category = "dev"
description = "Backport of pathlib-compatible object wrapper for zip files"
@@ -304,13 +480,14 @@ docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"]
testing = ["jaraco.itertools", "func-timeout"]
[metadata]
-content-hash = "1fbf3f5588844439f26ce5c20c23afb9fb5f79e78bda47d4a9d3548f88b0eda3"
+content-hash = "1f14420d8125abec4fd07fa5b84c38ddbe5d378e16d9b9226b34c6de5a58d1ca"
python-versions = "^3.7"
[metadata.hashes]
aiofiles = ["021ea0ba314a86027c166ecc4b4c07f2d40fc0f4b3a950d1868a0f2571c2bbee", "1e644c2573f953664368de28d2aa4c89dfd64550429d0c27c4680ccd3aa4985d"]
atomicwrites = ["03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4", "75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6"]
attrs = ["08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c", "f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"]
+autopep8 = ["0f592a0447acea0c2b0a9602be1e4e3d86db52badd2e3c84f0193bfd89fd3a43"]
certifi = ["017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3", "25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f"]
chardet = ["84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", "fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"]
click = ["2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13", "5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"]
@@ -320,18 +497,33 @@ h11 = ["33d4bca7be0fa039f4e84d50ab00531047e53d6ee8ffbc83501ea602c169cae1", "4bc6
httptools = ["0a4b1b2012b28e68306575ad14ad5e9120b34fccd02a81eb08838d7e3bbb48be", "3592e854424ec94bd17dc3e0c96a64e459ec4147e6d53c0a42d0ebcef9cb9c5d", "41b573cf33f64a8f8f3400d0a7faf48e1888582b6f6e02b82b9bd4f0bf7497ce", "56b6393c6ac7abe632f2294da53f30d279130a92e8ae39d8d14ee2e1b05ad1f2", "86c6acd66765a934e8730bf0e9dfaac6fdcf2a4334212bd4a0a1c78f16475ca6", "96da81e1992be8ac2fd5597bf0283d832287e20cb3cfde8996d2b00356d4e17f", "96eb359252aeed57ea5c7b3d79839aaa0382c9d3149f7d24dd7172b1bcecb009", "a2719e1d7a84bb131c4f1e0cb79705034b48de6ae486eb5297a139d6a3296dce", "ac0aa11e99454b6a66989aa2d44bca41d4e0f968e395a0a8f164b401fefe359a", "bc3114b9edbca5a1eb7ae7db698c669eb53eb8afbbebdde116c174925260849c", "fa3cd71e31436911a44620473e873a256851e1f53dee56669dae403ba41756a4", "fea04e126014169384dee76a153d4573d90d0cbd1d12185da089f73c78390437"]
idna = ["c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", "ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"]
importlib-metadata = ["06f5b3a99029c7134207dd882428a66992a9de2bef7c2b699b5641f9886c3302", "b97607a1a18a5100839aec1dc26a1ea17ee0d93b20b0f008d80a5a050afb200b"]
+jedi = ["1349c1e8c107095a55386628bb3b2a79422f3a2cab8381e34ce19909e0cf5064", "e909527104a903606dd63bea6e8e888833f0ef087057829b89a18364a856f807"]
jinja2 = ["93187ffbc7808079673ef52771baa950426fd664d3aad1d0fa3e95644360e250", "b0eaf100007721b5c16c1fc1eecb87409464edc10469ddc9a22a27a99123be49"]
markupsafe = ["00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", "09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", "09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", "1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", "24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", "29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", "43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", "46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", "500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", "535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", "62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", "6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", "717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", "79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", "7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", "88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", "8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", "98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", "9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", "9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", "ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", "b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", "b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", "b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", "ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", "c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", "cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", "e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"]
+mccabe = ["ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", "dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"]
more-itertools = ["5dd8bcf33e5f9513ffa06d5ad33d78f31e1931ac9a18f33d37e77a180d393a7c", "b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507"]
+parso = ["56b2105a80e9c4df49de85e125feb6be69f49920e121406f15e7acde6c9dfc57", "951af01f61e6dccd04159042a0706a31ad437864ec6e25d0d7a96a9fbb9b0095"]
pluggy = ["15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0", "966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"]
+pudb = ["e8f0ea01b134d802872184b05bffc82af29a1eb2f9374a277434b932d68f58dc"]
py = ["5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa", "c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0"]
+pycodestyle = ["95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", "e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c"]
pydantic = ["012c422859bac2e03ab3151ea6624fecf0e249486be7eb8c6ee69c91740c6752", "07911aab70f3bc52bb845ce1748569c5e70478ac977e106a150dd9d0465ebf04", "47b8db7024ba3d46c3d4768535e1cf87b6c8cf92ccd81e76f4e1cb8ee47688b3", "50e4e948892a6815649ad5a9a9379ad1e5f090f17842ac206535dfaed75c6f2f", "51f11c8bbf794a68086540da099aae4a9107447c7a9d63151edbb7d50110cf21", "6100d7862371115c40be55cc4b8d766a74b1d0dbaf99dbfe72bb4bac0faf89ed", "61d22d36808087d3184ed6ac0d91dd71c533b66addb02e4a9930e1e30833202f", "72184c1421103cca128300120f8f1185fb42a9ea73a1c9845b1c53db8c026a7d", "831a0265a9e3933b3d0f04d1a81bba543bafbe4119c183ff2771871db70524ab", "8848b4eb458469739126e4c1a202d723dd092e087f8dbe3104371335f87ba5df", "bbbed364376f4a0aebb9ea452ff7968b306499a9e74f4db69b28ff2cd4043a11", "e27559cedbd7f59d2375bfd6eea29a330ea1a5b0589c34d6b4e0d7bec6027bbf", "f17ec336e64d4583311249fb179528e9a2c27c8a2eaf590ec6ec2c6dece7cb3f", "f863456d3d4bf817f2e5248553dee3974c5dc796f48e6ddb599383570f4215ac"]
+pydocstyle = ["da7831660b7355307b32778c4a0dbfb137d89254ef31a2b2978f50fc0b4d7586", "f4f5d210610c2d153fae39093d44224c17429e2ad7da12a8b419aba5c2f614b5"]
+pyflakes = ["17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0", "d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2"]
+pygments = ["2a3fe295e54a20164a9df49c75fa58526d3be48e14aceba6d6b1e8ac0bfd6f1b", "98c8aa5a9f778fcd1026a17361ddaf7330d1b7c62ae97c3bb0ae73e0b9b6b0fe"]
pytest = ["3f193df1cfe1d1609d4c583838bea3d532b18d6160fd3f55c9447fdca30848ec", "e246cf173c01169b9617fc07264b7b1316e78d7a650055235d6d897bc80d9660"]
+python-jsonrpc-server = ["1f85f75f37f923149cc0aa078474b6df55b708e82ed819ca8846a65d7d0ada7f", "c73bf5495c9dd4d2f902755bedeb6da5afe778e0beee82f0e195c4655352fe37"]
+python-language-server = ["c95470de6da223cdad7e60121bf5d220c292146caf2712eaef47a515c879e29d", "f5685e1a6a3f6a2529ff75ea0676c59e769024302b2434564a5e7005d056eb82"]
requests = ["11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", "9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"]
+rope = ["52423a7eebb5306a6d63bdc91a7c657db51ac9babfb8341c9a1440831ecf3203", "ae1fa2fd56f64f4cc9be46493ce54bed0dd12dee03980c61a4393d89d84029ad", "d2830142c2e046f5fc26a022fe680675b6f48f81c7fc1f03a950706e746e9dfe"]
six = ["236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a", "8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"]
+snowballstemmer = ["209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0", "df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52"]
starlette = ["c2ac9a42e0e0328ad20fe444115ac5e3760c1ee2ac1ff8cdb5ec915c4a453411"]
+ujson = ["f66073e5506e91d204ab0c614a148d5aa938bdbf104751be66f8ad7a222f5f86"]
urllib3 = ["2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc", "87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc"]
+urwid = ["0896f36060beb6bf3801cb554303fef336a79661401797551ba106d23ab4cd86"]
uvicorn = ["0f58170165c4495f563d8224b2f415a0829af0412baa034d6f777904613087fd", "6fdaf8e53bf1b2ddf0fe9ed06079b5348d7d1d87b3365fe2549e6de0d49e631c"]
uvloop = ["08b109f0213af392150e2fe6f81d33261bb5ce968a288eb698aad4f46eb711bd", "123ac9c0c7dd71464f58f1b4ee0bbd81285d96cdda8bc3519281b8973e3a461e", "4315d2ec3ca393dd5bc0b0089d23101276778c304d42faff5dc4579cb6caef09", "4544dcf77d74f3a84f03dd6278174575c44c67d7165d4c42c71db3fdc3860726", "afd5513c0ae414ec71d24f6f123614a80f3d27ca655a4fcf6cabe50994cc1891", "b4f591aa4b3fa7f32fb51e2ee9fea1b495eb75b0b3c8d0ca52514ad675ae63f7", "bcac356d62edd330080aed082e78d4b580ff260a677508718f88016333e2c9c5", "e7514d7a48c063226b7d06617cbb12a14278d4323a065a8d46a7962686ce2e95", "f07909cd9fc08c52d294b1570bba92186181ca01fe3dc9ffba68955273dd7362"]
websockets = ["0e4fb4de42701340bd2353bb2eee45314651caa6ccee80dbd5f5d5978888fed5", "1d3f1bf059d04a4e0eb4985a887d49195e15ebabc42364f4eb564b1d065793f5", "20891f0dddade307ffddf593c733a3fdb6b83e6f9eef85908113e628fa5a8308", "295359a2cc78736737dd88c343cd0747546b2174b5e1adc223824bcaf3e164cb", "2db62a9142e88535038a6bcfea70ef9447696ea77891aebb730a333a51ed559a", "3762791ab8b38948f0c4d281c8b2ddfa99b7e510e46bd8dfa942a5fff621068c", "3db87421956f1b0779a7564915875ba774295cc86e81bc671631379371af1170", "3ef56fcc7b1ff90de46ccd5a687bbd13a3180132268c4254fc0fa44ecf4fc422", "4f9f7d28ce1d8f1295717c2c25b732c2bc0645db3215cf757551c392177d7cb8", "5c01fd846263a75bc8a2b9542606927cfad57e7282965d96b93c387622487485", "5c65d2da8c6bce0fca2528f69f44b2f977e06954c8512a952222cea50dad430f", "751a556205d8245ff94aeef23546a1113b1dd4f6e4d102ded66c39b99c2ce6c8", "7ff46d441db78241f4c6c27b3868c9ae71473fe03341340d2dfdbe8d79310acc", "965889d9f0e2a75edd81a07592d0ced54daa5b0785f57dc429c378edbcffe779", "9b248ba3dd8a03b1a10b19efe7d4f7fa41d158fdaa95e2cf65af5a7b95a4f989", "9bef37ee224e104a413f0780e29adb3e514a5b698aabe0d969a6ba426b8435d1", "c1ec8db4fac31850286b7cd3b9c0e1b944204668b8eb721674916d4e28744092", "c8a116feafdb1f84607cb3b14aa1418424ae71fee131642fc568d21423b51824", "ce85b06a10fc65e6143518b96d3dca27b081a740bae261c2fb20375801a9d56d", "d705f8aeecdf3262379644e4b55107a3b55860eb812b673b28d0fbc347a60c55", "e898a0863421650f0bebac8ba40840fc02258ef4714cb7e1fd76b6a6354bda36", "f8a7bff6e8664afc4e6c28b983845c5bc14965030e3fb98789734d416af77c4b"]
+yapf = ["712e23c468506bf12cadd10169f852572ecc61b266258422d45aaf4ad7ef43de", "cad8a272c6001b3401de3278238fdc54997b6c2e56baa751788915f879a52fca"]
zipp = ["12248a63bbdf7548f89cb4c7cda4681e537031eda29c02ea29674bc6854460c2", "7c0f8e91abc0dc07a5068f315c52cb30c66bfbc581e5b50704c8a2f6ebae794a"]
diff --git a/examples/api-datadisplay/pyproject.toml b/examples/api-datadisplay/pyproject.toml
index 0684fee..9f8041e 100644
--- a/examples/api-datadisplay/pyproject.toml
+++ b/examples/api-datadisplay/pyproject.toml
@@ -14,6 +14,15 @@ uvicorn = "^0.11.3"
[tool.poetry.dev-dependencies]
pytest = "^3.0"
+autopep8 = "^1.5"
+pudb = "^2019.2"
+McCabe = "^0.6.1"
+YAPF = "^0.29.0"
+pydocstyle = "^5.0"
+Pyflakes = "^2.1"
+Rope = "^0.16.0"
+python-language-server = "^0.31.8"
+pycodestyle = "^2.5"
[build-system]
requires = ["poetry>=0.12"]
diff --git a/examples/api-datadisplay/static/.gitignore b/examples/api-datadisplay/static/.gitignore
new file mode 100644
index 0000000..5e7d273
--- /dev/null
+++ b/examples/api-datadisplay/static/.gitignore
@@ -0,0 +1,4 @@
+# Ignore everything in this directory
+*
+# Except this file
+!.gitignore
diff --git a/examples/base/.gitignore b/examples/base/.gitignore
new file mode 100644
index 0000000..8e5d68e
--- /dev/null
+++ b/examples/base/.gitignore
@@ -0,0 +1,138 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+pip-wheel-metadata/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+# For a library or package, you might want to ignore these files since the code is
+# intended to run in multiple environments; otherwise, check them in:
+# .python-version
+
+# pipenv
+# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+# However, in case of collaboration, if having platform-specific dependencies or dependencies
+# having no cross-platform support, pipenv may install dependencies that don't work, or not
+# install all needed dependencies.
+#Pipfile.lock
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# custom ignores
+*node_modules/
+*bower_components/
diff --git a/examples/base/Dockerfile b/examples/base/Dockerfile
new file mode 100644
index 0000000..5240b82
--- /dev/null
+++ b/examples/base/Dockerfile
@@ -0,0 +1,8 @@
+FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7
+
+RUN ["pip", "install", "aiofiles", "jinja2" ]
+
+COPY ./api_datadisplay /app
+COPY ./node_modules /node_modules
+COPY ./bower_components /bower_components
+COPY ./static /static
diff --git a/examples/base/README.rst b/examples/base/README.rst
new file mode 100644
index 0000000..e69de29
diff --git a/examples/base/base/__init__.py b/examples/base/base/__init__.py
new file mode 100644
index 0000000..b794fd4
--- /dev/null
+++ b/examples/base/base/__init__.py
@@ -0,0 +1 @@
+__version__ = '0.1.0'
diff --git a/examples/base/base/main.py b/examples/base/base/main.py
new file mode 100644
index 0000000..dc5a14e
--- /dev/null
+++ b/examples/base/base/main.py
@@ -0,0 +1,31 @@
+from starlette.applications import Starlette
+from starlette.templating import Jinja2Templates
+from starlette.routing import Route, Mount
+from starlette.staticfiles import StaticFiles
+
+
+templates = Jinja2Templates(directory='templates')
+
+
+async def home(request):
+ return templates.TemplateResponse(
+ 'index.html',
+ {'request': request},
+ )
+
+routes = [
+ Route('/', endpoint=home),
+ Mount('/static', StaticFiles(directory='../static'), name='static'),
+ Mount(
+ '/node_modules',
+ StaticFiles(directory='../node_modules'),
+ name='node_modules',
+ ),
+ Mount(
+ '/bower_components',
+ StaticFiles(directory='../bower_components'),
+ name='bower_components',
+ ),
+]
+
+app = Starlette(debug=True, routes=routes)
diff --git a/examples/base/base/templates/index.html b/examples/base/base/templates/index.html
new file mode 100644
index 0000000..20024f7
--- /dev/null
+++ b/examples/base/base/templates/index.html
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+ api data-display
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Hello, world!
+
This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.
+
+
It uses utility classes for typography and spacing to space content out within the larger container.
+
Learn more
+
+
+
diff --git a/examples/base/bower.json b/examples/base/bower.json
new file mode 100644
index 0000000..5397452
--- /dev/null
+++ b/examples/base/bower.json
@@ -0,0 +1,17 @@
+{
+ "name": "api-datadisplay",
+ "description": "",
+ "main": "index.js",
+ "authors": [
+ "dtomlinson "
+ ],
+ "license": "ISC",
+ "homepage": "",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests"
+ ]
+}
diff --git a/examples/base/package-lock.json b/examples/base/package-lock.json
new file mode 100644
index 0000000..ccd5ade
--- /dev/null
+++ b/examples/base/package-lock.json
@@ -0,0 +1,33 @@
+{
+ "name": "api-datadisplay",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@fortawesome/fontawesome-free": {
+ "version": "5.12.1",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.12.1.tgz",
+ "integrity": "sha512-ZtjIIFplxncqxvogq148C3hBLQE+W3iJ8E4UvJ09zIJUgzwLcROsWwFDErVSXY2Plzao5J9KUYNHKHMEUYDMKw=="
+ },
+ "bootstrap": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.4.1.tgz",
+ "integrity": "sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA=="
+ },
+ "bootswatch": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/bootswatch/-/bootswatch-4.4.1.tgz",
+ "integrity": "sha512-Kx3z6+3Jpg9g6l/xZBCnc8d6KeJK0QawxCZWOomdcI5AuSZLZb+DoH5X9RJH+cOcSeMAxyzdIjkVUR01+Db5bQ=="
+ },
+ "jq-fakeloader": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/jq-fakeloader/-/jq-fakeloader-2.0.1.tgz",
+ "integrity": "sha512-INQYTpFJON2nD4TMTXifB4UCW03tSzCbAog+pUEUtVsJqzS7qoznW9OrAt/HUfvFMykx95WQXWFbrc3Uq9pagA=="
+ },
+ "jquery": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz",
+ "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw=="
+ }
+ }
+}
diff --git a/examples/base/package.json b/examples/base/package.json
new file mode 100644
index 0000000..e00a1db
--- /dev/null
+++ b/examples/base/package.json
@@ -0,0 +1,23 @@
+{
+ "name": "api-datadisplay",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "directories": {
+ "test": "tests"
+ },
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "@fortawesome/fontawesome-free": "^5.12.1",
+ "bootstrap": "^4.4.1",
+ "bootswatch": "^4.4.1",
+ "fakeloader": "^1.0.0",
+ "jq-fakeloader": "^2.0.1",
+ "jquery": "^3.4.1"
+ }
+}
diff --git a/examples/base/pyproject.toml b/examples/base/pyproject.toml
new file mode 100644
index 0000000..b4d3bb3
--- /dev/null
+++ b/examples/base/pyproject.toml
@@ -0,0 +1,20 @@
+[tool.poetry]
+name = "base"
+version = "0.1.0"
+description = ""
+authors = ["dtomlinson "]
+
+[tool.poetry.dependencies]
+python = "^3.7"
+fastapi = "^0.49.0"
+requests = "^2.22"
+jinja2 = "^2.11"
+aiofiles = "^0.4.0"
+uvicorn = "^0.11.3"
+
+[tool.poetry.dev-dependencies]
+pytest = "^3.0"
+
+[build-system]
+requires = ["poetry>=0.12"]
+build-backend = "poetry.masonry.api"
diff --git a/examples/base/static/.gitignore b/examples/base/static/.gitignore
new file mode 100644
index 0000000..5e7d273
--- /dev/null
+++ b/examples/base/static/.gitignore
@@ -0,0 +1,4 @@
+# Ignore everything in this directory
+*
+# Except this file
+!.gitignore
diff --git a/examples/base/tests/__init__.py b/examples/base/tests/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/examples/base/tests/test_api_datadisplay.py b/examples/base/tests/test_api_datadisplay.py
new file mode 100644
index 0000000..282c9a2
--- /dev/null
+++ b/examples/base/tests/test_api_datadisplay.py
@@ -0,0 +1,5 @@
+from api_datadisplay import __version__
+
+
+def test_version():
+ assert __version__ == '0.1.0'
diff --git a/examples/base/yarn.lock b/examples/base/yarn.lock
new file mode 100644
index 0000000..9745efc
--- /dev/null
+++ b/examples/base/yarn.lock
@@ -0,0 +1,28 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@fortawesome/fontawesome-free@^5.12.1":
+ version "5.12.1"
+ resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.12.1.tgz#2a98fea9fbb8a606ddc79a4680034e9d5591c550"
+ integrity sha512-ZtjIIFplxncqxvogq148C3hBLQE+W3iJ8E4UvJ09zIJUgzwLcROsWwFDErVSXY2Plzao5J9KUYNHKHMEUYDMKw==
+
+bootstrap@^4.4.1:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.4.1.tgz#8582960eea0c5cd2bede84d8b0baf3789c3e8b01"
+ integrity sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA==
+
+bootswatch@^4.4.1:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/bootswatch/-/bootswatch-4.4.1.tgz#f270618b4ebe07de8e1748acd88f104cc31bfec3"
+ integrity sha512-Kx3z6+3Jpg9g6l/xZBCnc8d6KeJK0QawxCZWOomdcI5AuSZLZb+DoH5X9RJH+cOcSeMAxyzdIjkVUR01+Db5bQ==
+
+fakeloader@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fakeloader/-/fakeloader-1.0.0.tgz#f8fa8041c13a4b95d2375650b388a0b8ddf087b1"
+ integrity sha512-Osfya50BPEONGUPsFlQhGx/oblMiCbk8HVu5BSVsDqTOgHitcyM5bDkdLGKObSRV8TGzaqbhHyh5DXEdCxOxuQ==
+
+jquery@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2"
+ integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==