이번에 처리 중인 이슈는 Python 3.14에서 parser의 메소드 중 하나인 'add_argument_group'에 사용되는 prefix_chars 옵션이 deprecated된 것과 관련이 있다. 우리 팀의 navigator 분이 관련 이슈를 보내주셨다.
해당 이슈는 Python의 CPython 레포의 이슈로, 해당 prefix_chars를 deprecate 시키는 커밋이 들어있었다.
처음에는 그래서 어떻게 하면 된다는 것인가 싶어서 모호했는데, 위의 코드를 보니 '_ArgumentGroup'(아마도 add_argument_group의 클래스를 말하는 것 같았다)이 초기화될 때 'prefix_chars'라는 옵션을 사용하면 warning을 제시하도록 하는 코드라고 이해했다.
해당 prefix_chars 옵션은 Python 3.14부터 deprecated 되고, Python 3.16부터 아예 사용이 금지된다.
즉 이러한 상황에서 django에서 사용하는 'dbshell'이라는 커맨드에서 이 add_argument_group 메소드에 대해 prefix_chars를 사용하는 코드가 있다는 것이 문제 상황이다.
dbshell은 처음 들어보는 명령어였는데, 공식문서에서 찾을 수 있었다. 이 명령어는 settings.py의 DATABASE 값으로 설정된 값에 대해서 DB client를 실행시키는 것이라고 이해했다.
django.core.management.commands 파일에는 django-admin 커맨드로 사용되는 모든 커맨드들이 파이썬 파일로 모여 있다. 이 중 dbshell.py 파일의 코드에서 'prefix_char' 옵션이 사용되는 것을 볼 수 있었다.
# dbshell.py
import subprocess
from django.core.management.base import BaseCommand, CommandError
from django.db import DEFAULT_DB_ALIAS, connections
class Command(BaseCommand):
help = (
"Runs the command-line client for specified database, or the "
"default database if none is provided."
)
requires_system_checks = []
def add_arguments(self, parser):
parser.add_argument(
"--database",
default=DEFAULT_DB_ALIAS,
choices=tuple(connections),
help=(
"Nominates a database onto which to open a shell. Defaults to the "
'"default" database.'
),
)
parameters = parser.add_argument_group("parameters", prefix_chars="--")
parameters.add_argument("parameters", nargs="*")
아래에서 두 번째 줄에서 add_argument_group이 prefix_chars를 옵션으로 받고 있었다. 해당 줄을 지우고, 대신 다음과 같은 코드로 대체해 보았다. 결국엔 기존 코드에서 'prefix_chars' 옵션만 뺀 코드였다.
parameters = parser.add_argument_group("parameters")
parameters.add_argument("parameters", nargs="*")
그리고 테스트를 돌렸는데(관련된 dbshell 테스트만 돌렸다), 테스트가 다 통과하는 게 아닌가.
cd tests
python -Wall ./runtests.py dbshell
prefix_chars 옵션이 없이도 다른 arguments들이 적재적소에 잘 들어간 것인지가 불분명했다. 그래서 일단은 이 찜찜한 상황에서 코드를 멈춰두고, 팀의 navigator 분께 다음과 같이 조언을 구하기로 했다.
- 이렇게 코드를 바꿔 보았고 테스트가 잘 되는데 여기서 어떻게 하면 이슈가 일단 우리가 할 수 있는 만큼은 핸들링 되었는지를 알 수 있을까?
- pair programming을 더 잘 하는 팁이 있을까?
'개발 일기장 > Djangonaut' 카테고리의 다른 글
deprecated 'prefix_chars' in 'dbshell' command [In progress] (0) | 2024.11.25 |
---|---|
#34900 - Removed usage of deprecated glob.glob1(). (1) | 2024.10.28 |
django 오픈소스 기여하는 방법 튜토리얼 따라하기 & 첫 weekly meeting 후기 (5) | 2024.10.15 |