Merge podjango.apps.cast into main podjango module
It's much simpler if "podjango" is the name of the Django app with a single urls.py etc. The reason this is required is because podjango was originally a fully-blown Django website and now it's become a Django app within the Conservancy website.
This commit is contained in:
parent
1b0603889e
commit
acd2cef276
14 changed files with 60 additions and 99 deletions
|
@ -97,8 +97,7 @@ INSTALLED_APPS = [
|
||||||
'conservancy.apps.fundgoal',
|
'conservancy.apps.fundgoal',
|
||||||
'conservancy.apps.assignment',
|
'conservancy.apps.assignment',
|
||||||
'conservancy.apps.fossy',
|
'conservancy.apps.fossy',
|
||||||
'podjango', # Here so that the templates are found
|
'podjango',
|
||||||
'podjango.apps.cast',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
|
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
|
||||||
|
|
|
@ -1,83 +0,0 @@
|
||||||
# Copyright (C) 2008 Bradley M. Kuhn <bkuhn@ebb.org>
|
|
||||||
# Copyright (C) 2006, 2007 Software Freedom Law Center, Inc.
|
|
||||||
#
|
|
||||||
# This software's license gives you freedom; you can copy, convey,
|
|
||||||
# propogate, redistribute and/or modify 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/>.
|
|
||||||
#
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from django.conf.urls import url
|
|
||||||
from django.views.generic.dates import DateDetailView, DayArchiveView, MonthArchiveView, YearArchiveView
|
|
||||||
|
|
||||||
from .models import Cast, CastTag
|
|
||||||
from .views import custom_index, query
|
|
||||||
|
|
||||||
extra_context = {}
|
|
||||||
|
|
||||||
info_dict = {
|
|
||||||
'queryset': Cast.objects.all(),
|
|
||||||
'date_field': 'pub_date',
|
|
||||||
'extra_context': extra_context,
|
|
||||||
'template_name': 'podjango/cast/cast_detail.html',
|
|
||||||
}
|
|
||||||
|
|
||||||
urlpatterns = [
|
|
||||||
url(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\w{1,2})/(?P<slug>[-\w]+)/$', DateDetailView.as_view(**info_dict), name='detail'),
|
|
||||||
url(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\w{1,2})/$', DayArchiveView.as_view(**info_dict), name='day-archive'),
|
|
||||||
url(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/$', MonthArchiveView.as_view(**info_dict), name='month-archive'),
|
|
||||||
url(r'^(?P<year>\d{4})/$', YearArchiveView.as_view(**info_dict), name='year-archive'),
|
|
||||||
# FIXME HOW DO I MAKE THE SLUG WORK WITH NO DATES IN IT.
|
|
||||||
# (r'^(?P<slug>[-\w]+)/$', 'object_detail', dict(info_dict, slug_field='slug')),
|
|
||||||
]
|
|
||||||
|
|
||||||
urlpatterns += [
|
|
||||||
url(r'^all/$', custom_index, dict(info_dict, paginate_by=20), name='cast'),
|
|
||||||
url(r'^query/$', query, name='query'),
|
|
||||||
]
|
|
||||||
|
|
||||||
# Code to display authors and tags on each blog page
|
|
||||||
|
|
||||||
|
|
||||||
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
|
|
|
@ -17,18 +17,17 @@
|
||||||
# "AGPLv3". If not, see <http://www.gnu.org/licenses/>.
|
# "AGPLv3". If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
import itertools
|
||||||
|
import operator
|
||||||
|
|
||||||
from django.contrib.sites.shortcuts import get_current_site
|
from django.contrib.sites.shortcuts import get_current_site
|
||||||
from django.contrib.syndication.views import add_domain, Feed
|
from django.contrib.syndication.views import add_domain, Feed
|
||||||
from django.utils.feedgenerator import Rss201rev2Feed
|
from django.utils.feedgenerator import Rss201rev2Feed
|
||||||
#from podjango.apps.staff.models import Person
|
|
||||||
from podjango.apps.cast.models import Cast
|
|
||||||
|
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
import itertools
|
from .models import Cast
|
||||||
import operator
|
|
||||||
|
|
||||||
# FIXME: Settings here should not be hard-coded for given casts, but
|
# FIXME: Settings here should not be hard-coded for given casts, but
|
||||||
# should instead have settings from the main screen.
|
# should instead have settings from the main screen.
|
||||||
|
|
|
@ -18,9 +18,10 @@
|
||||||
# "AGPLv3". If not, see <http://www.gnu.org/licenses/>.
|
# "AGPLv3". If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from podjango.apps.cast.models import Cast
|
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
from .models import Cast
|
||||||
|
|
||||||
def view(request):
|
def view(request):
|
||||||
"""Cast front page view
|
"""Cast front page view
|
||||||
Performs all object queries necessary to render the front page.
|
Performs all object queries necessary to render the front page.
|
||||||
|
|
|
@ -21,18 +21,31 @@ from django.conf import settings
|
||||||
from django.conf.urls import url, include
|
from django.conf.urls import url, include
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.syndication.views import Feed
|
from django.contrib.syndication.views import Feed
|
||||||
|
from django.views.generic.dates import DateDetailView, DayArchiveView, MonthArchiveView, YearArchiveView
|
||||||
|
|
||||||
from podjango.feeds import feed_dict, view, Mp3CastFeed, OggCastFeed
|
from . import frontpage
|
||||||
from podjango import frontpage
|
from .feeds import feed_dict, view, Mp3CastFeed, OggCastFeed
|
||||||
|
from .models import Cast, CastTag
|
||||||
#handler404 = 'modpythoncustom.view404'
|
from .views import custom_index, query
|
||||||
|
|
||||||
admin.autodiscover()
|
|
||||||
|
|
||||||
app_name = 'podjango'
|
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 = [
|
urlpatterns = [
|
||||||
url(r'^$', frontpage.view),
|
url(r'^$', frontpage.view),
|
||||||
url(r'', include('podjango.apps.cast.urls')),
|
url(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\w{1,2})/(?P<slug>[-\w]+)/$', DateDetailView.as_view(**info_dict), name='detail'),
|
||||||
|
url(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\w{1,2})/$', DayArchiveView.as_view(**info_dict), name='day-archive'),
|
||||||
|
url(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/$', MonthArchiveView.as_view(**info_dict), name='month-archive'),
|
||||||
|
url(r'^(?P<year>\d{4})/$', YearArchiveView.as_view(**info_dict), name='year-archive'),
|
||||||
|
url(r'^all/$', custom_index, dict(info_dict, paginate_by=20), name='cast'),
|
||||||
|
url(r'^query/$', query, name='query'),
|
||||||
url(r'^feeds/cast-ogg/$', OggCastFeed(), name='feed-ogg'),
|
url(r'^feeds/cast-ogg/$', OggCastFeed(), name='feed-ogg'),
|
||||||
url(r'^feeds/cast-mp3/$', Mp3CastFeed(), name='feed-mp3'),
|
url(r'^feeds/cast-mp3/$', Mp3CastFeed(), name='feed-mp3'),
|
||||||
url(r'^feeds/$', view, name='feeds'),
|
url(r'^feeds/$', view, name='feeds'),
|
||||||
|
@ -41,3 +54,35 @@ urlpatterns = [
|
||||||
if settings.DEBUG:
|
if settings.DEBUG:
|
||||||
from django.conf.urls.static import static
|
from django.conf.urls.static import static
|
||||||
urlpatterns += static('/', document_root='podjango/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
|
||||||
|
|
Loading…
Reference in a new issue