From a21b84195014ba394ddf6dcffca2308e5553f726 Mon Sep 17 00:00:00 2001 From: Matt Pye Date: Thu, 13 Jul 2023 02:50:47 +0100 Subject: [PATCH] mypy issues with get_user_model --- amplitude/amplitude.py | 29 ++++++++++++++++++++++------- amplitude/settings.py | 6 +++--- tests/settings.py | 1 + 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/amplitude/amplitude.py b/amplitude/amplitude.py index a66c8b9..0b45b2e 100644 --- a/amplitude/amplitude.py +++ b/amplitude/amplitude.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import logging import time from typing import Any, Dict, List @@ -174,14 +176,24 @@ def user_properties_from_request(self, request: HttpRequest) -> dict: user_data = { 'username': user.get_username(), - 'email': user.email, - 'full_name': user.get_full_name(), - 'is_staff': user.is_staff, - 'is_superuser': user.is_superuser, } - if user.last_login: + + if hasattr(user, 'email') and user.email: + user_data['email'] = user.email + if hasattr(user, 'full_name') and user.full_name: + get_full_name = getattr(user, "get_full_name") + if get_full_name and callable(get_full_name): + user_data['full_name'] = user.get_full_name() # type: ignore + else: + user_data['full_name'] = user.full_name + if hasattr(user, 'is_staff') and user.is_staff: + user_data['is_staff'] = user.is_staff + if hasattr(user, 'is_superuser') and user.is_superuser: + user_data['is_superuser'] = user.is_superuser + + if hasattr(user, 'last_login') and user.last_login: user_data['last_login'] = user.last_login.isoformat() - if user.date_joined: + if hasattr(user, 'date_joined') and user.date_joined: user_data['date_joined'] = user.date_joined.isoformat() return user_data @@ -196,7 +208,10 @@ def group_from_request(self, request: HttpRequest) -> list: User = get_user_model() user = User.objects.get(pk=request.user.pk) - groups = user.groups.all().values_list('name', flat=True) + + groups = [] + if hasattr(user, 'groups'): + groups = user.groups.all().values_list('name', flat=True) return list(groups) def location_data_from_ip_address(self, ip_address: str) -> dict: diff --git a/amplitude/settings.py b/amplitude/settings.py index a7acf29..5cde509 100644 --- a/amplitude/settings.py +++ b/amplitude/settings.py @@ -5,14 +5,14 @@ if not API_KEY: raise ImproperlyConfigured('"AMPLITUDE_API_KEY" is not set') -INCLUDE_USER_DATA = getattr(settings, 'AMPLITUDE_INCLUDE_USER_DATA', False) # NOQA: E501 -INCLUDE_GROUP_DATA = getattr(settings, 'AMPLITUDE_INCLUDE_GROUP_DATA', False) # NOQA: E501 +INCLUDE_USER_DATA: bool = getattr(settings, 'AMPLITUDE_INCLUDE_USER_DATA', False) # NOQA: E501 +INCLUDE_GROUP_DATA: bool = getattr(settings, 'AMPLITUDE_INCLUDE_GROUP_DATA', False) # NOQA: E501 IGNORE_URLS = getattr(settings, 'AMPLITUDE_IGNORE_URLS', []) if not isinstance(IGNORE_URLS, list): error = '"AMPLITUDE_IGNORE_URLS" must be a list of URLs or URL names' raise ImproperlyConfigured(error) -MIN_ID_LENGTH = getattr(settings, 'AMPLITUDE_MIN_ID_LENGTH', None) +MIN_ID_LENGTH: int | None = getattr(settings, 'AMPLITUDE_MIN_ID_LENGTH', None) if MIN_ID_LENGTH and not isinstance(MIN_ID_LENGTH, int): raise ImproperlyConfigured('"AMPLITUDE_MIN_ID_LENGTH" must be an integer') diff --git a/tests/settings.py b/tests/settings.py index e178a1e..5a41c2d 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -2,6 +2,7 @@ SECRET_KEY = 'amplitude-test' BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +AUTH_USER_MODEL = "authentication.User" SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' SESSION_COOKIE_HTTPONLY = True