If I understood the error right. On Wed, May 10, 2023 at 5:47 PM Vishesh Mangla <[email protected]> wrote:
> Probably this would help: > https://stackoverflow.com/questions/8609192/what-is-the-difference-between-null-true-and-blank-true-in-django > > On Wed, May 10, 2023 at 5:45 PM 'Bob Aalsma' via Django users < > [email protected]> wrote: > >> Sorry Vishesh, thanks for the quick answer but I have no idea what you >> mean. >> >> On Wednesday, May 10, 2023 at 2:00:51 PM UTC+2 Vishesh Mangla wrote: >> >>> False or True check for yourself. >>> >>> On Wed, 10 May, 2023, 17:29 Vishesh Mangla, <[email protected]> >>> wrote: >>> >>>> It looks like you are passing a null but null=False is not set >>>> >>>> On Wed, 10 May, 2023, 17:27 'Bob Aalsma' via Django users, < >>>> [email protected]> wrote: >>>> >>>>> I'm trying to test a django-admin command and don't understand why the >>>>> tests give errors on the code while the code works as expected. >>>>> >>>>> I'm under the impression that the *raise CommandError* is ignored by >>>>> the test, but don't understand why this would be. >>>>> >>>>> Please help. >>>>> >>>>> Running the code shows: >>>>> >>>>> (.venv) werker@Werkers-Mac-mini domain_reader % python3 manage.py >>>>> populate_source 0 >>>>> >>>>> *CommandError: Alleen hele getallen > 0 toegestaan* >>>>> >>>>> (.venv) werker@Werkers-Mac-mini domain_reader % python3 manage.py >>>>> populate_source 1 >>>>> >>>>> *Teksten zijn gegenereerd voor tekstlengte 1* >>>>> >>>>> (.venv) werker@Werkers-Mac-mini domain_reader % python3 manage.py >>>>> populate_source 1 >>>>> >>>>> *CommandError: Teksten voor nummer 1 zijn al eerder gegenereerd* >>>>> >>>>> (.venv) werker@Werkers-Mac-mini domain_reader % python3 manage.py >>>>> populate_source 7 >>>>> >>>>> *CommandError: Opgegeven sleutel 7 niet gevonden* >>>>> >>>>> Running the tests shows >>>>> >>>>> (.venv) werker@Werkers-Mac-mini domain_reader % python3 manage.py >>>>> test tests.test_sources_app_command_populate >>>>> >>>>> Found 3 test(s). >>>>> >>>>> Creating test database for alias 'default'... >>>>> >>>>> System check identified no issues (0 silenced). >>>>> >>>>> EEE >>>>> >>>>> ====================================================================== >>>>> >>>>> ERROR: test_command_output_been_there >>>>> (tests.test_sources_app_command_populate.PopulateSourceTests.test_command_output_been_there) >>>>> >>>>> Test for failure: in_use = True. >>>>> >>>>> ---------------------------------------------------------------------- >>>>> >>>>> Traceback (most recent call last): >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py", >>>>> line 89, in _execute >>>>> >>>>> return self.cursor.execute(sql, params) >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py", >>>>> line 328, in execute >>>>> >>>>> return super().execute(query, params) >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> sqlite3.IntegrityError: NOT NULL constraint failed: >>>>> domain_sources_app_characternumber.number_of_combinations >>>>> >>>>> >>>>> The above exception was the direct cause of the following exception: >>>>> >>>>> >>>>> Traceback (most recent call last): >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/tests/test_sources_app_command_populate.py", >>>>> line 30, in test_command_output_been_there >>>>> >>>>> thingy.save() >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/base.py", >>>>> line 814, in save >>>>> >>>>> self.save_base( >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/base.py", >>>>> line 877, in save_base >>>>> >>>>> updated = self._save_table( >>>>> >>>>> ^^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/base.py", >>>>> line 1020, in _save_table >>>>> >>>>> results = self._do_insert( >>>>> >>>>> ^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/base.py", >>>>> line 1061, in _do_insert >>>>> >>>>> return manager._insert( >>>>> >>>>> ^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/manager.py", >>>>> line 87, in manager_method >>>>> >>>>> return getattr(self.get_queryset(), name)(*args, **kwargs) >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/query.py", >>>>> line 1805, in _insert >>>>> >>>>> return >>>>> query.get_compiler(using=using).execute_sql(returning_fields) >>>>> >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py", >>>>> line 1820, in execute_sql >>>>> >>>>> cursor.execute(sql, params) >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py", >>>>> line 67, in execute >>>>> >>>>> return self._execute_with_wrappers( >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py", >>>>> line 80, in _execute_with_wrappers >>>>> >>>>> return executor(sql, params, many, context) >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py", >>>>> line 84, in _execute >>>>> >>>>> with self.db.wrap_database_errors: >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/utils.py", >>>>> line 91, in __exit__ >>>>> >>>>> raise dj_exc_value.with_traceback(traceback) from exc_value >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py", >>>>> line 89, in _execute >>>>> >>>>> return self.cursor.execute(sql, params) >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py", >>>>> line 328, in execute >>>>> >>>>> return super().execute(query, params) >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> django.db.utils.IntegrityError: NOT NULL constraint failed: >>>>> domain_sources_app_characternumber.number_of_combinations >>>>> >>>>> >>>>> ====================================================================== >>>>> >>>>> ERROR: test_command_output_small >>>>> (tests.test_sources_app_command_populate.PopulateSourceTests.test_command_output_small) >>>>> >>>>> Test for failure with value '0'. >>>>> >>>>> ---------------------------------------------------------------------- >>>>> >>>>> Traceback (most recent call last): >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/tests/test_sources_app_command_populate.py", >>>>> line 20, in test_command_output_small >>>>> >>>>> call_command("populate_source", 0, stdout=out) >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/core/management/__init__.py", >>>>> line 194, in call_command >>>>> >>>>> return command.execute(*args, **defaults) >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/core/management/base.py", >>>>> line 458, in execute >>>>> >>>>> output = self.handle(*args, **options) >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/domain_sources_app/management/commands/populate_source.py", >>>>> line 36, in handle >>>>> >>>>> raise CommandError('Alleen hele getallen > 0 toegestaan') >>>>> >>>>> django.core.management.base.CommandError: Alleen hele getallen > 0 >>>>> toegestaan >>>>> >>>>> >>>>> ====================================================================== >>>>> >>>>> ERROR: test_command_output_success >>>>> (tests.test_sources_app_command_populate.PopulateSourceTests.test_command_output_success) >>>>> >>>>> Test for success: in_use = False. >>>>> >>>>> ---------------------------------------------------------------------- >>>>> >>>>> Traceback (most recent call last): >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py", >>>>> line 89, in _execute >>>>> >>>>> return self.cursor.execute(sql, params) >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py", >>>>> line 328, in execute >>>>> >>>>> return super().execute(query, params) >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> sqlite3.IntegrityError: NOT NULL constraint failed: >>>>> domain_sources_app_characternumber.number_of_combinations >>>>> >>>>> >>>>> The above exception was the direct cause of the following exception: >>>>> >>>>> >>>>> Traceback (most recent call last): >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/tests/test_sources_app_command_populate.py", >>>>> line 48, in test_command_output_success >>>>> >>>>> thingy.save() >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/base.py", >>>>> line 814, in save >>>>> >>>>> self.save_base( >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/base.py", >>>>> line 877, in save_base >>>>> >>>>> updated = self._save_table( >>>>> >>>>> ^^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/base.py", >>>>> line 1020, in _save_table >>>>> >>>>> results = self._do_insert( >>>>> >>>>> ^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/base.py", >>>>> line 1061, in _do_insert >>>>> >>>>> return manager._insert( >>>>> >>>>> ^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/manager.py", >>>>> line 87, in manager_method >>>>> >>>>> return getattr(self.get_queryset(), name)(*args, **kwargs) >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/query.py", >>>>> line 1805, in _insert >>>>> >>>>> return >>>>> query.get_compiler(using=using).execute_sql(returning_fields) >>>>> >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py", >>>>> line 1820, in execute_sql >>>>> >>>>> cursor.execute(sql, params) >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py", >>>>> line 67, in execute >>>>> >>>>> return self._execute_with_wrappers( >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py", >>>>> line 80, in _execute_with_wrappers >>>>> >>>>> return executor(sql, params, many, context) >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py", >>>>> line 84, in _execute >>>>> >>>>> with self.db.wrap_database_errors: >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/utils.py", >>>>> line 91, in __exit__ >>>>> >>>>> raise dj_exc_value.with_traceback(traceback) from exc_value >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py", >>>>> line 89, in _execute >>>>> >>>>> return self.cursor.execute(sql, params) >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> File >>>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py", >>>>> line 328, in execute >>>>> >>>>> return super().execute(query, params) >>>>> >>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> django.db.utils.IntegrityError: NOT NULL constraint failed: >>>>> domain_sources_app_characternumber.number_of_combinations >>>>> >>>>> >>>>> ---------------------------------------------------------------------- >>>>> >>>>> Ran 3 tests in 0.008s >>>>> >>>>> >>>>> FAILED (errors=3) >>>>> >>>>> Destroying test database for alias 'default'... >>>>> >>>>> Code for test: >>>>> from io import StringIO >>>>> >>>>> from django.core.management import call_command >>>>> from django.test import TestCase >>>>> >>>>> from domain_sources_app.models import CharacterNumber >>>>> >>>>> >>>>> class PopulateSourceTests(TestCase): >>>>> """Testcases for Django-admin command populate_source.""" >>>>> def test_command_output_small(self): >>>>> """Test for failure with value '0'.""" >>>>> out = StringIO() >>>>> call_command("populate_source", 0, stdout=out) >>>>> self.assertIn("Alleen hele getallen > 0 toegestaan", out.getvalue()) >>>>> >>>>> def test_command_output_been_there(self): >>>>> """Test for failure: in_use = True.""" >>>>> >>>>> thingy = CharacterNumber( >>>>> number_of_characters=1, >>>>> in_use=True, >>>>> ) >>>>> thingy.save() >>>>> >>>>> out = StringIO() >>>>> call_command( >>>>> "populate_source", >>>>> 1, >>>>> stdout=out, >>>>> ) >>>>> self.assertIn("Teksten voor nummer 1 zijn al \ >>>>> eerder gegenereerd", out.getvalue()) >>>>> >>>>> def test_command_output_success(self): >>>>> """Test for success: in_use = False.""" >>>>> >>>>> thingy = CharacterNumber( >>>>> number_of_characters=1, >>>>> in_use=False, >>>>> ) >>>>> thingy.save() >>>>> >>>>> out = StringIO() >>>>> call_command( >>>>> "populate_source", >>>>> 1, >>>>> stdout=out, >>>>> ) >>>>> self.assertIn("Teksten gegenereerd voor nummer 1", out.getvalue()) >>>>> >>>>> >>>>> >>>>> Code for the command: >>>>> from django.core.management.base import BaseCommand >>>>> from django.core.management.base import CommandError >>>>> >>>>> from domain_sources_app.models import CharacterNumber >>>>> from domain_sources_app.generate_domain_strings import >>>>> generate_domain_strings >>>>> >>>>> >>>>> class Command(BaseCommand): >>>>> """Populate Result with inital strings of >>>>> a certain length. >>>>> >>>>> Args: >>>>> BaseCommand (_type_): _description_ >>>>> >>>>> Raises: >>>>> CommandError: _description_ >>>>> """ >>>>> help = "Genereert de te onderzoeken combinaties bij de opgegeven >>>>> lengte" >>>>> >>>>> def add_arguments(self, parser): >>>>> parser.add_argument("character_number_ids", nargs="+", type=int) >>>>> >>>>> def handle(self, *args, **options): >>>>> for character_number_id in options["character_number_ids"]: >>>>> if character_number_id < 1: >>>>> raise CommandError('Alleen hele getallen > 0 toegestaan') >>>>> else: >>>>> try: >>>>> thingy = CharacterNumber.objects.get( >>>>> pk=character_number_id >>>>> ) >>>>> except CharacterNumber.DoesNotExist: >>>>> raise CommandError( >>>>> f'Opgegeven sleutel {character_number_id} \ >>>>> niet gevonden') >>>>> >>>>> if not thingy.in_use: >>>>> # generate for this number: >>>>> generate_domain_strings(character_number_id) >>>>> # register use of CharacterNumber >>>>> thingy.in_use = True >>>>> thingy.save() >>>>> >>>>> self.stdout.write( >>>>> self.style.SUCCESS( >>>>> f'Teksten zijn gegenereerd voor \ >>>>> tekstlengte {character_number_id}' >>>>> ) >>>>> ) >>>>> else: >>>>> raise CommandError( >>>>> f'Teksten voor nummer {character_number_id} zijn al \ >>>>> eerder gegenereerd' >>>>> ) >>>>> >>>>> >>>>> >>>>> >>>>> Thanks, >>>>> Bob >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Django users" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected]. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/django-users/1d0ce155-35e7-4049-88d4-80124c83dedcn%40googlegroups.com >>>>> <https://groups.google.com/d/msgid/django-users/1d0ce155-35e7-4049-88d4-80124c83dedcn%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>> -- >> You received this message because you are subscribed to the Google Groups >> "Django users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/django-users/723ee45e-6b7f-4434-b2d8-64ecb3170ff2n%40googlegroups.com >> <https://groups.google.com/d/msgid/django-users/723ee45e-6b7f-4434-b2d8-64ecb3170ff2n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CACaE8x6GYmpnEPOQXzjj5naRmF2TXoO%2BCHY8rECewt6Jtga_kw%40mail.gmail.com.

