Changeset - 05bee8b3c3b9
[Not reviewed]
0 5 0
Ben Sturmfels (bsturmfels) - 2 years ago 2021-11-26 02:00:20
ben@sturm.com.au
Apply `futurize --stage1` (safe) Python 2/3 compatibility changes.
5 files changed with 10 insertions and 7 deletions:
0 comments (0 inline, 0 general)
www/conservancy/apps/blog/views.py
Show inline comments
 
from conservancy.apps.blog.models import Entry, EntryTag # relative import
 
# from django.views.generic.list_detail import object_list
 
from django.views.generic import ListView
 
from django.views.generic.dates import YearArchiveView, MonthArchiveView, DayArchiveView, DateDetailView
 
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
 
from conservancy.apps.staff.models import Person
 
from django.shortcuts import get_object_or_404, render
 
from datetime import datetime
 
from functools import reduce
 

	
 
def OR_filter(field_name, objs):
 
    from django.db.models import Q
 
    return reduce(lambda x, y: x | y,
 
                  [Q(**{field_name: x.id}) for x in objs])
 

	
 
def last_name(person):
 
    return person.formal_name.rpartition(' ')[2]
 

	
 
def custom_index(request, queryset, *args, **kwargs):
 
    """Blog list view that allows scrolling and also shows an index by
 
    year.
www/conservancy/apps/events/views.py
Show inline comments
...
 
@@ -10,33 +10,33 @@ from django.http import HttpResponse
 
def event_detail(request, year, slug, queryset, **kwargs):
 
    """This view shows event detail.
 

	
 
    Nothing special, but it is necessary because
 
    django.views.generic.date_based.object_detail only works with
 
    slugs that are unique and specified by day, but we make slugs
 
    unique by year.
 
    """
 

	
 
    try:
 
        event = queryset.get(date__year=year, slug__exact=slug)
 
    except ObjectDoesNotExist:
 
        raise Http404, "Event does not exist"
 
        raise Http404("Event does not exist")
 
    return render(request, 'events/event_detail.html', {'event': event})
 

	
 
def custom_index(request, queryset, *args, **kwargs):
 
    """Scrollable index of future and past events, with date index.
 
    """
 

	
 
    future_events = None
 
    if not request.GET.has_key("page"):
 
    if "page" not in request.GET:
 
        future_events = Event.future.all().order_by("date")
 

	
 
    date_list = queryset.dates(kwargs['date_field'], 'year')
 

	
 
    kwargs = dict(kwargs, extra_context={'date_list': date_list,
 
                                         'future_events': future_events})
 
    del kwargs['date_field']
 
    del kwargs['allow_future']
 

	
 
    # return object_list(request, queryset, *args, **kwargs)
 
    return HttpResponse("FIXME: events must be updated like blog and news.")
 

	
www/conservancy/feeds.py
Show inline comments
 
from django.contrib.syndication.views import Feed
 
from django.utils.feedgenerator import Rss201rev2Feed 
 
from conservancy.apps.news.models import PressRelease
 
from conservancy.apps.blog.models import Entry as BlogEntry
 
from django.shortcuts import render
 
from django.conf import settings
 
from datetime import datetime
 

	
 
import itertools
 
import operator
 
from functools import reduce
 

	
 
class ConservancyFeedBase(Feed):
 
    def copyright_holder(self): return "Software Freedom Conservancy"
 

	
 
    def license_no_html(self): return "Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License."
 

	
 
    def item_copyright(self, item):
 
        year = 2008
 
        for attr in ('pub_date', 'date_created', 'date_last_modified'):
 
            if hasattr(item, attr):
 
                if hasattr(getattr(item, attr), 'year'):
 
                    year = getattr(getattr(item, attr), 'year')
...
 
@@ -162,25 +163,25 @@ class BlogFeed(ConservancyFeedBase):
 
        tags = []
 
        if 'author' in GET:
 
            tags = GET.getlist('author')
 
        if 'tag' in GET:
 
            tags += GET.getlist('tag')
 

	
 
        if len(tags) == 1:
 
            answer += " (" + tags[0] + ")"
 
        elif len(tags) > 1:
 
            firstTime = True
 
            done = {}
 
            for tag in tags:
 
                if done.has_key(tag): continue
 
                if tag in done: continue
 
                if firstTime:
 
                    answer += " ("
 
                    firstTime = False
 
                else:
 
                    answer += ", "
 
                answer += tag
 
                done[tag] = tag
 
            answer += ")"
 
        else:
 
            answer += "."
 
        return answer
 
        
...
 
@@ -189,25 +190,25 @@ class BlogFeed(ConservancyFeedBase):
 

	
 
        GET = obj.GET
 
        tags = []
 
        if 'author' in GET: tags = GET.getlist('author')
 
        if 'tag' in GET:    tags += GET.getlist('tag')
 

	
 
        done = {}
 
        if len(tags) == 1:
 
            answer += " tagged with " + tags[0]
 
        elif len(tags) > 1:
 
            firstTime = True
 
            for tag in tags:
 
                if done.has_key(tag): continue
 
                if tag in done: continue
 
                if firstTime:
 
                    answer += " tagged with "
 
                    firstTime = False
 
                else:
 
                    answer += " or "
 
                answer += tag
 
                done[tag] = tag
 
        else:
 
            answer = "All blogs at the Software Freedom Conservancy"
 
        answer += "."
 

	
 
        return answer
www/conservancy/middleware.py
Show inline comments
 
from future.utils import raise_
 
from django import http
 
from django.conf import settings
 
from django.utils.cache import patch_response_headers
 

	
 
class ForceCanonicalHostnameMiddleware(object):
 

	
 
    def process_request(self, request):
 
        """Modified common middleware for Conservancy site
 

	
 
        * Performs redirects to strip trailing "index.html"
 
        * performs redirects based on APPEND_SLASH
 
        * performs redirects based on site-specific REDIRECT_TABLE
