본문 바로가기

Python

(9)
[python fastapi] Depends에 동적으로 parameter 사용하기 Why?코드의 깔끔함을 위해서, 조금 더 재사용성이 좋고, API에 명시적으로 권한을 보고 싶어서 진행. 본문fastapi에 Depends()를 이용해서, user를 판별하고 있었고, 특정 API 마다 접근 할 수 있는 role을 부여하고 싶었다.예를 들면, admin만 접근 할 수 있는 API라던지, 로그인 한 유저라면 얼마든지 사용할 수 있는 API 라던지. 다만, 고려했던 사항은, router 내부에 코드를 추가하고 싶지 않았다. router의 Depends() 레벨에서 해결하고 싶었다. 아래는 간단하게 작성한, prototype code 이다.from fastapi import HTTPException, Depends, FastAPIfrom fastapi.security import OAuth2P..
[python] shallow copy, deep copy, pass by assignment Why?예상한 대로 메모리 할당이 되지 않는 것 같아서 테스트 진행서론swallow copy는 원본 메모리를 참조한다.deep copy는 새로운 메모리에 할당한다.재할당(초기화)는 위와 다른 얘기다(새로운 메모리).본문mutable listlistsetdictimmutable listtupleboolintfloutstrfrozenset헷갈렸던 부분python tutor라는 사이트를 발견했고, 이 사이트에서 메모리 테스트를 하다가, 예상과 다르게 동작해서 다시 찾아보게 되었다.https://pythontutor.com/visualize.html#mode=edit 공식 문서의 이론은 다음과 같다.https://docs.python.org/ko/3/library/copy.html얕은 복사는 새로운 복합 객체를..
[python] vscode dotenv.load_dotenv() os.getenv()가 최신화 되지 않는 문제 Why?vscode에서 python 개발을 할때 .env파일을 변경했음에도, os.getenv()를 진행하였을 때, 기존의 값이 적용됨. 문제 원인python 개발을 진행할 때, vscode에서 venv를 이용하여, python main.py와 같이 terminal 실행을 자주 하는데, terminal에 최신 환경변수가 적용되지 않아서 발생함. 테스트 코드import psycopgfrom fastapi import FastAPIimport dotenvimport osimport uvicorndef get_db_connection(): dotenv.load_dotenv() DB_NAME = os.getenv("DB_NAME") URL = f"postgresql://postgres:passw..
[fastapi documents] OpenAPI operationId Why?영어 공부 및 지식 습득SummaryOpenAPI에 API의 식별자를 변경할 수 있다.OpenAPI에서 API를 제외 시킬 수 있다.내용사용자 정의 OpenAPI path사용자가 직접 OpenAPI의 path operation을 operation_id를 이용해서 설정할 수 있다.from fastapi import FastAPIapp = FastAPI()@app.get("/items/", operation_id="some_specific_id_you_define")async def read_items(): return [{"item_id": "Foo"}]결과아래와 같이 구성하면, 함수 이름을 OpenAPI path operation으로 사용하는 것이 가능하다.from fastapi import..
[python documents] python3.11 pep655 TypeDict Why?영어 공부 및 지식 습득SummaryTypeDict의 각 요소에 required, not-required를 표시 할 수 있게 됨.내용Required, NotRequired를 이용해서, 각각의 요소들이 필요한지 여부를 쉽게 표현할 수 있다. 기존에는 이를 위해서 상속을 받아야 했다.기본적으로는 모든 field는 Required이지만, total parameter를 False로 셋팅하면, NotRequired가 기본이 된다.class Movie(TypedDict): title: str year: NotRequired[int]m1: Movie = {"title": "Black Panther", "year": 2018} # OKm2: Movie = {"title": "Star Wars"} # ..
[python documents] python3.11 pep594 사용 중단된 기본 모듈 목록 Why?영어 공부 및 지식 습득Summarypython3.13부터 삭제될 모듈들을 사용 중단 처리 하였다.내용중단된 모듈 리스트aifcchunkmsilibpipestelnetlibaudioopcryptnissndhdruucgiimghdrnntplibspwdxdrlibcgitbmailcapossaudiodevsunau추가 정보asynchat, asyncore, smtpd이 3개의 모듈은 python3.6부터 사용 중단 처리되어 있었는데, 이제 python3.12에서 삭제 됨을 문서에 업데이트 했다.lib2to3, 2to3 패키지는 python3.10버전 이상으로 parsing이 정상적으로 동작하지 않을 수 있다. 새로운 PEG parse에 대해서는 pep617을 확인하면 된다.삭제 이유더 이상 잘 사용되지..
[python documents] python3.11 pep 681(Data class transforms) Why?영어 공부 및 지식 습득summary몇몇 인기 있는 라이브러리에는 dataclasses와 유사하지만, standard type annotation을 사용해서 설명할 수는 없다.위에 해당하는 라이브러리는 attrs, pydantic, ORM 등을 말한다.contentsmotivationdataclass와 비슷한 라이브러리가 type checker들에 자신의 동작을 선언할 수 있는 표준 방법이 없다.커스텀 라이브러리가 존재하나, 유지가 어렵고, 파이썬 개발자도 다운로드, 설정하고 사용해야한다.rationale(이유)dataclass와 비슷한 모든 라이브러리의 기능을 지원하는 것은 아니다.라이브러리들의 일반적인 기능을 정적 타입 체크와 호환되는 방식으로 사용할 수 있게 한다.라이브러리들이 지원하지만, ..
[python documents] python3.11 pep654(ExceptionGroup) Why?영어 공부 및 지식 습득Summarypep654는 프로그램이 관련없는 에러, 예외 사항 여러개를 동시에 발생시키고, 처리할 수 있게 한다.ExceptionGroup, BaseExceptionGroup이라는 기본 type으로 이를 가능하게 한다.except* 문법은 예외 그룹의 하위 그룹과 일치하도록 일반화 할 수 있다.(ExceptionGroup 처리)contentsneeds지금까지 interpreter는 순간에 1개의 에러만 전파하는게 가능했다. chaning기능은 원인과 내용으로 서로 관련된 예외를 연결하지만, 스택이 풀릴 때 관련이 없는 여러 에러들이 전파되기를 원할 수 있다.real world use casesconcurrent errorsmultiple failures when retry..
[Python documents] python3.11 속도 Why?영어 공부도 할겸, 필요한 부분만 번역서론python3.11은 공식문서에 따르면, 10 ~ 65% 빨라졌다.일반적인 경우를 벤치마크한 결과 약 1.25배의 성능 향상을 보인다.내용측정 방법Ubuntu Linux에서 GCC로 컴파일을 진행하여, pyperformance benchmark suite로 성능 측정 결과 Cpython3.10 보다 25% 빠르다.Interpreter 실행이 빨라진 이유python 3.10python3.10의 경우 module을 실행할 때 다음과 같은 순서로 진행된다.Read __pycache__ -> Unmarshal -> Heap allocated code object -> Evaluatepython 3.11python3.11은 필수적인 코어 모듈들이 동결되었다. 이는 ..