Browse Source

🚚 Re-sort tutorial example files

pull/11/head
Sebastián Ramírez 6 years ago
parent
commit
a47243d915
  1. 10
      docs/tutorial/src/tutorial05-04.py
  2. 0
      docs/tutorial/src/tutorial05.py
  3. 10
      docs/tutorial/src/tutorial06.py
  4. 6
      docs/tutorial/src/tutorial07.py
  5. 4
      docs/tutorial/src/tutorial08.py
  6. 17
      docs/tutorial/src/tutorial09.py
  7. 6
      docs/tutorial/src/tutorial10.py
  8. 10
      docs/tutorial/src/tutorial11.py
  9. 7
      docs/tutorial/src/tutorial12.py
  10. 21
      docs/tutorial/src/tutorial13.py
  11. 2
      docs/tutorial/src/tutorial14.py
  12. 2
      docs/tutorial/src/tutorial15.py
  13. 6
      docs/tutorial/src/tutorial16.py
  14. 7
      docs/tutorial/src/tutorial17.py
  15. 21
      docs/tutorial/src/tutorial18-01.py
  16. 21
      docs/tutorial/src/tutorial18-03.py
  17. 1
      docs/tutorial/src/tutorial18.py
  18. 3
      docs/tutorial/src/tutorial19.py
  19. 17
      docs/tutorial/src/tutorial20.py
  20. 17
      docs/tutorial/src/tutorial21.py
  21. 19
      docs/tutorial/src/tutorial22.py
  22. 5
      docs/tutorial/src/tutorial23.py
  23. 3
      docs/tutorial/src/tutorial24.py
  24. 3
      docs/tutorial/src/tutorial25.py
  25. 17
      docs/tutorial/src/tutorial26.py
  26. 26
      docs/tutorial/src/tutorial27.py
  27. 30
      docs/tutorial/src/tutorial28.py
  28. 19
      docs/tutorial/src/tutorial29.py
  29. 12
      docs/tutorial/src/tutorial30.py
  30. 17
      docs/tutorial/src/tutorial31.py
  31. 13
      docs/tutorial/src/tutorial32.py
  32. 6
      docs/tutorial/src/tutorial33.py
  33. 12
      docs/tutorial/src/tutorial34.py
  34. 11
      docs/tutorial/src/tutorial35.py
  35. 11
      docs/tutorial/src/tutorial36.py
  36. 9
      docs/tutorial/src/tutorial37.py
  37. 25
      docs/tutorial/src/tutorial38.py
  38. 22
      docs/tutorial/src/tutorial39.py
  39. 27
      docs/tutorial/src/tutorial40.py
  40. 29
      docs/tutorial/src/tutorial41.py
  41. 13
      docs/tutorial/src/tutorial42.py
  42. 16
      docs/tutorial/src/tutorial43.py
  43. 19
      docs/tutorial/src/tutorial44.py
  44. 23
      docs/tutorial/src/tutorial45.py
  45. 44
      docs/tutorial/src/tutorial46.py
  46. 37
      docs/tutorial/src/tutorial47-01.py
  47. 11
      docs/tutorial/src/tutorial47-02.py
  48. 11
      docs/tutorial/src/tutorial47-03.py
  49. 11
      docs/tutorial/src/tutorial47-04.py
  50. 20
      docs/tutorial/src/tutorial47.py
  51. 26
      docs/tutorial/src/tutorial48.py
  52. 45
      docs/tutorial/src/tutorial49.py
  53. 44
      docs/tutorial/src/tutorial50.py
  54. 28
      docs/tutorial/src/tutorial51.py
  55. 28
      docs/tutorial/src/tutorial52.py
  56. 14
      docs/tutorial/src/tutorial53.py
  57. 19
      docs/tutorial/src/tutorial54.py
  58. 19
      docs/tutorial/src/tutorial55.py
  59. 25
      docs/tutorial/src/tutorial56.py
  60. 36
      docs/tutorial/src/tutorial57.py
  61. 29
      docs/tutorial/src/tutorial58.py
  62. 54
      docs/tutorial/src/tutorial59.py
  63. 61
      docs/tutorial/src/tutorial60.py
  64. 13
      docs/tutorial/src/tutorial61.py
  65. 14
      docs/tutorial/src/tutorial62.py
  66. 23
      docs/tutorial/src/tutorial63.py
  67. 0
      docs/tutorial/src/tutorial64.py
  68. 0
      docs/tutorial/src/tutorial65.py
  69. 0
      docs/tutorial/src/tutorial66.py
  70. 59
      docs/tutorial/src/tutorial67.py
  71. 66
      docs/tutorial/src/tutorial68.py

10
docs/tutorial/src/tutorial05-04.py

@ -1,10 +0,0 @@
from fastapi import FastAPI
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: str, q: str = None):
if q:
return {"item_id": item_id, "q": q}
return {"item_id": item_id}

0
docs/tutorial/src/tutorial05-01.py → docs/tutorial/src/tutorial05.py

10
docs/tutorial/src/tutorial06.py

@ -1,12 +1,10 @@
from fastapi import FastAPI
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: str, q: str = None, short: bool = False):
item = {"item_id": item_id}
async def read_item(item_id: str, q: str = None):
if q:
item.update({"q": q})
if not short:
item.update({"description": "This is an amazing item that has a long description"})
return item
return {"item_id": item_id, "q": q}
return {"item_id": item_id}

6
docs/tutorial/src/tutorial07.py

@ -2,9 +2,9 @@ from fastapi import FastAPI
app = FastAPI()
@app.get("/users/{user_id}/items/{item_id}")
async def read_user_item(user_id: int, item_id: str, q: str = None, short: bool = False):
item = {"item_id": item_id, "owner_id": user_id}
@app.get("/items/{item_id}")
async def read_item(item_id: str, q: str = None, short: bool = False):
item = {"item_id": item_id}
if q:
item.update({"q": q})
if not short:

4
docs/tutorial/src/tutorial08.py

@ -3,8 +3,8 @@ from fastapi import FastAPI
app = FastAPI()
@app.get("/users/{user_id}/items/{item_id}")
async def read_user_item(user_id: int, item_id: str, needy: str, q: str = None, short: bool = False):
item = {"item_id": item_id, "owner_id": user_id, "needy": needy}
async def read_user_item(user_id: int, item_id: str, q: str = None, short: bool = False):
item = {"item_id": item_id, "owner_id": user_id}
if q:
item.update({"q": q})
if not short:

17
docs/tutorial/src/tutorial09.py

@ -1,15 +1,12 @@
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
@app.get("/users/{user_id}/items/{item_id}")
async def read_user_item(user_id: int, item_id: str, needy: str, q: str = None, short: bool = False):
item = {"item_id": item_id, "owner_id": user_id, "needy": needy}
if q:
item.update({"q": q})
if not short:
item.update({"description": "This is an amazing item that has a long description"})
return item

6
docs/tutorial/src/tutorial10.py

@ -12,8 +12,4 @@ app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
item_dict = item.dict()
if item.tax:
price_with_tax = item.price + item.tax
item_dict.update({"price_with_tax": price_with_tax})
return item_dict
return item

10
docs/tutorial/src/tutorial11.py

@ -10,6 +10,10 @@ class Item(BaseModel):
app = FastAPI()
@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item):
return {"item_id": item_id, **item.dict()}
@app.post("/items/")
async def create_item(item: Item):
item_dict = item.dict()
if item.tax:
price_with_tax = item.price + item.tax
item_dict.update({"price_with_tax": price_with_tax})
return item_dict

7
docs/tutorial/src/tutorial12.py

@ -11,8 +11,5 @@ class Item(BaseModel):
app = FastAPI()
@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item, q: str = None):
result = {"item_id": item_id, **item.dict()}
if q:
result.update({"q": q})
return result
async def create_item(item_id: int, item: Item):
return {"item_id": item_id, **item.dict()}

21
docs/tutorial/src/tutorial13.py

@ -1,11 +1,18 @@
from fastapi import FastAPI, Query
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
app = FastAPI()
app = FastAPI()
@app.get("/items/")
async def read_items(q: str = Query(None, max_length=50)):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item, q: str = None):
result = {"item_id": item_id, **item.dict()}
if q:
results.update({"q": q})
return results
result.update({"q": q})
return result

2
docs/tutorial/src/tutorial14.py

@ -4,7 +4,7 @@ app = FastAPI()
@app.get("/items/")
async def read_items(q: str = Query(None, min_length=3, max_length=50)):
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})

2
docs/tutorial/src/tutorial15.py

@ -4,7 +4,7 @@ app = FastAPI()
@app.get("/items/")
async def read_items(q: str = Query(None, min_length=3, max_length=50, regex="^fixedquery$")):
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})

6
docs/tutorial/src/tutorial16.py

@ -4,11 +4,7 @@ app = FastAPI()
@app.get("/items/")
async def read_items(
q: str = Query(
None, title="Query string", min_length=3, max_length=50, regex="^fixedquery$"
)
):
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})

7
docs/tutorial/src/tutorial17.py

@ -6,12 +6,7 @@ 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$",
None, title="Query string", min_length=3, max_length=50, regex="^fixedquery$"
)
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}

21
docs/tutorial/src/tutorial18-01.py

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

21
docs/tutorial/src/tutorial18-03.py

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

1
docs/tutorial/src/tutorial18-02.py → docs/tutorial/src/tutorial18.py

@ -7,7 +7,6 @@ app = FastAPI()
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,

3
docs/tutorial/src/tutorial19.py

@ -6,14 +6,13 @@ app = FastAPI()
@app.get("/items/")
async def read_items(
q: str = Query(
None,
"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$",
deprecated=True,
)
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}

17
docs/tutorial/src/tutorial20.py

@ -1,14 +1,21 @@
from fastapi import FastAPI, Query, Path
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/{item_id}")
@app.get("/items/")
async def read_items(
item_id: int = Path(..., title="The ID of the item to get"),
q: str = Query(None, alias="item-query"),
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 = {"item_id": item_id}
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results

17
docs/tutorial/src/tutorial21.py

@ -1,14 +1,21 @@
from fastapi import FastAPI, Query, Path
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/{item_id}")
@app.get("/items/")
async def read_items(
q: str,
item_id: int = Path(..., title="The ID of the item to get"),
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 = {"item_id": item_id}
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results

19
docs/tutorial/src/tutorial22.py

@ -1,15 +1,22 @@
from fastapi import FastAPI, Query, Path
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/{item_id}")
@app.get("/items/")
async def read_items(
*,
item_id: int = Path(..., title="The ID of the item to get"),
q: str,
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 = {"item_id": item_id}
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results

5
docs/tutorial/src/tutorial23.py

@ -5,9 +5,8 @@ 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,
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:

3
docs/tutorial/src/tutorial24.py

@ -5,9 +5,8 @@ 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,
item_id: int = Path(..., title="The ID of the item to get"),
):
results = {"item_id": item_id}
if q:

3
docs/tutorial/src/tutorial25.py

@ -6,9 +6,8 @@ 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),
item_id: int = Path(..., title="The ID of the item to get"),
q: str,
size: float = Query(..., gt=0, lt=10.5)
):
results = {"item_id": item_id}
if q:

17
docs/tutorial/src/tutorial26.py

@ -1,26 +1,15 @@
from fastapi import FastAPI, Query, 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(
@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),
item_id: int = Path(..., title="The ID of the item to get", ge=1),
q: str,
item: Item = None,
):
results = {"item_id": item_id}
if q:
results.update({"q": q})
if item:
results.update({"item": item})
return results

26
docs/tutorial/src/tutorial27.py