...
 
@@ -18,31 +19,31 @@ class ForceCanonicalHostnameMiddleware(object):
 
            url = 'https://sfconservancy.org%s' % request.path
 
            return http.HttpResponseRedirect(url)
 

	
 
        # Check for a redirect based on settings.APPEND_SLASH
 
        host = request.get_host()
 
        old_url = [host, request.path]
 
        new_url = old_url[:]
 
        # Append a slash if append_slash is set and the URL doesn't have a
 
        # trailing slash or a file extension.
 
        if settings.APPEND_SLASH and (old_url[1][-1] != '/') and ('.' not in old_url[1].split('/')[-1]):
 
            new_url[1] = new_url[1] + '/'
 
            if settings.DEBUG and request.method == 'POST':
 
                raise RuntimeError, "You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining POST data. Change your form to point to %s%s (note the trailing slash), or set APPEND_SLASH=False in your Django settings." % (new_url[0], new_url[1])
 
                raise_(RuntimeError, "You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining POST data. Change your form to point to %s%s (note the trailing slash), or set APPEND_SLASH=False in your Django settings." % (new_url[0], new_url[1]))
 
        # Strip trailing index.html
 
        if new_url[1].endswith('/index.html'):
 
            new_url[1] = new_url[1][:new_url[1].rfind('index.html')]
 
        # Consult redirect table (if exists)
 
        if hasattr(settings, "REDIRECT_TABLE"):
 
            if settings.REDIRECT_TABLE.has_key(new_url[1]):
 
            if new_url[1] in settings.REDIRECT_TABLE:
 
                new_url[1] = settings.REDIRECT_TABLE[new_url[1]]
 
        if new_url != old_url:
 
            # Force canonical hostname
 
            if settings.FORCE_CANONICAL_HOSTNAME:
 
                new_url[0] = settings.FORCE_CANONICAL_HOSTNAME
 
            # Redirect
 
            if new_url[0]:
 
                newurl = "%s://%s%s" % (request.is_secure() and 'https' or 'http', new_url[0], new_url[1])
 
            else:
 
                newurl = new_url[1]
 
            if request.GET:
 
                newurl += '?' + request.GET.urlencode()
www/modpythoncustom.py
Show inline comments
...
 
@@ -33,25 +33,25 @@ def outputfilter(filter):
 
# This is unreferenced from this file, but it must be imported to
 
# enable template inheritance in the outputfilter!
 
import django.template.loader
 

	
 
# And now we override a few things in the module
 
# django.core.handlers.modpython
 

	
 
from django.core.handlers.modpython import *
 
del handler
 

	
 
class ModPythonRequest(ModPythonRequest):
 
    def is_secure(self):
 
        return self._req.get_options().has_key('HTTPS') and self._req.get_options()['HTTPS'] == 'on'
 
        return 'HTTPS' in self._req.get_options() and self._req.get_options()['HTTPS'] == 'on'
 

	
 
class ModPythonHandler(BaseHandler):
 
    request_class = ModPythonRequest
 

	
 
    def __call__(self, req):
 
        # mod_python fakes the environ, and thus doesn't process SetEnv.  This fixes that
 
        # (SFLC instance doesn't call this)
 
        #os.environ.update(req.subprocess_env)
 

	
 
        # now that the environ works we can see the correct settings, so imports
 
        # requesthat use settings now can work
 
        from django.conf import settings
0 comments (0 inline, 0 general)