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…
	
	Add table
		
		Reference in a new issue