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/, gpackages/templates/
Date: Fri, 29 Jun 2012 00:00:19
Message-Id: 1340923514.da9ac5b7a7b636fdf67a528386e676ee95c10e9a.bacher09@gentoo
1 commit: da9ac5b7a7b636fdf67a528386e676ee95c10e9a
2 Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
3 AuthorDate: Thu Jun 28 22:45:14 2012 +0000
4 Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
5 CommitDate: Thu Jun 28 22:45:14 2012 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=da9ac5b7
7
8 Add PackageDetailView
9
10 ---
11 gpackages/apps/packages/models.py | 13 ++++++++
12 gpackages/apps/packages/urls.py | 7 ++++-
13 gpackages/apps/packages/views.py | 50 +++++++++++++++++++++++++++++-
14 gpackages/templates/package.html | 5 +++
15 gpackages/templates/package_object.html | 12 +++++++
16 gpackages/templates/packages.html | 12 +------
17 6 files changed, 86 insertions(+), 13 deletions(-)
18
19 diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
20 index aa7bd65..1e50175 100644
21 --- a/gpackages/apps/packages/models.py
22 +++ b/gpackages/apps/packages/models.py
23 @@ -316,6 +316,19 @@ class PackageModel(AbstractDateTimeModel):
24 for ebuild in self.ebuilds:
25 l.extend(ebuild.get_ebuilds_and_keywords(arch_list))
26 return l
27 +
28 + @models.permalink
29 + def get_absolute_url_by_pk(self):
30 + return ('package',(), {'pk': self.pk})
31 +
32 + @models.permalink
33 + def get_absolute_url(self):
34 + # It coold been in many repositories
35 + kwargs = { 'category': self.virtual_package.category.category,
36 + 'name': self.virtual_package.name }
37 + if self.repository.name != 'gentoo':
38 + kwargs['repository'] = self.repository.name
39 + return ('package',(), kwargs )
40
41 class Meta:
42 unique_together = ('virtual_package', 'repository')
43
44 diff --git a/gpackages/apps/packages/urls.py b/gpackages/apps/packages/urls.py
45 index 569417e..3744802 100644
46 --- a/gpackages/apps/packages/urls.py
47 +++ b/gpackages/apps/packages/urls.py
48 @@ -1,7 +1,7 @@
49 from django.conf.urls import patterns, include, url
50 from views import CategoriesListView, HerdsListView, MaintainersListView, \
51 RepositoriesListView, LicenseGroupsView , EbuildsListView, \
52 - PackagesListsView
53 + PackagesListsView, PackageDetailView
54
55 urlpatterns = patterns('',
56 url(r'^categories/$', CategoriesListView.as_view(), name = 'categories'),
57 @@ -11,4 +11,9 @@ urlpatterns = patterns('',
58 url(r'^license-groups/$', LicenseGroupsView.as_view(), name = 'license_groups'),
59 url(r'^$', EbuildsListView.as_view(), name = 'ebuilds'),
60 url(r'^packages/$', PackagesListsView.as_view(), name = 'packages'),
61 +
62 + # In Future I will write my onw URL Resolver !!!
63 + #url(r'^package/(?:(?P<pk>\d+)|(?P<category>[^/]+)/(?P<name>[^/]+))/$', PackageDetailView.as_view(), name = 'package'),
64 + url(r'^package/(?P<pk>\d+)/$', PackageDetailView.as_view(), name = 'package'),
65 + url(r'^package/(?P<category>[^/]+)/(?P<name>[^/:]+)(::(?P<repository>[^/]+))?/$', PackageDetailView.as_view(), name = 'package'),
66 )
67
68 diff --git a/gpackages/apps/packages/views.py b/gpackages/apps/packages/views.py
69 index 4639555..98672d4 100644
70 --- a/gpackages/apps/packages/views.py
71 +++ b/gpackages/apps/packages/views.py
72 @@ -1,8 +1,11 @@
73 -from generic.views import ContextListView, ContextTemplateView
74 +from django.views.generic import DetailView
75 +from generic.views import ContextListView, ContextTemplateView, ContextView
76 from models import CategoryModel, HerdsModel, MaintainerModel, \
77 RepositoryModel, LicenseGroupModel, EbuildModel, \
78 PackageModel
79
80 +from django.shortcuts import get_object_or_404
81 +
82 class CategoriesListView(ContextListView):
83 extra_context = {'page_name': 'Categories',}
84 template_name = 'categories.html'
85 @@ -52,5 +55,48 @@ class PackagesListsView(ContextListView):
86 template_name = 'packages.html'
87 context_object_name = 'packages'
88 queryset = PackageModel.objects.all(). \
89 - select_related('virtual_package', 'virtual_package__category'). \
90 + select_related('virtual_package',
91 + 'virtual_package__category',
92 + 'repository'). \
93 + defer('repository__description',
94 + 'repository__owner_name',
95 + 'repository__owner_email',
96 + 'repository__homepage',
97 + 'repository__official',
98 + 'repository__quality',
99 + 'changelog'). \
100 prefetch_keywords(arches)
101 +
102 +class PackageDetailView(ContextView, DetailView):
103 + arches = ['alpha', 'amd64', 'arm', 'hppa', 'ia64', 'ppc', 'ppc64', 'sparc', 'x86']
104 + template_name = 'package.html'
105 + extra_context = {'page_name': 'Package', 'arches': arches}
106 + context_object_name = 'package'
107 + queryset = PackageModel.objects.all(). \
108 + select_related('virtual_package',
109 + 'virtual_package__category',
110 + 'repository'). \
111 + defer('repository__description',
112 + 'repository__owner_name',
113 + 'repository__owner_email',
114 + 'repository__homepage',
115 + 'repository__official',
116 + 'repository__quality',
117 + 'changelog'). \
118 + prefetch_keywords(arches)
119 +
120 + def get_object(self, queryset = None):
121 + pk = self.kwargs.get('pk')
122 + if pk is not None:
123 + return super(PackageDetailView, self).get_object(queryset)
124 + if queryset is None:
125 + queryset = self.get_queryset()
126 +
127 + name, category = self.kwargs.get('name'), self.kwargs.get('category')
128 + repository = self.kwargs.get('repository')
129 + if repository is None:
130 + repository = 'gentoo'
131 + obj = get_object_or_404(queryset, name = name,
132 + category = category,
133 + repository__name = repository)
134 + return obj
135
136 diff --git a/gpackages/templates/package.html b/gpackages/templates/package.html
137 new file mode 100644
138 index 0000000..9023001
139 --- /dev/null
140 +++ b/gpackages/templates/package.html
141 @@ -0,0 +1,5 @@
142 +{% extends "base.html" %}
143 +
144 +{% block content %}
145 + {% include 'package_object.html' %}
146 +{% endblock content %}
147
148 diff --git a/gpackages/templates/package_object.html b/gpackages/templates/package_object.html
149 new file mode 100644
150 index 0000000..d713d4a
151 --- /dev/null
152 +++ b/gpackages/templates/package_object.html
153 @@ -0,0 +1,12 @@
154 +{% load url from future %}
155 +{% load packages %}
156 +<div class="well package-well">
157 + <div class="package-name">
158 + <span><a href="{{ package.get_absolute_url }}">{{ package.cp }}</a>:: {{ package.repository.name }}</span>
159 + <span class="package_update_datetime">{{ package.updated_datetime }}</span>
160 + </div>
161 + {% if package.description %}
162 + <div style="padding-bottom: 10px; margin 10px;">{{ package.description }}</div>
163 + {% endif %}
164 + {% render_keywords_table package arches %}
165 +</div>
166
167 diff --git a/gpackages/templates/packages.html b/gpackages/templates/packages.html
168 index ec6d22a..f7ac01a 100644
169 --- a/gpackages/templates/packages.html
170 +++ b/gpackages/templates/packages.html
171 @@ -1,18 +1,10 @@
172 {% extends "base.html" %}
173 +{% load url from future %}
174 {% load packages %}
175
176 {% block content %}
177 {% for package in packages %}
178 - <div class="well package-well">
179 - <div class="package-name">
180 - <span>{{ package.cp }}</span>
181 - <span class="package_update_datetime">{{ package.updated_datetime }}</span>
182 - </div>
183 - {% if package.description %}
184 - <div style="padding-bottom: 10px; margin 10px;">{{ package.description }}</div>
185 - {% endif %}
186 - {% render_keywords_table package arches %}
187 - </div>
188 + {% include 'package_object.html' %}
189 {% endfor %}
190 {% include 'paginator.html' %}
191 {% endblock content %}