목록Python (38)
규도자 개발 블로그
sqlite memdb의 맹점 (※: 테스트할 때 주의할 점) 현재 사내의 거의 모든 프로젝트가 fastAPI + TDD 기반으로 만들어지고 있는데 테스트를 돌릴 때는 빠른 테스트 실행을 위해서 sqlite의 memdb를 이용하고 있다. 하지만 실제 실행환경과 pytest라는 커맨드를 이용한 테스트 환경에 조금 다른 점이 존재해서 개발 도중에 sync DB에서 사용하는 주소 sqlite:///:memory:와 sqlite+aiosqlite:///:memory:두 개를 모두 사용을 했는데 이상하게 한쪽에서 만든 table을 다른 테이블에서 조회하지 못해서 실험으로 로컬에서 실행할 때는 파일기반의 주소로 바꾸고, 테스트를 돌릴 때는 다시 메모리 db 주소로 바꿔서 진행하는 어이없는 짓을 잠깐 했었다. 상식적..
crybaby: 오류메시지를 slack으로 보내기 위한 exception handler 최근에 오픈소스 프로젝트를 또 하나 시작했다. 바로 crybaby라는 건데 sentry처럼 오류가 발생했을 때 해당 오류내역을 slack으로 받을 수 있게 해주는 파이썬 라이브러리이다. 아니~ 센트리게 있는데 뭐하러 이걸 써!? 하겠지만 sentry를 통해 exception을 slack으로 보내는 기능은 팀플랜일 때부터 지원하는 기능이다. 그러니까 "유료"라는 의미이다. 그래서 내 개인프로젝트에서 간단하게 쓸만한 라이브러리를 만들어서 오픈소스화 해보자 하는 마음에서 제작하게 되었다. pip install crybaby 명령어로 설치할 수 있고 소스 저장소는 https://github.com/jujumilk3/cryba..
FastAPI endpoint구성 응용 - 1. Path의 Datatype별로 분기 나누기 이미 누군가가 포스팅해놨으면 안쓰려고 했는데 아쉽게도 하나도 발견하질 못해서 내가 직접 작성한다. 영어로도 이부분에 대해서 포스팅을 해둔 사람이 없고 심지어는 FastAPI 공식 튜토리얼에도 누락된 부분이라 나중에 기회가 된다면 직접 작성해넣을 예정이다. 알만한 사람들은 다 아는 사실이지만 FastAPI는 거의 Pydantic과 Starlette으로 만들어진 프레임워크이다. 그래서 여기에서 제공하는 기능들은 거진 제공한다고 생각하면 된다. 그리고 거기엔 FastAPI 문서에는 없지만 Starlette에만 적혀있는 부분이있다. 그중 하나가 endpoint에서 Pathd의 DataType별로 분기를 치는 부분이다. f..
그건 바로 릴리즈 속도이다. 아무래도 재단이 아니라 개인이 관리하는 프로젝트이다보니 이해할 수도 있겠는데 이건 느려도... 너무 느리다. 약 한 달 전 구인구직 플랫폼 wanted에서 주최한 FastAPI MeetUp에 참여를 했었는데 원티드랩에서 발표한 자료를 보면 알 수 있다. 영상은 https://www.wanted.co.kr/events/meetup_fastapi 여기에서 시청 가능하다. 이건 너무 공감갔던 그 장면을 캡쳐한 것이다. PR하나가 머지될 때까지 약 1년... 내가 열었던 PR(https://github.com/tiangolo/fastapi/pull/4573)도 최초 PR이 2022년 2월 14일. tiangolo가 리뷰를 하고 답변을 달아준 것이 2022년 8월 3일까지 약 반년이나..
python-cli-base: 파이썬 cli package를 만들기 위한 베이스 프로젝트 를 만들었다. 코드는 https://github.com/jujumilk3/python-cli-base 이곳에서 확인할 수 있다. 물론 pip install python-cli-base명령어를 통해 pip로도 설치할 수 있으며 pypi 주소는 https://pypi.org/project/python-cli-base/ 이곳이다. 만약에 python cli app을 만들고 싶은 사람이라면 이걸 설치해서 어디서 무엇을 어떻게 참조해서 실행되는 것인지 분석해본다면 코드를 추가해서 간단하게 자신이 원하는 cli app을 제작할 수 있을 것이다. 그런 목적으로 제작하기도 했고. 내가 많이 해매서.. ㅠㅠ 최종목적은 circula..
내가 jetbrain IDE에서 black 포매터를 사용하는 방법 개발할 때 주로 IntelliJ IDEA를 쓰곤 하는데 보통 파이썬을 사용하는 IDE는 IDEA와 PyCharm일테니 공통적으로 적용할 수 있다. shift를 두번 누르면 search everywhere가 켜지는데 여기에서 external tools를 검색해서 들어가면 설정창에서 External Tools를 설정할 수 있는 창이 열린다. 이렇게 말이다. 이 상태에서 +를 누르고 Name과 Description은 취향것 입력하고 Program에는 black formmater 실행파일을 지정하고, Arguments에는 "$FilePath$"를 입력한다. 그러면 이렇게 Search Everywhere에서 black을 바로 찾아서 적용할 수 있다..
Elixir의 Pipe연산자(|>)를 파이썬에서쓰기 위한 발악 Airflow를 사용하다가 이런 생각을 했다. Airflow의 DAG는 원래는 비트연산자인 >>(rshift)를 이용해서 로 Task의존성을 명시해서 그것을 시각화하여 보여주곤 하는데 이걸 이용하면 Elixir에서처럼 Pipe연산자를 만들 수 있지 않을까..? 바로 작업에 착수했다. 일단은 class Add: def __init__(self, num: int): self.num = num def __rshift__(self, other: 'Add'): return Add(self.num + other.num) def __str__(self): return str(self.num) 이런 함수를 만들어서 num1 = Add(1) n..
파이썬 인터닝 (Python Interning) - 객체 재사용 파이썬 인터닝이란 만들어진 객체를 재사용하는 것을 의미한다. 파이썬을 처음 배울 때 알게 되는 내용이지만 파이썬은 oop를 지원하기 위해 모든 것들을 클래스와 객체로 관리한다. 다른 언어에서는 흔히 자료형이라고 부르는 것들도 객체이다. bool_ = True int_ = 123 str_ = 'zxc' float_ = 12.3 list_ = [1, 2, 3] tuple_ = (1, 1, 1) set_ = {1, 2, 3} dict_ = {'a': 1, 'b': 2, 'c': 3} print(type(bool_)) print(type(int_)) print(type(str_)) print..
파이썬 함수의 매개변수에 쓰이는 bare asterisk(*)의 의미 def include_router( self, router: routing.APIRouter, *, prefix: str = "", tags: Optional[List[Union[str, Enum]]] = None, dependencies: Optional[Sequence[Depends]] = None, responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, deprecated: Optional[bool] = None, include_in_schema: bool = True, default_response_class: Type[Response] = Default(JSONR..
파이썬의 유닛테스트를 한번에 파악할 수 있는 코드 # unittest_example.py import unittest def add(a, b): return a + b def sub(a, b): return a - b def mul(a, b): return a * b def div(a, b): return a / b class DummyTest(unittest.TestCase): def test_add(self): c = add(10, 20) self.assertEqual(c, 30) def test_sub(self): c = sub(20, 10) self.assertEqual(c, 10) def test_mul(self): c = mul(10, 10) self.assertEqual(c, 100) def..