본문 바로가기

Software Engineering/Python

(15)
[실습 코드] 리팩토링 예제 # 리팩토링 전: 테스트하기 어려운 구조import redisimport pymysqlimport requestsimport jsonfrom typing import Dict, Anyclass MessageProcessor: def __init__(self): # 하드코딩된 연결 정보 self.redis_client = redis.Redis(host='localhost', port=6379, db=0) self.db_config = { 'host': 'localhost', 'user': 'user', 'password': 'password', 'database': 'mydb' ..
[streamlit] custom label 예제 label code# widget.pyimport streamlit as stfrom enum import Enumfrom typing import Literal, Optionalfrom libs.theme import Colorsdef label( text: str, width: Optional[int] = None, height: Optional[int] = None, forecolor: str = Colors.DARKSLATEGRAY, backgroundcolor: str = Colors.FLORALWHITE, font_size: int = 14, text_align: Literal["left", "center", "right"] = "center"): d..
Python requests 패키지 proxy 설정에 관한 정리 (참고 문서) https://docs.python-requests.org/en/latest/user/advanced/#proxiesNO_PROXY 설정하기requests 패키지는 NO_PROXY 환경 변수를 참조하여 프록시를 우회 한다.Dockerfile에서 NO_PROXY 환경 변수가 설정 된 경우 해당 값을 참조한다.requests 패키지는 no_proxy에서 스킴(http/https)을 지원하지 않기 때문에 Dockerfile에서 스킴을 구분하여 환경 변수를 설정하더라도 구분하여 적용되지 않는다. no_proxy 환경 변수에서는 도메인, IP 주소만 인식한다.import osimport requests# 스킴 구분은 지원되지 않음os.environ['NO_PROXY'] = 'http://exampl..
Sample Project - API 호출, DB 업데이트 프로젝트 구조my_service/├── app/│ ├── init.py│ ├── config.py│ ├── database.py│ ├── service.py│ └── utils.py├── tests/│ ├── init.py│ ├── test_service.py│ └── conftest.py├── .env.development├── .env.production├── Dockerfile├── requirements.txt├── setup.sh├── run.sh├── test.sh└── main.py설정 파일 (개발)DB_URL=your_dev_db_urlDB_USER=your_dev_db_userDB_PASSWORD=your_dev_db_passwordDB_PORT=your_de..
fastapi background task를 사용하여 지연 동작 수행하기 API 요청을 받고 일정 시간이 지난 뒤에 동작을 수행해야 하는 경우는 아래와 같이 구현 할 수 있다.from fastapi import FastAPI, BackgroundTasksimport asyncioapp = FastAPI()async def delay_print(sec: int): await asyncio.sleep(sec) print("Awaken")@app.get("/")async def delay_task(background_task: BackgroundTasks): background_task.add_task(delay_print, 5) return {"message": "recieved"} 위와 같이 작성하면, API는 호출 즉시 응답을 반환하고 실제 작업은 백그라..
mac에서 poetry 설치하기 (참고자료) https://python-poetry.org/docs/ (1) pipx 설치> brew install pipx (2) pipx 경로 설정> pipx ensurepath (3) poetry 설치> pipx install poetry
poetry 사용법 정리 (참고자료) https://python-poetry.org/docs/basic-usage/ * 새 프로젝트 시작하기> poetry new [project-name]아래와 같이 프로젝트 구조가 세팅된다. pyproject.toml 파일을 살펴보면 * 기존 프로젝트에서 시작하기cd pre-existing-project> poetry init * 의존성 추가하기> poetry add [package-name] * 의존성 설치하기> poetry install  * 가상 환경 활성화> poetry shell> python main.py # 가상환경 활성화 상태에서는 의존성 포함 실행 가능 * 가상 환경 비활성화 상태에서 실행> poetry run main.py PyPi 등에 배포할 대* build> poetry ..
windows 환경에서 poetry 설치하기 (1) pyenv-win 설치(참고) https://github.com/pyenv-win/pyenv-win 설치하려는 환경에서 PowerShell 명령 일부가 제한되어 있어, git을 사용한 방법으로 설치git을 사용한 설치는 아래 링크를 참조.https://github.com/pyenv-win/pyenv-win/blob/master/docs/installation.md#git-commands > $HOME명령어를 실행하여 현재 HOME 경로를 확인한다. > git clone https://github.com/pyenv-win/pyenv-win.git "$HOME\.pyenv"명령을 실행하여 repository를 복제한다. $HOME 경로 아래에 ".pyenv" 폴더가 생성되었는지 확인한다. (2) 환경..