@ -1,27 +1,15 @@
from fastapi import FastAPI, Query, Path
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(
@app.get("/items/{item_id}")
async def read_items(
*,
item_id: int,
item: Item,
user: User,
item_id: int = Path(..., title="The ID of the item to get", gt=0, le=1000),
q: str,
):
results = {"item_id": item_id, "item": item, "user": user}
results = {"item_id": item_id}
if q:
results.update({"q": q})
return results

30
docs/tutorial/src/tutorial28.py

@ -1,28 +1,16 @@
from fastapi import FastAPI, Query, Path, Body
from pydantic import BaseModel
from fastapi import FastAPI, Query, Path
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(
@app.get("/items/{item_id}")
async def read_items(
*,
item_id: int,
item: Item,
user: User,
access_token: str = Body(...),
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, "item": item, "user": user, "access_token": access_token}
results = {"item_id": item_id}
if q:
results.update({"q": q})
return results

19
docs/tutorial/src/tutorial29.py

@ -1,4 +1,4 @@
from fastapi import FastAPI, Query, Path, Body
from fastapi import FastAPI, Query, Path
from pydantic import BaseModel
app = FastAPI()
@ -11,21 +11,16 @@ class Item(BaseModel):
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,
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, "item": item, "user": user, "access_token": access_token}
results = {"item_id": item_id}
if q:
results.update({"q": q})
if item:
results.update({"item": item})
return results

12
docs/tutorial/src/tutorial30.py

@ -1,4 +1,4 @@
from fastapi import FastAPI, Query, Path, Body
from fastapi import FastAPI, Query, Path
from pydantic import BaseModel
app = FastAPI()
@ -11,11 +11,17 @@ class Item(BaseModel):
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 = Body(..., embed=True),
item: Item,
user: User,
):
results = {"item_id": item_id, "item": item}
results = {"item_id": item_id, "item": item, "user": user}
return results

17
docs/tutorial/src/tutorial31.py

@ -1,21 +1,28 @@
from fastapi import FastAPI, Query, Path, Body
from pydantic import BaseModel, Schema
from pydantic import BaseModel
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")
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 = Body(..., embed=True),
item: Item,
user: User,
access_token: str = Body(...),
):
results = {"item_id": item_id, "item": item}
results = {"item_id": item_id, "item": item, "user": user, "access_token": access_token}
return results

13
docs/tutorial/src/tutorial32.py

@ -9,7 +9,11 @@ class Item(BaseModel):
description: str = None
price: float
tax: float = None
tags: list = []
class User(BaseModel):
username: str
full_name: str = None
@app.put("/items/{item_id}")
@ -17,6 +21,11 @@ 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}
results = {"item_id": item_id, "item": item, "user": user, "access_token": access_token}
if q:
results.update({"q": q})
return results

6
docs/tutorial/src/tutorial33.py

@ -1,6 +1,5 @@
from fastapi import Body, FastAPI, Path, Query
from fastapi import FastAPI, Query, Path, Body
from pydantic import BaseModel
from typing import List
app = FastAPI()
@ -10,14 +9,13 @@ class Item(BaseModel):
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,
item: Item = Body(..., embed=True),
):
results = {"item_id": item_id, "item": item}
return results

12
docs/tutorial/src/tutorial34.py

@ -1,23 +1,21 @@
from fastapi import Body, FastAPI, Path, Query
from pydantic import BaseModel
from typing import Set
from fastapi import FastAPI, Query, Path, Body
from pydantic import BaseModel, Schema
app = FastAPI()
class Item(BaseModel):
name: str
description: str = None
price: float
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
tags: Set[str] = []
@app.put("/items/{item_id}")
async def update_item(
*,
item_id: int,
item: Item,
item: Item = Body(..., embed=True),
):
results = {"item_id": item_id, "item": item}
return results

11
docs/tutorial/src/tutorial35.py

@ -1,22 +1,15 @@
from fastapi import Body, FastAPI, Path, Query
from fastapi import FastAPI, Query, Path, Body
from pydantic import BaseModel
from typing import Set
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
tags: list = []
@app.put("/items/{item_id}")

11
docs/tutorial/src/tutorial36.py

@ -1,23 +1,16 @@
from fastapi import Body, FastAPI, Path, Query
from pydantic import BaseModel
from pydantic.types import UrlStr
from typing import Set
from typing import List
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
tags: List[str] = []
@app.put("/items/{item_id}")

