-
Notifications
You must be signed in to change notification settings - Fork 20.1k
refactor: port api/services/auth/api_key_auth_service.py api/services/datasource_provider_service.py api/services/saved_message_service.py api/services/web_conversation_service.py to session #32003
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 4 commits
769cd87
c6e065e
130b082
0269231
85c8544
7061d4c
54a2f68
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,6 +1,6 @@ | ||
| from typing import Union | ||
|
|
||
| from extensions.ext_database import db | ||
| from core.db.session_factory import session_factory | ||
| from libs.infinite_scroll_pagination import InfiniteScrollPagination | ||
| from models import Account | ||
| from models.model import App, EndUser | ||
|
|
@@ -15,16 +15,17 @@ def pagination_by_last_id( | |
| ) -> InfiniteScrollPagination: | ||
| if not user: | ||
| raise ValueError("User is required") | ||
| saved_messages = ( | ||
| db.session.query(SavedMessage) | ||
| .where( | ||
| SavedMessage.app_id == app_model.id, | ||
| SavedMessage.created_by_role == ("account" if isinstance(user, Account) else "end_user"), | ||
| SavedMessage.created_by == user.id, | ||
| with session_factory.create_session() as session: | ||
asukaminato0721 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| saved_messages = ( | ||
| session.query(SavedMessage) | ||
| .where( | ||
| SavedMessage.app_id == app_model.id, | ||
| SavedMessage.created_by_role == ("account" if isinstance(user, Account) else "end_user"), | ||
| SavedMessage.created_by == user.id, | ||
| ) | ||
| .order_by(SavedMessage.created_at.desc()) | ||
| .all() | ||
| ) | ||
| .order_by(SavedMessage.created_at.desc()) | ||
| .all() | ||
| ) | ||
| message_ids = [sm.message_id for sm in saved_messages] | ||
|
|
||
| return MessageService.pagination_by_last_id( | ||
|
|
@@ -35,49 +36,50 @@ def pagination_by_last_id( | |
| def save(cls, app_model: App, user: Union[Account, EndUser] | None, message_id: str): | ||
| if not user: | ||
| return | ||
| saved_message = ( | ||
| db.session.query(SavedMessage) | ||
| .where( | ||
| SavedMessage.app_id == app_model.id, | ||
| SavedMessage.message_id == message_id, | ||
| SavedMessage.created_by_role == ("account" if isinstance(user, Account) else "end_user"), | ||
| SavedMessage.created_by == user.id, | ||
|
|
||
| with session_factory.create_session() as session, session.begin(): | ||
| saved_message = ( | ||
| session.query(SavedMessage) | ||
| .where( | ||
| SavedMessage.app_id == app_model.id, | ||
| SavedMessage.message_id == message_id, | ||
| SavedMessage.created_by_role == ("account" if isinstance(user, Account) else "end_user"), | ||
| SavedMessage.created_by == user.id, | ||
| ) | ||
| .first() | ||
| ) | ||
| .first() | ||
| ) | ||
|
|
||
| if saved_message: | ||
| return | ||
| if saved_message: | ||
| return | ||
|
Comment on lines
+52
to
+53
|
||
|
|
||
| message = MessageService.get_message(app_model=app_model, user=user, message_id=message_id) | ||
| message = MessageService.get_message(app_model=app_model, user=user, message_id=message_id) | ||
|
|
||
| saved_message = SavedMessage( | ||
| app_id=app_model.id, | ||
| message_id=message.id, | ||
| created_by_role="account" if isinstance(user, Account) else "end_user", | ||
| created_by=user.id, | ||
| ) | ||
| saved_message = SavedMessage( | ||
| app_id=app_model.id, | ||
| message_id=message.id, | ||
| created_by_role="account" if isinstance(user, Account) else "end_user", | ||
| created_by=user.id, | ||
| ) | ||
|
|
||
| db.session.add(saved_message) | ||
| db.session.commit() | ||
| session.add(saved_message) | ||
|
|
||
| @classmethod | ||
| def delete(cls, app_model: App, user: Union[Account, EndUser] | None, message_id: str): | ||
| if not user: | ||
| return | ||
| saved_message = ( | ||
| db.session.query(SavedMessage) | ||
| .where( | ||
| SavedMessage.app_id == app_model.id, | ||
| SavedMessage.message_id == message_id, | ||
| SavedMessage.created_by_role == ("account" if isinstance(user, Account) else "end_user"), | ||
| SavedMessage.created_by == user.id, | ||
| with session_factory.create_session() as session, session.begin(): | ||
| saved_message = ( | ||
| session.query(SavedMessage) | ||
| .where( | ||
| SavedMessage.app_id == app_model.id, | ||
| SavedMessage.message_id == message_id, | ||
| SavedMessage.created_by_role == ("account" if isinstance(user, Account) else "end_user"), | ||
| SavedMessage.created_by == user.id, | ||
| ) | ||
| .first() | ||
| ) | ||
| .first() | ||
| ) | ||
|
|
||
| if not saved_message: | ||
| return | ||
| if not saved_message: | ||
| return | ||
|
Comment on lines
+82
to
+83
|
||
|
|
||
| db.session.delete(saved_message) | ||
| db.session.commit() | ||
| session.delete(saved_message) | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4,7 +4,7 @@ | |
| from sqlalchemy.orm import Session | ||
|
|
||
| from core.app.entities.app_invoke_entities import InvokeFrom | ||
| from extensions.ext_database import db | ||
| from core.db.session_factory import session_factory | ||
| from libs.infinite_scroll_pagination import InfiniteScrollPagination | ||
| from models import Account | ||
| from models.model import App, EndUser | ||
|
|
@@ -63,51 +63,51 @@ def pagination_by_last_id( | |
| def pin(cls, app_model: App, conversation_id: str, user: Union[Account, EndUser] | None): | ||
| if not user: | ||
| return | ||
| pinned_conversation = ( | ||
| db.session.query(PinnedConversation) | ||
| .where( | ||
| PinnedConversation.app_id == app_model.id, | ||
| PinnedConversation.conversation_id == conversation_id, | ||
| PinnedConversation.created_by_role == ("account" if isinstance(user, Account) else "end_user"), | ||
| PinnedConversation.created_by == user.id, | ||
| with session_factory.create_session() as session, session.begin(): | ||
| pinned_conversation = ( | ||
| session.query(PinnedConversation) | ||
| .where( | ||
| PinnedConversation.app_id == app_model.id, | ||
| PinnedConversation.conversation_id == conversation_id, | ||
| PinnedConversation.created_by_role == ("account" if isinstance(user, Account) else "end_user"), | ||
| PinnedConversation.created_by == user.id, | ||
| ) | ||
| .first() | ||
| ) | ||
| .first() | ||
| ) | ||
|
|
||
| if pinned_conversation: | ||
| return | ||
| if pinned_conversation: | ||
| return | ||
|
Comment on lines
+78
to
+79
|
||
|
|
||
| conversation = ConversationService.get_conversation( | ||
| app_model=app_model, conversation_id=conversation_id, user=user | ||
| ) | ||
| conversation = ConversationService.get_conversation( | ||
| app_model=app_model, conversation_id=conversation_id, user=user | ||
| ) | ||
|
|
||
| pinned_conversation = PinnedConversation( | ||
| app_id=app_model.id, | ||
| conversation_id=conversation.id, | ||
| created_by_role="account" if isinstance(user, Account) else "end_user", | ||
| created_by=user.id, | ||
| ) | ||
| pinned_conversation = PinnedConversation( | ||
| app_id=app_model.id, | ||
| conversation_id=conversation.id, | ||
| created_by_role="account" if isinstance(user, Account) else "end_user", | ||
| created_by=user.id, | ||
| ) | ||
|
|
||
| db.session.add(pinned_conversation) | ||
| db.session.commit() | ||
| session.add(pinned_conversation) | ||
|
|
||
| @classmethod | ||
| def unpin(cls, app_model: App, conversation_id: str, user: Union[Account, EndUser] | None): | ||
| if not user: | ||
| return | ||
| pinned_conversation = ( | ||
| db.session.query(PinnedConversation) | ||
| .where( | ||
| PinnedConversation.app_id == app_model.id, | ||
| PinnedConversation.conversation_id == conversation_id, | ||
| PinnedConversation.created_by_role == ("account" if isinstance(user, Account) else "end_user"), | ||
| PinnedConversation.created_by == user.id, | ||
| with session_factory.create_session() as session, session.begin(): | ||
| pinned_conversation = ( | ||
| session.query(PinnedConversation) | ||
| .where( | ||
| PinnedConversation.app_id == app_model.id, | ||
| PinnedConversation.conversation_id == conversation_id, | ||
| PinnedConversation.created_by_role == ("account" if isinstance(user, Account) else "end_user"), | ||
| PinnedConversation.created_by == user.id, | ||
| ) | ||
| .first() | ||
| ) | ||
| .first() | ||
| ) | ||
|
|
||
| if not pinned_conversation: | ||
| return | ||
| if not pinned_conversation: | ||
| return | ||
|
Comment on lines
+110
to
+111
|
||
|
|
||
| db.session.delete(pinned_conversation) | ||
| db.session.commit() | ||
| session.delete(pinned_conversation) | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The
data_source_api_key_bindingsobject accessed on lines 50-54 is detached from the session (since it's accessed after being queried within a session context that will exit). While the scalar attributes likecredentialsare already loaded and accessible, following the established pattern in the codebase (e.g.,api/core/tools/workflow_as_tool/tool.py:226), the object should be explicitly expunged usingsession.expunge(data_source_api_key_bindings)before being used outside the session context. This makes it clear that the object is intended to be used as a detached object.