Changeset 7fb28a0


Ignore:
Timestamp:
Jul 5, 2014, 8:32:51 PM (11 years ago)
Author:
Alex Dehnert <adehnert@…>
Branches:
master
Children:
cabf7ac
Parents:
d604f81 (diff), e24d22f (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
git-author:
Alex Dehnert <adehnert@…> (07/05/14 20:29:08)
git-committer:
Alex Dehnert <adehnert@…> (07/05/14 20:32:51)
Message:

Make development easier

  • simple install instructions for a dev install
  • support virtualenv
  • add script for setting up a dev install
    • settings, including SECRET_KEY
    • DB sync
    • creation of an account structure for a semi-plausible group
    • BudgetTerm? creation
  • Support the newest released Django (1.6)
Files:
3 added
1 deleted
18 edited
1 moved

Legend:

Unmodified
Added
Removed
  • .gitignore

    r09b7c26 rc386673  
    33django-treebeard-1.1/
    44django-treebeard-1.1.tar.gz
    5 local_settings.py
    6 local_settings_after.py
     5remit/settings/local.py
     6remit/settings/local_after.py
    77database_settings
    88client/settings.py
  • remit/finance_core/migrations/0004_socket_auth_password.py

    r38843de r75ccc48  
    33from south.db import db
    44from south.v2 import DataMigration
    5 from django.contrib.auth.hashers import UNUSABLE_PASSWORD
     5import django.contrib.auth.hashers
    66from django.db import models
     7from django.db.models import F
    78
    89class Migration(DataMigration):
     
    1112        "Write your forwards methods here."
    1213        issues = orm['auth.user'].objects.filter(password__in=['', 'SocketAuth'])
    13         issues.update(password=UNUSABLE_PASSWORD)
     14        try: # pre-1.6
     15            new_password = django.contrib.auth.hashers.UNUSABLE_PASSWORD
     16        except AttributeError: # post-1.6
     17            # See https://code.djangoproject.com/ticket/20079 for details on the change.
     18            # Ideally, we'd use a different suffix per user, but I don't want
     19            # to deal with that, and this is probably acceptably secure.
     20            #
     21            # Also, it seems a little unlikely that this code will actually
     22            # run -- it requires an install that hasn't already run the
     23            # migration (notably, esp.mit.edu has already), but *does* have
     24            # accounts with SocketAuth passwords.
     25            prefix = django.contrib.auth.hashers.UNUSABLE_PASSWORD_PREFIX
     26            suffix = django.contrib.auth.hashers.get_random_string(django.contrib.auth.hashers.UNUSABLE_PASSWORD_SUFFIX_LENGTH)
     27            new_password = prefix + F("password") + prefix + suffix
     28        issues.update(password=new_password)
    1429
    1530    def backwards(self, orm):
  • remit/finance_core/urls.py

    red4ccc7 rff623c3  
    1 from django.conf.urls.defaults import *
     1from django.conf.urls import patterns, include, url
    22import finance_core.views
    33
  • remit/manage.py

    r92ca60e r5c334f6  
    1 #!/usr/bin/python
    2 from django.core.management import execute_manager
    3 try:
    4     import settings # Assumed to be in the same directory.
    5 except ImportError:
    6     import sys
    7     sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
    8     sys.exit(1)
     1#!/usr/bin/env python
     2import os
     3import sys
    94
    105if __name__ == "__main__":
    11     execute_manager(settings)
     6    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
     7
     8    from django.core.management import execute_from_command_line
     9
     10    execute_from_command_line(sys.argv)
  • remit/remit_templates/base.html

    rc3e751d r695d358  
     1{% load url from future %}
    12<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    23
     
    1415  <body>
    1516    <ul class='tab-navigation'>
    16         <li{% ifequal pagename "homepage" %} class='selected'{% endifequal %}><a href="{% url homepage %}">Home</a></li>
    17         <li{% ifequal pagename "request_reimbursement" %} class='selected'{% endifequal %}><a href="{% url request_reimbursement %}">Request reimbursement</a></li>
    18         <li{% ifequal pagename "list_requests" %} class='selected'{% endifequal %}><a href="{% url list_requests %}">List requests</a></li>
     17        <li{% ifequal pagename "homepage" %} class='selected'{% endifequal %}><a href="{% url "homepage" %}">Home</a></li>
     18        <li{% ifequal pagename "request_reimbursement" %} class='selected'{% endifequal %}><a href="{% url "request_reimbursement" %}">Request reimbursement</a></li>
     19        <li{% ifequal pagename "list_requests" %} class='selected'{% endifequal %}><a href="{% url "list_requests" %}">List requests</a></li>
    1920        {% if perms.finance_core.use_reporting %}
    20         <li{% ifequal pagename "reporting" %} class='selected'{% endifequal %}><a href="{% url reporting %}">Reporting</a></li>
     21        <li{% ifequal pagename "reporting" %} class='selected'{% endifequal %}><a href="{% url "reporting" %}">Reporting</a></li>
    2122        {% endif %}
    2223        {% if user.is_staff %}
    23         <li><a href='{% url admin:index %}'>Django Admin</a></li>
     24        <li><a href='{% url "admin:index" %}'>Django Admin</a></li>
    2425        {% endif %}
    2526    </ul>
     
    3334            <p>Welcome, <span class='username'>{{user.username}}</span>.</p>
    3435            {% endif %}
    35             <p><a href='{% url logout %}'>Logout</a></p>
     36            <p><a href='{% url "logout" %}'>Logout</a></p>
    3637        </div>
    3738        {% endif %}
  • remit/remit_templates/index.html

    r0671644 r695d358  
    11{% extends "base.html" %}
     2{% load url from future %}
    23
    34{% block title %}Welcome to Remit{% endblock %}
     
    1213<ul>
    1314    {% if user.is_anonymous %}
    14     <li><a href='{% url login %}'>Login</a></li>
     15    <li><a href='{% url "login" %}'>Login</a></li>
    1516    {% endif %}
    16     <li><a href="{% url request_reimbursement %}">Request reimbursement</a></li>
    17     <li><a href="{% url list_requests %}">List requests</a></li>
     17    <li><a href="{% url "request_reimbursement" %}">Request reimbursement</a></li>
     18    <li><a href="{% url "list_requests" %}">List requests</a></li>
    1819    {% if perms.finance_core.use_reporting %}
    19     <li><a href="{% url reporting %}">Reporting</a></li>
     20    <li><a href="{% url "reporting" %}">Reporting</a></li>
    2021    {% endif %}
    2122    {% if user.is_staff %}
    22     <li><a href='{% url admin:index %}'>Django admin interface</a></li>
     23    <li><a href='{% url "admin:index" %}'>Django admin interface</a></li>
    2324    {% endif %}
    2425    {% if user.is_authenticated %}
    25     <li><a href='{% url logout %}'>Logout</a></li>
     26    <li><a href='{% url "logout" %}'>Logout</a></li>
    2627    {% endif %}
    2728</ul>
  • remit/remit_templates/registration/logged_out.html

    r732d9eb r695d358  
    11{% extends "base.html" %}
     2{% load url from future %}
    23
    34{% block title %}Logged out of Remit{% endblock %}
     
    67<h2>Logged out of Remit</h2>
    78
    8 <p>You have been logged out of Remit. You can return to the <a href='{% url homepage %}'>homepage</a> or <a href='{% url login %}'>login again</a>.</p>
     9<p>You have been logged out of Remit. You can return to the <a href='{% url "homepage" %}'>homepage</a> or <a href='{% url "login" %}'>login again</a>.</p>
    910{% endblock %}
  • remit/remit_templates/registration/login.html

    r1ba734f r695d358  
    11{% extends "base.html" %}
     2{% load url from future %}
    23
    34{% block title %}Log in to Remit{% endblock %}
     
    1112{% endif %}
    1213
    13 <form method="post" action="{% url django.contrib.auth.views.login %}">
     14<form method="post" action="{% url "django.contrib.auth.views.login" %}">
    1415{% csrf_token %}
    1516<table>
  • remit/remit_templates/vouchers/ReimbursementRequest_review.html

    ra5ef930 r695d358  
    11{% extends "base.html" %}
     2{% load url from future %}
    23{% load misc %}
    34
     
    123124{% else %}
    124125{% if perms.vouchers.change_reimbursementrequest %}
    125 <p>Optionally, <a href='{% url admin:vouchers_reimbursementrequest_change rr.pk %}'>change this request first</a>.</p>
     126<p>Optionally, <a href='{% url "admin:vouchers_reimbursementrequest_change" rr.pk %}'>change this request first</a>.</p>
    126127{% endif %}
    127128<form method="post" action="">
  • remit/remit_templates/vouchers/reimbursementrequest_list.html

    rf6f7aff r695d358  
    11{% extends "base.html" %}
     2{% load url from future %}
    23{% load misc %}
    34
     
    5859    <td>
    5960        <input type='checkbox' name='select' value='{{object.pk}}'{%ifin object.pk selected_ids %} checked='checked'{%endifin%}></input>
    60         <a href='{% url review_request object.pk %}'>{{ object.pk }}</a>
     61        <a href='{% url "review_request" object.pk %}'>{{ object.pk }}</a>
    6162    </td>
    6263    <td>
    63         <em><a href='{% url review_request object.pk %}'>{{ object.name }}</a></em>
     64        <em><a href='{% url "review_request" object.pk %}'>{{ object.name }}</a></em>
    6465        {% if object.documentation %}<br /><a href='{{object.documentation.backing_file.url}}'>(view docs)</a>{%endif%}
    6566    </td>
  • remit/settings/__init__.py

    rf5bebab r32b9b17  
    33import sys
    44
    5 SITE_ROOT = os.path.normpath(os.path.dirname(__file__))
     5SITE_ROOT = os.path.normpath(os.path.join(os.path.dirname(__file__), '..'))
    66SITE_WEB_PATH = ''
    77DEFAULT_DOMAIN = 'mit.edu'
     
    99DEBUG = False
    1010TEMPLATE_DEBUG = DEBUG
     11
     12ATOMIC_REQUESTS = True
    1113
    1214ADMINS = (
     
    5355USE_I18N = True
    5456
    55 from local_settings import *
     57# Required settings
     58# SITE_URL_BASE: used to construct absolute URLs for use in emails
     59
     60from local import *
    5661
    5762# Absolute path to the directory that holds media.
     
    8590    'django.contrib.sessions.middleware.SessionMiddleware',
    8691    'django.contrib.auth.middleware.AuthenticationMiddleware',
    87     'django.middleware.transaction.TransactionMiddleware',
    8892    'django.middleware.csrf.CsrfViewMiddleware',
    8993    'django.contrib.messages.middleware.MessageMiddleware',
     
    116120    'django.contrib.sessions',
    117121    'django.contrib.sites',
     122    'django.contrib.staticfiles',
    118123    'treebeard',
    119124    'south',
     
    126131USER_EMAIL_SIGNATURE = "%s Treasury" % (GROUP_NAME,)
    127132
    128 from local_settings_after import *
     133from local_after import *
  • remit/urls.py

    rf5bebab r21360c8  
    1 from django.conf.urls.defaults import *
     1from django.conf.urls import patterns, include, url
    22from django.contrib.auth.views import login, logout
    33
     
    66# Necessary views
    77import finance_core.views
     8from util.shortcuts import TemplateViewWithContext
    89
    910# Uncomment the next two lines to enable the admin:
     
    1314urlpatterns = patterns('',
    1415    # Example:
    15     (r'^$', 'django.views.generic.simple.direct_to_template', {'template': 'index.html', 'extra_context': { 'pagename':'homepage' }, }, 'homepage'),
     16    url(r'^$', TemplateViewWithContext.as_view(template_name='index.html', extra_context={ 'pagename':'homepage' }), name='homepage'),
    1617    (r'^vouchers/', include('vouchers.urls')),
    1718    (r'^finance_core/', include('finance_core.urls')),
  • remit/util/add_accounts

    r8132e8c rf298bd7  
    1 #!/usr/bin/python
     1#!/usr/bin/env python
    22import sys
    33import os
  • remit/util/add_gl_accounts.py

    r0df317c rf298bd7  
    1 #!/usr/bin/python
     1#!/usr/bin/env python
    22
    33import sys
  • remit/util/setup.py

    ra1e4224 rf298bd7  
    1 #!/usr/bin/python
     1#!/usr/bin/env python
    22import sys
    33import os
  • remit/util/shortcuts.py

    rf7dd5e7 r21360c8  
    22from django.template import RequestContext, Template
    33from django.template.loader import get_template
     4from django.views.generic.base import TemplateView
     5from django.views.generic.list import ListView
    46
    57def get_403_response(request, errmsg=None, **extra_context):
     
    810    page = tmpl.render(ctx, )
    911    return HttpResponseForbidden(page)
     12
     13
     14class ListViewWithContext(ListView):
     15    extra_context = {}
     16
     17    # I believe .queryset will work out-of-the-box
     18
     19    def get_context_data(self, **kwargs):
     20        context = super(ListViewWithContext,self).get_context_data(**kwargs)
     21        context.update(self.extra_context)
     22        return context
     23
     24
     25class TemplateViewWithContext(TemplateView):
     26    extra_context = {}
     27
     28    def get_context_data(self, **kwargs):
     29        context = super(TemplateViewWithContext,self).get_context_data(**kwargs)
     30        print context
     31        context.update(self.extra_context)
  • remit/util/templatetags/latex.py

    rdcaa9c0 rf298bd7  
    1 #!/usr/bin/python
    21# Inspired by and partially copied from ESP's backslash stuff
    32
  • remit/vouchers/urls.py

    r6e43384 rff623c3  
    1 from django.conf.urls.defaults import *
    2 from django.views.generic.list_detail import object_list
     1from django.conf.urls import patterns, include, url
    32from django.contrib.auth.decorators import permission_required
    43import vouchers.views
  • remit/vouchers/views.py

    r9dee7f6 r21360c8  
    22from vouchers.models import ReimbursementRequest, Documentation
    33from finance_core.models import BudgetTerm, BudgetArea
    4 from util.shortcuts import get_403_response
     4from util.shortcuts import get_403_response, ListViewWithContext
    55
    66from django.contrib.auth.decorators import user_passes_test, login_required
     
    1717from django.template import Context, Template
    1818from django.template.loader import get_template
    19 from django.views.generic import list_detail
    2019
    2120import decimal
     
    428427
    429428    # GENERATE THE REQUEST
    430     return list_detail.object_list(
    431         http_request,
     429    callable = ListViewWithContext.as_view(
    432430        queryset=qs,
    433431        extra_context={
     
    444442        },
    445443    )
     444    return callable(http_request)
Note: See TracChangeset for help on using the changeset viewer.