9
docs/tutorial/src/tutorial37.py

@ -1,23 +1,16 @@
from fastapi import Body, FastAPI, Path, Query
from pydantic import BaseModel
from pydantic.types import UrlStr
from typing import Set, List
from typing import Set
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}")

25
docs/tutorial/src/tutorial38.py

@ -1,13 +1,12 @@
from fastapi import Body, FastAPI, Path, Query
from pydantic import BaseModel
from pydantic.types import UrlStr
from typing import Set, List
from typing import Set
app = FastAPI()
class Image(BaseModel):
url: UrlStr
url: str
name: str
@ -17,16 +16,14 @@ class Item(BaseModel):
price: float
tax: float = None
tags: Set[str] = []
image: List[Image] = None
image: 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
@app.put("/items/{item_id}")
async def update_item(
*,
item_id: int,
item: Item,
):
results = {"item_id": item_id, "item": item}
return results

22
docs/tutorial/src/tutorial39.py

@ -1,7 +1,7 @@
from fastapi import Body, FastAPI, Path, Query
from pydantic import BaseModel
from pydantic.types import UrlStr
from typing import Set, List
from typing import Set
app = FastAPI()
@ -11,6 +11,20 @@ class Image(BaseModel):
name: str
@app.post("/images/multiple/")
async def create_multiple_images(*, images: List[Image]):
return images
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

27
docs/tutorial/src/tutorial40.py

@ -1,4 +1,4 @@
from fastapi import FastAPI, Cookie
from fastapi import Body, FastAPI, Path, Query
from pydantic import BaseModel
from pydantic.types import UrlStr
from typing import Set, List
@ -6,6 +6,25 @@ from typing import Set, List
app = FastAPI()
@app.get("/items/")
async def read_items(*, ads_id: str = Cookie(None)):
return {"ads_id": ads_id}
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

29
docs/tutorial/src/tutorial41.py

@ -1,4 +1,4 @@
from fastapi import FastAPI, Header
from fastapi import Body, FastAPI, Path, Query
from pydantic import BaseModel
from pydantic.types import UrlStr
from typing import Set, List
@ -6,6 +6,27 @@ from typing import Set, List
app = FastAPI()
@app.get("/items/")
async def read_items(*, accept_encoding: str = Header(None)):
return {"Accept-Encoding": accept_encoding}
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

13
docs/tutorial/src/tutorial42.py

@ -1,4 +1,4 @@
from fastapi import FastAPI, Header
from fastapi import Body, FastAPI, Path, Query
from pydantic import BaseModel
from pydantic.types import UrlStr
from typing import Set, List
@ -6,6 +6,11 @@ from typing import Set, List
app = FastAPI()
@app.get("/items/")
async def read_items(*, strange_header: str = Header(None, convert_underscores=False)):
return {"strange_header": strange_header}
class Image(BaseModel):
url: UrlStr
name: str
@app.post("/images/multiple/")
async def create_multiple_images(*, images: List[Image]):
return images

16
docs/tutorial/src/tutorial43.py

@ -1,4 +1,4 @@
from fastapi import Body, FastAPI, Path, Query
from fastapi import FastAPI, Cookie
from pydantic import BaseModel
from pydantic.types import UrlStr
from typing import Set, List
@ -6,14 +6,6 @@ from typing import Set, List
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
@app.get("/items/")
async def read_items(*, ads_id: str = Cookie(None)):
return {"ads_id": ads_id}

19
docs/tutorial/src/tutorial44.py

@ -1,20 +1,11 @@
from fastapi import Body, FastAPI, Path, Query
from fastapi import FastAPI, Header
from pydantic import BaseModel
from pydantic.types import EmailStr
from pydantic.types import UrlStr
from typing import Set, List
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
@app.get("/items/")
async def read_items(*, accept_encoding: str = Header(None)):
return {"Accept-Encoding": accept_encoding}

23
docs/tutorial/src/tutorial45.py

