Python 16

Django nested Serializer update 시 선언되지 않은 field 문제

1. 문제점 부모 - 자식의 구조를 갖는 Nested된 Serializer 구조를 사용했는데, update 메서드를 Django에서 지원하지 않는다고 하면서 아래 같은 에러 메시지가 뜬다. AssertionError: The `.update()` method does not support writable nested fields by default. Write an explicit `.update()` method for serializer `...`, or set `read_only=True` on nested serializer fields. 2. 해결 방안 필드를 사용할 때 반드시 Model에서 역참조로 related_name 값으로 정의한 이름으로 사용해주어야 한다. School : People ..

[TIL] Python O(n)은 몇 초 정도일까 (Casting, converting)

100만개 원소를 가진 list를 set으로 변환하면 실제 시간은 얼마나 걸릴까? set 변환은 O(n)의 시간복잡도를 갖는다.import time l = [] for i in range(1000000): l.append(i) start_time = time.time() s = set(l) end_time = time.time() print(f"execution time = {end_time - start_time:.4f} seconds")상황에 따라 다르겠지만, 평균적으로 0.03초 정도 걸렸다. 로컬, macOS m1, python 3.10 기준이다.

[TIL] 파이썬 Retry 방식 요약 backoff_factor, status_forcelist

파이썬의 requests.Retry 스펙은 대략 이렇다. retry = Retry( total=retries, read=retries, connect=retries, backoff_factor=backoff_factor, status_forcelist=status_forcelist) 서버간 또는 서버 - 클라이언트간 통신에서 서버에 요청을 보냈는데, 500대 에러가 떨어지면서 정상적인 응답을 하지 못하는 경우 Retry를 적용한다. 보통은 서버가 잠시 네트워크 지연이 있거나, 너무 과도한 로드가 걸려있는 경우에 시행한다. Http Status Code = 500, 502, 503, 504 정도에 대해 시행한다. [TIL][link] HTTP 상태 코드별 내용 정리 total은 총 요청 횟수이다. 2 = ..

[TIL]Connection error..Max Retries... localhost로 호출 -> docker로 호출시 host

현상 python에서 requests를 통해 http://localhost:8080로 환경변수를 설정한 후 요청을 보내는데 자꾸 아래처럼 에러가 났다. HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /xxx (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 61] Connection refused')) 원인 .env에 아래처럼 환경변수를 지정해서 서버를 실행했었다. TEST_URL=http://localhost:8080 그리고,, docker를 통해서 실행했다! docker를 통해 host 컴퓨터인 localhost를 호..

[TIL] python csv writer StringIO, BytesIO for AWS boto3

문제상황 AWS boto3가 BytesIO로 저장 양식이 정해졌을 때를 상정해서, python의 csv를 import하여 csv 파일을 만들 때 BytesIO를 이용하여 바로 csv.writer를 생성하면 byte 데이터를 넣어줘도 에러가 난다. data = ["a", "b"] writer = csv.writer(io.BytesIO()) b_data = [str(ch).encode() for ch in data] writer.writerow(b_data) 원인 AWS boto3는 BytesIO로 입력을 받는데 csv는 writer로 StringIO만 받기 때문이다. 해결책 converting 과정을 추가한다. data = ["a", "b"] str_buffer = io.StringIO() writer =..

[TIL] python @patch doesn't work, @patch 작동 안함. mock

현상 python에서 test를 하는데 @patch가 작동을 안했다. 아래 코드에서 make_something 함수는 테스트 대상이 아니라서 테스트 도중에 실행되지 않도록 @patch를 적용했는데 정상 작동하지 않고 make_something 함수가 그대로 실행되었다. from a.util import make_something # 중략 @patch("a.util.make_something") def test_make_other_thing(self, mock_make_something): # ... mock_make_something.assert_not_called() # Error 원인 mock은 특정 object의 참조를 가짜 객체로 바꾼다. 그런데 최상단에서 import를 해버리면 실제 그 clas..

[링크] 파이썬 assert, raise 차이

https://ltlkodae.tistory.com/17 파이썬 assert, raise 차이점 파이썬에서 예외를 발생시키는 방법은 assert, raise 두가지가 있다. 그동안 크게 고민없이 사용했는데, 정리가 필요한것 같아 포스팅을 작성한다. assert 아래처럼 사용법은 굉장히 간단하다. cond = F ltlkodae.tistory.com assert는 DEBUG=True 일때만 동작. 테스트나 디버깅 성격이 강하다 실제 서비스에서는 raise 사용이 권장

[TIL] python locale, OS의 locale

1. 사용 목적 python locale 국제화를 위해 사용한다. 예를 들어 한국에서는 소수점을 .으로 표기하여 123.456 식으로 표현하지만, 유럽에서는 123,456 과 같이 소수점을 콤마로 표시할 수 있는데, 이런 변환을 하기 위해서 사용한다. OS locale 터미널에서 locale 명령어를 입력하면 사용 중인 OS의 locale 정보를 확인할 수 있다. 그리고 locale -a 를 입력하면 모든 지역 코드를 확인할 수 있다. 2. 기본 문법 https://docs.python.org/ko/3/library/locale.html 기본 문법은 위 파이썬 사이트에서 안내하고 있다. 파이썬 내장 패키지이므로 import locale로 불러올 수 있고, locale.setlocale(카테고리, 사용지역..

[링크] python circular import 해결 - import time, runtime

py 파일 맨 위쪽에서 import 하지말고, 함수 선언문이나 실행문 속에서 from ... import ...을 하면 된다. 맨 위쪽 import는 파이썬이 처음 실행을 위해 import문들을 모두 스캔할 때 import하는 것이고, 함수 선언문이나 실행문에서의 import는 실제로 그 함수가 불릴때(runtime) import하는 것이다. https://blog.mathpresso.com/python-circular-imports-e89c5bf16510 Python Circular Imports Python Circular Imports가 무엇이며, 오류는 어떻게 해결할까? blog.mathpresso.com

[링크] python @property

https://www.daleseo.com/python-property/ [파이썬] property 사용법 (함수/데코레이터) Engineering Blog by Dale Seo www.daleseo.com 요약 클래스의 멤버 변수 이름과 같은 멤버 함수를 만들고 그 위에 @property를 써서 getter를 적용하여 해당 변수에 대해 외부에서의 직접 접근을 막음 원래 멤버 변수 그대로의 이름을 사용하여 하위 호환성을 지킴 + setter는 @{멤버변수명}.setter를 적용

카테고리 없음 2023.01.02