한줄 요약: HttpUrl 필드는 "haha"가 아닌 Url("haha")으로 (재)할당하자.
개발하다보니 Pyright 타입검사를 꺼두고 했다는 것을 알게 되었다. (내가 엄청 개발을 잘하는 줄 알았음)
그래서 켰더니 예상치 못한곳에서 오류가 나왔고, 괜찮은 해결책을 찾지 못했다.
문제는 HttpUrl 타입 때문이였다. 나는 단순히 검증을 위해 str대신 HttpUrl을 사용했었다.
그런데 HttpUrl 타입 변수에 스트링 값을 할당할때 아래와 같은 오류를 만날 수 있었다.
“””
"list[str]" 형식의 인수를 "__init__" 함수에서 "list[HttpUrl]" 형식의 "screenshots" 매개 변수에 할당할 수 없습니다.
“””
오 이럴수가!
알고보니 HttpUrl는 Annotated[Url, UrlConstraints(…)]로 되어있었고,
Url은 SupportsAllComparisons를 상속했다.
str과의 관계는 정확히 모르겠지만 아무튼 str을 넣으려고 하는 시도는 pyright에서 막힌다.
str이 더 포괄적인 개념이라서 HttpUrl에 대입할 수 없다는건 잘 알고 있다.
하지만, 이를 검증하는건 런타임 환경에서 하는 것이고 나는 단순한 타입 검증만을 원한다.
그래서 pylance / pyright의 pydantic 확장 모듈이 없는지 찾았다.
확장 모듈은 따로 제공되지 않고, 기본으로 pydantic을 지원한다고는 하는데….
일부만 지원하는듯 하다. 예전에는 dataclass로 인식되지 않아서 sqlalchemy 처럼 생성자에 필드를 보여주지 않았다고 한다..
어쩌면 파이썬의 타입힌트 표준이 아직 미숙한 것일수도 있다.
그 래 도! 나는 일단 필요하고, 파이참의 pydantic 플러그인은 HttpUrl을 str로 대우하는 것을 보니 화가 좀 났다.
이는 이미 pydantic이슈로 보고된 바가 있다.
pydantic 창시자는 2020년경에 파이참의 플러그인을 사용하면 된다~ 라는 식으로 말했고
추후에 가능할듯? 라고 했고, 작년 2022년에 아래와 같은 이슈를 오픈했다.
https://github.com/pydantic/pydantic-core/issues/345
그러니까 그냥 Url(…) 해서 할당하라는 의미다.
어쩌면 차라리 이게 더 나은 것 같다.
'프로그래밍 > 스팀 게임 퀴즈' 카테고리의 다른 글
#13 비동기 SQLModel (0) | 2024.01.08 |
---|---|
# 12 백엔드 코드를 비동기로 바꾸다. (0) | 2024.01.08 |
#7 테스트 코드 내 세션 관리 (0) | 2023.12.29 |
#6 퀴즈 정답 제출은 어떻게 할까? (0) | 2023.12.28 |
#5 테스트 데이터 만드는 법 (0) | 2023.12.27 |