cinchdb 0.1.15__py3-none-any.whl → 0.1.17__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.
- cinchdb/config.py +4 -13
- cinchdb/core/connection.py +2 -1
- cinchdb/core/database.py +17 -5
- cinchdb/core/maintenance_utils.py +43 -0
- cinchdb/core/path_utils.py +19 -21
- cinchdb/core/tenant_activation.py +216 -0
- cinchdb/infrastructure/metadata_db.py +96 -3
- cinchdb/managers/change_applier.py +21 -22
- cinchdb/managers/column.py +1 -1
- cinchdb/managers/data.py +1 -1
- cinchdb/managers/table.py +1 -1
- cinchdb/managers/tenant.py +1 -1
- cinchdb/managers/view.py +1 -1
- cinchdb/plugins/__init__.py +7 -8
- cinchdb/plugins/base.py +55 -74
- cinchdb/plugins/decorators.py +36 -32
- cinchdb/plugins/manager.py +103 -71
- {cinchdb-0.1.15.dist-info → cinchdb-0.1.17.dist-info}/METADATA +5 -1
- {cinchdb-0.1.15.dist-info → cinchdb-0.1.17.dist-info}/RECORD +22 -21
- cinchdb/core/maintenance.py +0 -73
- {cinchdb-0.1.15.dist-info → cinchdb-0.1.17.dist-info}/WHEEL +0 -0
- {cinchdb-0.1.15.dist-info → cinchdb-0.1.17.dist-info}/entry_points.txt +0 -0
- {cinchdb-0.1.15.dist-info → cinchdb-0.1.17.dist-info}/licenses/LICENSE +0 -0
cinchdb/plugins/__init__.py
CHANGED
@@ -1,17 +1,16 @@
|
|
1
1
|
"""
|
2
|
-
|
2
|
+
Simple Plugin System for CinchDB
|
3
3
|
|
4
|
-
|
4
|
+
Easy-to-use plugin architecture for CinchDB.
|
5
5
|
"""
|
6
6
|
|
7
|
-
from .base import
|
7
|
+
from .base import Plugin
|
8
8
|
from .manager import PluginManager
|
9
|
-
from .decorators import
|
9
|
+
from .decorators import database_method, auto_extend
|
10
10
|
|
11
11
|
__all__ = [
|
12
|
-
"
|
13
|
-
"PluginHook",
|
12
|
+
"Plugin",
|
14
13
|
"PluginManager",
|
15
|
-
"
|
16
|
-
"
|
14
|
+
"database_method",
|
15
|
+
"auto_extend",
|
17
16
|
]
|
cinchdb/plugins/base.py
CHANGED
@@ -1,90 +1,73 @@
|
|
1
1
|
"""
|
2
|
-
|
2
|
+
Simple base class for CinchDB plugins.
|
3
3
|
"""
|
4
4
|
|
5
|
-
from
|
6
|
-
from typing import Any, Dict, List, Callable
|
7
|
-
from enum import Enum
|
5
|
+
from typing import Any, Dict, Optional
|
8
6
|
|
9
7
|
|
10
|
-
class
|
11
|
-
"""
|
12
|
-
# Database lifecycle hooks
|
13
|
-
DATABASE_INIT = "database_init"
|
14
|
-
DATABASE_CONNECT = "database_connect"
|
15
|
-
DATABASE_DISCONNECT = "database_disconnect"
|
8
|
+
class Plugin:
|
9
|
+
"""Simple base class for CinchDB plugins."""
|
16
10
|
|
17
|
-
#
|
18
|
-
|
19
|
-
|
20
|
-
|
11
|
+
# Plugin metadata - override in subclass
|
12
|
+
name: str = "unnamed_plugin"
|
13
|
+
version: str = "1.0.0"
|
14
|
+
description: str = ""
|
21
15
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
# Tenant hooks
|
28
|
-
TENANT_CREATE = "tenant_create"
|
29
|
-
TENANT_DROP = "tenant_drop"
|
30
|
-
|
31
|
-
# Branch hooks
|
32
|
-
BRANCH_CREATE = "branch_create"
|
33
|
-
BRANCH_SWITCH = "branch_switch"
|
34
|
-
BRANCH_MERGE = "branch_merge"
|
35
|
-
|
36
|
-
# CLI hooks
|
37
|
-
CLI_COMMAND_BEFORE = "cli_command_before"
|
38
|
-
CLI_COMMAND_AFTER = "cli_command_after"
|
39
|
-
|
40
|
-
|
41
|
-
class BasePlugin(ABC):
|
42
|
-
"""Base class for all CinchDB plugins."""
|
43
|
-
|
44
|
-
def __init__(self):
|
45
|
-
self.name = self.__class__.__name__
|
46
|
-
self.version = "1.0.0"
|
47
|
-
self.description = ""
|
48
|
-
self._hooks: Dict[PluginHook, List[Callable]] = {}
|
49
|
-
self._methods: Dict[str, Callable] = {}
|
16
|
+
def extend_database(self, db) -> None:
|
17
|
+
"""Add methods or modify the database instance.
|
18
|
+
|
19
|
+
Override this method to add custom methods to database instances:
|
50
20
|
|
51
|
-
|
52
|
-
|
53
|
-
|
21
|
+
Example:
|
22
|
+
def extend_database(self, db):
|
23
|
+
db.my_custom_method = self.my_custom_method
|
24
|
+
"""
|
54
25
|
pass
|
55
26
|
|
56
|
-
def
|
57
|
-
"""
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
27
|
+
def before_query(self, sql: str, params: Optional[tuple] = None) -> tuple:
|
28
|
+
"""Called before executing any SQL query.
|
29
|
+
|
30
|
+
Args:
|
31
|
+
sql: The SQL statement to be executed
|
32
|
+
params: Parameters for the SQL statement
|
33
|
+
|
34
|
+
Returns:
|
35
|
+
Tuple of (modified_sql, modified_params)
|
36
|
+
"""
|
37
|
+
return sql, params
|
65
38
|
|
66
|
-
def
|
67
|
-
"""
|
68
|
-
|
39
|
+
def after_query(self, sql: str, params: Optional[tuple], result: Any) -> Any:
|
40
|
+
"""Called after executing any SQL query.
|
41
|
+
|
42
|
+
Args:
|
43
|
+
sql: The SQL statement that was executed
|
44
|
+
params: Parameters that were used
|
45
|
+
result: The query result
|
46
|
+
|
47
|
+
Returns:
|
48
|
+
Modified result (or original result)
|
49
|
+
"""
|
50
|
+
return result
|
69
51
|
|
70
|
-
def
|
71
|
-
"""
|
72
|
-
|
52
|
+
def on_connect(self, db_path: str, connection) -> None:
|
53
|
+
"""Called when a database connection is established.
|
54
|
+
|
55
|
+
Args:
|
56
|
+
db_path: Path to the database file
|
57
|
+
connection: SQLite connection object
|
58
|
+
"""
|
59
|
+
pass
|
73
60
|
|
74
|
-
def
|
75
|
-
"""
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
except Exception as e:
|
82
|
-
# Log error but don't break other plugins
|
83
|
-
print(f"Plugin {self.name} hook {hook} failed: {e}")
|
84
|
-
return results
|
61
|
+
def on_disconnect(self, db_path: str) -> None:
|
62
|
+
"""Called when a database connection is closed.
|
63
|
+
|
64
|
+
Args:
|
65
|
+
db_path: Path to the database file
|
66
|
+
"""
|
67
|
+
pass
|
85
68
|
|
86
69
|
def cleanup(self) -> None:
|
87
|
-
"""
|
70
|
+
"""Called when plugin is being unloaded."""
|
88
71
|
pass
|
89
72
|
|
90
73
|
@property
|
@@ -94,6 +77,4 @@ class BasePlugin(ABC):
|
|
94
77
|
"name": self.name,
|
95
78
|
"version": self.version,
|
96
79
|
"description": self.description,
|
97
|
-
"hooks": list(self._hooks.keys()),
|
98
|
-
"methods": list(self._methods.keys()),
|
99
80
|
}
|
cinchdb/plugins/decorators.py
CHANGED
@@ -1,45 +1,49 @@
|
|
1
1
|
"""
|
2
|
-
|
2
|
+
Simple decorators for plugin development.
|
3
3
|
"""
|
4
4
|
|
5
5
|
from typing import Callable
|
6
6
|
|
7
|
-
from .base import PluginHook
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
def plugin_method(method_name: str):
|
19
|
-
"""Decorator to register a method to be added to CinchDB instances."""
|
8
|
+
def database_method(method_name: str):
|
9
|
+
"""Decorator to mark a method for database extension.
|
10
|
+
|
11
|
+
Usage:
|
12
|
+
class Plugin:
|
13
|
+
@database_method("my_method")
|
14
|
+
def my_custom_method(self, db):
|
15
|
+
return "Hello from plugin!"
|
16
|
+
"""
|
20
17
|
def decorator(func: Callable) -> Callable:
|
21
|
-
func.
|
18
|
+
func._database_method_name = method_name
|
22
19
|
return func
|
23
20
|
return decorator
|
24
21
|
|
25
22
|
|
26
|
-
|
27
|
-
"""
|
23
|
+
def auto_extend(plugin_class):
|
24
|
+
"""Class decorator to automatically extend databases with decorated methods.
|
25
|
+
|
26
|
+
Usage:
|
27
|
+
@auto_extend
|
28
|
+
class Plugin:
|
29
|
+
@database_method("custom_query")
|
30
|
+
def custom_query_method(self, db, query):
|
31
|
+
# Method will be added to db instances as db.custom_query()
|
32
|
+
return "Custom result"
|
33
|
+
"""
|
34
|
+
original_extend = getattr(plugin_class, 'extend_database', None)
|
28
35
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
36
|
+
def new_extend_database(self, db):
|
37
|
+
# Call original extend_database if it exists
|
38
|
+
if original_extend:
|
39
|
+
original_extend(self, db)
|
40
|
+
|
41
|
+
# Auto-add decorated methods
|
42
|
+
for attr_name in dir(self):
|
43
|
+
attr = getattr(self, attr_name)
|
44
|
+
if callable(attr) and hasattr(attr, '_database_method_name'):
|
45
|
+
method_name = attr._database_method_name
|
46
|
+
setattr(db, method_name, lambda *args, **kwargs: attr(db, *args, **kwargs))
|
37
47
|
|
38
|
-
|
39
|
-
|
40
|
-
"""Collect and register plugin methods from a plugin instance."""
|
41
|
-
for attr_name in dir(plugin_instance):
|
42
|
-
attr = getattr(plugin_instance, attr_name)
|
43
|
-
if callable(attr) and hasattr(attr, '_plugin_method_name'):
|
44
|
-
method_name = attr._plugin_method_name
|
45
|
-
plugin_instance.register_method(method_name, attr)
|
48
|
+
plugin_class.extend_database = new_extend_database
|
49
|
+
return plugin_class
|
cinchdb/plugins/manager.py
CHANGED
@@ -1,43 +1,31 @@
|
|
1
1
|
"""
|
2
|
-
|
2
|
+
Simple plugin manager for CinchDB.
|
3
3
|
"""
|
4
4
|
|
5
5
|
import importlib
|
6
6
|
import importlib.util
|
7
7
|
import logging
|
8
8
|
from pathlib import Path
|
9
|
-
from typing import Dict, List, Optional, Any
|
10
|
-
try:
|
11
|
-
from importlib.metadata import entry_points
|
12
|
-
except ImportError:
|
13
|
-
# Fallback for Python < 3.8
|
14
|
-
from importlib_metadata import entry_points
|
9
|
+
from typing import Dict, List, Optional, Any, Union
|
15
10
|
|
16
|
-
from .base import
|
11
|
+
from .base import Plugin
|
17
12
|
|
18
13
|
logger = logging.getLogger(__name__)
|
19
14
|
|
20
15
|
|
21
16
|
class PluginManager:
|
22
|
-
"""
|
17
|
+
"""Simple plugin manager for CinchDB."""
|
23
18
|
|
24
19
|
def __init__(self):
|
25
|
-
self.plugins: Dict[str,
|
26
|
-
self.
|
20
|
+
self.plugins: Dict[str, Plugin] = {}
|
21
|
+
self._database_instances: List[Any] = []
|
27
22
|
|
28
|
-
def
|
29
|
-
"""
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
try:
|
35
|
-
plugin.initialize(instance)
|
36
|
-
except Exception as e:
|
37
|
-
logger.error(f"Failed to initialize plugin {plugin.name}: {e}")
|
38
|
-
|
39
|
-
def register_plugin(self, plugin: BasePlugin) -> None:
|
40
|
-
"""Register a plugin instance."""
|
23
|
+
def register_plugin(self, plugin: Union[Plugin, type]) -> None:
|
24
|
+
"""Register a plugin instance or class."""
|
25
|
+
# If it's a class, instantiate it
|
26
|
+
if isinstance(plugin, type):
|
27
|
+
plugin = plugin()
|
28
|
+
|
41
29
|
plugin_name = plugin.name
|
42
30
|
|
43
31
|
if plugin_name in self.plugins:
|
@@ -45,13 +33,12 @@ class PluginManager:
|
|
45
33
|
|
46
34
|
self.plugins[plugin_name] = plugin
|
47
35
|
|
48
|
-
#
|
49
|
-
|
36
|
+
# Apply to existing database instances
|
37
|
+
for db_instance in self._database_instances:
|
50
38
|
try:
|
51
|
-
plugin.
|
52
|
-
self._apply_plugin_methods(plugin)
|
39
|
+
plugin.extend_database(db_instance)
|
53
40
|
except Exception as e:
|
54
|
-
logger.error(f"Failed to
|
41
|
+
logger.error(f"Failed to extend database with plugin {plugin_name}: {e}")
|
55
42
|
|
56
43
|
logger.info(f"Plugin {plugin_name} registered successfully")
|
57
44
|
|
@@ -72,18 +59,24 @@ class PluginManager:
|
|
72
59
|
try:
|
73
60
|
module = importlib.import_module(module_name)
|
74
61
|
|
75
|
-
# Look for
|
62
|
+
# Look for Plugin class first
|
63
|
+
if hasattr(module, 'Plugin'):
|
64
|
+
plugin_instance = module.Plugin()
|
65
|
+
self.register_plugin(plugin_instance)
|
66
|
+
return
|
67
|
+
|
68
|
+
# Fallback: look for any Plugin subclass
|
76
69
|
for attr_name in dir(module):
|
77
70
|
attr = getattr(module, attr_name)
|
78
71
|
if (isinstance(attr, type) and
|
79
|
-
issubclass(attr,
|
80
|
-
attr !=
|
72
|
+
issubclass(attr, Plugin) and
|
73
|
+
attr != Plugin):
|
81
74
|
|
82
75
|
plugin_instance = attr()
|
83
76
|
self.register_plugin(plugin_instance)
|
84
77
|
return
|
85
78
|
|
86
|
-
logger.warning(f"No
|
79
|
+
logger.warning(f"No Plugin class found in module {module_name}")
|
87
80
|
|
88
81
|
except ImportError as e:
|
89
82
|
logger.error(f"Failed to import plugin module {module_name}: {e}")
|
@@ -98,69 +91,108 @@ class PluginManager:
|
|
98
91
|
module = importlib.util.module_from_spec(spec)
|
99
92
|
spec.loader.exec_module(module)
|
100
93
|
|
101
|
-
# Look for
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
attr != BasePlugin):
|
107
|
-
|
108
|
-
plugin_instance = attr()
|
109
|
-
self.register_plugin(plugin_instance)
|
110
|
-
return
|
94
|
+
# Look for Plugin class
|
95
|
+
if hasattr(module, 'Plugin'):
|
96
|
+
plugin_instance = module.Plugin()
|
97
|
+
self.register_plugin(plugin_instance)
|
98
|
+
return
|
111
99
|
|
112
|
-
logger.warning(f"No
|
100
|
+
logger.warning(f"No Plugin class found in file {file_path}")
|
113
101
|
|
114
102
|
except Exception as e:
|
115
103
|
logger.error(f"Failed to load plugin from file {file_path}: {e}")
|
116
104
|
|
105
|
+
def load_plugins_from_directory(self, plugins_dir: Path) -> None:
|
106
|
+
"""Load all plugins from a directory."""
|
107
|
+
if not plugins_dir.exists():
|
108
|
+
logger.info(f"Plugins directory {plugins_dir} does not exist")
|
109
|
+
return
|
110
|
+
|
111
|
+
for plugin_file in plugins_dir.glob("*.py"):
|
112
|
+
if plugin_file.name == "__init__.py":
|
113
|
+
continue
|
114
|
+
self.load_plugin_from_file(plugin_file)
|
115
|
+
|
117
116
|
def discover_plugins(self) -> None:
|
118
|
-
"""Discover plugins using entry points."""
|
117
|
+
"""Discover plugins using entry points and plugins directory."""
|
118
|
+
# Try entry points for installed plugins
|
119
119
|
try:
|
120
|
+
try:
|
121
|
+
from importlib.metadata import entry_points
|
122
|
+
except ImportError:
|
123
|
+
from importlib_metadata import entry_points
|
124
|
+
|
120
125
|
eps = entry_points()
|
121
|
-
# Handle both old and new entry_points API
|
122
126
|
if hasattr(eps, 'select'):
|
123
|
-
# New API (Python 3.10+)
|
124
127
|
plugin_eps = eps.select(group='cinchdb.plugins')
|
125
128
|
else:
|
126
|
-
# Old API
|
127
129
|
plugin_eps = eps.get('cinchdb.plugins', [])
|
128
130
|
|
129
131
|
for entry_point in plugin_eps:
|
130
132
|
try:
|
131
133
|
plugin_class = entry_point.load()
|
132
|
-
|
133
|
-
plugin_instance = plugin_class()
|
134
|
-
self.register_plugin(plugin_instance)
|
134
|
+
self.register_plugin(plugin_class)
|
135
135
|
except Exception as e:
|
136
136
|
logger.error(f"Failed to load plugin {entry_point.name}: {e}")
|
137
137
|
except Exception as e:
|
138
|
-
logger.
|
138
|
+
logger.debug(f"Entry points not available: {e}")
|
139
|
+
|
140
|
+
# Also check for local plugins directory
|
141
|
+
plugins_dir = Path("plugins")
|
142
|
+
if plugins_dir.exists():
|
143
|
+
self.load_plugins_from_directory(plugins_dir)
|
139
144
|
|
140
|
-
def
|
141
|
-
"""
|
142
|
-
|
143
|
-
return
|
144
|
-
|
145
|
-
for method_name, method in plugin.get_methods().items():
|
146
|
-
# Bind method to the instance
|
147
|
-
bound_method = method.__get__(self._cinchdb_instance, type(self._cinchdb_instance))
|
148
|
-
setattr(self._cinchdb_instance, method_name, bound_method)
|
149
|
-
|
150
|
-
def call_hook(self, hook: PluginHook, *args, **kwargs) -> List[Any]:
|
151
|
-
"""Call all plugin hooks for a specific event."""
|
152
|
-
results = []
|
145
|
+
def register_database(self, db_instance) -> None:
|
146
|
+
"""Register a database instance with all plugins."""
|
147
|
+
self._database_instances.append(db_instance)
|
153
148
|
|
149
|
+
# Apply all plugins to this database instance
|
154
150
|
for plugin in self.plugins.values():
|
155
151
|
try:
|
156
|
-
|
157
|
-
results.extend(plugin_results)
|
152
|
+
plugin.extend_database(db_instance)
|
158
153
|
except Exception as e:
|
159
|
-
logger.error(f"
|
160
|
-
|
161
|
-
|
154
|
+
logger.error(f"Failed to extend database with plugin {plugin.name}: {e}")
|
155
|
+
|
156
|
+
def unregister_database(self, db_instance) -> None:
|
157
|
+
"""Unregister a database instance."""
|
158
|
+
if db_instance in self._database_instances:
|
159
|
+
self._database_instances.remove(db_instance)
|
160
|
+
|
161
|
+
def before_query(self, sql: str, params: Optional[tuple] = None) -> tuple:
|
162
|
+
"""Call before_query on all plugins."""
|
163
|
+
for plugin in self.plugins.values():
|
164
|
+
try:
|
165
|
+
sql, params = plugin.before_query(sql, params)
|
166
|
+
except Exception as e:
|
167
|
+
logger.error(f"Plugin {plugin.name} before_query failed: {e}")
|
168
|
+
return sql, params
|
169
|
+
|
170
|
+
def after_query(self, sql: str, params: Optional[tuple], result: Any) -> Any:
|
171
|
+
"""Call after_query on all plugins."""
|
172
|
+
for plugin in self.plugins.values():
|
173
|
+
try:
|
174
|
+
result = plugin.after_query(sql, params, result)
|
175
|
+
except Exception as e:
|
176
|
+
logger.error(f"Plugin {plugin.name} after_query failed: {e}")
|
177
|
+
return result
|
178
|
+
|
179
|
+
def on_connect(self, db_path: str, connection) -> None:
|
180
|
+
"""Call on_connect on all plugins."""
|
181
|
+
for plugin in self.plugins.values():
|
182
|
+
try:
|
183
|
+
plugin.on_connect(db_path, connection)
|
184
|
+
except Exception as e:
|
185
|
+
logger.error(f"Plugin {plugin.name} on_connect failed: {e}")
|
186
|
+
|
187
|
+
def on_disconnect(self, db_path: str) -> None:
|
188
|
+
"""Call on_disconnect on all plugins."""
|
189
|
+
for plugin in self.plugins.values():
|
190
|
+
try:
|
191
|
+
plugin.on_disconnect(db_path)
|
192
|
+
except Exception as e:
|
193
|
+
logger.error(f"Plugin {plugin.name} on_disconnect failed: {e}")
|
162
194
|
|
163
|
-
def get_plugin(self, name: str) -> Optional[
|
195
|
+
def get_plugin(self, name: str) -> Optional[Plugin]:
|
164
196
|
"""Get a plugin by name."""
|
165
197
|
return self.plugins.get(name)
|
166
198
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: cinchdb
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.17
|
4
4
|
Summary: A Git-like SQLite database management system with branching and multi-tenancy
|
5
5
|
Project-URL: Homepage, https://github.com/russellromney/cinchdb
|
6
6
|
Project-URL: Documentation, https://russellromney.github.io/cinchdb
|
@@ -31,6 +31,10 @@ Description-Content-Type: text/markdown
|
|
31
31
|
|
32
32
|
**Git-like SQLite database management with branching and multi-tenancy**
|
33
33
|
|
34
|
+
[](https://badge.fury.io/py/cinchdb)
|
35
|
+
[](https://www.python.org/downloads/)
|
36
|
+
|
37
|
+
|
34
38
|
NOTE: CinchDB is in early alpha. This is project to test out an idea. Do not use this in production.
|
35
39
|
|
36
40
|
CinchDB is for projects that need fast queries, isolated data per-tenant [or even per-user](https://turso.tech/blog/give-each-of-your-users-their-own-sqlite-database-b74445f4), and a branchable database that makes it easy to merge changes between branches.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
cinchdb/__init__.py,sha256=qnBv5kpL4GJjNbQkp-nBcOgrsskwDr7WTnUPCGwg3zs,603
|
2
2
|
cinchdb/__main__.py,sha256=OpkDqn9zkTZhhYgvv_grswWLAHKbmxs4M-8C6Z5HfWY,85
|
3
|
-
cinchdb/config.py,sha256=
|
3
|
+
cinchdb/config.py,sha256=hYcT91mMcV0NEvJMAgtJkihfaxHJ97qqGOetnlaNZjI,4889
|
4
4
|
cinchdb/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
5
|
cinchdb/cli/main.py,sha256=x2bF19e0lY_0V3_tx6CO9M3AaFlII75bAdWaOg0ne_A,4587
|
6
6
|
cinchdb/cli/utils.py,sha256=InAGuo7uENvsfBQu6EKIbbiNXqmvg-BecLmhLvOz5qg,6485
|
@@ -19,27 +19,28 @@ cinchdb/cli/commands/view.py,sha256=ZmS1IW7idzzHAXmgVyY3C4IQRo7toHb6fHNFY_tQJjI,
|
|
19
19
|
cinchdb/cli/handlers/__init__.py,sha256=f2f-Cc96rSBLbVsiIbf-b4pZCKZoHfmhNEvnZ0OurRs,131
|
20
20
|
cinchdb/cli/handlers/codegen_handler.py,sha256=i5we_AbiUW3zfO6pIKWxvtO8OvOqz3H__4xPmTLEuQM,6524
|
21
21
|
cinchdb/core/__init__.py,sha256=iNlT0iO9cM0HLoYwzBavUBoXRh1Tcnz1l_vfbwVxK_Q,246
|
22
|
-
cinchdb/core/connection.py,sha256=
|
23
|
-
cinchdb/core/database.py,sha256=
|
22
|
+
cinchdb/core/connection.py,sha256=_Yt0ki4IbNQJ6lwvloDZ58CCA7SBJwHaB1SU1Yy-rpI,5186
|
23
|
+
cinchdb/core/database.py,sha256=4jZwJE4UMpPv77wyQbn0FaTB1MMJv0BHl3umLJzO0q4,33680
|
24
24
|
cinchdb/core/initializer.py,sha256=CAzq947plgEF-KXV-PD-ycJ8Zy4zXCQqCrmQ0-pV0i4,14474
|
25
|
-
cinchdb/core/
|
26
|
-
cinchdb/core/path_utils.py,sha256=
|
25
|
+
cinchdb/core/maintenance_utils.py,sha256=FYEZK2FybghuGxo37QeTd1DLsuId0p3rKGIlpPTFJZw,1852
|
26
|
+
cinchdb/core/path_utils.py,sha256=xcclmafzETDtivr-Qoi2gP6xZh5C49EoR6duc6YY4gw,4698
|
27
|
+
cinchdb/core/tenant_activation.py,sha256=56FaxgZJ2IGYcF6arJfr0gc63wBpyQ4E9ssJDghlPmA,7290
|
27
28
|
cinchdb/infrastructure/metadata_connection_pool.py,sha256=PeVsyuZKdI3Y7_InWMOn9HcSNhE0MVcP7I7wAj9esmI,4859
|
28
|
-
cinchdb/infrastructure/metadata_db.py,sha256=
|
29
|
+
cinchdb/infrastructure/metadata_db.py,sha256=gP-UORs2Ec33p9_64L2xPTZ51PQDYrmfHlofJfQUM2M,19933
|
29
30
|
cinchdb/managers/__init__.py,sha256=ic61ZUdsg-muq0ETYO6fuZRQWF4j7l920PthTkt2QrE,808
|
30
31
|
cinchdb/managers/branch.py,sha256=bEzl83mN9a9KW8AHC_w50QHtVdVPHUzEY-j9T2EAyR4,9445
|
31
|
-
cinchdb/managers/change_applier.py,sha256=
|
32
|
+
cinchdb/managers/change_applier.py,sha256=JWfK-B42fCc5ANGvIIogzF5SeSCkSO16y67RCNsPu08,15602
|
32
33
|
cinchdb/managers/change_comparator.py,sha256=08pwybpSt36cFwhZRSIkHynvFMUaLKEVwa8Ajn_R9yQ,6862
|
33
34
|
cinchdb/managers/change_tracker.py,sha256=U93BPnuGv8xSaO5qr_y5Q8ppKrVXygozdp5zUvLUqwg,5054
|
34
35
|
cinchdb/managers/codegen.py,sha256=1CfIwjgHnNDdjrq4SzQ9VE7DFgnWfk7RtpupBFUTqxk,21804
|
35
|
-
cinchdb/managers/column.py,sha256=
|
36
|
-
cinchdb/managers/data.py,sha256=
|
36
|
+
cinchdb/managers/column.py,sha256=JyBIu372ExMppvqklhtVAc-eZzikIqedB_8uoJtFu-Y,20755
|
37
|
+
cinchdb/managers/data.py,sha256=zAtVLR4GaiY7ijIbWAXC7JN701KtX2zgcg4ZUlGpyts,23176
|
37
38
|
cinchdb/managers/index.py,sha256=55_fafWd4lSju4Nw32B_1Fi1c2DPHxOgAhdsqcTR404,10343
|
38
39
|
cinchdb/managers/merge_manager.py,sha256=R8S2hLkLJg4hLDpeJTzjVkduZgqPOjXtYgOSJhTXXrE,15690
|
39
40
|
cinchdb/managers/query.py,sha256=hgNHda20PWMijbVRnjTKFGFBvBthep2fulkJEK1gkqU,8562
|
40
|
-
cinchdb/managers/table.py,sha256=
|
41
|
-
cinchdb/managers/tenant.py,sha256=
|
42
|
-
cinchdb/managers/view.py,sha256=
|
41
|
+
cinchdb/managers/table.py,sha256=mv5p5WCXy1VXKRyaAZquZofdKR0gEth7It82j6p7j0E,15252
|
42
|
+
cinchdb/managers/tenant.py,sha256=gk3Nn68n4avl2mcMcPB5HuKOsOPsMhnvgxHyK8Uwuik,31634
|
43
|
+
cinchdb/managers/view.py,sha256=uXcRnZxF4TCcycbwH7cTje_QU3NO47fmOzJULQHHeVI,7815
|
43
44
|
cinchdb/models/__init__.py,sha256=cZ-ailJ6qu44Iap5Rq555iB-_w9ufXVDBH3rDH-ojk0,622
|
44
45
|
cinchdb/models/base.py,sha256=7j4rlFTP5K9ZuF8vxwC7lMFEaL7O90NJ47Ig5i7ubcw,1320
|
45
46
|
cinchdb/models/branch.py,sha256=gRgLpRFkMC3fxf9ZigVOkS6wdkBERWqlLk0_gOYjqNk,1180
|
@@ -49,15 +50,15 @@ cinchdb/models/project.py,sha256=6GMXUZUsEIebqQJgRXIthWzpWKuNNmJ3drgI1vFDrMo,644
|
|
49
50
|
cinchdb/models/table.py,sha256=nxf__C_YvDOW-6-vdOQ4xKmwWPZwgEdYw1I4mO_C44o,2955
|
50
51
|
cinchdb/models/tenant.py,sha256=wTvGoO_tQdtueVB0faZFVIhSjh_DNJzywflrUpngWTM,1072
|
51
52
|
cinchdb/models/view.py,sha256=q6j-jYzFJuhRJO87rKt6Uv8hOizHQx8xwoPKoH6XnNY,530
|
52
|
-
cinchdb/plugins/__init__.py,sha256=
|
53
|
-
cinchdb/plugins/base.py,sha256=
|
54
|
-
cinchdb/plugins/decorators.py,sha256=
|
55
|
-
cinchdb/plugins/manager.py,sha256=
|
53
|
+
cinchdb/plugins/__init__.py,sha256=jZtwwY0t_dhFKz-uR2V3KWBmAGknWnoLkiDWSzULdc8,293
|
54
|
+
cinchdb/plugins/base.py,sha256=Upfgw78eOhTAfQd9FwcgGZLIT0zefPDgD4LlpzXgOBg,2232
|
55
|
+
cinchdb/plugins/decorators.py,sha256=vY9Zh5nhGiSM6kO55srGHSP32gnyMq77UtJSO3lULq4,1550
|
56
|
+
cinchdb/plugins/manager.py,sha256=vetdsiwTkadp3BrhjUIp2vkmCpqfuXqy-3yQBdlxruQ,8143
|
56
57
|
cinchdb/utils/__init__.py,sha256=yQQhEjndDiB2SUJybUmp9dvEOQKiR-GySe-WiCius5E,490
|
57
58
|
cinchdb/utils/name_validator.py,sha256=dyGX5bjlTFRA9EGrWRQKp6kR__HSV04hLV5VueJs4IQ,4027
|
58
59
|
cinchdb/utils/sql_validator.py,sha256=aWOGlPX0gBkuR6R1EBP2stbP4PHZuI6FUBi2Ljx7JUI,5815
|
59
|
-
cinchdb-0.1.
|
60
|
-
cinchdb-0.1.
|
61
|
-
cinchdb-0.1.
|
62
|
-
cinchdb-0.1.
|
63
|
-
cinchdb-0.1.
|
60
|
+
cinchdb-0.1.17.dist-info/METADATA,sha256=cTeJ-n2bL2mqALrAZt9yPES_Xt6uC_suDB8HJmNTFTo,6155
|
61
|
+
cinchdb-0.1.17.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
62
|
+
cinchdb-0.1.17.dist-info/entry_points.txt,sha256=VBOIzvnGbkKudMCCmNORS3885QSyjZUVKJQ-Syqa62w,47
|
63
|
+
cinchdb-0.1.17.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
64
|
+
cinchdb-0.1.17.dist-info/RECORD,,
|