bitbake: toaster: monkey patch Queryset

Fixed 'database is locked' issue by monkey patching django QuerySet
methods.

The actual patching places were found by bisecting Django codebase.

This commit should be removed after Django is fixed if it's fixed
at all.

(Bitbake rev: 175411bf05423b1892c7928c2b928843b39645f0)

Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
Signed-off-by: brian avery <avery.brian@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ed Bartosh 2015-12-09 19:56:42 -08:00 committed by Richard Purdie
parent c1c8eff3f9
commit 4a78416943
1 changed files with 30 additions and 0 deletions

View File

@ -52,6 +52,36 @@ if 'sqlite' in settings.DATABASES['default']['ENGINE']:
models.Model.save = save
# HACK: Monkey patch Django to fix 'database is locked' issue
from django.db.models.query import QuerySet
_base_insert = QuerySet._insert
def _insert(self, *args, **kwargs):
with transaction.atomic(using=self.db, savepoint=False):
return _base_insert(self, *args, **kwargs)
QuerySet._insert = _insert
from django.utils import six
def _create_object_from_params(self, lookup, params):
"""
Tries to create an object using passed params.
Used by get_or_create and update_or_create
"""
try:
obj = self.create(**params)
return obj, True
except IntegrityError:
exc_info = sys.exc_info()
try:
return self.get(**lookup), False
except self.model.DoesNotExist:
pass
six.reraise(*exc_info)
QuerySet._create_object_from_params = _create_object_from_params
# end of HACK
class GitURLValidator(validators.URLValidator):
import re
regex = re.compile(