wanderleihuttel

Python FastAPI

Feb 1st, 2025 (edited)
297
0
Never
5
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.33 KB | None | 0 0
  1. # app.py
  2. from http import HTTPStatus
  3.  
  4. from fastapi import FastAPI, HTTPException
  5. from sqlalchemy import create_engine, select
  6. from sqlalchemy.orm import Session
  7.  
  8. from fast_zero.models import User
  9. from fast_zero.schemas import Message, UserDB, UserList, UserPublic, UserSchema
  10. from fast_zero.settings import Settings
  11.  
  12. app = FastAPI()
  13.  
  14. database = []  # Lista provisória para fins de estudo
  15.  
  16.  
  17. @app.get('/', status_code=HTTPStatus.OK, response_model=Message)
  18. def read_root():
  19.     return {'message': 'Olá Mundo!'}
  20.  
  21.  
  22. @app.post('/users/', response_model=UserPublic, status_code=HTTPStatus.CREATED)
  23. def create_user(user: UserSchema):
  24.     # user_with_id = UserDB(**user.model_dump(), id=len(database) + 1)
  25.     # database.append(user_with_id)
  26.     # return user_with_id
  27.     engine = create_engine(Settings().DATABASE_URL)
  28.     with Session(engine) as session:
  29.         db_user = session.scalar(
  30.             select(User).where(
  31.                 (User.username == user.username) | (User.email == user.email)
  32.             )
  33.         )
  34.         if db_user:
  35.             if db_user.username == user.username:
  36.                 raise HTTPException(
  37.                     status_code=HTTPStatus.BAD_REQUEST,
  38.                     detail='Username already exists!',
  39.                 )
  40.             elif db_user.email == user.email:
  41.                 raise HTTPException(
  42.                     status_code=HTTPStatus.BAD_REQUEST,
  43.                     detail='Email already exists!',
  44.                 )
  45.         db_user = User(
  46.             username=user.username, email=user.email, password=user.password
  47.         )
  48.         session.add(db_user)
  49.         session.commit()
  50.         session.refresh(db_user)
  51.  
  52.     return db_user
  53.  
  54.  
  55. @app.get('/users/', response_model=UserList)
  56. def read_users():
  57.     return {'users': database}
  58.  
  59.  
  60. @app.get('/users/{user_id}', response_model=UserPublic)
  61. def read_user_exercicio(user_id: int):
  62.     if user_id > len(database) or user_id < 1:
  63.         raise HTTPException(
  64.             status_code=HTTPStatus.NOT_FOUND, detail='User not found!'
  65.         )
  66.  
  67.     return database[user_id - 1]
  68.  
  69.  
  70. @app.put('/users/{user_id}', response_model=UserPublic)
  71. def update_user(user_id: int, user: UserSchema):
  72.     if user_id < 1 or user_id > len(database):
  73.         raise HTTPException(
  74.             status_code=HTTPStatus.NOT_FOUND, detail='User not found!'
  75.         )
  76.     user_with_id = UserDB(id=user_id, **user.model_dump())
  77.     database[user_id - 1] = user_with_id
  78.     return user_with_id
  79.  
  80.  
  81. @app.delete('/users/{user_id}', response_model=Message)
  82. def delete_user(user_id: int):
  83.     if user_id < 1 or user_id > len(database):
  84.         raise HTTPException(
  85.             status_code=HTTPStatus.NOT_FOUND, detail='User not found!'
  86.         )
  87.     del database[user_id - 1]
  88.     return {'message': 'User deleted!'}
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100. #####################################################################################
  101. # errors
  102.       INFO   127.0.0.1:55195 - "POST /users/ HTTP/1.1" 500
  103.      ERROR   Exception in ASGI application
  104. Traceback (most recent call last):
  105.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\uvicorn\protocols\http\httptools_impl.py", line 409, in run_asgi
  106.     result = await app(  # type: ignore[func-returns-value]
  107.              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  108.         self.scope, self.receive, self.send
  109.         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  110.     )
  111.     ^
  112.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 60, in __call__
  113.     return await self.app(scope, receive, send)
  114.            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  115.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\fastapi\applications.py", line 1054, in __call__
  116.     await super().__call__(scope, receive, send)
  117.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\starlette\applications.py", line 112, in __call__
  118.     await self.middleware_stack(scope, receive, send)
  119.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\starlette\middleware\errors.py", line 187, in __call__
  120.     raise exc
  121.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\starlette\middleware\errors.py", line 165, in __call__
  122.     await self.app(scope, receive, _send)
  123.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\starlette\middleware\exceptions.py", line 62, in __call__
  124.     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  125.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app
  126.     raise exc
  127.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app
  128.     await app(scope, receive, sender)
  129.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\starlette\routing.py", line 715, in __call__
  130.     await self.middleware_stack(scope, receive, send)
  131.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\starlette\routing.py", line 735, in app
  132.     await route.handle(scope, receive, send)
  133.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\starlette\routing.py", line 288, in handle
  134.     await self.app(scope, receive, send)
  135.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\starlette\routing.py", line 76, in app
  136.     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  137.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app
  138.     raise exc
  139.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app
  140.     await app(scope, receive, sender)
  141.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\starlette\routing.py", line 73, in app
  142.     response = await f(request)
  143.                ^^^^^^^^^^^^^^^^
  144.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\fastapi\routing.py", line 301, in app
  145.     raw_response = await run_endpoint_function(
  146.                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  147.     ...<3 lines>...
  148.     )
  149.     ^
  150.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\fastapi\routing.py", line 214, in run_endpoint_function
  151.     return await run_in_threadpool(dependant.call, **values)
  152.            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  153.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\starlette\concurrency.py", line 37, in run_in_threadpool
  154.     return await anyio.to_thread.run_sync(func)
  155.            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  156.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\anyio\to_thread.py", line 56, in run_sync
  157.     return await get_async_backend().run_sync_in_worker_thread(
  158.            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  159.         func, args, abandon_on_cancel=abandon_on_cancel, limiter=limiter
  160.         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  161.     )
  162.     ^
  163.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\anyio\_backends\_asyncio.py", line 2461, in run_sync_in_worker_thread
  164.     return await future
  165.            ^^^^^^^^^^^^
  166.   File "E:\python\projetos\fast_zero\.venv\Lib\site-packages\anyio\_backends\_asyncio.py", line 962, in run
  167.     result = context.run(func, *args)
  168.   File "E:\python\projetos\fast_zero\fast_zero\app.py", line 23, in create_user
  169.     def create_user(user: UserSchema):
  170.                  ^^^^
  171. NameError: name 'crea' is not defined
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
Advertisement
Comments
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
Add Comment
Please, Sign In to add comment