sources/oauth: fix typing errors

# Conflicts:
#	passbook/sources/oauth/clients.py
This commit is contained in:
Jens Langhammer 2020-05-23 20:33:23 +02:00
parent 7462d56182
commit 5fc5e54f47
3 changed files with 14 additions and 7 deletions

View File

@ -62,6 +62,8 @@ jobs:
python-version: '3.8' python-version: '3.8'
- name: Install pyright - name: Install pyright
run: npm install -g pyright run: npm install -g pyright
- name: Show pyright version
run: pyright --version
- name: Install dependencies - name: Install dependencies
run: sudo pip install -U wheel pipenv && pipenv install --dev run: sudo pip install -U wheel pipenv && pipenv install --dev
- name: Lint with pyright - name: Lint with pyright

View File

@ -1,6 +1,6 @@
"""OAuth Clients""" """OAuth Clients"""
import json import json
from typing import Dict, Optional from typing import TYPE_CHECKING, Any, Dict, Optional
from urllib.parse import parse_qs, urlencode from urllib.parse import parse_qs, urlencode
from django.http import HttpRequest from django.http import HttpRequest
@ -14,24 +14,29 @@ from structlog import get_logger
from passbook import __version__ from passbook import __version__
LOGGER = get_logger() LOGGER = get_logger()
if TYPE_CHECKING:
from passbook.sources.oauth.models import OAuthSource
class BaseOAuthClient: class BaseOAuthClient:
"""Base OAuth Client""" """Base OAuth Client"""
session: Session session: Session
source: "OAuthSource"
def __init__(self, source, token=""): # nosec def __init__(self, source: "OAuthSource", token=""): # nosec
self.source = source self.source = source
self.token = token self.token = token
self.session = Session() self.session = Session()
self.session.headers.update({"User-Agent": "passbook %s" % __version__}) self.session.headers.update({"User-Agent": "passbook %s" % __version__})
def get_access_token(self, request, callback=None): def get_access_token(
self, request: HttpRequest, callback=None
) -> Optional[Dict[str, Any]]:
"Fetch access token from callback request." "Fetch access token from callback request."
raise NotImplementedError("Defined in a sub-class") # pragma: no cover raise NotImplementedError("Defined in a sub-class") # pragma: no cover
def get_profile_info(self, token: Dict[str, str]): def get_profile_info(self, token: Dict[str, str]) -> Optional[Dict[str, Any]]:
"Fetch user profile information." "Fetch user profile information."
try: try:
headers = { headers = {
@ -45,7 +50,7 @@ class BaseOAuthClient:
LOGGER.warning("Unable to fetch user profile", exc=exc) LOGGER.warning("Unable to fetch user profile", exc=exc)
return None return None
else: else:
return response.json() or response.text return response.json()
def get_redirect_args(self, request, callback) -> Dict[str, str]: def get_redirect_args(self, request, callback) -> Dict[str, str]:
"Get request parameters for redirect url." "Get request parameters for redirect url."

View File

@ -21,7 +21,7 @@ from passbook.flows.planner import (
) )
from passbook.flows.views import SESSION_KEY_PLAN from passbook.flows.views import SESSION_KEY_PLAN
from passbook.lib.utils.urls import redirect_with_qs from passbook.lib.utils.urls import redirect_with_qs
from passbook.sources.oauth.clients import get_client from passbook.sources.oauth.clients import BaseOAuthClient, get_client
from passbook.sources.oauth.models import OAuthSource, UserOAuthSourceConnection from passbook.sources.oauth.models import OAuthSource, UserOAuthSourceConnection
from passbook.stages.password.stage import PLAN_CONTEXT_AUTHENTICATION_BACKEND from passbook.stages.password.stage import PLAN_CONTEXT_AUTHENTICATION_BACKEND
@ -34,7 +34,7 @@ class OAuthClientMixin:
client_class: Optional[Callable] = None client_class: Optional[Callable] = None
def get_client(self, source): def get_client(self, source: OAuthSource) -> BaseOAuthClient:
"Get instance of the OAuth client for this source." "Get instance of the OAuth client for this source."
if self.client_class is not None: if self.client_class is not None:
# pylint: disable=not-callable # pylint: disable=not-callable