opendbs 1.0.0__tar.gz
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.
- opendbs-1.0.0/PKG-INFO +17 -0
- opendbs-1.0.0/README.md +54 -0
- opendbs-1.0.0/opendbs/__init__.py +3 -0
- opendbs-1.0.0/opendbs/client.py +142 -0
- opendbs-1.0.0/opendbs.egg-info/PKG-INFO +17 -0
- opendbs-1.0.0/opendbs.egg-info/SOURCES.txt +9 -0
- opendbs-1.0.0/opendbs.egg-info/dependency_links.txt +1 -0
- opendbs-1.0.0/opendbs.egg-info/requires.txt +1 -0
- opendbs-1.0.0/opendbs.egg-info/top_level.txt +1 -0
- opendbs-1.0.0/setup.cfg +4 -0
- opendbs-1.0.0/setup.py +19 -0
opendbs-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: opendbs
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Official Python Client for OpenDBS
|
|
5
|
+
Author: OpenDBS Team
|
|
6
|
+
Author-email: support@opendbs.in
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Requires-Python: >=3.6
|
|
11
|
+
Requires-Dist: requests>=2.25.0
|
|
12
|
+
Dynamic: author
|
|
13
|
+
Dynamic: author-email
|
|
14
|
+
Dynamic: classifier
|
|
15
|
+
Dynamic: requires-dist
|
|
16
|
+
Dynamic: requires-python
|
|
17
|
+
Dynamic: summary
|
opendbs-1.0.0/README.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# OpenDBS Python Client
|
|
2
|
+
|
|
3
|
+
Official Python client library for OpenDBS.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install opendbs
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
### Initialization
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
from opendbs import OpenDBS
|
|
17
|
+
|
|
18
|
+
# Initialize
|
|
19
|
+
client = OpenDBS("http://localhost:4402")
|
|
20
|
+
|
|
21
|
+
# Login
|
|
22
|
+
client.login("admin", "admin123")
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Basic Operations
|
|
26
|
+
|
|
27
|
+
```python
|
|
28
|
+
# Create Database
|
|
29
|
+
client.create_database("shop")
|
|
30
|
+
|
|
31
|
+
# Create Racks
|
|
32
|
+
client.create_rack("shop", "products", type="sql", schema={
|
|
33
|
+
"name": {"type": "string"},
|
|
34
|
+
"price": {"type": "number"}
|
|
35
|
+
})
|
|
36
|
+
client.create_rack("shop", "users", type="nosql")
|
|
37
|
+
|
|
38
|
+
# Insert Data
|
|
39
|
+
client.insert("shop", "users", {"name": "Alice"})
|
|
40
|
+
client.sql("shop", "INSERT INTO products (name, price) VALUES ('Laptop', 999)")
|
|
41
|
+
|
|
42
|
+
# Find Data
|
|
43
|
+
users = client.find("shop", "users", {"name": "Alice"})
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Advanced Search
|
|
47
|
+
|
|
48
|
+
```python
|
|
49
|
+
# Fuzzy Search
|
|
50
|
+
results = client.fuzzy_search("shop", "users", "field", "Alice")
|
|
51
|
+
|
|
52
|
+
# Vector Search
|
|
53
|
+
results = client.vector_search("shop", "products", "embedding", [0.1, 0.2, 0.3])
|
|
54
|
+
```
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import requests
|
|
2
|
+
import json
|
|
3
|
+
from typing import Optional, Dict, List, Any, Union
|
|
4
|
+
|
|
5
|
+
class OpenDBS:
|
|
6
|
+
def __init__(self, base_url: str, token: Optional[str] = None, ignore_ssl: bool = False):
|
|
7
|
+
self.base_url = base_url.rstrip('/')
|
|
8
|
+
self.token = token
|
|
9
|
+
self.ignore_ssl = ignore_ssl
|
|
10
|
+
self.session = requests.Session()
|
|
11
|
+
self.session.headers.update({
|
|
12
|
+
"Content-Type": "application/json",
|
|
13
|
+
"Accept": "application/json"
|
|
14
|
+
})
|
|
15
|
+
if token:
|
|
16
|
+
self.session.headers.update({"Authorization": f"Bearer {token}"})
|
|
17
|
+
|
|
18
|
+
def set_token(self, token: str):
|
|
19
|
+
self.token = token
|
|
20
|
+
self.session.headers.update({"Authorization": f"Bearer {token}"})
|
|
21
|
+
|
|
22
|
+
def _request(self, method: str, endpoint: str, data: Optional[Dict] = None, params: Optional[Dict] = None) -> Any:
|
|
23
|
+
url = f"{self.base_url}{endpoint}"
|
|
24
|
+
try:
|
|
25
|
+
response = self.session.request(
|
|
26
|
+
method,
|
|
27
|
+
url,
|
|
28
|
+
json=data,
|
|
29
|
+
params=params,
|
|
30
|
+
verify=not self.ignore_ssl
|
|
31
|
+
)
|
|
32
|
+
response.raise_for_status()
|
|
33
|
+
try:
|
|
34
|
+
return response.json()
|
|
35
|
+
except json.JSONDecodeError:
|
|
36
|
+
return response.text
|
|
37
|
+
except requests.exceptions.HTTPError as e:
|
|
38
|
+
error_msg = str(e)
|
|
39
|
+
try:
|
|
40
|
+
error_body = e.response.json()
|
|
41
|
+
if 'error' in error_body:
|
|
42
|
+
error_msg = error_body['error']
|
|
43
|
+
except:
|
|
44
|
+
pass
|
|
45
|
+
raise Exception(f"OpenDBS Error: {error_msg}")
|
|
46
|
+
except requests.exceptions.ConnectionError:
|
|
47
|
+
raise Exception(f"Could not connect to OpenDBS at {self.base_url}. Is the server running?")
|
|
48
|
+
|
|
49
|
+
# --- Authentication ---
|
|
50
|
+
|
|
51
|
+
def login(self, username, password):
|
|
52
|
+
res = self._request("POST", "/api/auth/login", {"username": username, "password": password})
|
|
53
|
+
if 'token' in res:
|
|
54
|
+
self.set_token(res['token'])
|
|
55
|
+
return res
|
|
56
|
+
|
|
57
|
+
def register(self, user_data):
|
|
58
|
+
return self._request("POST", "/api/auth/register", user_data)
|
|
59
|
+
|
|
60
|
+
def regenerate_api_key(self):
|
|
61
|
+
return self._request("POST", "/api/auth/regenerate-api-key")
|
|
62
|
+
|
|
63
|
+
# --- Database Management ---
|
|
64
|
+
|
|
65
|
+
def list_databases(self, include_racks=False):
|
|
66
|
+
res = self._request("GET", "/api/databases", params={"include_racks": str(include_racks).lower()})
|
|
67
|
+
return res.get("databases", [])
|
|
68
|
+
|
|
69
|
+
def create_database(self, name):
|
|
70
|
+
return self._request("POST", "/api/databases", {"name": name})
|
|
71
|
+
|
|
72
|
+
def delete_database(self, name):
|
|
73
|
+
return self._request("DELETE", f"/api/databases/{name}")
|
|
74
|
+
|
|
75
|
+
# --- Rack Management ---
|
|
76
|
+
|
|
77
|
+
def list_racks(self, database):
|
|
78
|
+
res = self._request("GET", f"/api/databases/{database}/racks")
|
|
79
|
+
return res.get("racks", [])
|
|
80
|
+
|
|
81
|
+
def create_rack(self, database, name, type="nosql", schema=None):
|
|
82
|
+
payload = {"name": name, "type": type}
|
|
83
|
+
if schema:
|
|
84
|
+
payload["schema"] = schema
|
|
85
|
+
return self._request("POST", f"/api/databases/{database}/racks", payload)
|
|
86
|
+
|
|
87
|
+
def delete_rack(self, database, rack):
|
|
88
|
+
return self._request("DELETE", f"/api/databases/{database}/racks/{rack}")
|
|
89
|
+
|
|
90
|
+
def clear_rack(self, database, rack):
|
|
91
|
+
return self._request("DELETE", f"/api/databases/{database}/racks/{rack}/clear")
|
|
92
|
+
|
|
93
|
+
# --- Documents (NoSQL) ---
|
|
94
|
+
|
|
95
|
+
def insert(self, database, rack, document):
|
|
96
|
+
return self._request("POST", f"/api/databases/{database}/racks/{rack}/documents", document)
|
|
97
|
+
|
|
98
|
+
def find(self, database, rack, query=None, populate=False):
|
|
99
|
+
params = query or {}
|
|
100
|
+
if populate:
|
|
101
|
+
params["populate"] = "true"
|
|
102
|
+
res = self._request("GET", f"/api/databases/{database}/racks/{rack}/documents", params=params)
|
|
103
|
+
return res.get("results", [])
|
|
104
|
+
|
|
105
|
+
def find_one(self, database, rack, doc_id, populate=False):
|
|
106
|
+
res = self.find(database, rack, {"id": doc_id}, populate)
|
|
107
|
+
return res[0] if res else None
|
|
108
|
+
|
|
109
|
+
def update(self, database, rack, doc_id, updates):
|
|
110
|
+
return self._request("PUT", f"/api/databases/{database}/racks/{rack}/documents/{doc_id}", updates)
|
|
111
|
+
|
|
112
|
+
def delete(self, database, rack, doc_id):
|
|
113
|
+
return self._request("DELETE", f"/api/databases/{database}/racks/{rack}/documents/{doc_id}")
|
|
114
|
+
|
|
115
|
+
# --- SQL Operations ---
|
|
116
|
+
|
|
117
|
+
def sql(self, database, query):
|
|
118
|
+
res = self._request("POST", f"/api/sql/{database}/execute", {"query": query})
|
|
119
|
+
if isinstance(res, dict) and 'results' in res:
|
|
120
|
+
return res['results']
|
|
121
|
+
return res
|
|
122
|
+
|
|
123
|
+
# --- Search Features ---
|
|
124
|
+
|
|
125
|
+
def search(self, database, rack, query_body):
|
|
126
|
+
res = self._request("POST", f"/api/databases/{database}/racks/{rack}/search", query_body)
|
|
127
|
+
return res.get("results", [])
|
|
128
|
+
|
|
129
|
+
def fuzzy_search(self, database, rack, field, query):
|
|
130
|
+
return self.search(database, rack, {"type": "fuzzy", "field": field, "query": query})
|
|
131
|
+
|
|
132
|
+
def vector_search(self, database, rack, field, vector, k=5):
|
|
133
|
+
return self.search(database, rack, {"type": "vector", "field": field, "vector": vector, "k": k})
|
|
134
|
+
|
|
135
|
+
# --- Backup ---
|
|
136
|
+
|
|
137
|
+
def create_backup(self):
|
|
138
|
+
return self._request("POST", "/api/backup/create")
|
|
139
|
+
|
|
140
|
+
def list_backups(self):
|
|
141
|
+
res = self._request("GET", "/api/backup/list")
|
|
142
|
+
return res.get("backups", [])
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: opendbs
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Official Python Client for OpenDBS
|
|
5
|
+
Author: OpenDBS Team
|
|
6
|
+
Author-email: support@opendbs.in
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Requires-Python: >=3.6
|
|
11
|
+
Requires-Dist: requests>=2.25.0
|
|
12
|
+
Dynamic: author
|
|
13
|
+
Dynamic: author-email
|
|
14
|
+
Dynamic: classifier
|
|
15
|
+
Dynamic: requires-dist
|
|
16
|
+
Dynamic: requires-python
|
|
17
|
+
Dynamic: summary
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
requests>=2.25.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
opendbs
|
opendbs-1.0.0/setup.cfg
ADDED
opendbs-1.0.0/setup.py
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from setuptools import setup, find_packages
|
|
2
|
+
|
|
3
|
+
setup(
|
|
4
|
+
name="opendbs",
|
|
5
|
+
version="1.0.0",
|
|
6
|
+
description="Official Python Client for OpenDBS",
|
|
7
|
+
author="OpenDBS Team",
|
|
8
|
+
author_email="support@opendbs.in",
|
|
9
|
+
packages=find_packages(),
|
|
10
|
+
install_requires=[
|
|
11
|
+
"requests>=2.25.0"
|
|
12
|
+
],
|
|
13
|
+
classifiers=[
|
|
14
|
+
"Programming Language :: Python :: 3",
|
|
15
|
+
"License :: OSI Approved :: MIT License",
|
|
16
|
+
"Operating System :: OS Independent",
|
|
17
|
+
],
|
|
18
|
+
python_requires='>=3.6',
|
|
19
|
+
)
|