Skip to content

refactor(api): use sessionmaker in provider configuration#34855

Open
carlos4s wants to merge 7 commits intolanggenius:mainfrom
carlos4s:refactor/sessionmaker-provider-configuration
Open

refactor(api): use sessionmaker in provider configuration#34855
carlos4s wants to merge 7 commits intolanggenius:mainfrom
carlos4s:refactor/sessionmaker-provider-configuration

Conversation

@carlos4s
Copy link
Copy Markdown
Contributor

@carlos4s carlos4s commented Apr 9, 2026

Summary

  • Replace with Session(db.engine) + session.commit() with sessionmaker(bind=db.engine).begin()
    in provider_configuration (14 blocks)
  • Remove explicit session.rollback() calls — .begin() handles rollback automatically
  • Read-only session blocks left unchanged
  • provider_manager.py skipped (all blocks read-only)
  • Updated test fixture and assertions to match new sessionmaker pattern

This is the final PR in the series completing #24245.

All PRs in this series:

PR Scope Status
#34764 Plugin & trigger services Merged
#34765 End user, retention & cleanup services Merged
#34771 Core app generators & pipelines Merged
#34774 Trigger provider service & dataset retrieval Merged
#34805 Workflow & RAG pipeline services Merged
#34811 Datasource provider service Merged
#34812 Builtin tools manage service Merged
#34818 pgvecto_rs VDB service Merged
#34848 relyt & tidb_vector VDB services Open
This PR Provider configuration Open

Closes #24245

Test plan

  • ruff check passes
  • 97 provider_configuration tests pass

@dosubot dosubot bot added size:L This PR changes 100-499 lines, ignoring generated files. refactor labels Apr 9, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 9, 2026

Pyrefly Diff

base → PR
--- /tmp/pyrefly_base.txt	2026-04-09 13:48:20.178655301 +0000
+++ /tmp/pyrefly_pr.txt	2026-04-09 13:48:11.661728570 +0000
@@ -3691,21 +3691,21 @@
 ERROR Argument `SimpleNamespace` is not assignable to parameter `db_provider` with type `MCPToolProvider` in function `core.entities.mcp_provider.MCPProviderEntity.from_db_model` [bad-argument-type]
   --> tests/unit_tests/core/entities/test_entities_mcp_provider.py:59:46
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:639:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:642:12
 ERROR Argument `SimpleNamespace` is not assignable to parameter `credential_record` with type `ProviderCredential | ProviderModelCredential` in function `core.entities.provider_configuration.ProviderConfiguration._update_load_balancing_configs_with_credential` [bad-argument-type]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:862:31
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:863:31
 ERROR Argument `SimpleNamespace` is not assignable to parameter `credential_record` with type `ProviderCredential | ProviderModelCredential` in function `core.entities.provider_configuration.ProviderConfiguration._update_load_balancing_configs_with_credential` [bad-argument-type]
    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:880:27
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:995:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:993:12
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:996:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:994:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1012:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1010:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1499:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1495:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1688:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1677:12
 ERROR Object of class `ModuleType` has no attribute `MockExtension` [missing-attribute]
   --> tests/unit_tests/core/extension/test_extensible.py:62:9
 ERROR Cannot index into `OrderedDict[str, Unknown]` [bad-index]

@dosubot dosubot bot added size:M This PR changes 30-99 lines, ignoring generated files. and removed size:L This PR changes 100-499 lines, ignoring generated files. labels Apr 9, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 9, 2026

Pyrefly Diff

base → PR
--- /tmp/pyrefly_base.txt	2026-04-09 13:50:23.475136786 +0000
+++ /tmp/pyrefly_pr.txt	2026-04-09 13:50:14.897188878 +0000
@@ -3691,21 +3691,21 @@
 ERROR Argument `SimpleNamespace` is not assignable to parameter `db_provider` with type `MCPToolProvider` in function `core.entities.mcp_provider.MCPProviderEntity.from_db_model` [bad-argument-type]
   --> tests/unit_tests/core/entities/test_entities_mcp_provider.py:59:46
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:639:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:642:12
 ERROR Argument `SimpleNamespace` is not assignable to parameter `credential_record` with type `ProviderCredential | ProviderModelCredential` in function `core.entities.provider_configuration.ProviderConfiguration._update_load_balancing_configs_with_credential` [bad-argument-type]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:862:31
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:863:31
 ERROR Argument `SimpleNamespace` is not assignable to parameter `credential_record` with type `ProviderCredential | ProviderModelCredential` in function `core.entities.provider_configuration.ProviderConfiguration._update_load_balancing_configs_with_credential` [bad-argument-type]
    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:880:27
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:995:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:993:12
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:996:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:994:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1012:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1010:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1499:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1495:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1688:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1675:12
 ERROR Object of class `ModuleType` has no attribute `MockExtension` [missing-attribute]
   --> tests/unit_tests/core/extension/test_extensible.py:62:9
 ERROR Cannot index into `OrderedDict[str, Unknown]` [bad-index]

