Commit c5c19786 by Andy Armstrong

Merge pull request #733 from edx/andya/fix-ora-dev-environment

Make improvements to ORA's development environment
parents f753b878 32fbb020
This diff is collapsed. Click to expand it.
...@@ -48,3 +48,6 @@ install: install-wheels install-python install-js install-nltk-data install-test ...@@ -48,3 +48,6 @@ install: install-wheels install-python install-js install-nltk-data install-test
test: test:
./scripts/test.sh ./scripts/test.sh
test-js:
./scripts/test-js.sh
...@@ -11,7 +11,7 @@ module.exports = function(config) { ...@@ -11,7 +11,7 @@ module.exports = function(config) {
'karma-coverage', 'karma-coverage',
'karma-jasmine', 'karma-jasmine',
'karma-chrome-launcher', 'karma-chrome-launcher',
'karma-phantomjs-launcher', 'karma-phantomjs-launcher'
], ],
// frameworks to use // frameworks to use
...@@ -36,7 +36,7 @@ module.exports = function(config) { ...@@ -36,7 +36,7 @@ module.exports = function(config) {
{ {
pattern: 'fixtures/*.html', pattern: 'fixtures/*.html',
served: true, included: false served: true, included: false
}, }
], ],
......
...@@ -4,10 +4,12 @@ import copy ...@@ -4,10 +4,12 @@ import copy
import datetime as dt import datetime as dt
import json import json
import logging import logging
import os
import pkg_resources import pkg_resources
import pytz import pytz
from django.conf import settings
from django.template.context import Context from django.template.context import Context
from django.template.loader import get_template from django.template.loader import get_template
from webob import Response from webob import Response
...@@ -16,6 +18,7 @@ from lazy import lazy ...@@ -16,6 +18,7 @@ from lazy import lazy
from xblock.core import XBlock from xblock.core import XBlock
from xblock.fields import List, Scope, String, Boolean, Integer from xblock.fields import List, Scope, String, Boolean, Integer
from xblock.fragment import Fragment from xblock.fragment import Fragment
from openassessment.xblock.grade_mixin import GradeMixin from openassessment.xblock.grade_mixin import GradeMixin
from openassessment.xblock.leaderboard_mixin import LeaderboardMixin from openassessment.xblock.leaderboard_mixin import LeaderboardMixin
from openassessment.xblock.defaults import * # pylint: disable=wildcard-import, unused-wildcard-import from openassessment.xblock.defaults import * # pylint: disable=wildcard-import, unused-wildcard-import
...@@ -256,6 +259,18 @@ class OpenAssessmentBlock( ...@@ -256,6 +259,18 @@ class OpenAssessmentBlock(
) )
return student_item_dict return student_item_dict
def add_javascript_files(self, fragment, item):
"""
Add all the JavaScript files from a directory to the specified fragment
"""
if pkg_resources.resource_isdir(__name__, item):
for child_item in pkg_resources.resource_listdir(__name__, item):
path = os.path.join(item, child_item)
if not pkg_resources.resource_isdir(__name__, path):
fragment.add_javascript_url(self.runtime.local_resource_url(self, path))
else:
fragment.add_javascript_url(self.runtime.local_resource_url(self, item))
def student_view(self, context=None): def student_view(self, context=None):
"""The main view of OpenAssessmentBlock, displayed when viewing courses. """The main view of OpenAssessmentBlock, displayed when viewing courses.
...@@ -290,17 +305,25 @@ class OpenAssessmentBlock( ...@@ -290,17 +305,25 @@ class OpenAssessmentBlock(
} }
template = get_template("openassessmentblock/oa_base.html") template = get_template("openassessmentblock/oa_base.html")
context = Context(context_dict) context = Context(context_dict)
frag = Fragment(template.render(context)) fragment = Fragment(template.render(context))
i18n_service = self.runtime.service(self, 'i18n') i18n_service = self.runtime.service(self, 'i18n')
if hasattr(i18n_service, 'get_language_bidi') and i18n_service.get_language_bidi(): if hasattr(i18n_service, 'get_language_bidi') and i18n_service.get_language_bidi():
frag.add_css(load("static/css/openassessment-rtl.css")) css_url = "static/css/openassessment-rtl.css"
else: else:
frag.add_css(load("static/css/openassessment-ltr.css")) css_url = "static/css/openassessment-ltr.css"
frag.add_javascript(load("static/js/openassessment-lms.min.js")) if settings.DEBUG:
frag.initialize_js('OpenAssessmentBlock') fragment.add_css_url(self.runtime.local_resource_url(self, css_url))
return frag self.add_javascript_files(fragment, "static/js/src/oa_shared.js")
self.add_javascript_files(fragment, "static/js/src/oa_server.js")
self.add_javascript_files(fragment, "static/js/src/lms")
else:
# TODO: load CSS and JavaScript as URLs once they can be served by the CDN
fragment.add_css(load(css_url))
fragment.add_javascript(load("static/js/openassessment-lms.min.js"))
fragment.initialize_js('OpenAssessmentBlock')
return fragment
@property @property
......
...@@ -5,20 +5,22 @@ import copy ...@@ -5,20 +5,22 @@ import copy
import logging import logging
import pkg_resources import pkg_resources
from uuid import uuid4 from uuid import uuid4
from xml import UpdateFromXmlError
from django.conf import settings
from django.template import Context from django.template import Context
from django.template.loader import get_template from django.template.loader import get_template
from voluptuous import MultipleInvalid from voluptuous import MultipleInvalid
from xblock.core import XBlock from xblock.core import XBlock
from xblock.fields import List, Scope from xblock.fields import List, Scope
from xblock.fragment import Fragment from xblock.fragment import Fragment
from openassessment.xblock.defaults import DEFAULT_EDITOR_ASSESSMENTS_ORDER, DEFAULT_RUBRIC_FEEDBACK_TEXT from openassessment.xblock.defaults import DEFAULT_EDITOR_ASSESSMENTS_ORDER, DEFAULT_RUBRIC_FEEDBACK_TEXT
from openassessment.xblock.validation import validator from openassessment.xblock.validation import validator
from openassessment.xblock.data_conversion import create_rubric_dict, make_django_template_key, update_assessments_format from openassessment.xblock.data_conversion import create_rubric_dict, make_django_template_key, update_assessments_format
from openassessment.xblock.schema import EDITOR_UPDATE_SCHEMA from openassessment.xblock.schema import EDITOR_UPDATE_SCHEMA
from openassessment.xblock.resolve_dates import resolve_dates from openassessment.xblock.resolve_dates import resolve_dates
from openassessment.xblock.xml import serialize_examples_to_xml_str, parse_examples_from_xml_str from openassessment.xblock.xml import serialize_examples_to_xml_str, parse_examples_from_xml_str
from xml import UpdateFromXmlError
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -63,10 +65,16 @@ class StudioMixin(object): ...@@ -63,10 +65,16 @@ class StudioMixin(object):
rendered_template = get_template( rendered_template = get_template(
'openassessmentblock/edit/oa_edit.html' 'openassessmentblock/edit/oa_edit.html'
).render(Context(self.editor_context())) ).render(Context(self.editor_context()))
frag = Fragment(rendered_template) fragment = Fragment(rendered_template)
frag.add_javascript(pkg_resources.resource_string(__name__, "static/js/openassessment-studio.min.js")) if settings.DEBUG:
frag.initialize_js('OpenAssessmentEditor') self.add_javascript_files(fragment, "static/js/src/oa_shared.js")
return frag self.add_javascript_files(fragment, "static/js/src/oa_server.js")
self.add_javascript_files(fragment, "static/js/src/studio")
else:
# TODO: switch to add_javascript_url once XBlock resources are loaded from the CDN
fragment.add_javascript(pkg_resources.resource_string(__name__, "static/js/openassessment-studio.min.js"))
fragment.initialize_js('OpenAssessmentEditor')
return fragment
def editor_context(self): def editor_context(self):
""" """
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
cd `dirname $BASH_SOURCE` && cd .. cd `dirname $BASH_SOURCE` && cd ..
echo "Generating HTML fixtures for JavaScript tests..." echo "Generating HTML fixtures for JavaScript tests..."
export DJANGO_SETTINGS_MODULE="settings.test" export DJANGO_SETTINGS_MODULE=${DJANGO_SETTINGS_MODULE:-"settings.test"}
./scripts/render_templates.py openassessment/xblock/static/js/fixtures/templates.json ./scripts/render_templates.py openassessment/xblock/static/js/fixtures/templates.json
echo "Running JavaScript tests..." echo "Running JavaScript tests..."
......
...@@ -6,5 +6,5 @@ cd `dirname $BASH_SOURCE` && cd .. ...@@ -6,5 +6,5 @@ cd `dirname $BASH_SOURCE` && cd ..
git clean -xfd "./storage/test/" git clean -xfd "./storage/test/"
echo "Running Python tests..." echo "Running Python tests..."
export DJANGO_SETTINGS_MODULE="settings.test" export DJANGO_SETTINGS_MODULE=${DJANGO_SETTINGS_MODULE:-"settings.test"}
python manage.py test $1 python manage.py test $1
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
set -e set -e
cd `dirname $BASH_SOURCE` && cd .. cd `dirname $BASH_SOURCE` && cd ..
export DJANGO_SETTINGS_MODULE=${DJANGO_SETTINGS_MODULE:-"settings.test_with_coverage"}
./scripts/test-python.sh $1 ./scripts/test-python.sh $1
./scripts/test-js.sh ./scripts/test-js.sh
./scripts/build-docs.sh ./scripts/build-docs.sh
...@@ -9,7 +9,7 @@ make install-js ...@@ -9,7 +9,7 @@ make install-js
make javascript make javascript
# Configure Django settings # Configure Django settings
export DJANGO_SETTINGS_MODULE="settings.dev" export DJANGO_SETTINGS_MODULE=${DJANGO_SETTINGS_MODULE:-"settings.dev"}
# Create the database # Create the database
echo "Updating the database..." echo "Updating the database..."
......
...@@ -15,10 +15,6 @@ TEST_APPS = ( ...@@ -15,10 +15,6 @@ TEST_APPS = (
# Configure nose # Configure nose
NOSE_ARGS = [ NOSE_ARGS = [
"-a !acceptance", "-a !acceptance",
'--with-coverage',
'--cover-package=' + ",".join(TEST_APPS),
'--cover-branches',
'--cover-erase',
] ]
DATABASES = { DATABASES = {
......
"""
Django settings for running tests with coverage.
"""
# Inherit from the test settings
from .test import * # pylint:disable=W0614,W0401
# Configure nose so that tests are run with coverage
NOSE_ARGS = [
"-a !acceptance",
'--with-coverage',
'--cover-package=' + ",".join(TEST_APPS),
'--cover-branches',
'--cover-erase',
]
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