Gentoo Archives: gentoo-commits

From: Slava Bacherikov <slava@××××××××××××××.ua>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/
Date: Tue, 29 May 2012 21:35:09
Message-Id: 1338313068.b19a891069ed4b9bfa909e00501c47443e3710ff.bacher09@gentoo
1 commit: b19a891069ed4b9bfa909e00501c47443e3710ff
2 Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
3 AuthorDate: Tue May 29 17:37:48 2012 +0000
4 Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
5 CommitDate: Tue May 29 17:37:48 2012 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=b19a8910
7
8 Extend manager.
9
10 ---
11 gpackages/apps/packages/managers.py | 40 ++++++++++++++++++++++++++++++++++-
12 1 files changed, 39 insertions(+), 1 deletions(-)
13
14 diff --git a/gpackages/apps/packages/managers.py b/gpackages/apps/packages/managers.py
15 index a9b514b..6e69007 100644
16 --- a/gpackages/apps/packages/managers.py
17 +++ b/gpackages/apps/packages/managers.py
18 @@ -1,4 +1,4 @@
19 -from django.db import models
20 +from django.db import models, connections, router, transaction, IntegrityError
21 from porttree import Category, Package, Ebuild, Keyword
22 import packages.models
23
24 @@ -46,6 +46,44 @@ KeywordQuerySet, KeywordManager = _gen_query_and_manager(KeywordMixin,
25 'KeywordManager')
26
27 class EbuildMixin(object):
28 + def create(self, **kwargs):
29 + if 'ebuild' in kwargs:
30 + obj = self.model(**kwargs)
31 + else:
32 + obj = super(EbuildMixin, self).create(**kwargs)
33 + return obj
34 +
35 + def get_or_create(self, **kwargs):
36 + assert kwargs, \
37 + 'get_or_create() must be passed at least one keyword argument'
38 + defaults = kwargs.pop('defaults', {})
39 + lookup = kwargs.copy()
40 + for f in self.model._meta.fields:
41 + if f.attname in lookup:
42 + lookup[f.name] = lookup.pop(f.attname)
43 + try:
44 + self._for_write = True
45 + return self.get(**lookup), False
46 + except self.model.DoesNotExist:
47 + try:
48 + params = dict([(k, v) for k, v in kwargs.items() if '__' not in k])
49 + params.update(defaults)
50 + obj = self.model(**params)
51 + if 'ebuild' not in kwargs:
52 + obj.save(force_insert=True, using=self.db)
53 + sid = transaction.savepoint(using=self.db)
54 + transaction.savepoint_commit(sid, using=self.db)
55 + return obj, True
56 + except IntegrityError as e:
57 + transaction.savepoint_rollback(sid, using=self.db)
58 + exc_info = sys.exc_info()
59 + try:
60 + return self.get(**lookup), False
61 + except self.model.DoesNotExist:
62 + # Re-raise the IntegrityError with its original traceback.
63 + raise exc_info[1], None, exc_info[2]
64 +
65 +
66 def get(self, ebuild=None, *args, **kwargs):
67 if ebuild is not None and isinstance(ebuild, Ebuild):
68 try: