]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
:memo: Add stubs for Security, multi-files, app configurations
authorSebastián Ramírez <tiangolo@gmail.com>
Sat, 15 Dec 2018 17:41:36 +0000 (21:41 +0400)
committerSebastián Ramírez <tiangolo@gmail.com>
Sat, 15 Dec 2018 17:41:36 +0000 (21:41 +0400)
74 files changed:
docs/tutorial/application-configuration.md [new file with mode: 0644]
docs/tutorial/bigger-applications.md [new file with mode: 0644]
docs/tutorial/dependencies/intro.md
docs/tutorial/security/first-steps.md [new file with mode: 0644]
docs/tutorial/security/intro.md [new file with mode: 0644]
docs/tutorial/security/oauth2-jwt.md [new file with mode: 0644]
docs/tutorial/security/simple-oauth2.md [new file with mode: 0644]
docs/tutorial/src/all/tutorial001.py [deleted file]
docs/tutorial/src/all/tutorial002.py [deleted file]
docs/tutorial/src/all/tutorial003.py [deleted file]
docs/tutorial/src/all/tutorial004.py [deleted file]
docs/tutorial/src/all/tutorial005.py [deleted file]
docs/tutorial/src/all/tutorial006.py [deleted file]
docs/tutorial/src/all/tutorial007.py [deleted file]
docs/tutorial/src/all/tutorial008.py [deleted file]
docs/tutorial/src/all/tutorial009.py [deleted file]
docs/tutorial/src/all/tutorial010.py [deleted file]
docs/tutorial/src/all/tutorial011.py [deleted file]
docs/tutorial/src/all/tutorial012.py [deleted file]
docs/tutorial/src/all/tutorial013.py [deleted file]
docs/tutorial/src/all/tutorial014.py [deleted file]
docs/tutorial/src/all/tutorial015.py [deleted file]
docs/tutorial/src/all/tutorial016.py [deleted file]
docs/tutorial/src/all/tutorial017.py [deleted file]
docs/tutorial/src/all/tutorial018.py [deleted file]
docs/tutorial/src/all/tutorial019.py [deleted file]
docs/tutorial/src/all/tutorial020.py [deleted file]
docs/tutorial/src/all/tutorial021.py [deleted file]
docs/tutorial/src/all/tutorial022.py [deleted file]
docs/tutorial/src/all/tutorial023.py [deleted file]
docs/tutorial/src/all/tutorial024.py [deleted file]
docs/tutorial/src/all/tutorial025.py [deleted file]
docs/tutorial/src/all/tutorial026.py [deleted file]
docs/tutorial/src/all/tutorial027.py [deleted file]
docs/tutorial/src/all/tutorial028.py [deleted file]
docs/tutorial/src/all/tutorial029.py [deleted file]
docs/tutorial/src/all/tutorial030.py [deleted file]
docs/tutorial/src/all/tutorial031.py [deleted file]
docs/tutorial/src/all/tutorial032.py [deleted file]
docs/tutorial/src/all/tutorial033.py [deleted file]
docs/tutorial/src/all/tutorial034.py [deleted file]
docs/tutorial/src/all/tutorial035.py [deleted file]
docs/tutorial/src/all/tutorial036.py [deleted file]
docs/tutorial/src/all/tutorial037.py [deleted file]
docs/tutorial/src/all/tutorial038.py [deleted file]
docs/tutorial/src/all/tutorial039.py [deleted file]
docs/tutorial/src/all/tutorial040.py [deleted file]
docs/tutorial/src/all/tutorial041.py [deleted file]
docs/tutorial/src/all/tutorial042.py [deleted file]
docs/tutorial/src/all/tutorial043.py [deleted file]
docs/tutorial/src/all/tutorial044.py [deleted file]
docs/tutorial/src/all/tutorial045.py [deleted file]
docs/tutorial/src/all/tutorial046.py [deleted file]
docs/tutorial/src/all/tutorial047.py [deleted file]
docs/tutorial/src/all/tutorial048.py [deleted file]
docs/tutorial/src/all/tutorial049.py [deleted file]
docs/tutorial/src/all/tutorial050.py [deleted file]
docs/tutorial/src/all/tutorial051.py [deleted file]
docs/tutorial/src/all/tutorial052.py [deleted file]
docs/tutorial/src/all/tutorial053.py [deleted file]
docs/tutorial/src/all/tutorial054.py [deleted file]
docs/tutorial/src/all/tutorial055.py [deleted file]
docs/tutorial/src/all/tutorial056.py [deleted file]
docs/tutorial/src/application-configuration/tutorial001.py [moved from docs/tutorial/src/all/tutorial064.py with 100% similarity]
docs/tutorial/src/application-configuration/tutorial002.py [moved from docs/tutorial/src/all/tutorial065.py with 100% similarity]
docs/tutorial/src/application-configuration/tutorial003.py [moved from docs/tutorial/src/all/tutorial066.py with 100% similarity]
docs/tutorial/src/bigger-applications/tutorial001.py [moved from docs/tutorial/src/all/tutorial061.py with 100% similarity]
docs/tutorial/src/bigger-applications/tutorial002.py [moved from docs/tutorial/src/all/tutorial062.py with 100% similarity]
docs/tutorial/src/bigger-applications/tutorial003.py [moved from docs/tutorial/src/all/tutorial063.py with 58% similarity]
docs/tutorial/src/security/tutorial001.py [moved from docs/tutorial/src/all/tutorial057.py with 100% similarity]
docs/tutorial/src/security/tutorial002.py [moved from docs/tutorial/src/all/tutorial058.py with 100% similarity]
docs/tutorial/src/security/tutorial003.py [moved from docs/tutorial/src/all/tutorial059.py with 100% similarity]
docs/tutorial/src/security/tutorial004.py [moved from docs/tutorial/src/all/tutorial060.py with 100% similarity]
mkdocs.yml

