Skip to content

copyNdpaste/rabbit

Repository files navigation

What is rabbit?

  • starting point of projects
  • schema project
  • domain driven design
  • version
    • python : 3.8
    • flask : 1.1.2

Usage

  • install pipenv : pip install pipenv
  • create python virtual environment : pipenv --python 3.8
  • install packages in pipfile : pipenv install
  • install packages with dev in pipfile : pipenv install --dev
  • uninstall package : pipenv uninstall {package name}
  • create empty migration file : flask db revision -m "create {name} table"
  • create auto-generate migrate file : flask db migrate -m "create {name} table"
    • model에 설정된대로 revision 파일을 만들어주기 때문에 편리하다.
    • migrations/env.py의 target_metadata에 db.Model.metadata를 넣어줘야 한다.
  • db upgrade : flask db upgrade
  • db downgrade : flask db downgrade
  • target current db : flask db stamp {revision}
    • 사용해야할 상황
      1. 진행된 마이그레이션과 현재 alembic이 가리키고 있는 마이그레이션이 다른 경우 동기화
      2. 아직 진행되지 않은, 혹은 downgrade로 db 롤백 후 마이그레이션 파일 삭제하기 전에 가리키려는 revision을 지정하고 파일 삭제
    • revision에는 head나 revision이 들어가면 된다.
  • python schema validator
  • validate request parameter, dto, response schema
  • python event pubsub for observer pattern
# initialize event listener in app/__init__.py
# event listener initialization
from core.domains.board import event

A 도메인이 B 도메인의 리스너를 필요로 할 때 topic enum과 리스너는 B 도메인에 존재해야 한다.

from flask import g
from pubsub import pub

# 구독 중인 topic에 이벤트가 발생하도록 한다.
def send_message(topic_name: str = None, **kwargs):
    pub.sendMessage(topicName=topic_name, **kwargs)

# g 변수에 저장된 값을 topic_name key로 가져온다.
def get_event_object(topic_name: str = None):
    return getattr(g, topic_name, None)

# 리스너가 바라보는 topic 지정 후 리스너에서 사용할 매개변수를 kwargs 형식으로 넘긴다.
send_message(topic_name="topic_name", user_id=1)

# 리스너로부터 생성된 값을 topic key로 가져온다.
get_event_object(topic_name="topic_name")

# 도메인의 event에 topic subscribe 해야 함
pub.subscribe(get_posts, PostTopicEnum.GET_POSTS)
  • api docs
  • 실행 환경의 DB 데이터에 따라 결과 값을 직접 호출해볼 수 있다.
  • 로컬에서 http://127.0.0.1:5000/{domain}/apidocs 접속 후 authorize에 적절한 토큰과 request parameter를 넣고 try it out, execute 클릭한다.
  • api doc 추가 시 view 파일 위에 swag_from 데코레이터 사용해서 yml 파일 명시한다.
  • 프로젝트 변경 등으로 인한 api prefix 수정 시 swagger/__init__.py 에서 static_url_path, specs_route 등 수정해야 한다.
  • 커버리지 실행
    • coverage run -m pytest
  • 커버리지 결과 리포트
    • coverage report -m
    • Name Stmts Miss Cover Missing 형식으로 어떤 파일의 어디가 커버되었는지 놓친 부분은 어딘지 나온다
  • 웹 브라우저에서 결과 리포트 확인
    • coverage html -> htmlcov/index.html 웹 브라우저에서 열기 -> 보고 싶은 파일 열어서 얼마나 커버했는지 확인

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Languages