@ -1,24 +1,11 @@
from fastapi import Body, FastAPI, Path, Query
from fastapi import FastAPI, Header
from pydantic import BaseModel
from pydantic.types import EmailStr
from pydantic.types import UrlStr
from typing import Set, List
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
@app.get("/items/")
async def read_items(*, strange_header: str = Header(None, convert_underscores=False)):
return {"strange_header": strange_header}

44
docs/tutorial/src/tutorial46.py

@ -1,43 +1,19 @@
from fastapi import Body, FastAPI, Path, Query
from pydantic import BaseModel
from pydantic.types import EmailStr
from pydantic.types import UrlStr
from typing import Set, List
from uuid import UUID, uuid4
app = FastAPI()
class UserIn(BaseModel):
username: str
password: str
email: EmailStr
full_name: str = None
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
tags: Set[str] = []
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
@app.post("/items/", response_model=Item)
async def create_item(*, item: Item):
return item

37
docs/tutorial/src/tutorial47-01.py

@ -1,37 +0,0 @@
from fastapi import Body, FastAPI, Path, Query
from pydantic import BaseModel
from pydantic.types import EmailStr
from typing import Set, List
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

11
docs/tutorial/src/tutorial47-02.py

@ -1,11 +0,0 @@
from fastapi import Body, FastAPI, Path, Query, Form
from pydantic import BaseModel
from pydantic.types import EmailStr
from typing import Set, List
app = FastAPI()
@app.post("/login/")
async def login(*, username: str = Form(...), password: str = Form(...)):
return {"username": username}

11
docs/tutorial/src/tutorial47-03.py

@ -1,11 +0,0 @@
from fastapi import Body, FastAPI, Path, Query, File
from pydantic import BaseModel
from pydantic.types import EmailStr
from typing import Set, List
app = FastAPI()
@app.post("/files/")
async def create_file(*, file: bytes = File(...)):
return {"file_size": len(file)}

11
docs/tutorial/src/tutorial47-04.py

@ -1,11 +0,0 @@
from fastapi import Body, FastAPI, Path, Query, File, Form
from pydantic import BaseModel
from pydantic.types import EmailStr
from typing import Set, List
app = FastAPI()
@app.post("/files/")
async def create_file(*, file: bytes = File(...), token: str = Form(...)):
return {"file_size": len(file), "token": token}

20
docs/tutorial/src/tutorial47.py

@ -0,0 +1,20 @@
from fastapi import Body, FastAPI, Path, Query
from pydantic import BaseModel
from pydantic.types import EmailStr
from typing import Set, List
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

26
docs/tutorial/src/tutorial48.py

@ -1,20 +1,24 @@
from fastapi import Body, FastAPI, Path, Query
from starlette.status import HTTP_201_CREATED
from pydantic import BaseModel
from pydantic.types import UrlStr
from pydantic.types import EmailStr
from typing import Set, List
app = FastAPI()
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
tags: Set[str] = []
class UserIn(BaseModel):
username: str
password: str
email: EmailStr
full_name: str = None
@app.post("/items/", response_model=Item, status_code=HTTP_201_CREATED)
async def create_item(*, item: Item):
return item
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

45
docs/tutorial/src/tutorial49.py

@ -1,20 +1,43 @@
from fastapi import Body, FastAPI, Path, Query
from starlette.status import HTTP_201_CREATED
from pydantic import BaseModel
from pydantic.types import UrlStr
from pydantic.types import EmailStr
from typing import Set, List
from uuid import UUID, uuid4
app = FastAPI()
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
tags: Set[str] = []
class UserIn(BaseModel):
username: str
password: str
email: EmailStr
full_name: str = None
@app.post("/items/", response_model=Item, tags=["items"])
async def create_item(*, item: Item):
return item
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

44
docs/tutorial/src/tutorial50.py

@ -1,25 +1,37 @@
from fastapi import Body, FastAPI, Path, Query
from starlette.status import HTTP_201_CREATED
from pydantic import BaseModel
from pydantic.types import UrlStr
from pydantic.types import EmailStr
from typing import Set, List
app = FastAPI()
class UserBase(BaseModel):
username: str
email: EmailStr
full_name: str = None
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
tags: Set[str] = []
class UserIn(UserBase):
password: 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
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

