Fixed #31076 -- Fixed dbshell crash on Windows with Python < 3.8.
subprocess.run()'s args parameter accepts path-like objects on Windows since Python 3.8.
This commit is contained in:
parent
4161e35048
commit
9d40b6bbf4
|
@ -7,6 +7,8 @@ class DatabaseClient(BaseDatabaseClient):
|
||||||
executable_name = 'sqlite3'
|
executable_name = 'sqlite3'
|
||||||
|
|
||||||
def runshell(self):
|
def runshell(self):
|
||||||
|
# TODO: Remove str() when dropping support for PY37.
|
||||||
|
# args parameter accepts path-like objects on Windows since Python 3.8.
|
||||||
args = [self.executable_name,
|
args = [self.executable_name,
|
||||||
self.connection.settings_dict['NAME']]
|
str(self.connection.settings_dict['NAME'])]
|
||||||
subprocess.run(args, check=True)
|
subprocess.run(args, check=True)
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
from pathlib import Path
|
||||||
|
from subprocess import CompletedProcess
|
||||||
|
from unittest import mock, skipUnless
|
||||||
|
|
||||||
|
from django.db import connection
|
||||||
|
from django.db.backends.sqlite3.client import DatabaseClient
|
||||||
|
from django.test import SimpleTestCase
|
||||||
|
|
||||||
|
|
||||||
|
@skipUnless(connection.vendor == 'sqlite', 'SQLite tests.')
|
||||||
|
class SqliteDbshellCommandTestCase(SimpleTestCase):
|
||||||
|
def _run_dbshell(self):
|
||||||
|
"""Run runshell command and capture its arguments."""
|
||||||
|
def _mock_subprocess_run(*args, **kwargs):
|
||||||
|
self.subprocess_args = list(*args)
|
||||||
|
return CompletedProcess(self.subprocess_args, 0)
|
||||||
|
|
||||||
|
client = DatabaseClient(connection)
|
||||||
|
with mock.patch('subprocess.run', new=_mock_subprocess_run):
|
||||||
|
client.runshell()
|
||||||
|
return self.subprocess_args
|
||||||
|
|
||||||
|
def test_path_name(self):
|
||||||
|
with mock.patch.dict(
|
||||||
|
connection.settings_dict,
|
||||||
|
{'NAME': Path('test.db.sqlite3')},
|
||||||
|
):
|
||||||
|
self.assertEqual(
|
||||||
|
self._run_dbshell(),
|
||||||
|
['sqlite3', 'test.db.sqlite3'],
|
||||||
|
)
|
Loading…
Reference in New Issue