thoth-dbmanager 0.4.2__py3-none-any.whl → 0.4.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -43,7 +43,6 @@ from .dynamic_imports import (
43
43
  import_sqlserver,
44
44
  import_oracle,
45
45
  import_mariadb,
46
- import_informix,
47
46
  import_supabase,
48
47
  )
49
48
 
@@ -62,8 +61,6 @@ def __getattr__(name: str):
62
61
  return import_manager('sqlserver')
63
62
  elif name == 'ThothOracleManager':
64
63
  return import_manager('oracle')
65
- elif name == 'ThothInformixManager':
66
- return import_manager('informix')
67
64
  elif name == 'ThothSupabaseManager':
68
65
  return import_manager('supabase')
69
66
 
@@ -79,7 +76,6 @@ __all__ = [
79
76
  "ThothMariaDbManager",
80
77
  "ThothSqlServerManager",
81
78
  "ThothOracleManager",
82
- "ThothInformixManager",
83
79
  "ThothSupabaseManager",
84
80
 
85
81
  # New architecture
@@ -106,7 +102,6 @@ __all__ = [
106
102
  "MariaDBPlugin",
107
103
  "SQLServerPlugin",
108
104
  "OraclePlugin",
109
- "InformixPlugin",
110
105
  "SupabasePlugin",
111
106
 
112
107
  # Adapters
@@ -116,7 +111,6 @@ __all__ = [
116
111
  "MariaDBAdapter",
117
112
  "SQLServerAdapter",
118
113
  "OracleAdapter",
119
- "InformixAdapter",
120
114
  "SupabaseAdapter",
121
115
 
122
116
  # LSH functionality
@@ -133,4 +127,4 @@ __all__ = [
133
127
  "DatabaseImportError",
134
128
  ]
135
129
 
136
- __version__ = "0.4.0"
130
+ __version__ = "0.4.3"
@@ -14,45 +14,32 @@ DATABASE_DEPENDENCIES = {
14
14
  'mariadb': ['mariadb'],
15
15
  'sqlserver': ['pyodbc'],
16
16
  'oracle': ['cx_Oracle'],
17
- 'informix': ['informixdb'],
18
17
  'supabase': ['supabase', 'postgrest', 'gotrue'],
19
18
  'sqlite': [], # Built into Python
20
19
  }
21
20
 
22
- # Mapping of database names to their manager classes
23
- DATABASE_MANAGERS = {
24
- 'postgresql': 'dbmanager.impl.ThothPgManager.ThothPgManager',
25
- 'mysql': 'dbmanager.impl.ThothMySqlManager.ThothMySqlManager',
26
- 'mariadb': 'dbmanager.impl.ThothMariaDbManager.ThothMariaDbManager',
27
- 'sqlserver': 'dbmanager.impl.ThothSqlServerManager.ThothSqlServerManager',
28
- 'oracle': 'dbmanager.impl.ThothOracleManager.ThothOracleManager',
29
- 'informix': 'dbmanager.impl.ThothInformixManager.ThothInformixManager',
30
- 'supabase': 'dbmanager.impl.ThothSupabaseManager.ThothSupabaseManager',
31
- 'sqlite': 'dbmanager.impl.ThothSqliteManager.ThothSqliteManager',
32
- }
21
+ # Note: DATABASE_MANAGERS is no longer used - managers are created via factory pattern
33
22
 
34
23
  # Mapping of database names to their adapter classes
35
24
  DATABASE_ADAPTERS = {
36
- 'postgresql': 'dbmanager.adapters.postgresql.PostgreSQLAdapter',
37
- 'mysql': 'dbmanager.adapters.mysql.MySQLAdapter',
38
- 'mariadb': 'dbmanager.adapters.mariadb.MariaDBAdapter',
39
- 'sqlserver': 'dbmanager.adapters.sqlserver.SQLServerAdapter',
40
- 'oracle': 'dbmanager.adapters.oracle.OracleAdapter',
41
- 'informix': 'dbmanager.adapters.informix.InformixAdapter',
42
- 'supabase': 'dbmanager.adapters.supabase.SupabaseAdapter',
43
- 'sqlite': 'dbmanager.adapters.sqlite.SQLiteAdapter',
25
+ 'postgresql': 'thoth_dbmanager.adapters.postgresql.PostgreSQLAdapter',
26
+ 'mysql': 'thoth_dbmanager.adapters.mysql.MySQLAdapter',
27
+ 'mariadb': 'thoth_dbmanager.adapters.mariadb.MariaDBAdapter',
28
+ 'sqlserver': 'thoth_dbmanager.adapters.sqlserver.SQLServerAdapter',
29
+ 'oracle': 'thoth_dbmanager.adapters.oracle.OracleAdapter',
30
+ 'supabase': 'thoth_dbmanager.adapters.supabase.SupabaseAdapter',
31
+ 'sqlite': 'thoth_dbmanager.adapters.sqlite.SQLiteAdapter',
44
32
  }
45
33
 
46
34
  # Mapping of database names to their plugin classes
47
35
  DATABASE_PLUGINS = {
48
- 'postgresql': 'dbmanager.plugins.postgresql.PostgreSQLPlugin',
49
- 'mysql': 'dbmanager.plugins.mysql.MySQLPlugin',
50
- 'mariadb': 'dbmanager.plugins.mariadb.MariaDBPlugin',
51
- 'sqlserver': 'dbmanager.plugins.sqlserver.SQLServerPlugin',
52
- 'oracle': 'dbmanager.plugins.oracle.OraclePlugin',
53
- 'informix': 'dbmanager.plugins.informix.InformixPlugin',
54
- 'supabase': 'dbmanager.plugins.supabase.SupabasePlugin',
55
- 'sqlite': 'dbmanager.plugins.sqlite.SQLitePlugin',
36
+ 'postgresql': 'thoth_dbmanager.plugins.postgresql.PostgreSQLPlugin',
37
+ 'mysql': 'thoth_dbmanager.plugins.mysql.MySQLPlugin',
38
+ 'mariadb': 'thoth_dbmanager.plugins.mariadb.MariaDBPlugin',
39
+ 'sqlserver': 'thoth_dbmanager.plugins.sqlserver.SQLServerPlugin',
40
+ 'oracle': 'thoth_dbmanager.plugins.oracle.OraclePlugin',
41
+ 'supabase': 'thoth_dbmanager.plugins.supabase.SupabasePlugin',
42
+ 'sqlite': 'thoth_dbmanager.plugins.sqlite.SQLitePlugin',
56
43
  }
57
44
 
58
45
 
@@ -93,30 +80,39 @@ def check_dependencies(database: str) -> List[str]:
93
80
 
94
81
  def import_manager(database: str) -> Any:
95
82
  """
96
- Dynamically import a database manager class.
97
-
83
+ Dynamically import a database manager using the factory pattern.
84
+
98
85
  Args:
99
86
  database: Name of the database
100
-
87
+
101
88
  Returns:
102
- The database manager class
103
-
89
+ The database manager class (factory-created)
90
+
104
91
  Raises:
105
92
  DatabaseImportError: If dependencies are missing
106
93
  ImportError: If the manager class cannot be imported
107
94
  """
108
- if database not in DATABASE_MANAGERS:
95
+ if database not in DATABASE_PLUGINS:
109
96
  raise ValueError(f"Unknown database: {database}")
110
-
97
+
111
98
  # Check dependencies
112
99
  missing_deps = check_dependencies(database)
113
100
  if missing_deps:
114
101
  raise DatabaseImportError(database, missing_deps)
115
-
116
- # Import the manager class
117
- module_path, class_name = DATABASE_MANAGERS[database].rsplit('.', 1)
118
- module = importlib.import_module(module_path)
119
- return getattr(module, class_name)
102
+
103
+ # Import the factory and create a manager class
104
+ from thoth_dbmanager.core.factory import ThothDbFactory
105
+
106
+ # Create a wrapper class that can be instantiated like the old managers
107
+ class DatabaseManagerWrapper:
108
+ def __init__(self, *args, **kwargs):
109
+ # Create manager using factory
110
+ self._manager = ThothDbFactory.create_manager(database, *args, **kwargs)
111
+
112
+ def __getattr__(self, name):
113
+ return getattr(self._manager, name)
114
+
115
+ return DatabaseManagerWrapper
120
116
 
121
117
 
122
118
  def import_adapter(database: str) -> Any:
@@ -241,10 +237,6 @@ def import_mariadb():
241
237
  """Import MariaDB components."""
242
238
  return import_database_components(['mariadb'])['mariadb']
243
239
 
244
- def import_informix():
245
- """Import Informix components."""
246
- return import_database_components(['informix'])['informix']
247
-
248
240
  def import_supabase():
249
241
  """Import Supabase components."""
250
242
  return import_database_components(['supabase'])['supabase']
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: thoth_dbmanager
3
- Version: 0.4.2
3
+ Version: 0.4.3
4
4
  Summary: A Python library for managing SQL databases with support for multiple database types, LSH-based similarity search, and a modern plugin architecture.
5
5
  Author-email: Marco Pancotti <mp@tylconsulting.it>
6
6
  License: MIT
@@ -28,6 +28,8 @@ Requires-Dist: datasketch>=1.5.0
28
28
  Requires-Dist: tqdm>=4.60.0
29
29
  Requires-Dist: SQLAlchemy>=1.4.0
30
30
  Requires-Dist: pydantic>=2.0.0
31
+ Requires-Dist: pandas>=1.3.0
32
+ Requires-Dist: requests>=2.25.0
31
33
  Provides-Extra: postgresql
32
34
  Requires-Dist: psycopg2-binary>=2.9.0; extra == "postgresql"
33
35
  Provides-Extra: mysql
@@ -36,28 +38,24 @@ Provides-Extra: mariadb
36
38
  Requires-Dist: mariadb>=1.1.0; extra == "mariadb"
37
39
  Provides-Extra: sqlserver
38
40
  Requires-Dist: pyodbc>=4.0.0; extra == "sqlserver"
41
+ Requires-Dist: pymssql>=2.3.0; extra == "sqlserver"
39
42
  Provides-Extra: oracle
40
43
  Requires-Dist: cx_Oracle>=8.3.0; extra == "oracle"
41
- Provides-Extra: informix
42
- Requires-Dist: informixdb>=2.2.0; extra == "informix"
44
+ Requires-Dist: oracledb>=3.0.0; extra == "oracle"
43
45
  Provides-Extra: supabase
44
46
  Requires-Dist: supabase>=2.0.0; extra == "supabase"
45
- Requires-Dist: postgrest-py>=0.16.0; extra == "supabase"
46
- Requires-Dist: gotrue-py>=2.0.0; extra == "supabase"
47
+ Requires-Dist: postgrest-py>=0.10.0; extra == "supabase"
48
+ Requires-Dist: gotrue-py>=1.0.0; extra == "supabase"
47
49
  Provides-Extra: sqlite
48
- Provides-Extra: qdrant
49
- Requires-Dist: qdrant-client>=1.7.0; extra == "qdrant"
50
50
  Provides-Extra: all
51
51
  Requires-Dist: psycopg2-binary>=2.9.0; extra == "all"
52
52
  Requires-Dist: mysql-connector-python>=8.0.0; extra == "all"
53
53
  Requires-Dist: mariadb>=1.1.0; extra == "all"
54
54
  Requires-Dist: pyodbc>=4.0.0; extra == "all"
55
+ Requires-Dist: pymssql>=2.3.0; extra == "all"
55
56
  Requires-Dist: cx_Oracle>=8.3.0; extra == "all"
56
- Requires-Dist: informixdb>=2.2.0; extra == "all"
57
+ Requires-Dist: oracledb>=3.0.0; extra == "all"
57
58
  Requires-Dist: supabase>=2.0.0; extra == "all"
58
- Requires-Dist: postgrest-py>=0.16.0; extra == "all"
59
- Requires-Dist: gotrue-py>=2.0.0; extra == "all"
60
- Requires-Dist: qdrant-client>=1.7.0; extra == "all"
61
59
  Provides-Extra: dev
62
60
  Requires-Dist: pytest>=7.0.0; extra == "dev"
63
61
  Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
@@ -65,6 +63,10 @@ Requires-Dist: black>=22.0.0; extra == "dev"
65
63
  Requires-Dist: flake8>=5.0.0; extra == "dev"
66
64
  Requires-Dist: mypy>=1.0.0; extra == "dev"
67
65
  Requires-Dist: pre-commit>=3.0.0; extra == "dev"
66
+ Requires-Dist: build>=1.0.0; extra == "dev"
67
+ Requires-Dist: twine>=4.0.0; extra == "dev"
68
+ Requires-Dist: psutil>=5.8.0; extra == "dev"
69
+ Requires-Dist: docker>=6.0.0; extra == "dev"
68
70
  Provides-Extra: test-postgresql
69
71
  Requires-Dist: pytest>=7.0.0; extra == "test-postgresql"
70
72
  Requires-Dist: psycopg2-binary>=2.9.0; extra == "test-postgresql"
@@ -1,13 +1,12 @@
1
1
  thoth_dbmanager/ThothDbManager.py,sha256=xyPhB6_3Ao3fGb4LjgCe-MvVI_C-9UXxeazra2dhmkI,17846
2
- thoth_dbmanager/__init__.py,sha256=Aew8n8l8wMPAf9h6xzzOr7mHBS1-ThTT8js1iHKrAvE,3367
2
+ thoth_dbmanager/__init__.py,sha256=zvs3kqKA99s9RJN6JVWTm-8asMeLc1NG5mnEpJTfzNg,3190
3
3
  thoth_dbmanager/documents.py,sha256=z-f7zo_CZHqoGM0qHT8-lSUx4NhnMNZTSajpoFtRxn4,5051
4
- thoth_dbmanager/dynamic_imports.py,sha256=q99hkh-D-Tnz15_pMJRa_e-gcrgOOYLr5QGhqRhXHgI,7939
4
+ thoth_dbmanager/dynamic_imports.py,sha256=nqMmxl2KeczAK-Bi5Fq92f3rPpPsTay-Bq553iHFbWI,7507
5
5
  thoth_dbmanager/adapters/__init__.py,sha256=tKIMlo9-gbH_cqnqZJ9yw1zQZKUzsV4hljDUNzcoZXg,486
6
6
  thoth_dbmanager/adapters/mariadb.py,sha256=LTsf0gORiwqZkd6WtKcOsYLHyDgysxdqNesBscbJwNs,5709
7
7
  thoth_dbmanager/adapters/mysql.py,sha256=TrFbxoMMNWbmUcgkKQYOIfsstmMUmuLlGB7R4ZFEIYI,5698
8
8
  thoth_dbmanager/adapters/oracle.py,sha256=JSrsgohjz5PbVc8nI188MZ4QGBQls4ieNmwWfAKA7II,21468
9
9
  thoth_dbmanager/adapters/postgresql.py,sha256=qxdlxOV7Nvn8U4Lhat50w87Z2S8AzBfmLfEwKfz7dis,17299
10
- thoth_dbmanager/adapters/qdrant.py,sha256=sL8ldUbAczENb01MmcrkJBKw0dieWPAG2aj97jznj3k,6557
11
10
  thoth_dbmanager/adapters/sqlite.py,sha256=RTDszgnAtkE14LKFeoe9lBHgsqXqkmDk6jDCTmVpnoM,14659
12
11
  thoth_dbmanager/adapters/sqlserver.py,sha256=V555kUH54Fb1Atow0BfvbSHmoSwGnrB_RJGn718VQSI,23880
13
12
  thoth_dbmanager/adapters/supabase.py,sha256=bl2C6LpOpykPF3vIbdNRDk43aXLADzSk0wQuwTcEHZA,10348
@@ -30,12 +29,11 @@ thoth_dbmanager/plugins/mariadb.py,sha256=ElYa4Rexwrofcjcs0UQKan8fZpbU6-n9zghYR9
30
29
  thoth_dbmanager/plugins/mysql.py,sha256=mbDsIDV2H_BWYANU4JHMsUkxLQICuGtjKTTPbig2Ngs,16546
31
30
  thoth_dbmanager/plugins/oracle.py,sha256=k4Yxvz5MdsH3Sfty9lxbhr8igSnHvGbGujz3bLpNcHo,5230
32
31
  thoth_dbmanager/plugins/postgresql.py,sha256=GF6k4K0t7-Y08THWJzS0eWJkrQ1e4GfoKIcanC0Z5Ng,5401
33
- thoth_dbmanager/plugins/qdrant.py,sha256=XWmc4K6ILiwvB1BhyJBBtA7ohRzQmk1MiZ1N7S-YF78,1199
34
32
  thoth_dbmanager/plugins/sqlite.py,sha256=esgJqDp2aSu4a32WnmynfFyY9JfW5W8VjNTkaA-hZhM,6402
35
33
  thoth_dbmanager/plugins/sqlserver.py,sha256=mMb3F5FmSWV02FZwj-Ult-2TjuyeVA4Fl1iME1dbgLU,5289
36
34
  thoth_dbmanager/plugins/supabase.py,sha256=mWlaGAdpywx4-pU4Ffpmn24ze8sg0sM5kc6bFDoeYRg,8645
37
- thoth_dbmanager-0.4.2.dist-info/licenses/LICENSE,sha256=81-BOzGgwtY1XdYfkwMQB87AkOGXI9OMq0kjNcZA4UE,1071
38
- thoth_dbmanager-0.4.2.dist-info/METADATA,sha256=iMFzfRMoh0BqUahLBLt2Pny1oA7L6F1tB7iF8W4D9no,12183
39
- thoth_dbmanager-0.4.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
40
- thoth_dbmanager-0.4.2.dist-info/top_level.txt,sha256=b9ttxm9RUc0KUCASEKRx6FqoREYJ1-KZWSpNuaM0uQ4,16
41
- thoth_dbmanager-0.4.2.dist-info/RECORD,,
35
+ thoth_dbmanager-0.4.3.dist-info/licenses/LICENSE,sha256=81-BOzGgwtY1XdYfkwMQB87AkOGXI9OMq0kjNcZA4UE,1071
36
+ thoth_dbmanager-0.4.3.dist-info/METADATA,sha256=5cjJw_2qjHE_Ke7gukqF0WrRQLOJGT9PSSn9SegJOoQ,12259
37
+ thoth_dbmanager-0.4.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
38
+ thoth_dbmanager-0.4.3.dist-info/top_level.txt,sha256=b9ttxm9RUc0KUCASEKRx6FqoREYJ1-KZWSpNuaM0uQ4,16
39
+ thoth_dbmanager-0.4.3.dist-info/RECORD,,
@@ -1,189 +0,0 @@
1
- """
2
- Qdrant adapter for Thoth SQL Database Manager.
3
- """
4
-
5
- from typing import Any, Dict, List, Optional, Union
6
- from ..core.interfaces import DbAdapter
7
-
8
-
9
- class QdrantAdapter(DbAdapter):
10
- """
11
- Qdrant vector database adapter implementation.
12
- """
13
-
14
- def __init__(self, **kwargs):
15
- """Initialize Qdrant adapter with connection parameters."""
16
- super().__init__()
17
- self.host = kwargs.get('host', 'localhost')
18
- self.port = kwargs.get('port', 6333)
19
- self.api_key = kwargs.get('api_key')
20
- self.collection_name = kwargs.get('collection_name', 'thoth_documents')
21
- self._client = None
22
-
23
- def connect(self) -> bool:
24
- """Establish connection to Qdrant."""
25
- try:
26
- # Import qdrant_client here to avoid dependency issues
27
- from qdrant_client import QdrantClient
28
-
29
- if self.api_key:
30
- self._client = QdrantClient(
31
- host=self.host,
32
- port=self.port,
33
- api_key=self.api_key
34
- )
35
- else:
36
- self._client = QdrantClient(
37
- host=self.host,
38
- port=self.port
39
- )
40
-
41
- # Test connection
42
- self._client.get_collections()
43
- return True
44
- except Exception as e:
45
- print(f"Failed to connect to Qdrant: {e}")
46
- return False
47
-
48
- def disconnect(self) -> None:
49
- """Disconnect from Qdrant."""
50
- if self._client:
51
- self._client.close()
52
- self._client = None
53
-
54
- def execute_query(self, query: str, params: Optional[Dict] = None,
55
- fetch: Union[str, int] = "all", timeout: int = 60) -> Any:
56
- """
57
- Execute a query against Qdrant.
58
- Note: Qdrant doesn't use SQL, so this adapts the interface.
59
- """
60
- if not self._client:
61
- raise RuntimeError("Not connected to Qdrant")
62
-
63
- # This is a placeholder - adapt based on your specific needs
64
- # Qdrant uses vector search, not SQL queries
65
- return {"message": "Qdrant uses vector search, not SQL queries"}
66
-
67
- def get_tables(self) -> List[Dict[str, str]]:
68
- """Get collections (equivalent to tables in Qdrant)."""
69
- if not self._client:
70
- raise RuntimeError("Not connected to Qdrant")
71
-
72
- try:
73
- collections = self._client.get_collections()
74
- return [
75
- {
76
- "table_name": collection.name,
77
- "table_type": "COLLECTION"
78
- }
79
- for collection in collections.collections
80
- ]
81
- except Exception as e:
82
- print(f"Error getting collections: {e}")
83
- return []
84
-
85
- def get_columns(self, table_name: str) -> List[Dict[str, Any]]:
86
- """Get collection info (equivalent to columns in Qdrant)."""
87
- if not self._client:
88
- raise RuntimeError("Not connected to Qdrant")
89
-
90
- try:
91
- collection_info = self._client.get_collection(table_name)
92
- return [
93
- {
94
- "column_name": "id",
95
- "data_type": "UUID",
96
- "is_nullable": False
97
- },
98
- {
99
- "column_name": "vector",
100
- "data_type": f"VECTOR({collection_info.config.params.vectors.size})",
101
- "is_nullable": False
102
- },
103
- {
104
- "column_name": "payload",
105
- "data_type": "JSON",
106
- "is_nullable": True
107
- }
108
- ]
109
- except Exception as e:
110
- print(f"Error getting collection info: {e}")
111
- return []
112
-
113
- def get_foreign_keys(self) -> List[Dict[str, str]]:
114
- """Get foreign keys (not applicable for Qdrant)."""
115
- return []
116
-
117
- def get_unique_values(self) -> Dict[str, Dict[str, List[str]]]:
118
- """Get unique values from collections."""
119
- if not self._client:
120
- raise RuntimeError("Not connected to Qdrant")
121
-
122
- # This is a simplified implementation
123
- # In practice, you'd need to scroll through points and extract unique payload values
124
- return {}
125
-
126
- def add_documentation(self, doc_type: str, content: Dict[str, Any]) -> str:
127
- """Add documentation to Qdrant collection."""
128
- if not self._client:
129
- raise RuntimeError("Not connected to Qdrant")
130
-
131
- try:
132
- from qdrant_client.models import PointStruct
133
- import uuid
134
-
135
- # Generate a unique ID for the document
136
- doc_id = str(uuid.uuid4())
137
-
138
- # Create a point with the documentation content
139
- point = PointStruct(
140
- id=doc_id,
141
- vector=content.get('vector', [0.0] * 384), # Default vector size
142
- payload={
143
- "doc_type": doc_type,
144
- "content": content
145
- }
146
- )
147
-
148
- # Upsert the point
149
- self._client.upsert(
150
- collection_name=self.collection_name,
151
- points=[point]
152
- )
153
-
154
- return doc_id
155
- except Exception as e:
156
- print(f"Error adding documentation: {e}")
157
- raise
158
-
159
- def delete_collection(self, collection_name: str) -> bool:
160
- """Delete a collection from Qdrant."""
161
- if not self._client:
162
- raise RuntimeError("Not connected to Qdrant")
163
-
164
- try:
165
- self._client.delete_collection(collection_name)
166
- return True
167
- except Exception as e:
168
- print(f"Error deleting collection: {e}")
169
- return False
170
-
171
- def create_collection(self, collection_name: str, vector_size: int = 384) -> bool:
172
- """Create a new collection in Qdrant."""
173
- if not self._client:
174
- raise RuntimeError("Not connected to Qdrant")
175
-
176
- try:
177
- from qdrant_client.models import VectorParams, Distance
178
-
179
- self._client.create_collection(
180
- collection_name=collection_name,
181
- vectors_config=VectorParams(
182
- size=vector_size,
183
- distance=Distance.COSINE
184
- )
185
- )
186
- return True
187
- except Exception as e:
188
- print(f"Error creating collection: {e}")
189
- return False
@@ -1,41 +0,0 @@
1
- """
2
- Qdrant plugin for Thoth SQL Database Manager.
3
- """
4
-
5
- from typing import List
6
- from ..core.interfaces import DbPlugin
7
- from ..adapters.qdrant import QdrantAdapter
8
-
9
-
10
- class QdrantPlugin(DbPlugin):
11
- """Plugin for Qdrant vector database."""
12
-
13
- plugin_name = "qdrant"
14
- plugin_version = "1.0.0"
15
- supported_db_types = ["qdrant"]
16
- required_dependencies = ["qdrant-client"]
17
-
18
- def create_adapter(self, **kwargs) -> QdrantAdapter:
19
- """Create and return a QdrantAdapter instance."""
20
- return QdrantAdapter(**kwargs)
21
-
22
- def validate_connection_params(self, **kwargs) -> bool:
23
- """Validate Qdrant connection parameters."""
24
- required_params = ['host']
25
-
26
- for param in required_params:
27
- if param not in kwargs:
28
- return False
29
-
30
- # Validate host format
31
- host = kwargs.get('host')
32
- if not isinstance(host, str) or not host.strip():
33
- return False
34
-
35
- # Validate port if provided
36
- port = kwargs.get('port')
37
- if port is not None:
38
- if not isinstance(port, int) or port <= 0 or port > 65535:
39
- return False
40
-
41
- return True