website/conservancy/podjango/urls.py
Ben Sturmfels 2a99a0c81a
Switch from url() to path()
Path is the new way to handle simpler routing rules.
2024-03-18 17:51:33 +11:00

95 lines
3.3 KiB
Python

# Copyright 2010 Bradley M. Kuhn <bkuhn@ebb.org>
# Copyright 2005-2008 James Garrison
# This software's license gives you freedom; you can copy, convey,
# propagate, redistribute, modify and/or redistribute modified versions of
# this program under the terms of the GNU Affero General Public License
# (AGPL) as published by the Free Software Foundation (FSF), either
# version 3 of the License, or (at your option) any later version of the
# AGPL published by the FSF.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program in a file in the toplevel directory called
# "AGPLv3". If not, see <http://www.gnu.org/licenses/>.
import datetime
from django.conf import settings
from django.urls import path
from django.views.generic.dates import (
DateDetailView,
DayArchiveView,
MonthArchiveView,
YearArchiveView,
)
from . import frontpage
from .feeds import Mp3CastFeed, OggCastFeed, view
from .models import Cast, CastTag
from .views import custom_index, query
app_name = 'podjango'
extra_context = {}
info_dict = {
'queryset': Cast.objects.all(),
'date_field': 'pub_date',
'extra_context': extra_context,
'template_name': 'podjango/cast/cast_detail.html',
}
urlpatterns = [
path('', frontpage.view, name='cast-home'),
path('<int:year>/<month>/<int:day>/<slug:slug>/', DateDetailView.as_view(**info_dict), name='detail'),
path('<int:year>/<month>/<int:day>/', DayArchiveView.as_view(**info_dict), name='day-archive'),
path('<int:year>/<month>/', MonthArchiveView.as_view(**info_dict), name='month-archive'),
path('<int:year>/', YearArchiveView.as_view(**info_dict), name='year-archive'),
path('all/', custom_index, dict(info_dict, paginate_by=20), name='cast'),
path('query/', query, name='query'),
path('feeds/ogg/', OggCastFeed(), name='feed-ogg'),
path('feeds/mp3/', Mp3CastFeed(), name='feed-mp3'),
path('feeds/', view, name='feeds'),
]
if settings.DEBUG:
from django.conf.urls.static import static
urlpatterns += static('/', document_root='podjango/static')
def all_tags_by_use_amount():
"""Returns all tags with an added 'cnt' attribute (how many times used)
Also sorts the tags so most-used tags appear first.
"""
# tally use amount
retval = []
current = None
for obj in CastTag.objects.filter(cast__pub_date__lte=datetime.now(),
cast__isnull=False).order_by('label'):
if current is not None and obj.id == current.id:
current.cnt += 1
else:
if current is not None:
retval.append(current)
current = obj
current.cnt = 1
if current is not None:
retval.append(current)
# sort and return
retval.sort(key=lambda x: -x.cnt)
return retval
# The functions are passed to the context uncalled so they will be
# called for each web request. If we want to only make these database
# queries a single time when a web server process begins, call both
# functions below (i.e. make both lines below end in '()')
extra_context['all_tags'] = all_tags_by_use_amount