Coverage for mindsdb / api / executor / controllers / session_controller.py: 67%
49 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-21 00:36 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-21 00:36 +0000
1"""
2*******************************************************
3 * Copyright (C) 2017 MindsDB Inc. <copyright@mindsdb.com>
4 *
5 * This file is part of MindsDB Server.
6 *
7 * MindsDB Server can not be copied and/or distributed without the express
8 * permission of MindsDB Inc
9 *******************************************************
10"""
11from mindsdb.api.executor.datahub.datanodes import InformationSchemaDataNode
12from mindsdb.utilities.config import Config
13from mindsdb.interfaces.agents.agents_controller import AgentsController
14from mindsdb.interfaces.model.model_controller import ModelController
15from mindsdb.interfaces.database.database import DatabaseController
16from mindsdb.interfaces.skills.skills_controller import SkillsController
17from mindsdb.interfaces.functions.controller import FunctionController
19from mindsdb.utilities import log
21logger = log.getLogger(__name__)
24class SessionController:
25 """
26 This class manages the server session
27 """
29 def __init__(self, api_type='http') -> object:
30 """
31 Initialize the session
32 """
33 self.api_type = api_type
34 self.username = None
35 self.auth = False
36 self.logging = logger
37 self.database = None
39 self.config = Config()
41 self.model_controller = ModelController()
43 # to prevent circular imports
44 from mindsdb.interfaces.database.integrations import integration_controller
45 self.integration_controller = integration_controller
47 self.database_controller = DatabaseController()
48 self.skills_controller = SkillsController()
49 self.function_controller = FunctionController(self)
51 # to prevent circular imports
52 from mindsdb.interfaces.knowledge_base.controller import KnowledgeBaseController
53 self.kb_controller = KnowledgeBaseController(self)
55 self.datahub = InformationSchemaDataNode(self)
56 self.agents_controller = AgentsController()
58 self.prepared_stmts = {}
59 self.packet_sequence_number = 0
60 self.profiling = False
61 self.predictor_cache = False if self.config.get('cache')['type'] == 'none' else True
62 self.show_secrets = False
64 def inc_packet_sequence_number(self):
65 self.packet_sequence_number = (self.packet_sequence_number + 1) % 256
67 def register_stmt(self, statement):
68 i = 1
69 while i in self.prepared_stmts and i < 100:
70 i = i + 1
71 if i == 100:
72 raise Exception("Too many unclosed queries")
74 self.prepared_stmts[i] = dict(type=None, statement=statement, fetched=0)
75 return i
77 def unregister_stmt(self, stmt_id):
78 del self.prepared_stmts[stmt_id]
80 def to_json(self):
81 return {
82 "username": self.username,
83 "auth": self.auth,
84 "database": self.database,
85 "prepared_stmts": self.prepared_stmts,
86 "packet_sequence_number": self.packet_sequence_number,
87 }
89 def from_json(self, updated):
90 for key in updated:
91 setattr(self, key, updated[key])