[tool:pytest] # Note: The first file of settings found is used, there is no combining, so # this file is only used for tests that don't find a pytest.ini file first. # Details at https://docs.pytest.org/en/latest/reference/customize.html DJANGO_SETTINGS_MODULE = lms.envs.test addopts = --nomigrations --reuse-db --durations=20 --json-report --json-report-omit keywords streams collectors log traceback tests --json-report-file=none # Enable default handling for all warnings, including those that are ignored by default; # but hide rate-limit warnings (because we deliberately don't throttle test user logins) # and field_data deprecation warnings (because fixing them requires a major low-priority refactoring) filterwarnings = default ignore:No request passed to the backend, unable to rate-limit:UserWarning ignore::xblock.exceptions.FieldDataDeprecationWarning junit_family = xunit2 norecursedirs = .* *.egg build conf dist node_modules test_root cms/envs lms/envs python_classes = python_files = tests.py test_*.py tests_*.py *_tests.py __init__.py [pycodestyle] # error codes: https://pycodestyle.readthedocs.io/en/latest/intro.html#error-codes # E501: line too long # E265: block comment should start with '# ' # We ignore this because pep8 used to erroneously lump E266 into it also. # We should probably fix these now. # E266: too many leading '#' for block comment # We have lots of comments that look like "##### HEADING #####" which violate # this rule, because they don't have a space after the first #. However, # they're still perfectly reasonable comments, so we disable this rule. # W602: deprecated form of raising exception # We do this in a few places to modify the exception message while preserving # the traceback. See this blog post for more info: # http://nedbatchelder.com/blog/200711/rethrowing_exceptions_in_python.html # It's a little unusual, but we have good reasons for doing so, so we disable # this rule. # E305,E402,E722,E731,E741,E743,W503,W504: errors and warnings added since pep8/pycodestyle # 1.5.7 that we haven't cleaned up yet ignore=E265,E266,E305,E402,E501,E722,E731,E741,E743,W503,W504,W602 exclude=migrations,.git,.pycharm_helpers,.tox,test_root/staticfiles,node_modules [isort] indent=' ' line_length=120 multi_line_output=3 skip= envs migrations [importlinter] root_packages = lms cms openedx include_external_packages = True contract_types = # Our custom contract which checks that we're only importing from 'api.py' # for participating packages. isolated_apps: openedx.testing.importlinter.isolated_apps_contract.IsolatedAppsContract [importlinter:contract:1] name = lms and cms are independent type = independence modules = lms cms ignore_imports = ############################################################################ # lms side imports that we are ignoring for now lms.djangoapps.course_home_api.outline.tests.test_view -> cms.djangoapps.contentstore.outlines lms.djangoapps.courseware.plugins -> cms.djangoapps.contentstore.utils lms.djangoapps.course_home_api.tests.utils -> cms.djangoapps.contentstore.outlines # lms.djangoapps.instructor.tests.test_api & lms.djangoapps.instructor.tests.test_tools # -> openedx.core.djangoapps.course_date_signals.handlers # -> cms.djangoapps.contentstore.config.waffle openedx.core.djangoapps.course_date_signals.handlers -> cms.djangoapps.contentstore.config.waffle ############################################################################ # cms side imports that we are ignoring for now cms.djangoapps.contentstore.views.tests.test_block -> lms.djangoapps.lms_xblock.mixin cms.envs.common -> lms.envs.common cms.djangoapps.contentstore.signals.handlers -> lms.djangoapps.grades.api cms.djangoapps.contentstore.course_group_config -> lms.lib.utils cms.djangoapps.contentstore.views.preview -> lms.djangoapps.lms_xblock.field_data cms.envs.common -> lms.djangoapps.lms_xblock.mixin cms.envs.test -> lms.envs.test # cms.djangoapps.contentstore.views.tests.test_group_configurations # -> openedx.features.content_type_gating.helpers # -> lms.djangoapps.courseware.masquerade openedx.features.content_type_gating.helpers -> lms.djangoapps.courseware.masquerade # cms.djangoapps.contentstore.utils # -> openedx.core.djangoapps.django_comment_common.models # -> openedx.core.djangoapps.course_groups.cohorts # -> lms.djangoapps.courseware.courses openedx.core.djangoapps.course_groups.cohorts -> lms.djangoapps.courseware.courses # cms.djangoapps.models.settings.course_metadata # -> openedx.features.course_experience # -> openedx.features.course_experience.url_helpers # -> lms.djangoapps.courseware.toggles openedx.features.course_experience.url_helpers -> lms.djangoapps.courseware.toggles # cms.djangoapps.contentstore.[various] # -> openedx.features.content_type_gating.partitions # -> lms.djangoapps.commerce.utils openedx.features.content_type_gating.partitions -> lms.djangoapps.commerce.utils # cms.djangoapps.contentstore.course_group_config # -> openedx.core.djangoapps.course_groups.partition_scheme # -> lms.djangoapps.courseware.masquerade openedx.core.djangoapps.course_groups.partition_scheme -> lms.djangoapps.courseware.masquerade # cms.djangoapps.contentstore.[various] & cms.djangoapps.coursegraph.[various] # -> openedx.core.djangoapps.content.course_overviews.models # -> lms.djangoapps.ccx.utils # & lms.djangoapps.certificates.api # & lms.djangoapps.discussion.django_comment_client openedx.core.djangoapps.content.course_overviews.models -> lms.djangoapps.*.* # cms.djangoapps.export_course_metadata.tasks # -> openedx.core.djangoapps.schedules.content_highlights # -> lms.djangoapps.courseware.block_render & lms.djangoapps.courseware.model_data openedx.core.djangoapps.content_libraries.* -> lms.djangoapps.*.* # cms.djangoapps.contentstore.tasks -> openedx.core.djangoapps.content_libraries.[various] # -> lms.djangoapps.grades.api openedx.core.djangoapps.xblock.*.* -> lms.djangoapps.*.* # cms.djangoapps.contentstore.tasks -> openedx.core.djangoapps.content_libraries.[various] -> openedx.core.djangoapps.xblock.[various] # -> lms.djangoapps.courseware & lms.djangoapps.courseware.grades openedx.core.djangoapps.schedules.content_highlights -> lms.djangoapps.courseware.* # cms.djangoapps.contentstore.[various] # -> openedx.core.lib.gating.api # -> lms.djangoapps.course_blocks.api & lms.djangoapps.courseware.access & lms.djangoapps.grades.api openedx.core.lib.gating.api -> lms.djangoapps.*.* # cms.djangoapps.contentstore.[various] # -> openedx.features.content_type_gating.partitions # -> openedx.features.discounts.utils # -> lms.djangoapps.courseware.utils & lms.djangoapps.experiments.models openedx.features.discounts.utils -> lms.djangoapps.courseware.utils openedx.features.discounts.utils -> lms.djangoapps.experiments.models # cms.djangoapps.contentstore.signals.handlers # -> openedx.core.djangoapps.discussions.tasks # -> openedx.core.djangoapps.discussions.utils # -> lms.djangoapps.courseware.access openedx.core.djangoapps.discussions.utils -> lms.djangoapps.courseware.access # cms.djangoapps.contentstore.[various] # -> openedx.features.content_type_gating.partitions # -> openedx.features.discounts.utils # -> openedx.features.discounts.applicability # -> lms.djangoapps.courseware.toggles # & lms.djangoapps.courseware.utils # & lms.djangoapps.experiments.models # & lms.djangoapps.experiments.stable_bucketing openedx.features.discounts.applicability -> lms.djangoapps.courseware.* openedx.features.discounts.applicability -> lms.djangoapps.experiments.* # cms.djangoapps.contentstore.[various] # -> openedx.core.djangoapps.content.learning_sequences.api # -> openedx.core.djangoapps.content.learning_sequences.api.outlines # -> openedx.core.djangoapps.content.learning_sequences.api.permissions # -> lms.djangoapps.courseware.access openedx.core.djangoapps.content.learning_sequences.api.permissions -> lms.djangoapps.courseware.access # cms.djangoapps.contentstore.[various] # -> openedx.features.content_type_gating.partitions # -> openedx.features.discounts.utils # -> openedx.features.discounts.applicability # -> openedx.features.enterprise_support.utils openedx.features.enterprise_support.utils -> lms.djangoapps.branding.api cms.djangoapps.contentstore.rest_api.v1.views.settings -> lms.djangoapps.certificates.api [importlinter:contract:2] name = Do not depend on non-public API of isolated apps. type = isolated_apps isolated_apps = openedx.core.djangoapps.agreements openedx.core.djangoapps.bookmarks openedx.core.djangoapps.content_libraries openedx.core.djangoapps.content_staging openedx.core.djangoapps.olx_rest_api openedx.core.djangoapps.xblock openedx.core.lib.xblock_serializer allowed_modules = # Only imports from api.py are allowed elsewhere in the code # See https://open-edx-proposals.readthedocs.io/en/latest/best-practices/oep-0049-django-app-patterns.html#api-py api