mirror of
https://github.com/django/django.git
synced 2025-01-05 07:55:47 +00:00
Fixed #35882 -- Made migration questioner loop on all errors.
This commit is contained in:
parent
3434fab758
commit
e035db1bc3
@ -160,8 +160,8 @@ class InteractiveMigrationQuestioner(MigrationQuestioner):
|
|||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
return eval(code, {}, {"datetime": datetime, "timezone": timezone})
|
return eval(code, {}, {"datetime": datetime, "timezone": timezone})
|
||||||
except (SyntaxError, NameError) as e:
|
except Exception as e:
|
||||||
self.prompt_output.write("Invalid input: %s" % e)
|
self.prompt_output.write(f"{e.__class__.__name__}: {e}")
|
||||||
|
|
||||||
def ask_not_null_addition(self, field_name, model_name):
|
def ask_not_null_addition(self, field_name, model_name):
|
||||||
"""Adding a NOT NULL field to a model."""
|
"""Adding a NOT NULL field to a model."""
|
||||||
|
@ -61,10 +61,27 @@ class QuestionerHelperMethodsTests(SimpleTestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
@mock.patch("builtins.input", side_effect=["bad code", "exit"])
|
@mock.patch("builtins.input", side_effect=["bad code", "exit"])
|
||||||
def test_questioner_no_default_bad_user_entry_code(self, mock_input):
|
def test_questioner_no_default_syntax_error(self, mock_input):
|
||||||
with self.assertRaises(SystemExit):
|
with self.assertRaises(SystemExit):
|
||||||
self.questioner._ask_default()
|
self.questioner._ask_default()
|
||||||
self.assertIn("Invalid input: ", self.prompt.getvalue())
|
self.assertIn("SyntaxError: invalid syntax", self.prompt.getvalue())
|
||||||
|
|
||||||
|
@mock.patch("builtins.input", side_effect=["datetim", "exit"])
|
||||||
|
def test_questioner_no_default_name_error(self, mock_input):
|
||||||
|
with self.assertRaises(SystemExit):
|
||||||
|
self.questioner._ask_default()
|
||||||
|
self.assertIn(
|
||||||
|
"NameError: name 'datetim' is not defined", self.prompt.getvalue()
|
||||||
|
)
|
||||||
|
|
||||||
|
@mock.patch("builtins.input", side_effect=["datetime.dat", "exit"])
|
||||||
|
def test_questioner_no_default_attribute_error(self, mock_input):
|
||||||
|
with self.assertRaises(SystemExit):
|
||||||
|
self.questioner._ask_default()
|
||||||
|
self.assertIn(
|
||||||
|
"AttributeError: module 'datetime' has no attribute 'dat'",
|
||||||
|
self.prompt.getvalue(),
|
||||||
|
)
|
||||||
|
|
||||||
@mock.patch("builtins.input", side_effect=[KeyboardInterrupt()])
|
@mock.patch("builtins.input", side_effect=[KeyboardInterrupt()])
|
||||||
def test_questioner_no_default_keyboard_interrupt(self, mock_input):
|
def test_questioner_no_default_keyboard_interrupt(self, mock_input):
|
||||||
|
Loading…
Reference in New Issue
Block a user