1 |
commit: cd6f1e10b426ab50ae4d0d9040adf3e07f6747b1 |
2 |
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org> |
3 |
AuthorDate: Wed May 30 12:08:29 2012 +0000 |
4 |
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua> |
5 |
CommitDate: Wed May 30 12:08:29 2012 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=cd6f1e10 |
7 |
|
8 |
Optimize getting by object. |
9 |
|
10 |
--- |
11 |
gpackages/apps/packages/managers.py | 25 ++++++++++++------------- |
12 |
1 files changed, 12 insertions(+), 13 deletions(-) |
13 |
|
14 |
diff --git a/gpackages/apps/packages/managers.py b/gpackages/apps/packages/managers.py |
15 |
index 6e69007..464b6ce 100644 |
16 |
--- a/gpackages/apps/packages/managers.py |
17 |
+++ b/gpackages/apps/packages/managers.py |
18 |
@@ -13,17 +13,15 @@ def _gen_query_and_manager(MixinClass, QueryClassName, ManagerClassName): |
19 |
class PackageMixin(object): |
20 |
def get(self, package = None, *args, **kwargs): |
21 |
if package is not None and isinstance(package, Package): |
22 |
- try: |
23 |
- category = packages.models.CategoryModel.objects.get(category = package.category) |
24 |
- except packages.models.CategoryModel.DoesNotExist: |
25 |
- raise self.model.DoesNotExist |
26 |
+ if 'category' not in kwargs: |
27 |
+ kwargs.update({'category__category' : package.category}) |
28 |
name = package.name |
29 |
if len(args)>=1: |
30 |
args[0] = name |
31 |
if len(args)>=2: |
32 |
args[1] = category |
33 |
else: |
34 |
- kwargs.update({'name': name, 'category': category}) |
35 |
+ kwargs.update({'name': name}) |
36 |
return super(PackageMixin, self).get(*args, **kwargs) |
37 |
|
38 |
PackageQuerySet, PackageManager = _gen_query_and_manager(PackageMixin, |
39 |
@@ -68,10 +66,10 @@ class EbuildMixin(object): |
40 |
try: |
41 |
params = dict([(k, v) for k, v in kwargs.items() if '__' not in k]) |
42 |
params.update(defaults) |
43 |
+ sid = transaction.savepoint(using=self.db) |
44 |
obj = self.model(**params) |
45 |
if 'ebuild' not in kwargs: |
46 |
obj.save(force_insert=True, using=self.db) |
47 |
- sid = transaction.savepoint(using=self.db) |
48 |
transaction.savepoint_commit(sid, using=self.db) |
49 |
return obj, True |
50 |
except IntegrityError as e: |
51 |
@@ -84,17 +82,18 @@ class EbuildMixin(object): |
52 |
raise exc_info[1], None, exc_info[2] |
53 |
|
54 |
|
55 |
- def get(self, ebuild=None, *args, **kwargs): |
56 |
+ def get(self, ebuild=None,package = None, *args, **kwargs): |
57 |
if ebuild is not None and isinstance(ebuild, Ebuild): |
58 |
- try: |
59 |
- package = packages.models.PackageModel.objects.get(package = ebuild.package) |
60 |
- except packages.models.PackageModel.DoesNotExist: |
61 |
- raise self.model.DoesNotExist |
62 |
+ if package is None: |
63 |
+ kwargs.update({ |
64 |
+ 'package__category__category': ebuild.package.category, |
65 |
+ 'package__name': ebuild.package.name }) |
66 |
+ else: |
67 |
+ kwargs.update({'package': package}) |
68 |
version = ebuild.version |
69 |
revision = ebuild.revision |
70 |
kwargs.update({ 'version': version, |
71 |
- 'revision': revision, |
72 |
- 'package': package }) |
73 |
+ 'revision': revision }) |
74 |
return super(EbuildMixin, self).get(*args, **kwargs) |