#36016: Avoid traceback when quitting makemigrations with Ctrl-C
------------------------------+--------------------------------------
     Reporter:  Adam Johnson  |                    Owner:  (none)
         Type:  New feature   |                   Status:  new
    Component:  Migrations    |                  Version:  dev
     Severity:  Normal        |               Resolution:
     Keywords:                |             Triage Stage:  Unreviewed
    Has patch:  0             |      Needs documentation:  0
  Needs tests:  0             |  Patch needs improvement:  0
Easy pickings:  0             |                    UI/UX:  0
------------------------------+--------------------------------------
Description changed by Adam Johnson:

Old description:

> Sometimes `makemigration` asks you questions with its “questioner”. If
> you realize that you missed something due to these questions, you might
> want to quit with Ctrl-C and edit your models file before rerunning.
>
> Currently, such a quit triggers Python’s default traceback:
>
> {{{
> $ ./manage.py makemigrations example
> It is impossible to add a non-nullable field 'title' to book without
> specifying a default. This is because the database needs something to
> populate existing rows.
> Please select a fix:
>  1) Provide a one-off default now (will be set on all existing rows with
> a null value for this column)
>  2) Quit and manually define a default value in models.py.
> Select an option:  ^CTraceback (most recent call last):
>   File "/.../manage.py", line 21, in <module>
>     main()
>     ~~~~^^
>   File "/.../django/db/migrations/questioner.py", line 169, in
> ask_not_null_addition
>     choice = self._choice_input(
>         f"It is impossible to add a non-nullable field '{field_name}' "
>     ...<10 lines>...
>         ],
>     )
>   File "/Users/chainz/tmp/django-makemigrations-
> ctrl-c/.venv/lib/python3.13/site-
> packages/django/db/migrations/questioner.py", line 114, in _choice_input
>     result = input()
> KeyboardInterrupt
> }}}
>
> This isn’t very user-friendly: it seems like maybe you broke Django, and
> it pushes the question up out of the terminal window.
>
> Instead, we could quit with a nice message, perhaps something like:
>
> {{{
> Select an option:  ^C
> Cancelled, no migration file for app 'example' written.
> }}}
>
> The message needs to be clear in the case that `makemigrations` generates
> migration files for some apps but is then quit.
>
> It should probably use [https://docs.djangoproject.com/en/5.1/ref/django-
> admin/#syntax-coloring the notice style].

New description:

 Sometimes `makemigration` asks you questions with its “questioner”. If you
 realize that you missed something due to these questions, you might want
 to quit with Ctrl-C and edit your models file before rerunning.

 Currently, such a quit triggers Python’s default traceback:

 {{{
 $ ./manage.py makemigrations example
 It is impossible to add a non-nullable field 'title' to book without
 specifying a default. This is because the database needs something to
 populate existing rows.
 Please select a fix:
  1) Provide a one-off default now (will be set on all existing rows with a
 null value for this column)
  2) Quit and manually define a default value in models.py.
 Select an option:  ^CTraceback (most recent call last):
   File "/.../manage.py", line 21, in <module>
     main()
     ~~~~^^
   ...
   ...
   ...
   File "/.../django/db/migrations/questioner.py", line 169, in
 ask_not_null_addition
     choice = self._choice_input(
         f"It is impossible to add a non-nullable field '{field_name}' "
     ...<10 lines>...
         ],
     )
   File "/Users/chainz/tmp/django-makemigrations-
 ctrl-c/.venv/lib/python3.13/site-
 packages/django/db/migrations/questioner.py", line 114, in _choice_input
     result = input()
 KeyboardInterrupt
 }}}

 This isn’t very user-friendly: it seems like maybe you broke Django, and
 it pushes the question up out of the terminal window.

 Instead, we could quit with a nice message, perhaps something like:

 {{{
 Select an option:  ^C
 Cancelled, no migration file for app 'example' written.
 }}}

 The message needs to be clear in the case that `makemigrations` generates
 migration files for some apps but is then quit.

 It should probably use [https://docs.djangoproject.com/en/5.1/ref/django-
 admin/#syntax-coloring the notice style].

--
-- 
Ticket URL: <https://code.djangoproject.com/ticket/36016#comment:2>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/django-updates/01070193d01d03fa-89e10d5b-adad-4ec2-a68a-9135811940f1-000000%40eu-central-1.amazonses.com.

Reply via email to