feat: migrate import linter configuration to pyproject.toml
Migrates complete importlinter configuration from setup.cfg, preserving all 4 contracts, ignore_imports with explanatory comments, and GitHub issue references. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
192
pyproject.toml
192
pyproject.toml
@@ -204,3 +204,195 @@ junit_family = "xunit2"
|
|||||||
norecursedirs = ". .* *.egg build conf dist node_modules test_root cms/envs lms/envs openedx/envs"
|
norecursedirs = ". .* *.egg build conf dist node_modules test_root cms/envs lms/envs openedx/envs"
|
||||||
python_classes = []
|
python_classes = []
|
||||||
python_files = ["tests.py", "test_*.py", "tests_*.py", "*_tests.py", "__init__.py"]
|
python_files = ["tests.py", "test_*.py", "tests_*.py", "*_tests.py", "__init__.py"]
|
||||||
|
|
||||||
|
[tool.isort]
|
||||||
|
indent = " "
|
||||||
|
line_length = 120
|
||||||
|
multi_line_output = 3
|
||||||
|
skip = ["envs", "migrations"]
|
||||||
|
|
||||||
|
[tool.importlinter]
|
||||||
|
root_packages = ["lms", "cms", "openedx", "openedx_content"]
|
||||||
|
include_external_packages = true
|
||||||
|
# Our custom contract which checks that we're only importing from 'api.py'
|
||||||
|
# for participating packages.
|
||||||
|
contract_types = [
|
||||||
|
"isolated_apps: openedx.testing.importlinter.isolated_apps_contract.IsolatedAppsContract",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[tool.importlinter.contracts]]
|
||||||
|
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.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.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
|
||||||
|
# -> openedx.envs.common
|
||||||
|
# -> lms.djangoapps.lms_xblock.mixin
|
||||||
|
"openedx.envs.common -> lms.djangoapps.lms_xblock.mixin",
|
||||||
|
# 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.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.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",
|
||||||
|
# We are ignoring this existing import until we can refactor contenstore/helpers.
|
||||||
|
# https://github.com/openedx/edx-platform/issues/37637
|
||||||
|
"openedx.core.djangoapps.content_libraries.api.libraries -> cms.djangoapps.contentstore.helpers",
|
||||||
|
"openedx.core.djangoapps.content_libraries.api.blocks -> cms.djangoapps.contentstore.helpers",
|
||||||
|
"openedx.core.djangoapps.content_staging.serializers -> cms.djangoapps.contentstore.helpers",
|
||||||
|
# These imports will become OK once we move content_libraries into CMS
|
||||||
|
# https://github.com/openedx/edx-platform/issues/33428
|
||||||
|
"openedx.core.djangoapps.content_libraries.permissions -> cms.djangoapps.course_creators.views",
|
||||||
|
"openedx.core.djangoapps.content_libraries.tasks -> cms.djangoapps.contentstore.storage",
|
||||||
|
# Outstanding arch issue: course_overviews is tangled up with LMS
|
||||||
|
# https://github.com/openedx/edx-platform/issues/37658
|
||||||
|
"openedx.core.djangoapps.content.course_overviews.models -> lms.djangoapps.**",
|
||||||
|
# Outstanding arch issue: content_highlights uses courseware block_render
|
||||||
|
# https://github.com/openedx/edx-platform/issues/37659
|
||||||
|
"openedx.core.djangoapps.schedules.content_highlights -> lms.djangoapps.courseware.block_render",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[tool.importlinter.contracts]]
|
||||||
|
name = "Do not depend on non-public API of isolated apps."
|
||||||
|
type = "isolated_apps"
|
||||||
|
isolated_apps = [
|
||||||
|
"cms.djangoapps.modulestore_migrator",
|
||||||
|
"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 and data.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",
|
||||||
|
"data",
|
||||||
|
"tests",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[tool.importlinter.contracts]]
|
||||||
|
name = "Do not directly import internals of openedx_content (only import from openedx_content.api)."
|
||||||
|
type = "forbidden"
|
||||||
|
source_modules = ["cms", "lms", "openedx", "common", "xmodule"]
|
||||||
|
forbidden_modules = ["openedx_content.applets", "openedx_content.backcompat"]
|
||||||
|
allow_indirect_imports = true
|
||||||
|
|
||||||
|
[[tool.importlinter.contracts]]
|
||||||
|
name = "Low-level apps should not depend on high-level apps"
|
||||||
|
type = "layers"
|
||||||
|
layers = [
|
||||||
|
# Layers from high-level to low-level. Imports should only occur from higher to lower.
|
||||||
|
"cms.lib.xblock.upstream_sync | openedx.core.djangoapps.content.search | openedx.core.djangoapps.olx_rest_api",
|
||||||
|
"openedx.core.djangoapps.content_libraries",
|
||||||
|
"openedx.core.djangoapps.content_staging",
|
||||||
|
"openedx.core.djangoapps.xblock",
|
||||||
|
"openedx.core.lib.xblock_serializer",
|
||||||
|
"openedx.core.djangoapps.content_tagging",
|
||||||
|
]
|
||||||
|
ignore_imports = [
|
||||||
|
# Test code can break these layering rules
|
||||||
|
"**.tests.** -> **",
|
||||||
|
# FIXME: the exceptions below are from before we added this import linting rule. Should refactor to eliminate them.
|
||||||
|
# In particular, the contentstore.helpers module is too big and has too many imports
|
||||||
|
# See https://github.com/openedx/edx-platform/issues/37637
|
||||||
|
# The CSV export hard-codes support for courses and libraries. Refactor to do something like learning_context.get_children()
|
||||||
|
"openedx.core.djangoapps.content_tagging.helpers.objecttag_export_helpers -> openedx.core.djangoapps.content_libraries.api",
|
||||||
|
# The permissions checking code for tagging requires libraries model data to get all the orgs that a user is using:
|
||||||
|
"openedx.core.djangoapps.content_tagging.utils -> openedx.core.djangoapps.content_libraries.api",
|
||||||
|
# Content staging POST to clipboard API uses libraries APIs. We're working on moving this code to content_libraries
|
||||||
|
"openedx.core.djangoapps.content_staging.views -> openedx.core.djangoapps.content_libraries.api",
|
||||||
|
# content_staging.serializers imports contentstore.helpers which imports contentstore.utils which imports the libraries API.
|
||||||
|
"openedx.core.djangoapps.content_staging.serializers -> cms.djangoapps.contentstore.helpers",
|
||||||
|
# content_libraries.rest_api.libraries imports cms.djangoapps.contentstore.views.course which imports
|
||||||
|
# contentstore.toggles which imports djangoapps.content.search.api
|
||||||
|
"openedx.core.djangoapps.content_libraries.rest_api.libraries -> cms.djangoapps.contentstore.views.course",
|
||||||
|
# Content libraries imports contentstore.helpers which imports upstream_sync
|
||||||
|
"openedx.core.djangoapps.content_libraries.api.blocks -> cms.djangoapps.contentstore.helpers",
|
||||||
|
"openedx.core.djangoapps.content_libraries.api.libraries -> cms.djangoapps.contentstore.helpers",
|
||||||
|
# Outstanding arch issue: course_overviews is tangled up with LMS
|
||||||
|
# https://github.com/openedx/edx-platform/issues/37658
|
||||||
|
"openedx.core.djangoapps.content.course_overviews.models -> lms.djangoapps.**",
|
||||||
|
# Outstanding arch issue: content_highlights uses courseware block_render
|
||||||
|
# https://github.com/openedx/edx-platform/issues/37659
|
||||||
|
"openedx.core.djangoapps.schedules.content_highlights -> lms.djangoapps.courseware.block_render",
|
||||||
|
# This import happens only because grading signals are defined in LMS rather than openedx-events
|
||||||
|
# https://github.com/openedx/edx-platform/issues/37660
|
||||||
|
"openedx.core.djangoapps.xblock.runtime.runtime -> lms.djangoapps.grades.api",
|
||||||
|
# These imports will become OK once we worked on the following issue:
|
||||||
|
# https://github.com/openedx/edx-platform/issues/33428
|
||||||
|
"openedx.core.djangoapps.video_config.services -> openedx.core.djangoapps.content_libraries.api",
|
||||||
|
]
|
||||||
|
|||||||
205
setup.cfg
205
setup.cfg
@@ -20,208 +20,3 @@
|
|||||||
# 1.5.7 that we haven't cleaned up yet
|
# 1.5.7 that we haven't cleaned up yet
|
||||||
ignore=E203,E265,E266,E305,E402,E501,E722,E731,E741,E743,W503,W504,W602
|
ignore=E203,E265,E266,E305,E402,E501,E722,E731,E741,E743,W503,W504,W602
|
||||||
exclude=migrations,.git,.pycharm_helpers,.tox,test_root/staticfiles,node_modules
|
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
|
|
||||||
openedx_content
|
|
||||||
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.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.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
|
|
||||||
# -> openedx.envs.common
|
|
||||||
# -> lms.djangoapps.lms_xblock.mixin
|
|
||||||
openedx.envs.common -> lms.djangoapps.lms_xblock.mixin
|
|
||||||
# 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.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.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
|
|
||||||
# We are ignoring this existing import until we can refactor contenstore/helpers.
|
|
||||||
# https://github.com/openedx/edx-platform/issues/37637
|
|
||||||
openedx.core.djangoapps.content_libraries.api.libraries -> cms.djangoapps.contentstore.helpers
|
|
||||||
openedx.core.djangoapps.content_libraries.api.blocks -> cms.djangoapps.contentstore.helpers
|
|
||||||
openedx.core.djangoapps.content_staging.serializers -> cms.djangoapps.contentstore.helpers
|
|
||||||
# These imports will become OK once we move content_libraries into CMS
|
|
||||||
# https://github.com/openedx/edx-platform/issues/33428
|
|
||||||
openedx.core.djangoapps.content_libraries.permissions -> cms.djangoapps.course_creators.views
|
|
||||||
openedx.core.djangoapps.content_libraries.tasks -> cms.djangoapps.contentstore.storage
|
|
||||||
# Outstanding arch issue: course_overviews is tangled up with LMS
|
|
||||||
# https://github.com/openedx/edx-platform/issues/37658
|
|
||||||
openedx.core.djangoapps.content.course_overviews.models -> lms.djangoapps.**
|
|
||||||
# Outstanding arch issue: content_highlights uses courseware block_render
|
|
||||||
# https://github.com/openedx/edx-platform/issues/37659
|
|
||||||
openedx.core.djangoapps.schedules.content_highlights -> lms.djangoapps.courseware.block_render
|
|
||||||
|
|
||||||
[importlinter:contract:2]
|
|
||||||
name = Do not depend on non-public API of isolated apps.
|
|
||||||
type = isolated_apps
|
|
||||||
isolated_apps =
|
|
||||||
cms.djangoapps.modulestore_migrator
|
|
||||||
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 and data.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
|
|
||||||
data
|
|
||||||
tests
|
|
||||||
|
|
||||||
[importlinter:contract:3]
|
|
||||||
name = Do not directly import internals of openedx_content (only import from openedx_content.api).
|
|
||||||
type = forbidden
|
|
||||||
source_modules =
|
|
||||||
cms
|
|
||||||
lms
|
|
||||||
openedx
|
|
||||||
common
|
|
||||||
xmodule
|
|
||||||
forbidden_modules =
|
|
||||||
openedx_content.applets
|
|
||||||
openedx_content.backcompat
|
|
||||||
allow_indirect_imports = True
|
|
||||||
|
|
||||||
[importlinter:contract:4]
|
|
||||||
name = Low-level apps should not depend on high-level apps
|
|
||||||
type = layers
|
|
||||||
layers =
|
|
||||||
# Layers from high-level to low-level. Imports should only occur from higher to lower.
|
|
||||||
cms.lib.xblock.upstream_sync | openedx.core.djangoapps.content.search | openedx.core.djangoapps.olx_rest_api
|
|
||||||
openedx.core.djangoapps.content_libraries
|
|
||||||
openedx.core.djangoapps.content_staging
|
|
||||||
openedx.core.djangoapps.xblock
|
|
||||||
openedx.core.lib.xblock_serializer
|
|
||||||
openedx.core.djangoapps.content_tagging
|
|
||||||
ignore_imports =
|
|
||||||
# Test code can break these layering rules
|
|
||||||
**.tests.** -> **
|
|
||||||
|
|
||||||
# FIXME: the exceptions below are from before we added this import linting rule. Should refactor to eliminate them.
|
|
||||||
# In particular, the contentstore.helpers module is too big and has too many imports
|
|
||||||
# See https://github.com/openedx/edx-platform/issues/37637
|
|
||||||
|
|
||||||
# The CSV export hard-codes support for courses and libraries. Refactor to do something like learning_context.get_children()
|
|
||||||
openedx.core.djangoapps.content_tagging.helpers.objecttag_export_helpers -> openedx.core.djangoapps.content_libraries.api
|
|
||||||
# The permissions checking code for tagging requires libraries model data to get all the orgs that a user is using:
|
|
||||||
openedx.core.djangoapps.content_tagging.utils -> openedx.core.djangoapps.content_libraries.api
|
|
||||||
# Content staging POST to clipboard API uses libraries APIs. We're working on moving this code to content_libraries
|
|
||||||
openedx.core.djangoapps.content_staging.views -> openedx.core.djangoapps.content_libraries.api
|
|
||||||
# content_staging.serializers imports contentstore.helpers which imports contentstore.utils which imports the libraries API.
|
|
||||||
openedx.core.djangoapps.content_staging.serializers -> cms.djangoapps.contentstore.helpers
|
|
||||||
# content_libraries.rest_api.libraries imports cms.djangoapps.contentstore.views.course which imports
|
|
||||||
# contentstore.toggles which imports djangoapps.content.search.api
|
|
||||||
openedx.core.djangoapps.content_libraries.rest_api.libraries -> cms.djangoapps.contentstore.views.course
|
|
||||||
# Content libraries imports contentstore.helpers which imports upstream_sync
|
|
||||||
openedx.core.djangoapps.content_libraries.api.blocks -> cms.djangoapps.contentstore.helpers
|
|
||||||
openedx.core.djangoapps.content_libraries.api.libraries -> cms.djangoapps.contentstore.helpers
|
|
||||||
# Outstanding arch issue: course_overviews is tangled up with LMS
|
|
||||||
# https://github.com/openedx/edx-platform/issues/37658
|
|
||||||
openedx.core.djangoapps.content.course_overviews.models -> lms.djangoapps.**
|
|
||||||
# Outstanding arch issue: content_highlights uses courseware block_render
|
|
||||||
# https://github.com/openedx/edx-platform/issues/37659
|
|
||||||
openedx.core.djangoapps.schedules.content_highlights -> lms.djangoapps.courseware.block_render
|
|
||||||
# This import happens only because grading signals are defined in LMS rather than openedx-events
|
|
||||||
# https://github.com/openedx/edx-platform/issues/37660
|
|
||||||
openedx.core.djangoapps.xblock.runtime.runtime -> lms.djangoapps.grades.api
|
|
||||||
# These imports will become OK once we worked on the following issue:
|
|
||||||
# https://github.com/openedx/edx-platform/issues/33428
|
|
||||||
openedx.core.djangoapps.video_config.services -> openedx.core.djangoapps.content_libraries.api
|
|
||||||
|
|||||||
Reference in New Issue
Block a user