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)
next 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