From 3eab36a5c4af0500e2d66e7e4e958112c904fb28 Mon Sep 17 00:00:00 2001 From: Kevin Marsh Date: Wed, 9 Feb 2022 22:29:44 -0800 Subject: [PATCH] DatabaseClient: add missing class methods and reflect Django 3.2 refactor (#846) * DatabaseClient: add missing class method `settings_to_cmd_args_env` and add missing arg to `runshell` The `DatabaseClient.runshell()` was refactored in Django 3.2 to be more standardized across the different database backends. * DatabaseClient: make `settings_dict` dict type better by specifying key/value types * tests: add missing db backend client files to `import_all_modules` --- django-stubs/db/backends/base/client.pyi | 4 ++-- django-stubs/db/backends/dummy/base.pyi | 3 +-- django-stubs/db/backends/mysql/client.pyi | 9 ++++----- django-stubs/db/backends/oracle/client.pyi | 8 ++++++++ django-stubs/db/backends/postgresql/client.pyi | 7 ++++--- django-stubs/db/backends/sqlite3/client.pyi | 6 ++++++ tests/typecheck/test_import_all.yml | 2 ++ 7 files changed, 27 insertions(+), 12 deletions(-) diff --git a/django-stubs/db/backends/base/client.pyi b/django-stubs/db/backends/base/client.pyi index eaebd92..551833a 100644 --- a/django-stubs/db/backends/base/client.pyi +++ b/django-stubs/db/backends/base/client.pyi @@ -1,4 +1,4 @@ -from typing import Any +from typing import Any, Iterable from django.db.backends.base.base import BaseDatabaseWrapper @@ -6,4 +6,4 @@ class BaseDatabaseClient: executable_name: Any = ... connection: BaseDatabaseWrapper def __init__(self, connection: BaseDatabaseWrapper) -> None: ... - def runshell(self) -> None: ... + def runshell(self, parameters: Iterable[str]) -> None: ... diff --git a/django-stubs/db/backends/dummy/base.pyi b/django-stubs/db/backends/dummy/base.pyi index 93dd162..3f969d8 100644 --- a/django-stubs/db/backends/dummy/base.pyi +++ b/django-stubs/db/backends/dummy/base.pyi @@ -12,8 +12,7 @@ def ignore(*args: Any, **kwargs: Any) -> None: ... class DatabaseOperations(BaseDatabaseOperations): quote_name: Any = ... -class DatabaseClient(BaseDatabaseClient): - runshell: Any = ... +class DatabaseClient(BaseDatabaseClient): ... class DatabaseCreation(BaseDatabaseCreation): create_test_db: Any = ... diff --git a/django-stubs/db/backends/mysql/client.pyi b/django-stubs/db/backends/mysql/client.pyi index 212f15d..491b856 100644 --- a/django-stubs/db/backends/mysql/client.pyi +++ b/django-stubs/db/backends/mysql/client.pyi @@ -1,11 +1,10 @@ -from typing import Dict, List, Optional, Union +from typing import Any, Dict, Iterable, List, Optional, Tuple, Union from django.db.backends.base.client import BaseDatabaseClient class DatabaseClient(BaseDatabaseClient): executable_name: str = ... @classmethod - def settings_to_cmd_args( - cls, settings_dict: Dict[str, Optional[Union[Dict[str, Dict[str, str]], int, str]]] - ) -> List[str]: ... - def runshell(self) -> None: ... + def settings_to_cmd_args_env( + self, settings_dict: Dict[str, Any], parameters: Iterable[str] + ) -> Tuple[List[str], Optional[Dict[str, str]]]: ... diff --git a/django-stubs/db/backends/oracle/client.pyi b/django-stubs/db/backends/oracle/client.pyi index ae67e33..8138fa0 100644 --- a/django-stubs/db/backends/oracle/client.pyi +++ b/django-stubs/db/backends/oracle/client.pyi @@ -1,5 +1,13 @@ +from typing import Any, Dict, Iterable, List, Tuple + from django.db.backends.base.client import BaseDatabaseClient as BaseDatabaseClient class DatabaseClient(BaseDatabaseClient): executable_name: str = ... wrapper_name: str = ... + @staticmethod + def connect_string(settings_dict: Dict[str, Any]) -> str: ... + @classmethod + def settings_to_cmd_args_env( + self, settings_dict: Dict[str, Any], parameters: Iterable[str] + ) -> Tuple[List[str], None]: ... diff --git a/django-stubs/db/backends/postgresql/client.pyi b/django-stubs/db/backends/postgresql/client.pyi index ab8f440..6f5072d 100644 --- a/django-stubs/db/backends/postgresql/client.pyi +++ b/django-stubs/db/backends/postgresql/client.pyi @@ -1,9 +1,10 @@ -from typing import Dict +from typing import Any, Dict, Iterable, List, Optional, Tuple from django.db.backends.base.client import BaseDatabaseClient class DatabaseClient(BaseDatabaseClient): executable_name: str = ... @classmethod - def runshell_db(cls, conn_params: Dict[str, str]) -> None: ... - def runshell(self) -> None: ... + def settings_to_cmd_args_env( + self, settings_dict: Dict[str, Any], parameters: Iterable[str] + ) -> Tuple[List[str], Optional[Dict[str, str]]]: ... diff --git a/django-stubs/db/backends/sqlite3/client.pyi b/django-stubs/db/backends/sqlite3/client.pyi index 6bdae40..ef6475c 100644 --- a/django-stubs/db/backends/sqlite3/client.pyi +++ b/django-stubs/db/backends/sqlite3/client.pyi @@ -1,4 +1,10 @@ +from typing import Any, Dict, Iterable, List, Tuple + from django.db.backends.base.client import BaseDatabaseClient as BaseDatabaseClient class DatabaseClient(BaseDatabaseClient): executable_name: str = ... + @classmethod + def settings_to_cmd_args_env( + self, settings_dict: Dict[str, Any], parameters: Iterable[str] + ) -> Tuple[List[str], None]: ... diff --git a/tests/typecheck/test_import_all.yml b/tests/typecheck/test_import_all.yml index 3540fa9..6725e62 100644 --- a/tests/typecheck/test_import_all.yml +++ b/tests/typecheck/test_import_all.yml @@ -231,6 +231,7 @@ import django.db.backends.dummy.base import django.db.backends.mysql import django.db.backends.mysql.client + import django.db.backends.oracle.client import django.db.backends.postgresql import django.db.backends.postgresql.base import django.db.backends.postgresql.client @@ -239,6 +240,7 @@ import django.db.backends.signals import django.db.backends.sqlite3 import django.db.backends.sqlite3.base + import django.db.backends.sqlite3.client import django.db.backends.sqlite3.creation import django.db.backends.sqlite3.features import django.db.backends.sqlite3.introspection