Commit 2b4c8e75 by Piotr Mitros

Merge

parents 219ff18c e3e1f1fa
...@@ -245,6 +245,10 @@ class LoncapaModule(XModule): ...@@ -245,6 +245,10 @@ class LoncapaModule(XModule):
correct_map = self.lcp.grade_answers(answers) correct_map = self.lcp.grade_answers(answers)
except: except:
self.lcp = LoncapaProblem(filename, id=lcp_id, state=old_state) self.lcp = LoncapaProblem(filename, id=lcp_id, state=old_state)
print {'error':sys.exc_info(),
'answers':answers,
'seed':self.lcp.seed,
'filename':self.lcp.filename}
return json.dumps({'success':'syntax'}) return json.dumps({'success':'syntax'})
self.attempts = self.attempts + 1 self.attempts = self.attempts + 1
......
...@@ -125,7 +125,12 @@ LOGGING = { ...@@ -125,7 +125,12 @@ LOGGING = {
} }
} }
TRACK_DIR = None #TRACK_DIR = None
DEBUG_TRACK_LOG = False
# Maximum length of a tracking string. We don't want e.g. a file upload in our log
TRACK_MAX_EVENT = 1000
# Maximum length of log file before starting a new one.
MAXLOG = 500
execfile("../settings.py") execfile("../settings.py")
......
#!/usr/bin/env python #!/usr/bin/env python
print "Hello"
''' '''
WikiLink Extention for Python-Markdown WikiLink Extention for Python-Markdown
====================================== ======================================
...@@ -69,6 +67,13 @@ Dependencies: ...@@ -69,6 +67,13 @@ Dependencies:
''' '''
import markdown import markdown
try:
# Markdown 2.1.0 changed from 2.0.3. We try importing the new version first,
# but import the 2.0.3 version if it fails
from markdown.util import etree
except:
from markdown import etree
class CamelCaseExtension(markdown.Extension): class CamelCaseExtension(markdown.Extension):
def __init__(self, configs): def __init__(self, configs):
...@@ -97,14 +102,14 @@ class CamelCaseExtension(markdown.Extension): ...@@ -97,14 +102,14 @@ class CamelCaseExtension(markdown.Extension):
class CamelCaseLinks(markdown.inlinepatterns.Pattern): class CamelCaseLinks(markdown.inlinepatterns.Pattern):
def handleMatch(self, m) : def handleMatch(self, m) :
if m.group('escape') == '\\': if m.group('escape') == '\\':
a = markdown.etree.Element('a')#doc.createTextNode(m.group('camelcase')) a = etree.Element('a')#doc.createTextNode(m.group('camelcase'))
else : else :
url = m.group('camelcase') url = m.group('camelcase')
#'%s%s%s'% (self.md.wiki_config['base_url'][0], \ #'%s%s%s'% (self.md.wiki_config['base_url'][0], \
#m.group('camelcase'), \ #m.group('camelcase'), \
#self.md.wiki_config['end_url'][0]) #self.md.wiki_config['end_url'][0])
label = m.group('camelcase').replace('_', ' ') label = m.group('camelcase').replace('_', ' ')
a = markdown.etree.Element('a') a = etree.Element('a')
a.set('href', url) a.set('href', url)
a.text = label a.text = label
a.set('class', 'wikilink') a.set('class', 'wikilink')
......
...@@ -7,12 +7,16 @@ circuit:name becomes the circuit. ...@@ -7,12 +7,16 @@ circuit:name becomes the circuit.
''' '''
import simplewiki.settings as settings import simplewiki.settings as settings
import markdown
from markdown import etree_loader
from djangomako.shortcuts import render_to_response, render_to_string from djangomako.shortcuts import render_to_response, render_to_string
ElementTree=etree_loader.importETree() import markdown
try:
# Markdown 2.1.0 changed from 2.0.3. We try importing the new version first,
# but import the 2.0.3 version if it fails
from markdown.util import etree
except:
from markdown import etree
class CircuitExtension(markdown.Extension): class CircuitExtension(markdown.Extension):
def __init__(self, configs): def __init__(self, configs):
...@@ -26,18 +30,16 @@ class CircuitExtension(markdown.Extension): ...@@ -26,18 +30,16 @@ class CircuitExtension(markdown.Extension):
md.inlinePatterns.add(name, pattern, "<reference") md.inlinePatterns.add(name, pattern, "<reference")
def extendMarkdown(self, md, md_globals): def extendMarkdown(self, md, md_globals):
print "Here"
self.add_inline(md, 'circuit', CircuitLink, r'^circuit:(?P<name>[a-zA-Z0-9]*)$') self.add_inline(md, 'circuit', CircuitLink, r'^circuit:(?P<name>[a-zA-Z0-9]*)$')
class CircuitLink(markdown.inlinepatterns.Pattern): class CircuitLink(markdown.inlinepatterns.Pattern):
def handleMatch(self, m): def handleMatch(self, m):
name = m.group('name') name = m.group('name')
if not name.isalnum(): if not name.isalnum():
return ElementTree.fromstring("<div>Circuit name must be alphanumeric</div>") return etree.fromstring("<div>Circuit name must be alphanumeric</div>")
return ElementTree.fromstring(render_to_string('show_circuit.html', {'name':name})) return etree.fromstring(render_to_string('show_circuit.html', {'name':name}))
def makeExtension(configs=None) : def makeExtension(configs=None) :
print "Here"
return CircuitExtension(configs=configs) return CircuitExtension(configs=configs)
...@@ -16,7 +16,15 @@ Requires Python-Markdown 1.6+ ...@@ -16,7 +16,15 @@ Requires Python-Markdown 1.6+
''' '''
import simplewiki.settings as settings import simplewiki.settings as settings
import markdown import markdown
try:
# Markdown 2.1.0 changed from 2.0.3. We try importing the new version first,
# but import the 2.0.3 version if it fails
from markdown.util import etree
except:
from markdown import etree
class ImageExtension(markdown.Extension): class ImageExtension(markdown.Extension):
def __init__(self, configs): def __init__(self, configs):
...@@ -35,7 +43,7 @@ class ImageExtension(markdown.Extension): ...@@ -35,7 +43,7 @@ class ImageExtension(markdown.Extension):
class ImageLink(markdown.inlinepatterns.Pattern): class ImageLink(markdown.inlinepatterns.Pattern):
def handleMatch(self, m): def handleMatch(self, m):
img = markdown.etree.Element('img') img = etree.Element('img')
proto = m.group('proto') or "http://" proto = m.group('proto') or "http://"
domain = m.group('domain') domain = m.group('domain')
path = m.group('path') path = m.group('path')
......
# Source: https://github.com/mayoff/python-markdown-mathjax # Source: https://github.com/mayoff/python-markdown-mathjax
print "Hello"
import markdown import markdown
try:
# Markdown 2.1.0 changed from 2.0.3. We try importing the new version first,
# but import the 2.0.3 version if it fails
from markdown.util import etree, AtomicString
except:
from markdown import etree, AtomicString
class MathJaxPattern(markdown.inlinepatterns.Pattern): class MathJaxPattern(markdown.inlinepatterns.Pattern):
...@@ -10,7 +14,9 @@ class MathJaxPattern(markdown.inlinepatterns.Pattern): ...@@ -10,7 +14,9 @@ class MathJaxPattern(markdown.inlinepatterns.Pattern):
markdown.inlinepatterns.Pattern.__init__(self, r'(?<!\\)(\$\$?)(.+?)\2') markdown.inlinepatterns.Pattern.__init__(self, r'(?<!\\)(\$\$?)(.+?)\2')
def handleMatch(self, m): def handleMatch(self, m):
return markdown.AtomicString(m.group(2) + m.group(3) + m.group(2)) el = etree.Element('span')
el.text = AtomicString(m.group(2) + m.group(3) + m.group(2))
return el
class MathJaxExtension(markdown.Extension): class MathJaxExtension(markdown.Extension):
def extendMarkdown(self, md, md_globals): def extendMarkdown(self, md, md_globals):
......
...@@ -128,6 +128,13 @@ u'<p><object data="http://www.gametrailers.com/remote_wrap.php?mid=58079" height ...@@ -128,6 +128,13 @@ u'<p><object data="http://www.gametrailers.com/remote_wrap.php?mid=58079" height
""" """
import markdown import markdown
try:
# Markdown 2.1.0 changed from 2.0.3. We try importing the new version first,
# but import the 2.0.3 version if it fails
from markdown.util import etree
except:
from markdown import etree
version = "0.1.6" version = "0.1.6"
...@@ -229,7 +236,7 @@ class Yahoo(markdown.inlinepatterns.Pattern): ...@@ -229,7 +236,7 @@ class Yahoo(markdown.inlinepatterns.Pattern):
width = self.ext.config['yahoo_width'][0] width = self.ext.config['yahoo_width'][0]
height = self.ext.config['yahoo_height'][0] height = self.ext.config['yahoo_height'][0]
obj = flash_object(url, width, height) obj = flash_object(url, width, height)
param = markdown.etree.Element('param') param = etree.Element('param')
param.set('name', 'flashVars') param.set('name', 'flashVars')
param.set('value', "id=%s&vid=%s" % (m.group('yahooid'), param.set('value', "id=%s&vid=%s" % (m.group('yahooid'),
m.group('yahoovid'))) m.group('yahoovid')))
...@@ -244,20 +251,20 @@ class Youtube(markdown.inlinepatterns.Pattern): ...@@ -244,20 +251,20 @@ class Youtube(markdown.inlinepatterns.Pattern):
return flash_object(url, width, height) return flash_object(url, width, height)
def flash_object(url, width, height): def flash_object(url, width, height):
obj = markdown.etree.Element('object') obj = etree.Element('object')
obj.set('type', 'application/x-shockwave-flash') obj.set('type', 'application/x-shockwave-flash')
obj.set('width', width) obj.set('width', width)
obj.set('height', height) obj.set('height', height)
obj.set('data', url) obj.set('data', url)
param = markdown.etree.Element('param') param = etree.Element('param')
param.set('name', 'movie') param.set('name', 'movie')
param.set('value', url) param.set('value', url)
obj.append(param) obj.append(param)
param = markdown.etree.Element('param') param = etree.Element('param')
param.set('name', 'allowFullScreen') param.set('name', 'allowFullScreen')
param.set('value', 'true') param.set('value', 'true')
obj.append(param) obj.append(param)
#param = markdown.etree.Element('param') #param = etree.Element('param')
#param.set('name', 'allowScriptAccess') #param.set('name', 'allowScriptAccess')
#param.set('value', 'sameDomain') #param.set('value', 'sameDomain')
#obj.append(param) #obj.append(param)
......
...@@ -247,7 +247,6 @@ class Revision(models.Model): ...@@ -247,7 +247,6 @@ class Revision(models.Model):
# Create pre-parsed contents - no need to parse on-the-fly # Create pre-parsed contents - no need to parse on-the-fly
ext = WIKI_MARKDOWN_EXTENSIONS ext = WIKI_MARKDOWN_EXTENSIONS
print "Waka", WIKI_MARKDOWN_EXTENSIONS
ext += ["wikilinks(base_url=%s/)" % reverse('wiki_view', args=('',))] ext += ["wikilinks(base_url=%s/)" % reverse('wiki_view', args=('',))]
self.contents_parsed = markdown(self.contents, self.contents_parsed = markdown(self.contents,
extensions=ext, extensions=ext,
......
...@@ -94,7 +94,6 @@ WIKI_MARKDOWN_EXTENSIONS = getattr(settings, 'SIMPLE_WIKI_MARKDOWN_EXTENSIONS', ...@@ -94,7 +94,6 @@ WIKI_MARKDOWN_EXTENSIONS = getattr(settings, 'SIMPLE_WIKI_MARKDOWN_EXTENSIONS',
'circuit' 'circuit'
]) ])
print WIKI_MARKDOWN_EXTENSIONS
WIKI_IMAGE_EXTENSIONS = getattr(settings, WIKI_IMAGE_EXTENSIONS = getattr(settings,
'SIMPLE_WIKI_IMAGE_EXTENSIONS', 'SIMPLE_WIKI_IMAGE_EXTENSIONS',
......
from django.db import models
# Create your models here.
"""
This file demonstrates writing tests using the unittest module. These will pass
when you run "manage.py test".
Replace this with more appropriate tests for your application.
"""
from django.test import TestCase
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.assertEqual(1 + 1, 2)
from djangomako.shortcuts import render_to_response, render_to_string
from django.shortcuts import redirect
import os
from django.conf import settings
from django.http import Http404
# We don't do subdirectories to reduce odds of possible future
# security issues. Feel free to re-add them if needed -- just make
# sure things like /../../etc/passwd are handled okay.
valid_files=os.listdir(settings.TEXTBOOK_DIR)
def index(request, filename):
if filename in valid_files:
text=open(settings.TEXTBOOK_DIR+filename).read()
return render_to_response('textbook.html',{'text':text})
else:
raise Http404
...@@ -14,7 +14,6 @@ else: ...@@ -14,7 +14,6 @@ else:
logfile = None logfile = None
file_index = 0 file_index = 0
log_index = 0 log_index = 0
MAXLOG = 5
filename = None filename = None
def make_file(): def make_file():
...@@ -31,20 +30,28 @@ def make_file(): ...@@ -31,20 +30,28 @@ def make_file():
def log_event(event): def log_event(event):
global logfile, log_index global logfile, log_index
event_str = json.dumps(event)
if settings.TRACK_DIR == None: if settings.TRACK_DIR == None:
# print event # print event
return return
if logfile == None or log_index >= MAXLOG: if logfile == None or log_index >= settings.MAXLOG:
make_file() make_file()
event_str = json.dumps(event) logfile.write(event_str[:settings.TRACK_MAX_EVENT]+'\n')
logfile.write(event_str+'\n') if settings.DEBUG_TRACK_LOG:
print event_str
log_index = log_index + 1 log_index = log_index + 1
def user_track(request): def user_track(request):
try: # TODO: Do the same for many of the optional META parameters
username = request.user.username
except:
username = "anonymous"
# TODO: Move a bunch of this into log_event
event = { event = {
"username" : request.user.username, "username" : username,
"session" : request.META['HTTP_COOKIE'], "session" : request.META['HTTP_COOKIE'],
"ip" : request.META['REMOTE_ADDR'], "ip" : request.META['REMOTE_ADDR'],
"event_source" : "browser", "event_source" : "browser",
...@@ -57,8 +64,13 @@ def user_track(request): ...@@ -57,8 +64,13 @@ def user_track(request):
return HttpResponse('success') return HttpResponse('success')
def server_track(request, event_type, event, page=None): def server_track(request, event_type, event, page=None):
try:
username = request.user.username
except:
username = "anonymous"
event = { event = {
"username" : request.user.username, "username" : username,
"ip" : request.META['REMOTE_ADDR'], "ip" : request.META['REMOTE_ADDR'],
"event_source" : "server", "event_source" : "server",
"event_type" : event_type, "event_type" : event_type,
......
...@@ -10,27 +10,36 @@ import courseware.capa.calc ...@@ -10,27 +10,36 @@ import courseware.capa.calc
from django.core.mail import send_mail from django.core.mail import send_mail
from django.conf import settings from django.conf import settings
import datetime import datetime
import sys
import track.views
def calculate(request): def calculate(request):
if not request.user.is_authenticated(): # if not request.user.is_authenticated():
raise Http404 # raise Http404
equation = request.GET['equation'] equation = request.GET['equation']
try: try:
result = courseware.capa.calc.evaluator({}, {}, equation) result = courseware.capa.calc.evaluator({}, {}, equation)
except: except:
event = {'error':map(str,sys.exc_info()),
'equation':equation}
track.views.server_track(request, 'error:calc', event, page='calc')
return HttpResponse(json.dumps({'result':'Invalid syntax'})) return HttpResponse(json.dumps({'result':'Invalid syntax'}))
return HttpResponse(json.dumps({'result':result})) return HttpResponse(json.dumps({'result':result}))
def send_feedback(request): def send_feedback(request):
if not request.user.is_authenticated(): # if not request.user.is_authenticated():
raise Http404 # raise Http404
try:
username = request.user.username
except:
username = "anonymous"
feedback = render_to_string("feedback_email.txt", feedback = render_to_string("feedback_email.txt",
{"subject":request.POST['subject'], {"subject":request.POST['subject'],
"url": request.POST['url'], "url": request.POST['url'],
"time": datetime.datetime.now().isoformat(), "time": datetime.datetime.now().isoformat(),
"feedback": request.POST['message'], "feedback": request.POST['message'],
"user":request.user.username}) "user":username})
send_mail("MITx Feedback / " +request.POST['subject'], send_mail("MITx Feedback / " +request.POST['subject'],
feedback, feedback,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment