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',) |