28
docs/tutorial/src/tutorial51.py

@ -1,29 +1,11 @@
from fastapi import Body, FastAPI, Path, Query
from starlette.status import HTTP_201_CREATED
from fastapi import Body, FastAPI, Path, Query, Form
from pydantic import BaseModel
from pydantic.types import UrlStr
from pydantic.types import EmailStr
from typing import Set, List
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
@app.post("/login/")
async def login(*, username: str = Form(...), password: str = Form(...)):
return {"username": username}

28
docs/tutorial/src/tutorial52.py

@ -1,29 +1,11 @@
from fastapi import Body, FastAPI, Path, Query
from starlette.status import HTTP_201_CREATED
from fastapi import Body, FastAPI, Path, Query, File
from pydantic import BaseModel
from pydantic.types import UrlStr
from pydantic.types import EmailStr
from typing import Set, List
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
@app.post("/files/")
async def create_file(*, file: bytes = File(...)):
return {"file_size": len(file)}

14
docs/tutorial/src/tutorial53.py

@ -1,13 +1,11 @@
from typing import List, Set
from fastapi import Body, FastAPI, Path, Query
from fastapi import Body, FastAPI, Path, Query, File, Form
from pydantic import BaseModel
from pydantic.types import UrlStr
from starlette.status import HTTP_201_CREATED
from pydantic.types import EmailStr
from typing import Set, List
app = FastAPI()
@app.get("/items/", deprecated=True)
async def read_items():
return [{"item_id": "Foo"}]
@app.post("/files/")
async def create_file(*, file: bytes = File(...), token: str = Form(...)):
return {"file_size": len(file), "token": token}

19
docs/tutorial/src/tutorial54.py

@ -1,13 +1,20 @@
from typing import List, Set
from fastapi import Body, FastAPI, Path, Query
from starlette.status import HTTP_201_CREATED
from pydantic import BaseModel
from pydantic.types import UrlStr
from starlette.status import HTTP_201_CREATED
from typing import Set, List
app = FastAPI()
@app.get("/items/", operation_id="some_specific_id_you_define")
async def read_items():
return [{"item_id": "Foo"}]
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

19
docs/tutorial/src/tutorial55.py

@ -1,13 +1,20 @@
from typing import List, Set
from fastapi import Body, FastAPI, Path, Query
from starlette.status import HTTP_201_CREATED
from pydantic import BaseModel
from pydantic.types import UrlStr
from starlette.status import HTTP_201_CREATED
from typing import Set, List
app = FastAPI()
@app.get("/items/", include_in_schema=False)
async def read_items():
return [{"item_id": "Foo"}]
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

25
docs/tutorial/src/tutorial56.py

@ -1,14 +1,25 @@
from typing import List, Set
from fastapi import Body, FastAPI, Path, Query
from starlette.status import HTTP_201_CREATED
from pydantic import BaseModel
from pydantic.types import UrlStr
from starlette.status import HTTP_201_CREATED
from starlette.responses import UJSONResponse
from typing import Set, List
app = FastAPI()
@app.get("/items/", content_type=UJSONResponse)
async def read_items():
return [{"item_id": "Foo"}]
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

36
docs/tutorial/src/tutorial57.py

@ -1,23 +1,29 @@
from typing import List, Set
from fastapi import Body, FastAPI, Path, Query
from starlette.status import HTTP_201_CREATED
from pydantic import BaseModel
from pydantic.types import UrlStr
from starlette.status import HTTP_201_CREATED
from starlette.responses import HTMLResponse
from typing import Set, List
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>
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

29
docs/tutorial/src/tutorial58.py

@ -0,0 +1,29 @@
from fastapi import Body, FastAPI, Path, Query
from starlette.status import HTTP_201_CREATED
from pydantic import BaseModel
from pydantic.types import UrlStr
from typing import Set, List
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

54
docs/tutorial/src/tutorial59.py