diff --git a/docs/tutorial/application-configuration.md b/docs/tutorial/application-configuration.md
new file mode 100644 (file)
index 0000000..d9b970f
--- /dev/null
@@ -0,0 +1,13 @@
+Coming soon...
+
+```Python
+{!./tutorial/src/application-configuration/tutorial001.py!}
+```
+
+```Python
+{!./tutorial/src/application-configuration/tutorial002.py!}
+```
+
+```Python
+{!./tutorial/src/application-configuration/tutorial003.py!}
+```
diff --git a/docs/tutorial/bigger-applications.md b/docs/tutorial/bigger-applications.md
new file mode 100644 (file)
index 0000000..499acf6
--- /dev/null
@@ -0,0 +1,13 @@
+Coming soon...
+
+```Python
+{!./tutorial/src/bigger-applications/tutorial001.py!}
+```
+
+```Python
+{!./tutorial/src/bigger-applications/tutorial002.py!}
+```
+
+```Python
+{!./tutorial/src/bigger-applications/tutorial003.py!}
+```
index 3607cc0a5e14476b3b967059ae019fbdbdeed57e..73ccde6726fee2093d71b84ef2d450c30a87be2f 100644 (file)
@@ -51,7 +51,7 @@ You can define dependencies that in turn can define dependencies themselves.
 
 In the end, a hierarchical tree of dependencies is built, and the **Dependency Injection** system takes care of solving all these dependencies for you (and your dependencies) and providing the results at each step.
 
-## Integrated with OpenAPI
+## Integrated with **OpenAPI**
 
 All these dependencies, while declaring their requirements, might have been adding parameters, validations, etc. to your path operations. 
 
