Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Lint against imports of openedx_catalog internals in openedx-core

已关闭
#860 1 条评论 0 个 reaction 已指派 1 人 在 GitHub 查看

维护者通常 1 天内回复

@ufedaseyeuconsultant 已经在做这个了。

开始于 2026年10月9日。

  • #861 来自 @ufedaseyeuconsultant —— 未关闭

评估

这个 Issue 还没有评估数据。

描述

Description

Add an import-linter contract to openedx-core that only lets other apps import openedx_catalog's public modules (api, models_api, data, tests), matching the rule openedx-platform already enforces. That way an import of openedx_catalog's internals fails CI in openedx-core instead of surfacing later, when openedx-platform installs a new openedx-core release.

Context

  • openedx/openedx-core#853 fixed an import of openedx_catalog.models in CBE code. openedx-platform's import linter caught it during openedx/openedx-platform#39199, the PR bumping openedx-core's version there; openedx-core's own linter had no rule against it.
  • @ormsbee asked for this contract in his review of #853 and agreed it should be a separate follow-up PR so the version bump wasn't held up.
  • Only openedx_catalog is in scope. Other apps, such as openedx_tagging, have no models_api.py yet, so adding them would need a separate design decision.

Acceptance Criteria

  • .importlinter has a contract that treats openedx_catalog as an isolated app: code outside openedx_catalog may import only its api, models_api, data, and tests modules.
  • lint-imports passes on main with the new contract. Today the only import of openedx_catalog from another app is from openedx_catalog.models_api import CourseRun in criteria.py, which is allowed.
  • The PR description shows that the contract catches a real violation: temporarily changing that criteria.py line back to from openedx_catalog.models import CourseRun makes lint-imports fail and name that line.
  • openedx_tagging and the other apps are not added to the contract.
Technical Details

This is a suggested approach, not the source of truth. The User Story, Description, and Acceptance Criteria define what must be true when the work is done.

Approach

  1. Copy openedx-platform's IsolatedAppsContract (openedx/testing/importlinter/isolated_apps_contract.py, about 60 lines) into openedx-core. It has to be a copy because openedx-core must never import from openedx-platform. Put it in the root-level test_utils package (for example test_utils/importlinter.py) rather than under src/, so the published package doesn't ship lint tooling.
  2. Register it in .importlinter with contract_types = isolated_apps: test_utils.importlinter.IsolatedAppsContract in the [importlinter] section, then add a contract with isolated_apps = openedx_catalog and allowed_modules = api, models_api, data, tests, matching openedx-platform's contract so the two repos enforce the same rule.
  3. Add a short comment above the new contract explaining why it exists: openedx-platform enforces the same rule, so a violation here would otherwise only surface when openedx-platform installs a new openedx-core release.

lint-imports already runs in CI through tox -e quality, so no workflow change is needed.

Additional context

  • openedx-platform's contract definition: the isolated_apps block in openedx-platform's pyproject.toml.
主要语言
Python
星标
10
派生
33
平均合并
2 天 19 小时
30 天内合并 PR
24

环境准备

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

openedx/openedx-core 的其他 Issue

查看 openedx/openedx-core 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。