Wtem!

— Leży!

Produkcja? Ale tutaj?

Traceback (most recent call last):
  File "/var/www/foo/catalogue/views.py", line 252, in get
    product = Product.objects.get(upc=tokens[0])
  File "/usr/lib/python2.6/site-packages/django/db/models/manager.py", line 132, in get
    return self.get_query_set().get(*args, **kwargs)
  File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 351, in get
    % (self.model._meta.object_name, num, kwargs))
TypeError: 'DoesNotExist' object is not callable

Odśwież. Działa. Ki czort? Odśwież. Leży. Działa — działa — leży — działa. Wynik zdaje się zależeć od procesu, który akurat obsłuży zapytanie.

No dobrze, zobaczmy, co…

raise self.model.MultipleObjectsReturned("get() returned more than one %s -- it returned %s! Lookup parameters were %s"
        % (self.model._meta.object_name, num, kwargs))

Wyjątek. W trakcie rzucania wyjątku. Wbudowanego w klasę modelu.

Wdech, wydech. Drugi worker dostał. Dziwacznie poskręcane fragmenty jego wnętrzności zasypują mi skrzynkę.

Wdech, wydech, grep.

Zanim się przedarłem, straciliśmy jeszcze trzech. W sumie połowa zwijała się tam i charczała wewnętrznymi błędami. Wytrzymajcie, jeszcze tylko kilka plików. I jest.

try:
    product = Product.objects.get(upc=product_upc)
except Product.DoesNotExist, Product.MultipleObjectsReturned:
    # …

Zasadzka — sztuk trzy w projekcie — ładnie nas urządzili. Jeden koniec kodu powoli kopie dołek pod drugim. Pułapki udało się usunąć, ale tamtym już nikt nie pomoże. Przysłanie na produkcję posiłków zajmie minimum trzy dni. Pozostaje tylko patrzeć, jak jeden po drugim toną w tym dziwacznym morzu bezradności, serwując skomplikowane dokumenty, jednak dławiąc się na najprostszych rzeczach. Zostali sami. Oni i pięć setek szaleństwa.

Kurtyna. Niestosowne słowa cisną mi się na usta, ubliżać chcę składni, albowiem łaknę Pythona trzeciej inkarnacji.