diff --git a/docs/tutorial/security/first-steps.md b/docs/tutorial/security/first-steps.md
new file mode 100644 (file)
index 0000000..3cea5cb
--- /dev/null
@@ -0,0 +1,5 @@
+Coming soon...
+
+```Python
+{!./tutorial/src/security/tutorial002.py!}
+```
diff --git a/docs/tutorial/security/intro.md b/docs/tutorial/security/intro.md
new file mode 100644 (file)
index 0000000..e6891da
--- /dev/null
@@ -0,0 +1,5 @@
+Coming soon...
+
+```Python
+{!./tutorial/src/security/tutorial001.py!}
+```
diff --git a/docs/tutorial/security/oauth2-jwt.md b/docs/tutorial/security/oauth2-jwt.md
new file mode 100644 (file)
index 0000000..7ceef9d
--- /dev/null
@@ -0,0 +1,5 @@
+Coming soon...
+
+```Python
+{!./tutorial/src/security/tutorial004.py!}
+```
diff --git a/docs/tutorial/security/simple-oauth2.md b/docs/tutorial/security/simple-oauth2.md
new file mode 100644 (file)
index 0000000..5dff95b
--- /dev/null
@@ -0,0 +1,5 @@
+Coming soon...
+
+```Python
+{!./tutorial/src/security/tutorial003.py!}
+```
diff --git a/docs/tutorial/src/all/tutorial001.py b/docs/tutorial/src/all/tutorial001.py
deleted file mode 100644 (file)
index 183180c..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-from fastapi import FastAPI, Query
-
-app = FastAPI()
-
-
-@app.get("/items/")
-async def read_items(q: str = Query(None, max_length=50)):
-    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
-    if q:
-        results.update({"q": q})
-    return results
diff --git a/docs/tutorial/src/all/tutorial002.py b/docs/tutorial/src/all/tutorial002.py
deleted file mode 100644 (file)
index 311ece8..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-from fastapi import FastAPI, Query
-
-app = FastAPI()
-
-
-@app.get("/items/")
-async def read_items(q: str = Query(None, min_length=3, max_length=50)):
-    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
-    if q:
-        results.update({"q": q})
-    return results
diff --git a/docs/tutorial/src/all/tutorial003.py b/docs/tutorial/src/all/tutorial003.py
deleted file mode 100644 (file)
index 785db44..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-from fastapi import FastAPI, Query
-
-app = FastAPI()
-
-
-@app.get("/items/")
-async def read_items(
-    q: str = Query(None, min_length=3, max_length=50, regex="^fixedquery$")
-):
-    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
-    if q:
-        results.update({"q": q})
-    return results
diff --git a/docs/tutorial/src/all/tutorial004.py b/docs/tutorial/src/all/tutorial004.py
deleted file mode 100644 (file)
index 116829b..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-from fastapi import FastAPI, Query
-
-app = FastAPI()
-
-
-@app.get("/items/")
-async def read_items(
-    q: str = Query(
-        None, title="Query string", min_length=3, max_length=50, regex="^fixedquery$"
-    )
-):
-    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
-    if q:
-        results.update({"q": q})
-    return results
diff --git a/docs/tutorial/src/all/tutorial005.py b/docs/tutorial/src/all/tutorial005.py
deleted file mode 100644 (file)
index 67d5fd6..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-from fastapi import FastAPI, Query
-
-app = FastAPI()
-
-
-@app.get("/items/")
-async def read_items(
-    q: str = Query(
-        None,
-        title="Query string",
-        description="Query string for the items to search in the database that have a good match",
-        min_length=3,
-        max_length=50,
-        regex="^fixedquery$",
-    )
-):
-    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
-    if q:
-        results.update({"q": q})
-    return results
diff --git a/docs/tutorial/src/all/tutorial006.py b/docs/tutorial/src/all/tutorial006.py
deleted file mode 100644 (file)
index a4e3b81..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-from fastapi import FastAPI, Query
-
-app = FastAPI()
-
-
-@app.get("/items/")
-async def read_items(
-    q: str = Query(
-        "fixedquery",
-        alias="item-query",
-        title="Query string",
-        description="Query string for the items to search in the database that have a good match",
-        min_length=3,
-        max_length=50,
-        regex="^fixedquery$",
-    )
-):
-    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
-    if q:
-        results.update({"q": q})
-    return results
diff --git a/docs/tutorial/src/all/tutorial007.py b/docs/tutorial/src/all/tutorial007.py
deleted file mode 100644 (file)
index f261c95..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-from fastapi import FastAPI, Query
-
-app = FastAPI()
-
-
-@app.get("/items/")
-async def read_items(
-    q: str = Query(
-        None,
-        alias="item-query",
-        title="Query string",
-        description="Query string for the items to search in the database that have a good match",
-        min_length=3,
-        max_length=50,
-        regex="^fixedquery$",
-    )
-):
-    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
-    if q:
-        results.update({"q": q})
-    return results
diff --git a/docs/tutorial/src/all/tutorial008.py b/docs/tutorial/src/all/tutorial008.py
deleted file mode 100644 (file)
index b9bffca..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-from fastapi import FastAPI, Query
-
-app = FastAPI()
-
-
-@app.get("/items/")
-async def read_items(
-    q: str = Query(
-        ...,
-        alias="item-query",
-        title="Query string",
-        description="Query string for the items to search in the database that have a good match",
-        min_length=3,
-        max_length=50,
-        regex="^fixedquery$",
-    )
-):
-    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
-    if q:
-        results.update({"q": q})
-    return results
diff --git a/docs/tutorial/src/all/tutorial009.py b/docs/tutorial/src/all/tutorial009.py
deleted file mode 100644 (file)
index 051656c..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-from fastapi import FastAPI, Query
-
-app = FastAPI()
-
-
-@app.get("/items/")
-async def read_items(
-    q: str = Query(
-        None,
-        alias="item-query",
-        title="Query string",
-        description="Query string for the items to search in the database that have a good match",
-        min_length=3,
-        max_length=50,
-        regex="^fixedquery$",
-        deprecated=True,
-    )
-):
-    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
-    if q:
-        results.update({"q": q})
-    return results
diff --git a/docs/tutorial/src/all/tutorial010.py b/docs/tutorial/src/all/tutorial010.py
deleted file mode 100644 (file)
index fc19118..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-from fastapi import FastAPI, Path, Query
-
-app = FastAPI()
-
-
-@app.get("/items/{item_id}")
-async def read_items(
-    item_id: int = Path(..., title="The ID of the item to get"),
-    q: str = Query(None, alias="item-query"),
-):
-    results = {"item_id": item_id}
-    if q:
-        results.update({"q": q})
-    return results
diff --git a/docs/tutorial/src/all/tutorial011.py b/docs/tutorial/src/all/tutorial011.py
deleted file mode 100644 (file)
index 57ca50e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-from fastapi import FastAPI, Path
-
-app = FastAPI()
-
-
-@app.get("/items/{item_id}")
-async def read_items(
-    q: str, item_id: int = Path(..., title="The ID of the item to get")
-):
-    results = {"item_id": item_id}
-    if q:
-        results.update({"q": q})
-    return results
diff --git a/docs/tutorial/src/all/tutorial012.py b/docs/tutorial/src/all/tutorial012.py
deleted file mode 100644 (file)
index b6b5a19..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-from fastapi import FastAPI, Path
-
-app = FastAPI()
-
-
-@app.get("/items/{item_id}")
-async def read_items(
-    *, item_id: int = Path(..., title="The ID of the item to get"), q: str
-):
-    results = {"item_id": item_id}
-    if q:
-        results.update({"q": q})
-    return results
diff --git a/docs/tutorial/src/all/tutorial013.py b/docs/tutorial/src/all/tutorial013.py
deleted file mode 100644 (file)
index 2ec7082..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-from fastapi import FastAPI, Path
-
-app = FastAPI()
-
-
-@app.get("/items/{item_id}")
-async def read_items(
-    *, item_id: int = Path(..., title="The ID of the item to get", ge=1), q: str
-):
-    results = {"item_id": item_id}
-    if q:
-        results.update({"q": q})
-    return results
diff --git a/docs/tutorial/src/all/tutorial014.py b/docs/tutorial/src/all/tutorial014.py
deleted file mode 100644 (file)
index 2809f37..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-from fastapi import FastAPI, Path
-
-app = FastAPI()
-
-
-@app.get("/items/{item_id}")
-async def read_items(
-    *,
-    item_id: int = Path(..., title="The ID of the item to get", gt=0, le=1000),
-    q: str,
-):
-    results = {"item_id": item_id}
-    if q:
-        results.update({"q": q})
-    return results
diff --git a/docs/tutorial/src/all/tutorial015.py b/docs/tutorial/src/all/tutorial015.py
deleted file mode 100644 (file)
index 0c19579..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-from fastapi import FastAPI, Path, Query
-
-app = FastAPI()
-
-
-@app.get("/items/{item_id}")
-async def read_items(
-    *,
-    item_id: int = Path(..., title="The ID of the item to get", ge=0, le=1000),
-    q: str,
-    size: float = Query(..., gt=0, lt=10.5)
-):
-    results = {"item_id": item_id}
-    if q:
-        results.update({"q": q})
-    return results
diff --git a/docs/tutorial/src/all/tutorial016.py b/docs/tutorial/src/all/tutorial016.py
deleted file mode 100644 (file)
index 7918a2f..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-from fastapi import FastAPI, Path
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-
-
-@app.put("/items/{item_id}")
-async def update_item(
-    *,
-    item_id: int = Path(..., title="The ID of the item to get", ge=0, le=1000),
-    q: str,
-    item: Item = None,
-):
-    results = {"item_id": item_id}
-    if q:
-        results.update({"q": q})
-    if item:
-        results.update({"item": item})
-    return results
diff --git a/docs/tutorial/src/all/tutorial017.py b/docs/tutorial/src/all/tutorial017.py
deleted file mode 100644 (file)
index 5c9e834..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-from fastapi import FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-
-
-class User(BaseModel):
-    username: str
-    full_name: str = None
-
-
-@app.put("/items/{item_id}")
-async def update_item(*, item_id: int, item: Item, user: User):
-    results = {"item_id": item_id, "item": item, "user": user}
-    return results
diff --git a/docs/tutorial/src/all/tutorial018.py b/docs/tutorial/src/all/tutorial018.py
deleted file mode 100644 (file)
index 8dae852..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-from fastapi import Body, FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-
-
-class User(BaseModel):
-    username: str
-    full_name: str = None
-
-
-@app.put("/items/{item_id}")
-async def update_item(
-    *, item_id: int, item: Item, user: User, access_token: str = Body(...)
-):
-    results = {
-        "item_id": item_id,
-        "item": item,
-        "user": user,
-        "access_token": access_token,
-    }
-    return results
diff --git a/docs/tutorial/src/all/tutorial019.py b/docs/tutorial/src/all/tutorial019.py
deleted file mode 100644 (file)
index 845618f..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-from fastapi import Body, FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-
-
-class User(BaseModel):
-    username: str
-    full_name: str = None
-
-
-@app.put("/items/{item_id}")
-async def update_item(
-    *,
-    item_id: int,
-    item: Item,
-    user: User,
-    access_token: str = Body(...),
-    q: str = None,
-):
-    results = {
-        "item_id": item_id,
-        "item": item,
-        "user": user,
-        "access_token": access_token,
-    }
-    if q:
-        results.update({"q": q})
-    return results
diff --git a/docs/tutorial/src/all/tutorial020.py b/docs/tutorial/src/all/tutorial020.py
deleted file mode 100644 (file)
index 61f1b29..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-from fastapi import Body, FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-
-
-@app.put("/items/{item_id}")
-async def update_item(*, item_id: int, item: Item = Body(..., embed=True)):
-    results = {"item_id": item_id, "item": item}
-    return results
diff --git a/docs/tutorial/src/all/tutorial021.py b/docs/tutorial/src/all/tutorial021.py
deleted file mode 100644 (file)
index 6c8b101..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-from fastapi import Body, FastAPI
-from pydantic import BaseModel, Schema
-
-app = FastAPI()
-
-
-class Item(BaseModel):
-    name: str
-    description: str = Schema(None, title="The description of the item", max_length=300)
-    price: float = Schema(..., gt=0, description="The price must be greater than zero")
-    tax: float = None
-
-
-@app.put("/items/{item_id}")
-async def update_item(*, item_id: int, item: Item = Body(..., embed=True)):
-    results = {"item_id": item_id, "item": item}
-    return results
diff --git a/docs/tutorial/src/all/tutorial022.py b/docs/tutorial/src/all/tutorial022.py
deleted file mode 100644 (file)
index 1165fd7..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-from fastapi import Body, FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-
-
-@app.put("/items/{item_id}")
-async def update_item(
-    *,
-    item_id: int,
-    item: Item = Body(
-        ...,
-        example={
-            "name": "Foo",
-            "description": "A very nice Item",
-            "price": 35.4,
-            "tax": 3.2,
-        },
-    )
-):
-    results = {"item_id": item_id, "item": item}
-    return results
diff --git a/docs/tutorial/src/all/tutorial023.py b/docs/tutorial/src/all/tutorial023.py
deleted file mode 100644 (file)
index 9e0fa44..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-from fastapi import FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-    tags: list = []
-
-
-@app.put("/items/{item_id}")
-async def update_item(*, item_id: int, item: Item):
-    results = {"item_id": item_id, "item": item}
-    return results
diff --git a/docs/tutorial/src/all/tutorial024.py b/docs/tutorial/src/all/tutorial024.py
deleted file mode 100644 (file)
index 8f76927..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-from typing import List
-
-from fastapi import FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-    tags: List[str] = []
-
-
-@app.put("/items/{item_id}")
-async def update_item(*, item_id: int, item: Item):
-    results = {"item_id": item_id, "item": item}
-    return results
diff --git a/docs/tutorial/src/all/tutorial025.py b/docs/tutorial/src/all/tutorial025.py
deleted file mode 100644 (file)
index 291b3c6..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-from typing import Set
-
-from fastapi import FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-    tags: Set[str] = []
-
-
-@app.put("/items/{item_id}")
-async def update_item(*, item_id: int, item: Item):
-    results = {"item_id": item_id, "item": item}
-    return results
diff --git a/docs/tutorial/src/all/tutorial026.py b/docs/tutorial/src/all/tutorial026.py
deleted file mode 100644 (file)
index 257928e..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-from typing import Set
-
-from fastapi import FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class Image(BaseModel):
-    url: str
-    name: str
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-    tags: Set[str] = []
-    image: Image = None
-
-
-@app.put("/items/{item_id}")
-async def update_item(*, item_id: int, item: Item):
-    results = {"item_id": item_id, "item": item}
-    return results
diff --git a/docs/tutorial/src/all/tutorial027.py b/docs/tutorial/src/all/tutorial027.py
deleted file mode 100644 (file)
index f5f19b3..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-from typing import Set
-
-from fastapi import FastAPI
-from pydantic import BaseModel
-from pydantic.types import UrlStr
-
-app = FastAPI()
-
-
-class Image(BaseModel):
-    url: UrlStr
-    name: str
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-    tags: Set[str] = []
-    image: Image = None
-
-
-@app.put("/items/{item_id}")
-async def update_item(*, item_id: int, item: Item):
-    results = {"item_id": item_id, "item": item}
-    return results
diff --git a/docs/tutorial/src/all/tutorial028.py b/docs/tutorial/src/all/tutorial028.py
deleted file mode 100644 (file)
index 09d8be7..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-from typing import List, Set
-
-from fastapi import FastAPI
-from pydantic import BaseModel
-from pydantic.types import UrlStr
-
-app = FastAPI()
-
-
-class Image(BaseModel):
-    url: UrlStr
-    name: str
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-    tags: Set[str] = []
-    image: List[Image] = None
-
-
-@app.put("/items/{item_id}")
-async def update_item(*, item_id: int, item: Item):
-    results = {"item_id": item_id, "item": item}
-    return results
diff --git a/docs/tutorial/src/all/tutorial029.py b/docs/tutorial/src/all/tutorial029.py
deleted file mode 100644 (file)
index cda802d..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-from typing import List, Set
-
-from fastapi import FastAPI
-from pydantic import BaseModel
-from pydantic.types import UrlStr
-
-app = FastAPI()
-
-
-class Image(BaseModel):
-    url: UrlStr
-    name: str
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-    tags: Set[str] = []
-    image: List[Image] = None
-
-
-class Offer(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    items: List[Item]
-
-
-@app.post("/offers/")
-async def create_offer(*, offer: Offer):
-    return offer
diff --git a/docs/tutorial/src/all/tutorial030.py b/docs/tutorial/src/all/tutorial030.py
deleted file mode 100644 (file)
index 34b8685..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-from typing import List
-
-from fastapi import FastAPI
-from pydantic import BaseModel
-from pydantic.types import UrlStr
-
-app = FastAPI()
-
-
-class Image(BaseModel):
-    url: UrlStr
-    name: str
-
-
-@app.post("/images/multiple/")
-async def create_multiple_images(*, images: List[Image]):
-    return images
diff --git a/docs/tutorial/src/all/tutorial031.py b/docs/tutorial/src/all/tutorial031.py
deleted file mode 100644 (file)
index 5a6fd30..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-from fastapi import Cookie, FastAPI
-
-app = FastAPI()
-
-
-@app.get("/items/")
-async def read_items(*, ads_id: str = Cookie(None)):
-    return {"ads_id": ads_id}
diff --git a/docs/tutorial/src/all/tutorial032.py b/docs/tutorial/src/all/tutorial032.py
deleted file mode 100644 (file)
index 24a59e5..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-from fastapi import FastAPI, Header
-
-app = FastAPI()
-
-
-@app.get("/items/")
-async def read_items(*, accept_encoding: str = Header(None)):
-    return {"Accept-Encoding": accept_encoding}
diff --git a/docs/tutorial/src/all/tutorial033.py b/docs/tutorial/src/all/tutorial033.py
deleted file mode 100644 (file)
index 4edc4b6..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-from fastapi import FastAPI, Header
-
-app = FastAPI()
-
-
-@app.get("/items/")
-async def read_items(*, strange_header: str = Header(None, convert_underscores=False)):
-    return {"strange_header": strange_header}
diff --git a/docs/tutorial/src/all/tutorial034.py b/docs/tutorial/src/all/tutorial034.py
deleted file mode 100644 (file)
index 86dadcb..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-from typing import Set
-
-from fastapi import FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-    tags: Set[str] = []
-
-
-@app.post("/items/", response_model=Item)
-async def create_item(*, item: Item):
-    return item
diff --git a/docs/tutorial/src/all/tutorial035.py b/docs/tutorial/src/all/tutorial035.py
deleted file mode 100644 (file)
index 3fb475b..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-from fastapi import FastAPI
-from pydantic import BaseModel
-from pydantic.types import EmailStr
-
-app = FastAPI()
-
-
-class UserIn(BaseModel):
-    username: str
-    password: str
-    email: EmailStr
-    full_name: str = None
-
-
-# Don't do this in production!
-@app.post("/user/", response_model=UserIn)
-async def create_user(*, user: UserIn):
-    return user
diff --git a/docs/tutorial/src/all/tutorial036.py b/docs/tutorial/src/all/tutorial036.py
deleted file mode 100644 (file)
index c8ea361..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-from fastapi import FastAPI
-from pydantic import BaseModel
-from pydantic.types import EmailStr
-
-app = FastAPI()
-
-
-class UserIn(BaseModel):
-    username: str
-    password: str
-    email: EmailStr
-    full_name: str = None
-
-
-class UserOut(BaseModel):
-    username: str
-    email: EmailStr
-    full_name: str = None
-
-
-@app.post("/user/", response_model=UserOut)
-async def create_user(*, user: UserIn):
-    return user
diff --git a/docs/tutorial/src/all/tutorial037.py b/docs/tutorial/src/all/tutorial037.py
deleted file mode 100644 (file)
index aa8e7da..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-from fastapi import FastAPI
-from pydantic import BaseModel
-from pydantic.types import EmailStr
-
-app = FastAPI()
-
-
-class UserIn(BaseModel):
-    username: str
-    password: str
-    email: EmailStr
-    full_name: str = None
-
-
-class UserOut(BaseModel):
-    username: str
-    email: EmailStr
-    full_name: str = None
-
-
-class UserInDB(BaseModel):
-    username: str
-    hashed_password: str
-    email: EmailStr
-    full_name: str = None
-
-
-def fake_password_hasher(raw_password: str):
-    return "supersecret" + raw_password
-
-
-def fake_save_user(user_in: UserIn):
-    hashed_password = fake_password_hasher(user_in.password)
-    user_in_db = UserInDB(**user_in.dict(), hashed_password=hashed_password)
-    print("User saved! ..not really")
-    return user_in_db
-
-
-@app.post("/user/", response_model=UserOut)
-async def create_user(*, user_in: UserIn):
-    user_saved = fake_save_user(user_in)
-    return user_saved
diff --git a/docs/tutorial/src/all/tutorial038.py b/docs/tutorial/src/all/tutorial038.py
deleted file mode 100644 (file)
index 605baf9..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-from fastapi import FastAPI
-from pydantic import BaseModel
-from pydantic.types import EmailStr
-
-app = FastAPI()
-
-
-class UserBase(BaseModel):
-    username: str
-    email: EmailStr
-    full_name: str = None
-
-
-class UserIn(UserBase):
-    password: str
-
-
-class UserOut(UserBase):
-    pass
-
-
-class UserInDB(UserBase):
-    hashed_password: str
-
-
-def fake_password_hasher(raw_password: str):
-    return "supersecret" + raw_password
-
-
-def fake_save_user(user_in: UserIn):
-    hashed_password = fake_password_hasher(user_in.password)
-    user_in_db = UserInDB(**user_in.dict(), hashed_password=hashed_password)
-    print("User saved! ..not really")
-    return user_in_db
-
-
-@app.post("/user/", response_model=UserOut)
-async def create_user(*, user_in: UserIn):
-    user_saved = fake_save_user(user_in)
-    return user_saved
diff --git a/docs/tutorial/src/all/tutorial039.py b/docs/tutorial/src/all/tutorial039.py
deleted file mode 100644 (file)
index 0290b64..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-from fastapi import FastAPI, Form
-
-app = FastAPI()
-
-
-@app.post("/login/")
-async def login(*, username: str = Form(...), password: str = Form(...)):
-    return {"username": username}
diff --git a/docs/tutorial/src/all/tutorial040.py b/docs/tutorial/src/all/tutorial040.py
deleted file mode 100644 (file)
index 3e99fcd..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-from fastapi import FastAPI, File
-
-app = FastAPI()
-
-
-@app.post("/files/")
-async def create_file(*, file: bytes = File(...)):
-    return {"file_size": len(file)}
diff --git a/docs/tutorial/src/all/tutorial041.py b/docs/tutorial/src/all/tutorial041.py
deleted file mode 100644 (file)
index 1882a63..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-from fastapi import FastAPI, File, Form
-
-app = FastAPI()
-
-
-@app.post("/files/")
-async def create_file(*, file: bytes = File(...), token: str = Form(...)):
-    return {"file_size": len(file), "token": token}
diff --git a/docs/tutorial/src/all/tutorial042.py b/docs/tutorial/src/all/tutorial042.py
deleted file mode 100644 (file)
index b486018..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-from typing import Set
-
-from fastapi import FastAPI
-from pydantic import BaseModel
-from starlette.status import HTTP_201_CREATED
-
-app = FastAPI()
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-    tags: Set[str] = []
-
-
-@app.post("/items/", response_model=Item, status_code=HTTP_201_CREATED)
-async def create_item(*, item: Item):
-    return item
diff --git a/docs/tutorial/src/all/tutorial043.py b/docs/tutorial/src/all/tutorial043.py
deleted file mode 100644 (file)
index ccd5437..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-from typing import Set
-
-from fastapi import FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-    tags: Set[str] = []
-
-
-@app.post("/items/", response_model=Item, tags=["items"])
-async def create_item(*, item: Item):
-    return item
diff --git a/docs/tutorial/src/all/tutorial044.py b/docs/tutorial/src/all/tutorial044.py
deleted file mode 100644 (file)
index 106607f..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-from typing import Set
-
-from fastapi import FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-    tags: Set[str] = []
-
-
-@app.post(
-    "/items/",
-    response_model=Item,
-    summary="Create an item",
-    description="Create an item with all the information, name, description, price, tax and a set of unique tags",
-)
-async def create_item(*, item: Item):
-    return item
diff --git a/docs/tutorial/src/all/tutorial045.py b/docs/tutorial/src/all/tutorial045.py
deleted file mode 100644 (file)
index a4151a8..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-from typing import Set
-
-from fastapi import FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-    tags: Set[str] = []
-
-
-@app.post("/items/", response_model=Item, summary="Create an item")
-async def create_item(*, item: Item):
-    """
-    Create an item with all the information:
-    
-    * name: each item must have a name
-    * description: a long description
-    * price: required
-    * tax: if the item doesn't have tax, you can omit this
-    * tags: a set of unique tag strings for this item
-    """
-    return item
diff --git a/docs/tutorial/src/all/tutorial046.py b/docs/tutorial/src/all/tutorial046.py
deleted file mode 100644 (file)
index f710e6c..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-from typing import Set
-
-from fastapi import FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class Item(BaseModel):
-    name: str
-    description: str = None
-    price: float
-    tax: float = None
-    tags: Set[str] = []
-
-
-@app.post(
-    "/items/",
-    response_model=Item,
-    summary="Create an item",
-    response_description="The created item",
-)
-async def create_item(*, item: Item):
-    """
-    Create an item with all the information:
-    
-    * name: each item must have a name
-    * description: a long description
-    * price: required
-    * tax: if the item doesn't have tax, you can omit this
-    * tags: a set of unique tag strings for this item
-    """
-    return item
diff --git a/docs/tutorial/src/all/tutorial047.py b/docs/tutorial/src/all/tutorial047.py
deleted file mode 100644 (file)
index 11f3de6..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-from fastapi import FastAPI
-
-app = FastAPI()
-
-
-@app.get("/items/", deprecated=True)
-async def read_items():
-    return [{"item_id": "Foo"}]
diff --git a/docs/tutorial/src/all/tutorial048.py b/docs/tutorial/src/all/tutorial048.py
deleted file mode 100644 (file)
index fafa8ff..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-from fastapi import FastAPI
-
-app = FastAPI()
-
-
-@app.get("/items/", operation_id="some_specific_id_you_define")
-async def read_items():
-    return [{"item_id": "Foo"}]
diff --git a/docs/tutorial/src/all/tutorial049.py b/docs/tutorial/src/all/tutorial049.py
deleted file mode 100644 (file)
index dcc358e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-from fastapi import FastAPI
-
-app = FastAPI()
-
-
-@app.get("/items/", include_in_schema=False)
-async def read_items():
-    return [{"item_id": "Foo"}]
diff --git a/docs/tutorial/src/all/tutorial050.py b/docs/tutorial/src/all/tutorial050.py
deleted file mode 100644 (file)
index bba3f34..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-from fastapi import FastAPI
-from starlette.responses import UJSONResponse
-
-app = FastAPI()
-
-
-@app.get("/items/", content_type=UJSONResponse)
-async def read_items():
-    return [{"item_id": "Foo"}]
diff --git a/docs/tutorial/src/all/tutorial051.py b/docs/tutorial/src/all/tutorial051.py
deleted file mode 100644 (file)
index 214e642..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-from fastapi import FastAPI
-from starlette.responses import HTMLResponse
-
-app = FastAPI()
-
-
-@app.get("/items/", content_type=HTMLResponse)
-async def read_items():
-    return """
-    <html>
-        <head>
-            <title>Some HTML in here</title>
-        </head>
-        <body>
-            <h1>Look ma! HTML!</h1>
-        </body>
-    </html>
-    """
diff --git a/docs/tutorial/src/all/tutorial052.py b/docs/tutorial/src/all/tutorial052.py
deleted file mode 100644 (file)
index 82a5163..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-from fastapi import Depends, FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]
-
-
-class CommonQueryParams(BaseModel):
-    q: str = None
-    skip: int = None
-    limit: int = None
-
-
-async def common_parameters(q: str = None, skip: int = 0, limit: int = 100):
-    return CommonQueryParams(q=q, skip=skip, limit=limit)
-
-
-@app.get("/items/")
-async def read_items(commons: CommonQueryParams = Depends(common_parameters)):
-    response = {}
-    if commons.q:
-        response.update({"q": commons.q})
-    items = fake_items_db[commons.skip : commons.limit]
-    response.update({"items": items})
-    return response
diff --git a/docs/tutorial/src/all/tutorial053.py b/docs/tutorial/src/all/tutorial053.py
deleted file mode 100644 (file)
index e015f95..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-from typing import List
-
-from fastapi import Cookie, Depends, FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class InterestsTracker(BaseModel):
-    track_code: str
-    interests: List[str]
-
-
-fake_tracked_users_db = {
-    "Foo": {"track_code": "Foo", "interests": ["sports", "movies"]},
-    "Bar": {"track_code": "Bar", "interests": ["food", "shows"]},
-    "Baz": {"track_code": "Baz", "interests": ["gaming", "virtual reality"]},
-}
-
-
-async def get_tracked_interests(track_code: str = Cookie(None)):
-    if track_code in fake_tracked_users_db:
-        track_dict = fake_tracked_users_db[track_code]
-        track = InterestsTracker(**track_dict)
-        return track
-    return None
-
-
-@app.get("/interests/")
-async def read_interests(
-    tracked_interests: InterestsTracker = Depends(get_tracked_interests)
-):
-    response = {"interests": tracked_interests.interests}
-    return response
diff --git a/docs/tutorial/src/all/tutorial054.py b/docs/tutorial/src/all/tutorial054.py
deleted file mode 100644 (file)
index 3697b17..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-from random import choice
-from typing import List
-
-from fastapi import Cookie, Depends, FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class InterestsTracker(BaseModel):
-    track_code: str
-    interests: List[str]
-
-
-fake_tracked_users_db = {
-    "Foo": {"track_code": "Foo", "interests": ["sports", "movies"]},
-    "Bar": {"track_code": "Bar", "interests": ["food", "shows"]},
-    "Baz": {"track_code": "Baz", "interests": ["gaming", "virtual reality"]},
-}
-
-
-async def get_tracked_interests(track_code: str = Cookie(None)):
-    if track_code in fake_tracked_users_db:
-        track_dict = fake_tracked_users_db[track_code]
-        track = InterestsTracker(**track_dict)
-        return track
-    return None
-
-
-class ComplexTracker:
-    def __init__(self, tracker: InterestsTracker = Depends(get_tracked_interests)):
-        self.tracker = tracker
-
-    def random_interest(self):
-        """
-        Get a random interest from the tracked ones for the current user.
-        If the user doesn't have tracked interests, return a random one from the ones available.
-        """
-        if self.tracker.interests:
-            return choice(self.tracker.interests)
-        return choice(
-            ["sports", "movies", "food", "shows", "gaming", "virtual reality"]
-        )
-
-
-@app.get("/suggested-category")
-async def read_suggested_category(tracker: ComplexTracker = Depends(None)):
-    response = {"category": tracker.random_interest()}
-    return response
diff --git a/docs/tutorial/src/all/tutorial055.py b/docs/tutorial/src/all/tutorial055.py
deleted file mode 100644 (file)
index 720604c..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-from fastapi import FastAPI
-
-from sqlalchemy import Boolean, Column, Integer, String, create_engine
-from sqlalchemy.ext.declarative import declarative_base, declared_attr
-from sqlalchemy.orm import scoped_session, sessionmaker
-
-# SQLAlchemy specific code, as with any other app
-
-
-SQLALCHEMY_DATABASE_URI = "postgresql://user:password@postgresserver/db"
-
-# By creating this a CustomBase class and inheriting from it, your models will have
-# automatic __tablename__ attributes. So you don't have to declare them.
-# So, your models will behave very similarly to, for example, Flask-SQLAlchemy
-
-
-class CustomBase:
-    # Generate __tablename__ automatically
-    @declared_attr
-    def __tablename__(cls):
-        return cls.__name__.lower()
-
-
-Base = declarative_base(cls=CustomBase)
-
-
-class User(Base):
-    # Own properties
-    id = Column(Integer, primary_key=True, index=True)
-    email = Column(String, unique=True, index=True)
-    hashed_password = Column(String)
-    is_active = Column(Boolean(), default=True)
-
-
-engine = create_engine(SQLALCHEMY_DATABASE_URI, convert_unicode=True)
-db_session = scoped_session(
-    sessionmaker(autocommit=False, autoflush=False, bind=engine)
-)
-
-
-def get_user(username, db_session):
-    return db_session.query(User).filter(User.id == username).first()
-
-
-# FastAPI specific code
-app = FastAPI()
-
-
-@app.get("/users/{username}")
-def read_user(username: str):
-    user = get_user(username, db_session)
-    return user
diff --git a/docs/tutorial/src/all/tutorial056.py b/docs/tutorial/src/all/tutorial056.py
deleted file mode 100644 (file)
index 26897e1..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-from typing import Optional
-
-from fastapi import FastAPI
-from pydantic import BaseModel
-
-from app.models.config import USERPROFILE_DOC_TYPE
-from couchbase import LOCKMODE_WAIT
-from couchbase.bucket import Bucket
-from couchbase.cluster import Cluster, PasswordAuthenticator
-
-
-def get_bucket():
-    cluster = Cluster("couchbase://couchbasehost:8091")
-    authenticator = PasswordAuthenticator("username", "password")
-    cluster.authenticate(authenticator)
-    bucket: Bucket = cluster.open_bucket("bucket_name", lockmode=LOCKMODE_WAIT)
-    return bucket
-
-
-class User(BaseModel):
-    username: str
-    email: Optional[str] = None
-    full_name: Optional[str] = None
-    disabled: Optional[bool] = None
-
-
-class UserInDB(User):
-    type: str = USERPROFILE_DOC_TYPE
-    hashed_password: str
-
-    class Meta:
-        key: Optional[str] = None
-
-
-def get_user_doc_id(username):
-    return f"userprofile::{username}"
-
-
-def get_user(bucket: Bucket, username: str):
-    doc_id = get_user_doc_id(username)
-    result = bucket.get(doc_id, quiet=True)
-    if not result.value:
-        return None
-    user = UserInDB(**result.value)
-    user.Meta.key = result.key
-    return user
-
-
-# FastAPI specific code
-app = FastAPI()
-
-
-@app.get("/users/{username}")
-def read_user(username: str):
-    bucket = get_bucket()
-    user = get_user(bucket=bucket, username=username)
-    return user
similarity index 58%
rename from docs/tutorial/src/all/tutorial063.py
rename to docs/tutorial/src/bigger-applications/tutorial003.py
index 0f6d9b1c755e9e9d5896ec358581d3aaaa0f4ec6..88559fcd48b92f09aedd03691a90420b2deb8a78 100644 (file)
@@ -1,7 +1,7 @@
 from fastapi import FastAPI
 