@carlos4s carlos4s closed this Apr 9, 2026
@carlos4s carlos4s reopened this Apr 9, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 9, 2026

Pyrefly Diff

base → PR
--- /tmp/pyrefly_base.txt	2026-04-09 14:26:00.639504437 +0000
+++ /tmp/pyrefly_pr.txt	2026-04-09 14:25:51.748523261 +0000
@@ -3691,21 +3691,21 @@
 ERROR Argument `SimpleNamespace` is not assignable to parameter `db_provider` with type `MCPToolProvider` in function `core.entities.mcp_provider.MCPProviderEntity.from_db_model` [bad-argument-type]
   --> tests/unit_tests/core/entities/test_entities_mcp_provider.py:59:46
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:639:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:642:12
 ERROR Argument `SimpleNamespace` is not assignable to parameter `credential_record` with type `ProviderCredential | ProviderModelCredential` in function `core.entities.provider_configuration.ProviderConfiguration._update_load_balancing_configs_with_credential` [bad-argument-type]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:862:31
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:863:31
 ERROR Argument `SimpleNamespace` is not assignable to parameter `credential_record` with type `ProviderCredential | ProviderModelCredential` in function `core.entities.provider_configuration.ProviderConfiguration._update_load_balancing_configs_with_credential` [bad-argument-type]
    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:880:27
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:995:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:993:12
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:996:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:994:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1012:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1010:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1499:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1495:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1688:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1675:12
 ERROR Object of class `ModuleType` has no attribute `MockExtension` [missing-attribute]
   --> tests/unit_tests/core/extension/test_extensible.py:62:9
 ERROR Cannot index into `OrderedDict[str, Unknown]` [bad-index]

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors ProviderConfiguration write transactions to use sessionmaker(bind=db.engine).begin() for automatic commit/rollback handling, and updates unit tests to align with the new session pattern.

Changes:

  • Replace with Session(db.engine) + explicit commit()/rollback() with sessionmaker(...).begin() across provider-configuration write paths.
  • Remove explicit commit()/rollback() calls in refactored blocks and adjust helper behavior accordingly.
  • Update unit test patching/mocks and assertions to match the sessionmaker().begin() usage.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 7 comments.

File Description
api/core/entities/provider_configuration.py Migrates multiple write operations to sessionmaker(...).begin() and removes explicit commit/rollback calls.
api/tests/unit_tests/core/entities/test_entities_provider_configuration.py Updates session patching and removes commit/rollback assertions to match the new transaction pattern.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

auto-merge was automatically disabled April 10, 2026 14:36

Head branch was pushed to by a user without write access

@dosubot dosubot bot added size:L This PR changes 100-499 lines, ignoring generated files. and removed size:M This PR changes 30-99 lines, ignoring generated files. labels Apr 10, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Pyrefly Diff

base → PR
--- /tmp/pyrefly_base.txt	2026-04-10 14:37:55.122961840 +0000
+++ /tmp/pyrefly_pr.txt	2026-04-10 14:37:46.321071952 +0000
@@ -3711,21 +3711,21 @@
 ERROR Argument `SimpleNamespace` is not assignable to parameter `db_provider` with type `MCPToolProvider` in function `core.entities.mcp_provider.MCPProviderEntity.from_db_model` [bad-argument-type]
   --> tests/unit_tests/core/entities/test_entities_mcp_provider.py:59:46
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:639:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:643:12
 ERROR Argument `SimpleNamespace` is not assignable to parameter `credential_record` with type `ProviderCredential | ProviderModelCredential` in function `core.entities.provider_configuration.ProviderConfiguration._update_load_balancing_configs_with_credential` [bad-argument-type]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:862:31
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:864:31
 ERROR Argument `SimpleNamespace` is not assignable to parameter `credential_record` with type `ProviderCredential | ProviderModelCredential` in function `core.entities.provider_configuration.ProviderConfiguration._update_load_balancing_configs_with_credential` [bad-argument-type]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:880:27
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:881:27
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:995:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:994:12
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:996:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:995:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1012:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1011:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1499:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1496:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1688:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1677:12
 ERROR Object of class `ModuleType` has no attribute `MockExtension` [missing-attribute]
   --> tests/unit_tests/core/extension/test_extensible.py:62:9
 ERROR Cannot index into `OrderedDict[str, Unknown]` [bad-index]

