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

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 

18 

19from mindsdb.utilities import log 

20 

21logger = log.getLogger(__name__) 

22 

23 

24class SessionController: 

25 """ 

26 This class manages the server session 

27 """ 

28 

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 

38 

39 self.config = Config() 

40 

41 self.model_controller = ModelController() 

42 

43 # to prevent circular imports 

44 from mindsdb.interfaces.database.integrations import integration_controller 

45 self.integration_controller = integration_controller 

46 

47 self.database_controller = DatabaseController() 

48 self.skills_controller = SkillsController() 

49 self.function_controller = FunctionController(self) 

50 

51 # to prevent circular imports 

52 from mindsdb.interfaces.knowledge_base.controller import KnowledgeBaseController 

53 self.kb_controller = KnowledgeBaseController(self) 

54 

55 self.datahub = InformationSchemaDataNode(self) 

56 self.agents_controller = AgentsController() 

57 

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 

63 

64 def inc_packet_sequence_number(self): 

65 self.packet_sequence_number = (self.packet_sequence_number + 1) % 256 

66 

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") 

73 

74 self.prepared_stmts[i] = dict(type=None, statement=statement, fetched=0) 

75 return i 

76 

77 def unregister_stmt(self, stmt_id): 

78 del self.prepared_stmts[stmt_id] 

79 

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 } 

88 

89 def from_json(self, updated): 

90 for key in updated: 

91 setattr(self, key, updated[key])