From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 8C6A313800E for ; Sat, 11 Aug 2012 22:31:08 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 567F5E0230; Sat, 11 Aug 2012 22:30:15 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 19045E0230 for ; Sat, 11 Aug 2012 22:30:14 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 9CA661B4028 for ; Sat, 11 Aug 2012 22:30:13 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id 53658E543B for ; Sat, 11 Aug 2012 22:30:12 +0000 (UTC) From: "Slava Bacherikov" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Slava Bacherikov" Message-ID: <1344351748.a0bb82158b882e0304274b7998e5961438182d99.bacher09@gentoo> Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/libs/package_info/ X-VCS-Repository: proj/gentoo-packages X-VCS-Files: gpackages/apps/packages/models.py gpackages/apps/packages/urls.py gpackages/apps/packages/views.py gpackages/libs/package_info/validators.py X-VCS-Directories: gpackages/apps/packages/ gpackages/libs/package_info/ X-VCS-Committer: bacher09 X-VCS-Committer-Name: Slava Bacherikov X-VCS-Revision: a0bb82158b882e0304274b7998e5961438182d99 X-VCS-Branch: master Date: Sat, 11 Aug 2012 22:30:12 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: c7547389-fad5-49fa-a353-3e95f6234e15 X-Archives-Hash: 2558b59b32c70634cdfa92cb59d57d06 commit: a0bb82158b882e0304274b7998e5961438182d99 Author: Slava Bacherikov bacher09 org> AuthorDate: Tue Aug 7 15:02:28 2012 +0000 Commit: Slava Bacherikov bacherikov org ua> CommitDate: Tue Aug 7 15:02:28 2012 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=a0bb8215 More pretty urls --- gpackages/apps/packages/models.py | 8 +++--- gpackages/apps/packages/urls.py | 8 ++++-- gpackages/apps/packages/views.py | 33 +++++++++++++++++++++++----- gpackages/libs/package_info/validators.py | 2 +- 4 files changed, 37 insertions(+), 14 deletions(-) diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py index bc592cd..702f3a5 100644 --- a/gpackages/apps/packages/models.py +++ b/gpackages/apps/packages/models.py @@ -526,8 +526,8 @@ class PackageModel(StatsModel, AbstractDateTimeModel): @models.permalink def get_absolute_url(self): # It coold been in many repositories - kwargs = { 'cpr': self.cp_or_cpr() } - return ('package',(), kwargs ) + kwargs = { 'atom': self.cp_or_cpr() } + return ('auto',(), kwargs ) class Meta: unique_together = ('virtual_package', 'repository') @@ -797,8 +797,8 @@ class EbuildModel(AbstractDateTimeModel): @models.permalink def get_absolute_url(self): # It coold been in many repositories - kwargs = { 'cpvr': self.cpv_or_cpvr() } - return ('ebuild',(), kwargs ) + kwargs = { 'atom': self.cpv_or_cpvr() } + return ('auto',(), kwargs ) class Meta: unique_together = ('package', 'version', 'revision') diff --git a/gpackages/apps/packages/urls.py b/gpackages/apps/packages/urls.py index 1a59669..a970777 100644 --- a/gpackages/apps/packages/urls.py +++ b/gpackages/apps/packages/urls.py @@ -5,7 +5,7 @@ from views import CategoriesListView, HerdsListView, MaintainersListView, \ GlobalUseListView, NewsListView, NewsDetailView, \ LicenseDetailView, ArchChoiceView, LicensesListView, \ LocalUseListView, FilteringView, RepoDetailView, \ - MainPageFeed, MainPageFeedAtom + MainPageFeed, MainPageFeedAtom, auto_package_or_ebuild urlpatterns = patterns('', url(r'^categories/$', CategoriesListView.as_view(), name = 'categories'), @@ -17,13 +17,13 @@ urlpatterns = patterns('', url(r'^license-groups/$', LicenseGroupsView.as_view(), name = 'license_groups'), url(r'^$', EbuildsListView.as_view(), name = 'ebuilds'), url(r'^ebuild/(?P\d+)/$', EbuildDetailView.as_view(), name = 'ebuild'), - url(r'^ebuild/(?P[^/]+/[^/]+)/$', EbuildDetailView.as_view(), name = 'ebuild'), + url(r'^ebuild/(?P[^/]+/[^/]+)/$', EbuildDetailView.as_view(), name = 'ebuild'), url(r'^packages/{0}$'.format(PackagesListsView.get_url_part()), PackagesListsView.as_view(), name = 'packages'), url(r'^newpackages/$', PackagesListsView.as_view(), kwargs = {'order': 'create', 'rev': 'rev'},name = 'newpackages'), #url(r'^package/(?:(?P\d+)|(?P[^/]+)/(?P[^/]+))/$', PackageDetailView.as_view(), name = 'package'), url(r'^package/(?P\d+)/$', PackageDetailView.as_view(), name = 'package'), - url(r'^package/(?P[^/]+/[^/]+)/$', PackageDetailView.as_view(), name = 'package'), + url(r'^package/(?P[^/]+/[^/]+)/$', PackageDetailView.as_view(), name = 'package'), url(r'^news/$', NewsListView.as_view(), name = 'news'), url(r'^news/(?P\d+)/$', NewsDetailView.as_view(), name = 'news_item'), url(r'^news/(?P[^/]+)/$', NewsDetailView.as_view(), name = 'news_item'), @@ -34,4 +34,6 @@ urlpatterns = patterns('', url(r'^repository/(?P[^/]+)/$', RepoDetailView.as_view(), name = 'repository'), url(r'^rss/$', MainPageFeed()), url(r'^atom/$', MainPageFeedAtom()), + url(r'^(?P[^/]+/[^/]+)/$', auto_package_or_ebuild, name = 'auto'), + url(r'^(?P[^/]+)/$', PackagesListsView.as_view(), name = 'packages'), ) diff --git a/gpackages/apps/packages/views.py b/gpackages/apps/packages/views.py index 4a5d509..5a286ac 100644 --- a/gpackages/apps/packages/views.py +++ b/gpackages/apps/packages/views.py @@ -78,7 +78,18 @@ class EbuildsListView(ContextArchListView): 'package__virtual_package__category'). \ prefetch_related('package__repository') -class EbuildDetailView(ArchesContexView, DetailView): +class AtomDetailViewMixin(ArchesContexView, DetailView): + parsing_class = EbuildParseCPVR + + def get_parsed(self): + parsed, atom = self.kwargs.get('parsed'), self.kwargs.get('atom') + if parsed is not None: + return parsed + else: + return self.parsing_class(atom) + +class EbuildDetailView(AtomDetailViewMixin): + parsing_class = EbuildParseCPVR template_name = 'ebuild.html' extra_context = {'page_name': 'Ebuild', 'arches': arches} context_object_name = 'ebuild' @@ -87,6 +98,7 @@ class EbuildDetailView(ArchesContexView, DetailView): 'package__virtual_package', 'package__virtual_package__category') + def get_object(self, queryset = None): pk = self.kwargs.get('pk') if pk is not None: @@ -94,8 +106,7 @@ class EbuildDetailView(ArchesContexView, DetailView): if queryset is None: queryset = self.get_queryset() - cpvr = self.kwargs.get('cpvr') - eo = EbuildParseCPVR(cpvr) + eo = self.get_parsed() category, name = eo.category, eo.name version, revision = eo.version, eo.revision_for_q repository = eo.repository_for_q @@ -142,7 +153,8 @@ class PackagesListsView(MultipleFilterListViewMixin, ContextArchListView): prefetch_related('repository', 'herds', 'maintainers', 'latest_ebuild__homepages') -class PackageDetailView(ArchesContexView, DetailView): +class PackageDetailView(AtomDetailViewMixin): + parsing_class = PackageParseCPR template_name = 'package.html' extra_context = {'page_name': 'Package', 'arches': arches} context_object_name = 'package' @@ -158,8 +170,7 @@ class PackageDetailView(ArchesContexView, DetailView): if queryset is None: queryset = self.get_queryset() - cpr = self.kwargs.get('cpr') - po = PackageParseCPR(cpr) + po = self.get_parsed() if not po.is_valid: raise Http404 category, name = po.category, po.name @@ -301,3 +312,13 @@ class PackageSitemap(Sitemap): def lastmod(self, obj): return obj.updated_datetime + +def auto_package_or_ebuild(request, atom): + v_atom = EbuildParseCPVR(atom) + if v_atom.is_valid: + return EbuildDetailView.as_view()(request, parsed = v_atom) + p_atom = PackageParseCPR(atom) + if p_atom.is_valid: + return PackageDetailView.as_view()(request, parsed = p_atom) + else: + raise Http404 diff --git a/gpackages/libs/package_info/validators.py b/gpackages/libs/package_info/validators.py index 8c10326..e8be8e1 100644 --- a/gpackages/libs/package_info/validators.py +++ b/gpackages/libs/package_info/validators.py @@ -7,7 +7,7 @@ validate_url = URLValidator() __all__ = ('validate_email', 'validate_url', 'ValidationError') REVISION_RE = r'r\d+' -VERSION_RE = r'[\w.]+' +VERSION_RE = r'\d[\w\.]*' NAME_RE = r'[\w+-]+?' validate_revision = RegexValidator('^%s$' % REVISION_RE)