@ -1,59 +1,13 @@
from typing import List, Set
from fastapi import Body, FastAPI, Path, Query, Depends, Cookie
from fastapi import Body, FastAPI, Path, Query
from pydantic import BaseModel
from pydantic.types import UrlStr
from starlette.status import HTTP_201_CREATED
from starlette.responses import HTMLResponse
from random import choice
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy import Column, Integer, DateTime, String, Boolean, ForeignKey
from sqlalchemy.ext.declarative import declarative_base, declared_attr
# 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
@app.get("/items/", deprecated=True)
async def read_items():
return [{"item_id": "Foo"}]

61
docs/tutorial/src/tutorial60.py

@ -1,66 +1,13 @@
from typing import List, Set
from fastapi import Body, FastAPI, Path, Query, Depends, Cookie
from fastapi import Body, FastAPI, Path, Query
from pydantic import BaseModel
from pydantic.types import UrlStr
from starlette.status import HTTP_201_CREATED
from starlette.responses import HTMLResponse
from random import choice
from typing import List, Optional, Union
from pydantic import BaseModel
from app.models.config import USERPROFILE_DOC_TYPE
from app.models.role import RoleEnum
from couchbase.bucket import Bucket
from couchbase.cluster import Cluster, PasswordAuthenticator
from couchbase import LOCKMODE_WAIT
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
@app.get("/items/", operation_id="some_specific_id_you_define")
async def read_items():
return [{"item_id": "Foo"}]

13
docs/tutorial/src/tutorial61.py

@ -0,0 +1,13 @@
from typing import List, Set
from fastapi import Body, FastAPI, Path, Query
from pydantic import BaseModel
from pydantic.types import UrlStr
from starlette.status import HTTP_201_CREATED
app = FastAPI()
@app.get("/items/", include_in_schema=False)
async def read_items():
return [{"item_id": "Foo"}]

14
docs/tutorial/src/tutorial62.py

@ -0,0 +1,14 @@
from typing import List, Set
from fastapi import Body, FastAPI, Path, Query
from pydantic import BaseModel
from pydantic.types import UrlStr
from starlette.status import HTTP_201_CREATED
from starlette.responses import UJSONResponse
app = FastAPI()
@app.get("/items/", content_type=UJSONResponse)
async def read_items():
return [{"item_id": "Foo"}]

23
docs/tutorial/src/tutorial63.py

@ -0,0 +1,23 @@
from typing import List, Set
from fastapi import Body, FastAPI, Path, Query
from pydantic import BaseModel
from pydantic.types import UrlStr
from starlette.status import HTTP_201_CREATED
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>
"""

0
docs/tutorial/src/tutorial58-01.py → docs/tutorial/src/tutorial64.py

0
docs/tutorial/src/tutorial58-02.py → docs/tutorial/src/tutorial65.py

0
docs/tutorial/src/tutorial58-03.py → docs/tutorial/src/tutorial66.py

59
docs/tutorial/src/tutorial67.py

@ -0,0 +1,59 @@
from typing import List, Set
from fastapi import Body, FastAPI, Path, Query, Depends, Cookie
from pydantic import BaseModel
from pydantic.types import UrlStr
from starlette.status import HTTP_201_CREATED
from starlette.responses import HTMLResponse
from random import choice
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy import Column, Integer, DateTime, String, Boolean, ForeignKey
from sqlalchemy.ext.declarative import declarative_base, declared_attr
# 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

66
docs/tutorial/src/tutorial68.py

@ -0,0 +1,66 @@
from typing import List, Set
from fastapi import Body, FastAPI, Path, Query, Depends, Cookie
from pydantic import BaseModel
from pydantic.types import UrlStr
from starlette.status import HTTP_201_CREATED
from starlette.responses import HTMLResponse
from random import choice
from typing import List, Optional, Union
from pydantic import BaseModel
from app.models.config import USERPROFILE_DOC_TYPE
from app.models.role import RoleEnum
from couchbase.bucket import Bucket
from couchbase.cluster import Cluster, PasswordAuthenticator
from couchbase import LOCKMODE_WAIT
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
Loading…
Cancel
Save