-from .tutorial74 import router as users_router
-from .tutorial75 import router as items_router
+from .tutorial01 import router as users_router
+from .tutorial02 import router as items_router
 
 app = FastAPI()
 
index 83c9656b5d0af9797b70db051910dbf899ebcfd5..93ea28b710ff6b1af85218fe2ef91b165735fa35 100644 (file)
@@ -16,8 +16,8 @@ edit_uri: ""
 nav:
     - Introduction: 'index.md'
     - Features: 'features.md'
-    - Tutorial:
-        - Tutorial Intro: 'tutorial/intro.md'
+    - Tutorial - User Guide:
+        - Tutorial - User Guide - Intro: 'tutorial/intro.md'
         - First Steps: 'tutorial/first-steps.md'
         - Path Parameters: 'tutorial/path-params.md'
         - Query Parameters: 'tutorial/query-params.md'
@@ -43,6 +43,14 @@ nav:
             - Second Steps: 'tutorial/dependencies/second-steps.md'
         - SQL (Relational) Databases: 'tutorial/sql-databases.md'
         - NoSQL (Distributed / Big Data) Databases: 'tutorial/nosql-databases.md'
+        - Security: 
+            - Security Intro: 'tutorial/security/intro.md'
+            - First Steps: 'tutorial/security/first-steps.md'
+            - Simple OAuth2 with Password and Bearer: 'tutorial/security/simple-oauth2.md'
+            - OAuth2 with Password (and hashing), Bearer with JWT tokens: 'tutorial/security/oauth2-jwt.md'
+        - Bigger Applications - Multiple Files: 'tutorial/bigger-applications.md'
+        - Application Configuration: 'tutorial/application-configuration.md'
+        
     - Concurrency and async / await: 'async.md'
     - Deployment: 'deployment.md'