diff --git a/.pylintrc b/.pylintrc index 49fcf80eb9..792079ce03 100644 --- a/.pylintrc +++ b/.pylintrc @@ -34,10 +34,13 @@ load-plugins= # multiple time (only on the command line, not in the configuration file where # it should appear only once). disable= +# Never going to use these # C0301: Line too long -# C0302: Too many lines in module -# W0141: Used builtin function 'map' # W0142: Used * or ** magic +# W0141: Used builtin function 'map' + +# Might use these when the code is in better shape +# C0302: Too many lines in module # R0201: Method could be a function # R0901: Too many ancestors # R0902: Too many instance attributes @@ -96,7 +99,18 @@ zope=no # List of members which are set dynamically and missed by pylint inference # system, and so shouldn't trigger E0201 when accessed. Python regular # expressions are accepted. -generated-members=REQUEST,acl_users,aq_parent,objects,DoesNotExist,can_read,can_write,get_url,size,content +generated-members= + REQUEST, + acl_users, + aq_parent, + objects, + DoesNotExist, + can_read, + can_write, + get_url, + size, + content, + status_code [BASIC] diff --git a/cms/djangoapps/contentstore/tests/test_contentstore.py b/cms/djangoapps/contentstore/tests/test_contentstore.py index d6026fb57a..9463923f1f 100644 --- a/cms/djangoapps/contentstore/tests/test_contentstore.py +++ b/cms/djangoapps/contentstore/tests/test_contentstore.py @@ -49,6 +49,7 @@ class MongoCollectionFindWrapper(object): self.counter = self.counter+1 return self.original(query, *args, **kwargs) + @override_settings(MODULESTORE=TEST_DATA_MODULESTORE) class ContentStoreToyCourseTest(ModuleStoreTestCase): """ @@ -188,27 +189,33 @@ class ContentStoreToyCourseTest(ModuleStoreTestCase): def test_get_depth_with_drafts(self): import_from_xml(modulestore(), 'common/test/data/', ['simple']) - course = modulestore('draft').get_item(Location(['i4x', 'edX', 'simple', - 'course', '2012_Fall', None]), depth=None) + course = modulestore('draft').get_item( + Location(['i4x', 'edX', 'simple', 'course', '2012_Fall', None]), + depth=None + ) # make sure no draft items have been returned num_drafts = self._get_draft_counts(course) self.assertEqual(num_drafts, 0) - problem = modulestore('draft').get_item(Location(['i4x', 'edX', 'simple', - 'problem', 'ps01-simple', None])) + problem = modulestore('draft').get_item( + Location(['i4x', 'edX', 'simple', 'problem', 'ps01-simple', None]) + ) # put into draft modulestore('draft').clone_item(problem.location, problem.location) # make sure we can query that item and verify that it is a draft - draft_problem = modulestore('draft').get_item(Location(['i4x', 'edX', 'simple', - 'problem', 'ps01-simple', None])) + draft_problem = modulestore('draft').get_item( + Location(['i4x', 'edX', 'simple', 'problem', 'ps01-simple', None]) + ) self.assertTrue(getattr(draft_problem, 'is_draft', False)) #now requery with depth - course = modulestore('draft').get_item(Location(['i4x', 'edX', 'simple', - 'course', '2012_Fall', None]), depth=None) + course = modulestore('draft').get_item( + Location(['i4x', 'edX', 'simple', 'course', '2012_Fall', None]), + depth=None + ) # make sure just one draft item have been returned num_drafts = self._get_draft_counts(course) @@ -267,10 +274,11 @@ class ContentStoreToyCourseTest(ModuleStoreTestCase): # make sure the parent no longer points to the child object which was deleted self.assertTrue(sequential.location.url() in chapter.children) - self.client.post(reverse('delete_item'), - json.dumps({'id': sequential.location.url(), 'delete_children': 'true', - 'delete_all_versions': 'true'}), - "application/json") + self.client.post( + reverse('delete_item'), + json.dumps({'id': sequential.location.url(), 'delete_children': 'true', 'delete_all_versions': 'true'}), + "application/json" + ) found = False try: @@ -534,15 +542,7 @@ class ContentStoreToyCourseTest(ModuleStoreTestCase): print 'Exporting to tempdir = {0}'.format(root_dir) # export out to a tempdir - exported = False - try: - export_to_xml(module_store, content_store, location, root_dir, 'test_export') - exported = True - except Exception: - print 'Exception thrown: {0}'.format(traceback.format_exc()) - pass - - self.assertTrue(exported) + export_to_xml(module_store, content_store, location, root_dir, 'test_export') class ContentStoreTest(ModuleStoreTestCase): @@ -622,10 +622,12 @@ class ContentStoreTest(ModuleStoreTestCase): """Test viewing the index page with no courses""" # Create a course so there is something to view resp = self.client.get(reverse('index')) - self.assertContains(resp, - '

My Courses

', - status_code=200, - html=True) + self.assertContains( + resp, + '

My Courses

', + status_code=200, + html=True + ) def test_course_factory(self): """Test that the course factory works correctly.""" @@ -642,10 +644,12 @@ class ContentStoreTest(ModuleStoreTestCase): """Test viewing the index page with an existing course""" CourseFactory.create(display_name='Robot Super Educational Course') resp = self.client.get(reverse('index')) - self.assertContains(resp, - 'Robot Super Educational Course', - status_code=200, - html=True) + self.assertContains( + resp, + 'Robot Super Educational Course', + status_code=200, + html=True + ) def test_course_overview_view_with_course(self): """Test viewing the course overview page with an existing course""" @@ -658,10 +662,12 @@ class ContentStoreTest(ModuleStoreTestCase): } resp = self.client.get(reverse('course_index', kwargs=data)) - self.assertContains(resp, - '
', - status_code=200, - html=True) + self.assertContains( + resp, + '
', + status_code=200, + html=True + ) def test_clone_item(self): """Test cloning an item. E.g. creating a new section""" @@ -677,7 +683,10 @@ class ContentStoreTest(ModuleStoreTestCase): self.assertEqual(resp.status_code, 200) data = parse_json(resp) - self.assertRegexpMatches(data['id'], '^i4x:\/\/MITx\/999\/chapter\/([0-9]|[a-f]){32}$') + self.assertRegexpMatches( + data['id'], + r"^i4x://MITx/999/chapter/([0-9]|[a-f]){32}$" + ) def test_capa_module(self): """Test that a problem treats markdown specially.""" diff --git a/cms/djangoapps/contentstore/tests/test_course_settings.py b/cms/djangoapps/contentstore/tests/test_course_settings.py index 2209e695f5..c9f6b2053e 100644 --- a/cms/djangoapps/contentstore/tests/test_course_settings.py +++ b/cms/djangoapps/contentstore/tests/test_course_settings.py @@ -47,12 +47,8 @@ class CourseTestCase(ModuleStoreTestCase): self.client = Client() self.client.login(username=uname, password=password) - t = 'i4x://edx/templates/course/Empty' - o = 'MITx' - n = '999' - dn = 'Robot Super Course' - self.course_location = Location('i4x', o, n, 'course', 'Robot_Super_Course') - CourseFactory.create(template=t, org=o, number=n, display_name=dn) + course = CourseFactory.create(template='i4x://edx/templates/course/Empty', org='MITx', number='999', display_name='Robot Super Course') + self.course_location = course.location class CourseDetailsTestCase(CourseTestCase): @@ -86,17 +82,25 @@ class CourseDetailsTestCase(CourseTestCase): jsondetails = CourseDetails.fetch(self.course_location) jsondetails.syllabus = "bar" # encode - decode to convert date fields and other data which changes form - self.assertEqual(CourseDetails.update_from_json(jsondetails.__dict__).syllabus, - jsondetails.syllabus, "After set syllabus") + self.assertEqual( + CourseDetails.update_from_json(jsondetails.__dict__).syllabus, + jsondetails.syllabus, "After set syllabus" + ) jsondetails.overview = "Overview" - self.assertEqual(CourseDetails.update_from_json(jsondetails.__dict__).overview, - jsondetails.overview, "After set overview") + self.assertEqual( + CourseDetails.update_from_json(jsondetails.__dict__).overview, + jsondetails.overview, "After set overview" + ) jsondetails.intro_video = "intro_video" - self.assertEqual(CourseDetails.update_from_json(jsondetails.__dict__).intro_video, - jsondetails.intro_video, "After set intro_video") + self.assertEqual( + CourseDetails.update_from_json(jsondetails.__dict__).intro_video, + jsondetails.intro_video, "After set intro_video" + ) jsondetails.effort = "effort" - self.assertEqual(CourseDetails.update_from_json(jsondetails.__dict__).effort, - jsondetails.effort, "After set effort") + self.assertEqual( + CourseDetails.update_from_json(jsondetails.__dict__).effort, + jsondetails.effort, "After set effort" + ) class CourseDetailsViewTest(CourseTestCase): @@ -150,9 +154,7 @@ class CourseDetailsViewTest(CourseTestCase): @staticmethod def struct_to_datetime(struct_time): - return datetime.datetime(struct_time.tm_year, struct_time.tm_mon, - struct_time.tm_mday, struct_time.tm_hour, - struct_time.tm_min, struct_time.tm_sec, tzinfo=UTC()) + return datetime.datetime(*struct_time[:6], tzinfo=UTC()) def compare_date_fields(self, details, encoded, context, field): if details[field] is not None: @@ -271,18 +273,20 @@ class CourseMetadataEditingTest(CourseTestCase): self.assertIn('xqa_key', test_model, 'xqa_key field ') def test_update_from_json(self): - test_model = CourseMetadata.update_from_json(self.course_location, - {"advertised_start": "start A", - "testcenter_info": {"c": "test"}, - "days_early_for_beta": 2}) + test_model = CourseMetadata.update_from_json(self.course_location, { + "advertised_start": "start A", + "testcenter_info": {"c": "test"}, + "days_early_for_beta": 2 + }) self.update_check(test_model) # try fresh fetch to ensure persistence test_model = CourseMetadata.fetch(self.course_location) self.update_check(test_model) # now change some of the existing metadata - test_model = CourseMetadata.update_from_json(self.course_location, - {"advertised_start": "start B", - "display_name": "jolly roger"}) + test_model = CourseMetadata.update_from_json(self.course_location, { + "advertised_start": "start B", + "display_name": "jolly roger"} + ) self.assertIn('display_name', test_model, 'Missing editable metadata field') self.assertEqual(test_model['display_name'], 'jolly roger', "not expected value") self.assertIn('advertised_start', test_model, 'Missing revised advertised_start metadata field') diff --git a/cms/djangoapps/contentstore/tests/test_utils.py b/cms/djangoapps/contentstore/tests/test_utils.py index 6fe85ce96d..eb7bfb6db9 100644 --- a/cms/djangoapps/contentstore/tests/test_utils.py +++ b/cms/djangoapps/contentstore/tests/test_utils.py @@ -30,7 +30,7 @@ class LMSLinksTestCase(TestCase): class UrlReverseTestCase(ModuleStoreTestCase): """ Tests for get_url_reverse """ - def test_CoursePageNames(self): + def test_course_page_names(self): """ Test the defined course pages. """ course = CourseFactory.create(org='mitX', number='666', display_name='URL Reverse Course') @@ -70,4 +70,3 @@ class UrlReverseTestCase(ModuleStoreTestCase): 'https://edge.edx.org/courses/edX/edX101/How_to_Create_an_edX_Course/about', utils.get_url_reverse('https://edge.edx.org/courses/edX/edX101/How_to_Create_an_edX_Course/about', course) ) - diff --git a/cms/djangoapps/contentstore/tests/utils.py b/cms/djangoapps/contentstore/tests/utils.py index f41af4e097..3135e49a08 100644 --- a/cms/djangoapps/contentstore/tests/utils.py +++ b/cms/djangoapps/contentstore/tests/utils.py @@ -2,8 +2,6 @@ Utilities for contentstore tests ''' -#pylint: disable=W0603 - import json from student.models import Registration diff --git a/cms/envs/test.py b/cms/envs/test.py index a1b3ac24bc..f11ff9b56c 100644 --- a/cms/envs/test.py +++ b/cms/envs/test.py @@ -28,7 +28,7 @@ GITHUB_REPO_ROOT = TEST_ROOT / "data" COMMON_TEST_DATA_ROOT = COMMON_ROOT / "test" / "data" # Makes the tests run much faster... -SOUTH_TESTS_MIGRATE = False # To disable migrations and use syncdb instead +SOUTH_TESTS_MIGRATE = False # To disable migrations and use syncdb instead # TODO (cpennington): We need to figure out how envs/test.py can inject things into common.py so that we don't have to repeat this sort of thing STATICFILES_DIRS = [ @@ -41,7 +41,7 @@ STATICFILES_DIRS += [ if os.path.isdir(COMMON_TEST_DATA_ROOT / course_dir) ] -modulestore_options = { +MODULESTORE_OPTIONS = { 'default_class': 'xmodule.raw_module.RawDescriptor', 'host': 'localhost', 'db': 'test_xmodule', @@ -53,15 +53,15 @@ modulestore_options = { MODULESTORE = { 'default': { 'ENGINE': 'xmodule.modulestore.mongo.MongoModuleStore', - 'OPTIONS': modulestore_options + 'OPTIONS': MODULESTORE_OPTIONS }, 'direct': { 'ENGINE': 'xmodule.modulestore.mongo.MongoModuleStore', - 'OPTIONS': modulestore_options + 'OPTIONS': MODULESTORE_OPTIONS }, 'draft': { 'ENGINE': 'xmodule.modulestore.mongo.DraftMongoModuleStore', - 'OPTIONS': modulestore_options + 'OPTIONS': MODULESTORE_OPTIONS } } diff --git a/common/lib/xmodule/xmodule/modulestore/tests/django_utils.py b/common/lib/xmodule/xmodule/modulestore/tests/django_utils.py index 4f8d7b773c..753cbfac4f 100644 --- a/common/lib/xmodule/xmodule/modulestore/tests/django_utils.py +++ b/common/lib/xmodule/xmodule/modulestore/tests/django_utils.py @@ -7,6 +7,7 @@ from django.conf import settings import xmodule.modulestore.django from xmodule.templates import update_templates + class ModuleStoreTestCase(TestCase): """ Subclass for any test case that uses the mongodb module store. This populates a uniquely named modulestore