Python responder v1.3.1 -> v1.3.2 변경, 추가 요약

12485 단어 Python3responderPython
파이썬 responder가 드디어 업데이트되었습니다!
그래서 저는 지난번 버전에서 이번 버전까지의 변경, 추가 기능을 총결하고 싶습니다.
responder란?여기 기사를 참고하세요.
입문을 위해.. 사전 조사를

TL;DR


Release 메시지에네.
다음은 CHENGELOG의 관점입니다.
  • 추가: ASGI3 지원
  • 추가:python 3.8-dev의 CI test
  • 추가: 요청한 state가 마핑 대상이 되었습니다
  • 권장하지 않음: ASGI2
  • 이상의 정보를 만족하는 사람은 나중에 건너뛸 수 있습니다.

    ASGI3 지원


    ASGI3는 starlette와responder 업데이트를 통해 지원됩니다.
    이와 함께 ASGI2는 권장하지 않습니다.
    import responder
    from logging import getLogger
    
    from sentry_asgi import SentryMiddleware
    import sentry_sdk
    
    logger = getLogger(__name__)
    
    sentry_sdk.init($URL)
    
    api = responder.API()
    api.add_middleware(SentryMiddleware)
    
    
    @api.route("/")
    def index(req, resp):
        division_by_zero = 1 / 0
        resp.text = ""
    
    if __name__ == "__main__":
        api.run(address="0.0.0.0", port=5000, debug=True)
    
    INFO: Started server process [6]
    INFO: Waiting for application startup.
    INFO: Uvicorn running on http://0.0.0.0:5000 (Press CTRL+C to quit)
    INFO: ('172.19.0.1', 44572) - "GET / HTTP/1.1" 500
    ERROR: Exception in ASGI application
    Traceback (most recent call last):
      File "/usr/local/lib/python3.7/dist-packages/uvicorn/protocols/http/httptools_impl.py", line 375, in run_asgi
        result = await app(self.scope, self.receive, self.send)
      File "/usr/local/lib/python3.7/dist-packages/uvicorn/middleware/debug.py", line 81, in __call__
        raise exc from None
      File "/usr/local/lib/python3.7/dist-packages/uvicorn/middleware/debug.py", line 78, in __call__
        await self.app(scope, receive, inner_send)
      File "/usr/local/lib/python3.7/dist-packages/responder/api.py", line 277, in __call__
        await self.app(scope, receive, send)
      File "/usr/local/lib/python3.7/dist-packages/sentry_asgi/middleware.py", line 22, in __call__
        raise exc from None
      File "/usr/local/lib/python3.7/dist-packages/sentry_asgi/middleware.py", line 19, in __call__
        await self.app(scope, receive, send)
      File "/usr/local/lib/python3.7/dist-packages/starlette/middleware/errors.py", line 177, in __call__
        raise exc from None
      File "/usr/local/lib/python3.7/dist-packages/starlette/middleware/errors.py", line 155, in __call__
        await self.app(scope, receive, _send)
      File "/usr/local/lib/python3.7/dist-packages/starlette/middleware/trustedhost.py", line 34, in __call__
        await self.app(scope, receive, send)
      File "/usr/local/lib/python3.7/dist-packages/starlette/middleware/gzip.py", line 20, in __call__
        await self.app(scope, receive, send)
      File "/usr/local/lib/python3.7/dist-packages/responder/api.py", line 287, in asgi
        req, scope=scope, send=send, receive=receive
      File "/usr/local/lib/python3.7/dist-packages/responder/api.py", line 304, in _dispatch_http
        await self._execute_route(route=route, req=req, resp=resp, **options)
      File "/usr/local/lib/python3.7/dist-packages/responder/api.py", line 391, in _execute_route
        await r
      File "/usr/local/lib/python3.7/dist-packages/responder/background.py", line 44, in __call__
        return await run_in_threadpool(func, *args, **kwargs)
      File "/usr/local/lib/python3.7/dist-packages/starlette/concurrency.py", line 25, in run_in_threadpool
        return await loop.run_in_executor(None, func, *args)
      File "/usr/lib/python3.7/concurrent/futures/thread.py", line 57, in run
        result = self.fn(*self.args, **self.kwargs)
      File "main.py", line 18, in index
        division_by_zero = 1 / 0
    ZeroDivisionError: division by zero
    

    이렇게 하면 제3자의 중간부품을 가져올 수 있다.
    자세한 내용은 확인하십시오Starlette Middleware.

    파이썬 지원 버전 확장


    pythn 3.7, 3.8-dev의 Citest가 추가되어 지원되었습니다.

    request.state 속성


    실체는starlette.requests.State.
    import responder
    import time
    from logging import getLogger
    
    logger = getLogger(__name__)
    
    api = responder.API()
    
    @api.route("/")
    def index(req, resp):
        logger.info(req.state)
        logger.info(req.state._state)
        req.state.time_started = time.time()
        logger.info(req.state)
        logger.info(req.state._state)
        resp.text = f"{time.time() - req.state.time_started}"
    
    if __name__ == "__main__":
      api.run(address="0.0.0.0", port=5000, debug=True)
    
    $ curl localhost:5000
    0.0002288818359375$
    
    INFO: Started server process [6]
    INFO: Waiting for application startup.
    INFO: Uvicorn running on http://0.0.0.0:5000 (Press CTRL+C to quit)
    INFO: <starlette.requests.State object at 0x7fb61efc2240>
    INFO: {}
    INFO: <starlette.requests.State object at 0x7fb61efc2240>
    INFO: {'time_started': 1566091621.639762}
    INFO: ('172.19.0.1', 44320) - "GET / HTTP/1.1" 200
    
    request.state 초기에는 아무것도 없었음을 확인할 수 있다.
    request.state에 변수 이름과 값을 저장할 수 있습니다.
    middleware와의 대화에 사용할 수 있습니다.

    on_event


    starlette 옆api에 기대세요.on_이벤트의 이벤트는 startup과 shutdown 두 가지에만 대응하기 때문에 문서를 수정했습니다.(옛날부터인 것 같은데...)

    기타 세부 변경 사항


    Added

  • multipart/form-data의 파일 이외의 데이터와 대응
  • Rename

  • api._dispatch_request → api._dispatch_http
  • Remove

  • api.dispatch
  • 라이브러리 주위에 의존

  • starlette 0.10.* → starlette 0.12.*
  • uvicorn → uvicorn>=0.7, <0.9
  • 제출 로그 목록

  • e52c927:lock 파일 업데이트
  • b2dd2c2:test 파일의 수정
  • cf5447d:schema 문서의 태양혈 수정
  • 0bdde6d: merge cf5447d
  • a1a0a1b:
  • 팩스
  • api._dispatch_request -> api._dispatch_http
  • a6955b5:
  • lock 파일 업데이트
  • starlette 0.11.* 버전 업그레이드 지원
  • 78b5bef: merge a1a0a1b, a6955b5
  • 055035e0: 팩스
  • d0016ac: README의 업데이트
  • e6b880b: 주석 맞춤법 오류 수정
  • 8ccb395: merge e6b880b
  • fb71abe: 문서 업데이트
  • 63f2e83: merge fb71abe
  • 70e6bc0: 문서 업데이트
  • 877fe14: merge 70e6bc0
  • 6dbbad1: merge 05035e0
  • a802245: format_form의 mimetype multippart/form-data의 대응
  • f01b1d4:
  • CI 환경의 OS 버전 업그레이드
  • CI 테스트에 3.7
  • 증가
  • 8b87f63: merge f01b1d4
  • 555e1f7:Pipfile의 업데이트
  • 38dea83: Pipfile 업데이트
  • 67a6c25: merge 555e1f7, 38dea83
  • 7afce 42: README 업데이트
  • 3a8113d: 문서 업데이트
  • ee6efe5: merge 7afce42, 3a8113d
  • ed8afea: merge a802245
  • 37ba3d2: README의 업데이트
  • bd2efb6:a802.245에 대응하는 테스트 증가
  • 22af42e: merge 37ba3d2
  • 0529629: merge bd2efb6
  • f3c9320:
  • CHANGELOG 업데이트
  • lock 파일 업데이트
  • ASGI3 지원
  • 의존성 라이브러리 업데이트
  • 54cbbdf: merge f3c9320
  • ef33013: CHANGELOG의 팩스
  • e4f6898: merge ef33013
  • 93156fd:3.8-dev의 CI 테스트 추가
  • 784c7e7: merge 93156fd
  • 8101e7d: request.state 속성의 추가(starlet.requests.State)
  • d73243a: lint
  • e6d302a: merge d73243a
  • 721985: CHANGELOG의 업데이트, 메타 정보 업데이트
  • d820f02: merge 7219856
  • 참고 자료

  • GitHub: taoufik07/responder
  • Starlette
  • 좋은 웹페이지 즐겨찾기