규도자 개발 블로그

FastAPI 기여하기 본문

Python/FastAPI

FastAPI 기여하기

규도자 (gyudoza) 2022. 2. 18. 21:46

FastAPI 기여하기

저번에도 썼던 게시물의 2편이라 봐도 무방하다. 일단 Contribute에 대한 공식 안내는 이 링크를 찾아가보면 된다. 근데 이게 한사람이 관리하는 프로젝트라 언제 PR이 될지 모른다. 하지만 그냥 하는 거다. 구멍이 숭숭 뚫린 프레임워크니까..

먼저 fastapi 공식 repository에 간다. 그리고 fork를 딴다.

 

요기따.

 

그리고 local에 project를 클론해서 연다.

그럼 이런 모양이 된다. 그럼 fastapi를 실행해보자

당연히안된다. Fastapi는 다른 의존패키지가 꽤나 많기 때문이다. poetry에서 사용되는 pyproject.toml파일을 살펴보면 FastAPI의 프로젝트 의존성이 어떻게 구성돼있는지 알 수 있는데 각설하고 이걸 실행하고 싶으면 pyproject.toml의 requires와 dev란 안에 있는 애들을 어떻게든 설치하면 된다.

requires = [
    "starlette ==0.17.1",
    "pydantic >=1.6.2,!=1.7,!=1.7.1,!=1.7.2,!=1.7.3,!=1.8,!=1.8.1,<2.0.0",
]
dev = [
    "python-jose[cryptography] >=3.3.0,<4.0.0",
    "passlib[bcrypt] >=1.7.2,<2.0.0",
    "autoflake >=1.4.0,<2.0.0",
    "flake8 >=3.8.3,<4.0.0",
    "uvicorn[standard] >=0.12.0,<0.16.0",
]

이렇게 구성돼있는데 나는 그냥 pip가 익숙해서 requirements.txt에 위 내용을 넣고 설치하였다.

# requirements.txt
python-jose[cryptography] >=3.3.0,<4.0.0
passlib[bcrypt] >=1.7.2,<2.0.0
autoflake >=1.4.0,<2.0.0
flake8 >=3.8.3,<4.0.0
uvicorn[standard] >=0.12.0,<0.16.0
starlette ==0.17.1
pydantic >=1.6.2,!=1.7,!=1.7.1,!=1.7.2,!=1.7.3,!=1.8,!=1.8.1,<2.0.0

파일은 이렇게 구성하면 된다. 그리고 패키지를 설치하고 예제에서 나온 main.app을 프로젝트 루트에 작성해서 실행하면 된다.

# main.py
from typing import Optional

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

$ uvicorn main:app --reload

위 명령어로 실행하면?

자, 이렇게 익숙한 화면을 만날 수 있을 것이다. 간단하게 말하자면 FastAPI빼고 FastAPI를 실행하는 데 필요한 모든 의존성 패키지를 설치한다음에 예제대로 실행하면 된다. 주의할 점이라고 하면 toml파일에 적혀있는 패키지들의 버전도 잘 참고해야한다는 점이다. 당장에 uvicorn버전을 조금만 올려도 fastAPI는 실행되지 않는다. 어쩌면 이 상위버전 uvicorn과의 호환성도 Contribute할 수 있는 방법이 되겠다. 시간나면 나중에 내가 해야지 ㅎㅎ..

 

그리고 주의할 점은 내가 위 과정에서 만든 main.py나 requirements.txt를 포함시켜서 PR을 날리면 안된다는 점이다. 꼭 git status명령어로 변경된 파일만 확인하고 "git add ."이 아닌 특정 파일만 지정하는 방법으로 변경된 파일을 포함해 커밋하고 PR을 날리도록 하자.

그리고 커밋 메시지는 최대한 전의 형식과 맞게 하자. "저 이상한 사람 아니에요~"를 알려주는 과정이라고 보면 된다. 마치 원래 있던 사람이었던 것처럼 녹아드는 능력이 필요하다.

 

아 가장 중요한 코드와 커밋내용이다.

 

내가 날린 PR은 https://github.com/tiangolo/fastapi/pull/4573 이건데 FastAPI의 endpoint가 스키마를 의존하고 있으면 그 스키마에 쓰여있는 description이 날라가는 버그가 있어서 그걸 고쳐서 PR을 날렸다.

 

FastAPI는 아직 규모가 작고 코드를 파악하기 쉬운 데다가 기여할 수 있는 부분도 많아서(위에서 언급한 uvicorn 호환성이라던가) 한번쯤 시도해봄직 하다. 물론 언제 PR이 받아들여질지는 모르겠다.

 

놀랍게도 이양반 혼자서 관리하고 있는 프로젝트이니 말이다.

 

 

아무튼 내 PR은 언제 받아들여지나~ 하는 설레는 마음으로 아침에 눈을 뜰 수 있다. 마치 짝사랑 처럼 말이다.

 

Comments