@github-actions
Copy link
Copy Markdown
Contributor

Pyrefly Diff

base → PR
--- /tmp/pyrefly_base.txt	2026-04-10 14:39:45.767636842 +0000
+++ /tmp/pyrefly_pr.txt	2026-04-10 14:39:37.029581971 +0000
@@ -3711,21 +3711,21 @@
 ERROR Argument `SimpleNamespace` is not assignable to parameter `db_provider` with type `MCPToolProvider` in function `core.entities.mcp_provider.MCPProviderEntity.from_db_model` [bad-argument-type]
   --> tests/unit_tests/core/entities/test_entities_mcp_provider.py:59:46
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:639:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:643:12
 ERROR Argument `SimpleNamespace` is not assignable to parameter `credential_record` with type `ProviderCredential | ProviderModelCredential` in function `core.entities.provider_configuration.ProviderConfiguration._update_load_balancing_configs_with_credential` [bad-argument-type]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:862:31
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:864:31
 ERROR Argument `SimpleNamespace` is not assignable to parameter `credential_record` with type `ProviderCredential | ProviderModelCredential` in function `core.entities.provider_configuration.ProviderConfiguration._update_load_balancing_configs_with_credential` [bad-argument-type]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:880:27
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:881:27
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:995:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:994:12
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:996:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:995:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1012:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1011:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1499:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1496:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1688:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1675:12
 ERROR Object of class `ModuleType` has no attribute `MockExtension` [missing-attribute]
   --> tests/unit_tests/core/extension/test_extensible.py:62:9
 ERROR Cannot index into `OrderedDict[str, Unknown]` [bad-index]

@carlos4s
Copy link
Copy Markdown
Contributor Author

@asukaminato0721
Sorry. Please take an another look on this PR. Thanks.

@dosubot dosubot bot added size:M This PR changes 30-99 lines, ignoring generated files. and removed size:L This PR changes 100-499 lines, ignoring generated files. labels Apr 14, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Pyrefly Diff

base → PR
--- /tmp/pyrefly_base.txt	2026-04-14 18:30:39.664299536 +0000
+++ /tmp/pyrefly_pr.txt	2026-04-14 18:30:30.527348307 +0000
@@ -3904,21 +3904,21 @@
 ERROR Argument `SimpleNamespace` is not assignable to parameter `db_provider` with type `MCPToolProvider` in function `core.entities.mcp_provider.MCPProviderEntity.from_db_model` [bad-argument-type]
   --> tests/unit_tests/core/entities/test_entities_mcp_provider.py:59:46
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:639:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:643:12
 ERROR Argument `SimpleNamespace` is not assignable to parameter `credential_record` with type `ProviderCredential | ProviderModelCredential` in function `core.entities.provider_configuration.ProviderConfiguration._update_load_balancing_configs_with_credential` [bad-argument-type]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:862:31
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:864:31
 ERROR Argument `SimpleNamespace` is not assignable to parameter `credential_record` with type `ProviderCredential | ProviderModelCredential` in function `core.entities.provider_configuration.ProviderConfiguration._update_load_balancing_configs_with_credential` [bad-argument-type]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:880:27
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:881:27
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:995:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:994:12
 ERROR `None` is not subscriptable [unsupported-operation]
-   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:996:12
+   --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:995:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1012:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1011:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1499:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1496:12
 ERROR `None` is not subscriptable [unsupported-operation]
-    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1688:12
+    --> tests/unit_tests/core/entities/test_entities_provider_configuration.py:1675:12
 ERROR Object of class `ModuleType` has no attribute `MockExtension` [missing-attribute]
   --> tests/unit_tests/core/extension/test_extensible.py:62:9
 ERROR Cannot index into `OrderedDict[str, Unknown]` [bad-index]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactor size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Chore/Refactor] use sessionmaker when session.commit is used

2 participants