public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Slava Bacherikov" <slava@bacherikov.org.ua>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/libs/package_info/
Date: Sat, 11 Aug 2012 22:30:12 +0000 (UTC)	[thread overview]
Message-ID: <1344351748.a0bb82158b882e0304274b7998e5961438182d99.bacher09@gentoo> (raw)

commit:     a0bb82158b882e0304274b7998e5961438182d99
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Tue Aug  7 15:02:28 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> 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<pk>\d+)/$', EbuildDetailView.as_view(), name = 'ebuild'),
-    url(r'^ebuild/(?P<cpvr>[^/]+/[^/]+)/$', EbuildDetailView.as_view(), name = 'ebuild'),
+    url(r'^ebuild/(?P<atom>[^/]+/[^/]+)/$', 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<pk>\d+)|(?P<category>[^/]+)/(?P<name>[^/]+))/$', PackageDetailView.as_view(), name = 'package'),
     url(r'^package/(?P<pk>\d+)/$', PackageDetailView.as_view(), name = 'package'),
-    url(r'^package/(?P<cpr>[^/]+/[^/]+)/$', PackageDetailView.as_view(), name = 'package'),
+    url(r'^package/(?P<atom>[^/]+/[^/]+)/$', PackageDetailView.as_view(), name = 'package'),
     url(r'^news/$', NewsListView.as_view(), name = 'news'),
     url(r'^news/(?P<pk>\d+)/$', NewsDetailView.as_view(), name = 'news_item'),
     url(r'^news/(?P<slug>[^/]+)/$', NewsDetailView.as_view(), name = 'news_item'),
@@ -34,4 +34,6 @@ urlpatterns = patterns('',
     url(r'^repository/(?P<slug>[^/]+)/$', RepoDetailView.as_view(), name = 'repository'),
     url(r'^rss/$', MainPageFeed()),
     url(r'^atom/$', MainPageFeedAtom()),
+    url(r'^(?P<atom>[^/]+/[^/]+)/$', auto_package_or_ebuild, name = 'auto'),
+    url(r'^(?P<category>[^/]+)/$', 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)


             reply	other threads:[~2012-08-11 22:31 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-11 22:30 Slava Bacherikov [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-08-02 22:44 [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/libs/package_info/ Slava Bacherikov
2012-07-12 22:16 Slava Bacherikov
2012-07-05 23:27 Slava Bacherikov
2012-07-03 21:08 Slava Bacherikov
2012-07-02 22:25 Slava Bacherikov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1344351748.a0bb82158b882e0304274b7998e5961438182d99.bacher09@gentoo \
    --to=slava@bacherikov.org.ua \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox