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 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
@@ -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,3 @@
1
+ from .client import OpenDBS
2
+
3
+ __all__ = ["OpenDBS"]
@@ -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,9 @@
1
+ README.md
2
+ setup.py
3
+ opendbs/__init__.py
4
+ opendbs/client.py
5
+ opendbs.egg-info/PKG-INFO
6
+ opendbs.egg-info/SOURCES.txt
7
+ opendbs.egg-info/dependency_links.txt
8
+ opendbs.egg-info/requires.txt
9
+ opendbs.egg-info/top_level.txt
@@ -0,0 +1 @@
1
+ requests>=2.25.0
@@ -0,0 +1 @@
1
+ opendbs
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
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
+ )