adding a management command to santize schools from the usde database
[oweals/karmaworld.git] / karmaworld / urls.py
1 #!/usr/bin/env python
2 # -*- coding:utf8 -*-
3 # Copyright (C) 2012  FinalsClub Foundation
4 """ Controller for the KarmaNotes website """
5
6 from django.contrib import admin
7 from django.conf import settings
8 from django.conf.urls.defaults import patterns, include, url
9 from django.views.generic.simple import direct_to_template
10
11 from karmaworld.apps.ajaxuploader.views import ajax_uploader
12 from karmaworld.apps.courses.models import Course
13 from karmaworld.apps.courses.views import AboutView
14 from karmaworld.apps.courses.views import CourseDetailView
15 from karmaworld.apps.courses.views import CourseListView
16 from karmaworld.apps.courses.views import school_list
17 from karmaworld.apps.notes.views import NoteView
18 from karmaworld.apps.notes.views import RawNoteDetailView
19 from karmaworld.apps.notes.views import PDFView
20
21 # See: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#hooking-adminsite-instances-into-your-urlconf
22 admin.autodiscover()
23
24 # reused named regex capture groups
25 SLUG = r'(?P<{0}slug>[-A-Za-z0-9_]+)'
26
27 """
28 # ex: SLUG.format('')  :> (?P<slug>[-A-Za-z0-9_]+)
29 # ex: SLUG.format('school_')  :> (?P<school_slug>[-A-Za-z0-9_]+)
30
31   ex: course url
32   url(r'^' + SLUG.format('school_') + '/' + SLUG.format('') + '/'
33         CourseDetailView.as_view(), name='course_detail'),
34
35   (?P<school_slug>[^/]+)/(?P<course_slug>[^/]+)/(?P<pk>[\d^/]+)$', \
36         NoteView.as_view(), name='note_detail_pk'),
37 """
38
39 SCHOOL_SLUG = r'(?P<school_slug>[-A-Za-z0-9_]+)'
40 COURSE_SLUG = r'(?P<course_slug>[-A-Za-z0-9_]+)'
41 NOTE_SLUG   = r'(?P<slug>[-A-Za-z0-9_]+)'
42
43 # See: https://docs.djangoproject.com/en/dev/topics/http/urls/
44 urlpatterns = patterns('',
45     ## Administrative URLpatterns
46     # Admin panel and documentation:
47     url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
48     url(r'^admin/', include(admin.site.urls)),
49     # Grappelli django-admin improvment suite
50     url(r'^grappelli/', include('grappelli.urls')),
51
52     ## Single-serving page URLpatterns
53     url(r'^terms/$', direct_to_template, { 'template': 'terms.html' }, name='terms'),
54     url(r'^about/$', AboutView.as_view(), name='about'),
55
56     # VIEW for viewing a Note's gdrive generated html, used as iframe
57     url(r'^raw/(?P<pk>\d+)$', RawNoteDetailView.as_view(), name='note_raw'),
58     #url(r'^pdfview$', PDFView.as_view(), name='pdf'),
59     url(r'^pdfview/(?P<pk>\d+)$', PDFView.as_view(), name='pdf'),
60
61     # Media handling
62     url(r'^media/(?P<path>.*)$', 'django.views.static.serve', 
63             {'document_root': settings.MEDIA_ROOT, }),
64
65     # VIEW for displaying a single Course
66     url(r'^' + SLUG.format('school_') + '/' + SLUG.format('') + '$',
67         CourseDetailView.as_view(), name='course_detail'),
68
69     ## NOTE MODEL
70     # Valid url cases to the Note page
71     # a: school/course/id
72     # b: school/course/id/slug
73     # c: s../c../slug
74     # note file as id, for notes without titles yet
75     url(r'^(?P<school_slug>[^/]+)/(?P<course_slug>[^/]+)/(?P<pk>[\d^/]+)$', \
76         NoteView.as_view(), name='note_detail_pk'),
77     # note file by note.slug
78     url(r'^' + SLUG.format('school_') + '/' + SLUG.format('course_') +'/'+ SLUG.format('') +'$',
79         NoteView.as_view(), name='note_detail'),
80     #url(r'^(?P<school_slug>[^/]+)/(?P<course_slug>[^/]+)/(?P<slug>[^/]+)$', \
81     #    NoteView.as_view(), name='note_detail'),
82
83     # ---- JSON views ----#
84     # uploading files
85     url(r'^ajax-upload$', ajax_uploader, name='ajax_upload'),
86     # return json list of schools
87     url(r'^school/list/$', school_list, name='json_school_list'),
88     # ---- end JSON views ----#
89
90     url(r'^$', CourseListView.as_view(model=Course), name='home'),
91 )