Бесконечный цикл при отсутствии кода производителя
Описание
При отсутствии в code
производителя (Vendor
) имени производителя при вызове Vendor.ensure_vendor
мы попадаем в бесконечный цикл:
while True:
vendor = Vendor._get_by_code(code)
if vendor:
return vendor
try:
vendor = Vendor(name=code, full_name=code, code=[code], uuid=uuid.uuid4())
vendor.save()
return vendor
except NotUniqueError:
pass # Already created by concurrent process, reread
Из-за отсутствия code
не можешм найти запись, а при попытке её создания получаем ощибку NotUniqueError
, поскольку данный производитель уже есть. Игнорируем ошибки и так до бесконечности.
Предложение
- Можно дополнительно искать производителя по имени
- Заменить бесконечный цикл на блокировку
- При добавлении производителя автоматически валидировать наличие имени в коде