Python 코딩 가이드라인¶
PEP8¶
모든 Python 기여는 PEP8 스타일 가이드를 준수하도록 요청합니다.
모든 파일은 ruff 자동 포맷터를 사용하여 포맷해야 합니다. pre-commit 이 구성되어 있다면 이것이 실행될 것입니다.
프로젝트 저장소에는
.editorconfig파일이 포함되어 있습니다. 들여쓰기 및 공백 문제를 피하기 위해 EditorConfig를 지원하는 텍스트 편집기를 사용하는 것을 권장합니다. Python과 HTML 파일은 들여쓰기에 4칸 공백을 사용합니다.
Wagtail의 테스트 종속성(pip install -e '.[testing]')을 설치했다면,
make lint 를 실행하여 코드를 확인할 수 있습니다. make lint-server 를 실행하여 Python 관련 린팅만 확인할 수도 있습니다.
make format 으로 모든 Python 포맷팅을 실행할 수 있습니다. 린팅과 유사하게, make format-server 를 실행하여 Python/템플릿 전용 파일을 포맷할 수 있습니다.
Django 호환성¶
Wagtail은 여러 버전의 Django와 호환되도록 작성되었습니다. 때로는 최신 버전의 Django에 대해서는 한 가지 코드를, 이전 버전의 Django에 대해서는 다른 코드를 실행해야 합니다. 이러한 경우, 항상 django.VERSION 을 검사하여 사용 중인 Django 버전을 확인하세요:
from django import VERSION as DJANGO_VERSION
if DJANGO_VERSION >= (1, 9):
# 새 속성 사용
related_field = field.rel
else:
# 이전, 사용되지 않는 속성 사용
related_field = field.related
항상 버전을 비교할 때는 크거나 같음(>=)을 사용하여 최신 버전의 Django 코드가 먼저 오도록 하세요.
객체에 최신 버전의 Django에서 도입된 속성이나 메서드가 있는지 확인할 때 try ... except 를 사용하지 마세요. try ... except 가 왜 사용되었는지 명확하게 표현하지 못하기 때문입니다. Django 버전에 대한 명시적인 확인은 코드의 의도를 매우 명확하게 합니다.
# 이렇게 하지 마세요
try:
related_field = field.rel
except AttributeError:
related_field = field.related
코드가 여러 번 Django 버전에서 변경된 것을 사용해야 하는 경우, 확인을 캡슐화하는 함수를 만드는 것을 고려하세요:
import django
def related_field(field):
if DJANGO_VERSION >= (1, 9):
return field.rel
else:
return field.related
Django에서 도입된 새로운 함수가 Wagtail에 매우 유용하다고 생각되지만, Wagtail이 지원하는 이전 버전의 Django에서는 사용할 수 없는 경우, 해당 함수를 Wagtail로 복사해 올 수 있습니다. 사용자가 함수가 있는 새 버전의 Django를 실행하는 경우, 해당 함수는 Django에서 가져와야 합니다. 그렇지 않으면 Wagtail에 번들된 버전을 사용해야 합니다. 이 함수가 가져온 Django 소스 코드에 대한 링크를 포함해야 합니다:
import django
if DJANGO_VERSION >= (1, 9):
from django.core.validators import validate_unicode_slug
else:
# https://github.com/django/django/blob/1.9/django/core/validators.py#L230 에서 가져옴
def validate_unicode_slug(value):
# 코드는 독자의 연습 문제로 남겨둠
pass
테스트¶
Wagtail에는 테스트 스위트가 있으며, 저희는 이를 개선하고 확장하는 데 전념하고 있습니다. 테스트을 참조하세요.
커밋이나 풀 리퀘스트가 테스트 실패를 유발하지 않도록 지속적인 통합을 실행합니다. 여러분의 기여가 Wagtail에 기능을 추가하는 경우, 이를 커버하는 추가 테스트를 포함해주세요. 여러분의 기여가 기존 기능을 변경하는 경우, 관련 테스트를 그에 맞게 업데이트해주세요.