From 10dc6ea39eba69af808b3e00a72d0d25cf832f21 Mon Sep 17 00:00:00 2001 From: Zixuan James Li Date: Mon, 13 Jun 2022 15:06:48 -0400 Subject: [PATCH] typing: Narrow connection type before accessing pg_version. This change is solely for removing the attribute error that mypy raises when we access `pg_version` on `connection`. django-stubs annotate `connection` as `BaseDatabaseWrapper` while it is actually a proxy object, so we cannot use an regular assertion with isinstance to narrow the type. Signed-off-by: Zixuan James Li --- zerver/management/commands/backup.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/zerver/management/commands/backup.py b/zerver/management/commands/backup.py index e31e9aa291..829c7213da 100644 --- a/zerver/management/commands/backup.py +++ b/zerver/management/commands/backup.py @@ -2,11 +2,12 @@ import os import re import tempfile from argparse import ArgumentParser, RawTextHelpFormatter -from typing import Any +from typing import TYPE_CHECKING, Any from django.conf import settings from django.core.management.base import CommandParser from django.db import connection +from django.db.backends.postgresql.base import DatabaseWrapper from django.utils.timezone import now as timezone_now from scripts.lib.zulip_tools import TIMESTAMP_FORMAT, parse_os_release, run @@ -51,6 +52,12 @@ class Command(ZulipBaseCommand): members.append("zulip-backup/os-version") with open(os.path.join(tmp, "zulip-backup", "postgres-version"), "w") as f: + # We are accessing a backend specific attribute via a proxy object, whose type + # cannot be narrowed with a regular isinstance assertion. + # This can be potentially fixed more cleanly with the recently added + # connection.get_database_version(). + if TYPE_CHECKING: + assert isinstance(connection, DatabaseWrapper) print(connection.pg_version, file=f) members.append("zulip-backup/postgres-version")