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: Mon, 30 Jul 2012 23:30:31
Message-Id: 1343690534.a43df8385ddabf7d858bb9dbc5fe3ded9a68e2e8.bacher09@gentoo
1 commit: a43df8385ddabf7d858bb9dbc5fe3ded9a68e2e8
2 Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
3 AuthorDate: Mon Jul 30 23:22:14 2012 +0000
4 Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
5 CommitDate: Mon Jul 30 23:22:14 2012 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=a43df838
7
8 Add prefetching use descr
9
10 ---
11 gpackages/apps/packages/managers.py | 27 +++++++++++++++++++++++++++
12 gpackages/apps/packages/models.py | 13 +++++++++++++
13 2 files changed, 40 insertions(+), 0 deletions(-)
14
15 diff --git a/gpackages/apps/packages/managers.py b/gpackages/apps/packages/managers.py
16 index b0ff424..8e00278 100644
17 --- a/gpackages/apps/packages/managers.py
18 +++ b/gpackages/apps/packages/managers.py
19 @@ -44,6 +44,22 @@ class EbuildsWithKeywrods(Prefetcher):
20 if ebuild.pk == package.latest_ebuild_id:
21 package.latest_ebuild = ebuild
22
23 +class UseWithLocalDesc(Prefetcher):
24 + def __init__(self, package):
25 + self.package = package
26 +
27 + def filter(self, ids):
28 + return packages.models.UseFlagDescriptionModel.objects. \
29 + filter(use_flag__in = ids, package = self.package)
30 +
31 + def reverse_mapper(self, descr):
32 + return [descr.use_flag_id]
33 +
34 + def decorator(self, use_flag, descrs = ()):
35 + if len(descrs)>0:
36 + descr = descrs[0]
37 + use_flag.local_descr = descr.description
38 +
39 class KeywordsPrefetch(Prefetcher):
40 def __init__(self, arches):
41 self.arches = arches
42 @@ -101,6 +117,17 @@ class PackageManager(PackageMixin, PrefetchManagerMixin):
43
44 prefetch_definitions = {'ebuilds': EbuildsWithKeywrods}
45
46 +class UseFlagQuerySet(PrefetchQuerySet):
47 + def prefetch_package_descr(self, package):
48 + return self.prefetch(P('descr', package = package))
49 +
50 +class UseFlagManager(PrefetchManagerMixin):
51 + @classmethod
52 + def get_query_set_class(cls):
53 + return UseFlagQuerySet
54 +
55 + prefetch_definitions = {'descr': UseWithLocalDesc}
56 +
57 class KeywordMixin(object):#{{{
58 def get_or_create(self, keyword=None, **kwargs):
59 if keyword is not None:
60
61 diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
62 index 90c20de..238e864 100644
63 --- a/gpackages/apps/packages/models.py
64 +++ b/gpackages/apps/packages/models.py
65 @@ -532,12 +532,18 @@ class RemoteId(models.Model):
66 return u'%s:%s' % (self.get_type_display(), self.remote_id)
67
68 class UseFlagModel(StatsModel):
69 + def __init__(self, *args, **kwargs):
70 + super(UseFlagModel, self).__init__(*args, **kwargs)
71 + self.local_descr = None
72 +
73 stats_params = (
74 ('ebuilds_count', 'ebuildmodel'),
75 )
76
77 name = models.CharField(unique = True, max_length = 60, db_index = True)
78 description = models.TextField(blank = True)
79 +
80 + objects = managers.UseFlagManager()
81
82 # Autogenerated fields for fast stats
83 #ebuilds_count = models.PositiveIntegerField(default = 0)
84 @@ -545,6 +551,13 @@ class UseFlagModel(StatsModel):
85 def __unicode__(self):
86 return self.name
87
88 + @property
89 + def descr(self):
90 + if self.local_descr is not None:
91 + return self.local_descr
92 + else:
93 + return self.description
94 +
95 class Meta:
96 ordering = ('name',)