Skip to content

MPT-20504 consolidate resource mixins#317

Merged
jentyk merged 1 commit intomainfrom
feat/MPT-20504
Apr 23, 2026
Merged

MPT-20504 consolidate resource mixins#317
jentyk merged 1 commit intomainfrom
feat/MPT-20504

Conversation

@jentyk
Copy link
Copy Markdown
Member

@jentyk jentyk commented Apr 22, 2026

Closes MPT-20504

  • Consolidate resource mixins into a central mpt_api_client.resources.mixins module by moving ActivatableMixin, AsyncActivatableMixin, DocumentMixin, AsyncDocumentMixin, MediaMixin, AsyncMediaMixin, PublishableMixin, and AsyncPublishableMixin from scattered catalog, program, accounts, and integration submodules
  • Introduce new ReviewableMixin and AsyncReviewableMixin classes for review functionality
  • Update all service classes across catalog, accounts, program, and integration modules to import mixins from the centralized location
  • Extend catalog service classes (ItemsService, TermService, TermVariantService, ProductsService, DocumentService, MediaService) with review capabilities via ReviewableMixin/AsyncReviewableMixin
  • Remove duplicate mixin definitions from mpt_api_client.resources.catalog.mixins, mpt_api_client.resources.program.mixins, mpt_api_client.resources.accounts.mixins, and mpt_api_client.resources.integration.mixins
  • Move attachment and render mixins to the central module and update imports in enrollment-related services
  • Consolidate unit tests for mixins into tests/unit/resources/mixins/ directory and update test imports to use the new mixin locations

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 22, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 02eaec61-72c9-40af-8b8b-2a8f8aa49f9d

📥 Commits

Reviewing files that changed from the base of the PR and between 3f07715 and 62a19e2.

📒 Files selected for processing (50)
  • mpt_api_client/resources/accounts/account.py
  • mpt_api_client/resources/accounts/buyers.py
  • mpt_api_client/resources/accounts/mixins/__init__.py
  • mpt_api_client/resources/accounts/sellers.py
  • mpt_api_client/resources/catalog/items.py
  • mpt_api_client/resources/catalog/mixins/activatable_mixin.py
  • mpt_api_client/resources/catalog/mixins/document_mixin.py
  • mpt_api_client/resources/catalog/mixins/media_mixin.py
  • mpt_api_client/resources/catalog/mixins/publishable_mixin.py
  • mpt_api_client/resources/catalog/product_term_variants.py
  • mpt_api_client/resources/catalog/product_terms.py
  • mpt_api_client/resources/catalog/products.py
  • mpt_api_client/resources/catalog/products_documents.py
  • mpt_api_client/resources/catalog/products_media.py
  • mpt_api_client/resources/integration/extension_documents.py
  • mpt_api_client/resources/integration/extension_media.py
  • mpt_api_client/resources/integration/extension_term_variants.py
  • mpt_api_client/resources/integration/extension_terms.py
  • mpt_api_client/resources/integration/mixins/__init__.py
  • mpt_api_client/resources/mixins/__init__.py
  • mpt_api_client/resources/mixins/activatable_mixin.py
  • mpt_api_client/resources/mixins/attachment_mixin.py
  • mpt_api_client/resources/mixins/document_mixin.py
  • mpt_api_client/resources/mixins/media_mixin.py
  • mpt_api_client/resources/mixins/publishable_mixin.py
  • mpt_api_client/resources/mixins/render_mixin.py
  • mpt_api_client/resources/mixins/reviewable_mixin.py
  • mpt_api_client/resources/program/enrollments.py
  • mpt_api_client/resources/program/enrollments_attachments.py
  • mpt_api_client/resources/program/mixins/__init__.py
  • mpt_api_client/resources/program/mixins/attachment_mixin.py
  • mpt_api_client/resources/program/mixins/publishable_mixin.py
  • mpt_api_client/resources/program/programs.py
  • mpt_api_client/resources/program/programs_documents.py
  • mpt_api_client/resources/program/programs_media.py
  • mpt_api_client/resources/program/programs_terms.py
  • mpt_api_client/resources/program/programs_terms_variant.py
  • tests/unit/resources/accounts/mixins/test_activatable_mixin.py
  • tests/unit/resources/catalog/mixins/__init__.py
  • tests/unit/resources/catalog/mixins/test_publishable_mixin.py
  • tests/unit/resources/mixins/__init__.py
  • tests/unit/resources/mixins/test_activatable_mixin.py
  • tests/unit/resources/mixins/test_attachment_mixin.py
  • tests/unit/resources/mixins/test_document_mixin.py
  • tests/unit/resources/mixins/test_media_mixin.py
  • tests/unit/resources/mixins/test_publishable_mixin.py
  • tests/unit/resources/mixins/test_render_mixin.py
  • tests/unit/resources/mixins/test_reviewable_mixin.py
  • tests/unit/resources/program/mixin/test_document_mixin.py
  • tests/unit/resources/program/mixin/test_publishable_mixin.py
💤 Files with no reviewable changes (13)
  • mpt_api_client/resources/integration/mixins/init.py
  • mpt_api_client/resources/program/mixins/attachment_mixin.py
  • mpt_api_client/resources/accounts/mixins/init.py
  • mpt_api_client/resources/program/mixins/init.py
  • mpt_api_client/resources/catalog/mixins/document_mixin.py
  • tests/unit/resources/program/mixin/test_document_mixin.py
  • mpt_api_client/resources/catalog/mixins/media_mixin.py
  • tests/unit/resources/program/mixin/test_publishable_mixin.py
  • tests/unit/resources/catalog/mixins/test_publishable_mixin.py
  • tests/unit/resources/accounts/mixins/test_activatable_mixin.py
  • mpt_api_client/resources/program/mixins/publishable_mixin.py
  • mpt_api_client/resources/catalog/mixins/publishable_mixin.py
  • mpt_api_client/resources/catalog/mixins/activatable_mixin.py
✅ Files skipped from review due to trivial changes (25)
  • tests/unit/resources/mixins/test_render_mixin.py
  • tests/unit/resources/mixins/test_media_mixin.py
  • mpt_api_client/resources/program/enrollments_attachments.py
  • mpt_api_client/resources/integration/extension_term_variants.py
  • mpt_api_client/resources/program/programs_documents.py
  • tests/unit/resources/mixins/init.py
  • mpt_api_client/resources/integration/extension_media.py
  • tests/unit/resources/mixins/test_attachment_mixin.py
  • mpt_api_client/resources/program/programs.py
  • mpt_api_client/resources/program/programs_terms_variant.py
  • mpt_api_client/resources/integration/extension_terms.py
  • mpt_api_client/resources/integration/extension_documents.py
  • mpt_api_client/resources/program/programs_terms.py
  • mpt_api_client/resources/accounts/buyers.py
  • mpt_api_client/resources/accounts/sellers.py
  • mpt_api_client/resources/accounts/account.py
  • mpt_api_client/resources/program/enrollments.py
  • mpt_api_client/resources/mixins/media_mixin.py
  • tests/unit/resources/mixins/test_reviewable_mixin.py
  • mpt_api_client/resources/catalog/product_terms.py
  • mpt_api_client/resources/mixins/document_mixin.py
  • mpt_api_client/resources/mixins/reviewable_mixin.py
  • mpt_api_client/resources/mixins/publishable_mixin.py
  • tests/unit/resources/mixins/test_publishable_mixin.py
  • tests/unit/resources/mixins/test_activatable_mixin.py
🚧 Files skipped from review as they are similar to previous changes (4)
  • mpt_api_client/resources/program/programs_media.py
  • mpt_api_client/resources/catalog/products_documents.py
  • mpt_api_client/resources/catalog/products_media.py
  • mpt_api_client/resources/catalog/products.py

📝 Walkthrough

Walkthrough

Centralizes mixin implementations into mpt_api_client/resources/mixins, removes several catalog/program-level mixin modules, adds ReviewableMixin/AsyncReviewableMixin, updates imports/service base classes accordingly, and relocates or adjusts related unit tests.

Changes

Cohort / File(s) Summary
Centralized mixins package
mpt_api_client/resources/mixins/__init__.py, mpt_api_client/resources/mixins/reviewable_mixin.py, mpt_api_client/resources/mixins/publishable_mixin.py, mpt_api_client/resources/mixins/document_mixin.py, mpt_api_client/resources/mixins/media_mixin.py
Added ReviewableMixin/AsyncReviewableMixin; changed re-export sources to centralized mixins; shortened publishable docstrings; updated internal import targets.
Catalog mixins removed
mpt_api_client/resources/catalog/mixins/activatable_mixin.py, .../document_mixin.py, .../media_mixin.py, .../publishable_mixin.py
Deleted catalog-scoped mixin implementation modules (activatable, document, media, publishable) — their classes/methods removed from those modules.
Service classes updated (catalog)
mpt_api_client/resources/catalog/items.py, .../product_terms.py, .../product_term_variants.py, .../products.py, .../products_documents.py, .../products_media.py
Switched mixin imports to centralized package and added ReviewableMixin/AsyncReviewableMixin to several service class bases.
Account & account-mixins adjustments
mpt_api_client/resources/accounts/account.py, .../buyers.py, .../sellers.py, mpt_api_client/resources/accounts/mixins/__init__.py
Changed ActivatableMixin/AsyncActivatableMixin imports to centralized package; removed those names from account mixins __all__.
Integration mixins/imports
mpt_api_client/resources/integration/extension_documents.py, .../extension_media.py, .../extension_terms.py, .../extension_term_variants.py, mpt_api_client/resources/integration/mixins/__init__.py
Switched publishable mixin imports to centralized package; removed publishable re-exports from integration.mixins __all__.
Program mixins/imports & deletions
mpt_api_client/resources/program/mixins/__init__.py, .../mixins/publishable_mixin.py, programs.py, programs_documents.py, programs_media.py, programs_terms.py, programs_terms_variant.py, enrollments.py, enrollments_attachments.py
Removed program-scoped mixin re-exports and publishable implementation; updated program service files to import mixins from centralized resources.mixins; updated render/attachment imports.
Attachment mixin relocation
mpt_api_client/resources/mixins/attachment_mixin.py, mpt_api_client/resources/program/mixins/attachment_mixin.py
Added new centralized AttachmentMixin/AsyncAttachmentMixin; removed the program-scoped attachment mixin module.
Tests — removed
tests/unit/resources/accounts/mixins/test_activatable_mixin.py, tests/unit/resources/catalog/mixins/test_publishable_mixin.py, tests/unit/resources/program/mixin/test_document_mixin.py, tests/unit/resources/program/mixin/test_publishable_mixin.py
Deleted tests that targeted mixins removed from catalog/program-scoped modules.
Tests — relocated/updated/added
tests/unit/resources/mixins/__init__.py, tests/unit/resources/mixins/test_activatable_mixin.py, tests/unit/resources/mixins/test_document_mixin.py, tests/unit/resources/mixins/test_media_mixin.py, tests/unit/resources/mixins/test_publishable_mixin.py, tests/unit/resources/mixins/test_reviewable_mixin.py, tests/unit/resources/mixins/test_attachment_mixin.py, tests/unit/resources/mixins/test_render_mixin.py
Added package init for mixins tests; updated many tests to import from centralized mixins; added new test_reviewable_mixin.py; refactored request payload assertions and async/sync test shapes.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Single Commit Required ❓ Inconclusive Cannot determine PR commit count due to unavailable git branch references in current environment. Run 'git rev-list --count main..HEAD' from feature branch in properly configured git environment to verify commit count.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Jira Issue Key In Title ✅ Passed The PR title contains exactly one Jira issue key (MPT-20504) in the required format at the beginning.
Test Coverage Required ✅ Passed The PR modifies 35 code files across mixin modules and includes 12 corresponding test files with comprehensive coverage for refactored mixins.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@jentyk jentyk marked this pull request as ready for review April 22, 2026 14:35
@jentyk jentyk requested a review from a team as a code owner April 22, 2026 14:35
@jentyk jentyk requested review from albertsola and alephsur April 22, 2026 14:35
@jentyk
Copy link
Copy Markdown
Member Author

jentyk commented Apr 22, 2026

@CodeRabbit review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 22, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@sonarqubecloud
Copy link
Copy Markdown

@jentyk jentyk merged commit 973253f into main Apr 23, 2026
4 checks passed
@jentyk jentyk deleted the feat/MPT-20504 branch April 23, 2026 16:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants