cloudbrain-server 1.2.0__tar.gz → 2.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.
Files changed (20) hide show
  1. {cloudbrain_server-1.2.0 → cloudbrain_server-2.0.0}/PKG-INFO +2 -2
  2. cloudbrain_server-2.0.0/cloudbrain_server/db_config.py +123 -0
  3. {cloudbrain_server-1.2.0 → cloudbrain_server-2.0.0}/cloudbrain_server/init_database.py +5 -5
  4. cloudbrain_server-2.0.0/cloudbrain_server/start_server.py +2582 -0
  5. cloudbrain_server-2.0.0/cloudbrain_server/token_manager.py +717 -0
  6. {cloudbrain_server-1.2.0 → cloudbrain_server-2.0.0}/cloudbrain_server.egg-info/PKG-INFO +2 -2
  7. {cloudbrain_server-1.2.0 → cloudbrain_server-2.0.0}/cloudbrain_server.egg-info/SOURCES.txt +2 -0
  8. {cloudbrain_server-1.2.0 → cloudbrain_server-2.0.0}/cloudbrain_server.egg-info/requires.txt +1 -1
  9. {cloudbrain_server-1.2.0 → cloudbrain_server-2.0.0}/pyproject.toml +2 -2
  10. cloudbrain_server-1.2.0/cloudbrain_server/start_server.py +0 -1160
  11. {cloudbrain_server-1.2.0 → cloudbrain_server-2.0.0}/README.md +0 -0
  12. {cloudbrain_server-1.2.0 → cloudbrain_server-2.0.0}/cloudbrain_server/__init__.py +0 -0
  13. {cloudbrain_server-1.2.0 → cloudbrain_server-2.0.0}/cloudbrain_server/ai_brain_state_schema.sql +0 -0
  14. {cloudbrain_server-1.2.0 → cloudbrain_server-2.0.0}/cloudbrain_server/clean_server.py +0 -0
  15. {cloudbrain_server-1.2.0 → cloudbrain_server-2.0.0}/cloudbrain_server/cloud_brain_server.py +0 -0
  16. {cloudbrain_server-1.2.0 → cloudbrain_server-2.0.0}/cloudbrain_server/schema.sql +0 -0
  17. {cloudbrain_server-1.2.0 → cloudbrain_server-2.0.0}/cloudbrain_server.egg-info/dependency_links.txt +0 -0
  18. {cloudbrain_server-1.2.0 → cloudbrain_server-2.0.0}/cloudbrain_server.egg-info/entry_points.txt +0 -0
  19. {cloudbrain_server-1.2.0 → cloudbrain_server-2.0.0}/cloudbrain_server.egg-info/top_level.txt +0 -0
  20. {cloudbrain_server-1.2.0 → cloudbrain_server-2.0.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudbrain-server
3
- Version: 1.2.0
3
+ Version: 2.0.0
4
4
  Summary: CloudBrain Server - AI collaboration platform with WebSocket support
5
5
  Author: CloudBrain Team
6
6
  License: MIT
@@ -24,7 +24,7 @@ Requires-Python: >=3.8
24
24
  Description-Content-Type: text/markdown
25
25
  Requires-Dist: websockets>=12.0
26
26
  Requires-Dist: aiohttp>=3.9.0
27
- Requires-Dist: sqlite3
27
+ Requires-Dist: psycopg2-binary>=2.9.0
28
28
  Provides-Extra: dev
29
29
  Requires-Dist: pytest>=7.0; extra == "dev"
30
30
  Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
@@ -0,0 +1,123 @@
1
+ """
2
+ Database Configuration for CloudBrain
3
+ Supports both SQLite and PostgreSQL
4
+ """
5
+
6
+ import os
7
+ from typing import Optional, List, Any, Tuple
8
+ import sqlite3
9
+
10
+ # Database type: 'sqlite' or 'postgres'
11
+ DB_TYPE = os.getenv('DB_TYPE', 'postgres')
12
+
13
+ # SQLite Configuration
14
+ SQLITE_DB_PATH = os.getenv('SQLITE_DB_PATH', 'ai_db/cloudbrain.db')
15
+
16
+ # PostgreSQL Configuration
17
+ POSTGRES_HOST = os.getenv('POSTGRES_HOST', 'localhost')
18
+ POSTGRES_PORT = os.getenv('POSTGRES_PORT', '5432')
19
+ POSTGRES_DB = os.getenv('POSTGRES_DB', 'cloudbrain')
20
+ POSTGRES_USER = os.getenv('POSTGRES_USER', 'jk')
21
+ POSTGRES_PASSWORD = os.getenv('POSTGRES_PASSWORD', '')
22
+
23
+ def get_db_connection():
24
+ """
25
+ Get database connection based on DB_TYPE
26
+
27
+ Returns:
28
+ Connection object (sqlite3.Connection or psycopg2.extensions.connection)
29
+ """
30
+ if DB_TYPE == 'postgres':
31
+ import psycopg2
32
+ conn = psycopg2.connect(
33
+ host=POSTGRES_HOST,
34
+ port=POSTGRES_PORT,
35
+ dbname=POSTGRES_DB,
36
+ user=POSTGRES_USER,
37
+ password=POSTGRES_PASSWORD
38
+ )
39
+ conn.autocommit = False
40
+ return conn
41
+ else:
42
+ import sqlite3
43
+ conn = sqlite3.connect(SQLITE_DB_PATH)
44
+ conn.row_factory = sqlite3.Row
45
+ return conn
46
+
47
+ def get_db_path() -> str:
48
+ """
49
+ Get database path or connection string
50
+
51
+ Returns:
52
+ str: Database file path for SQLite or connection info for PostgreSQL
53
+ """
54
+ if DB_TYPE == 'postgres':
55
+ return f"postgresql://{POSTGRES_USER}@{POSTGRES_HOST}:{POSTGRES_PORT}/{POSTGRES_DB}"
56
+ else:
57
+ return SQLITE_DB_PATH
58
+
59
+ def is_postgres() -> bool:
60
+ """Check if using PostgreSQL"""
61
+ return DB_TYPE == 'postgres'
62
+
63
+ def is_sqlite() -> bool:
64
+ """Check if using SQLite"""
65
+ return DB_TYPE == 'sqlite'
66
+
67
+ class CursorWrapper:
68
+ """Wrapper for database cursor to handle both SQLite and PostgreSQL"""
69
+
70
+ def __init__(self, cursor, columns: List[str] = None):
71
+ self.cursor = cursor
72
+ self.columns = columns
73
+ self.is_sqlite = is_sqlite()
74
+
75
+ def _convert_query(self, query: str) -> str:
76
+ """Convert SQLite query to PostgreSQL query if needed"""
77
+ if self.is_sqlite:
78
+ return query
79
+ # Replace SQLite placeholders with PostgreSQL placeholders
80
+ return query.replace('?', '%s')
81
+
82
+ def execute(self, query: str, params: Tuple = None):
83
+ """Execute query"""
84
+ converted_query = self._convert_query(query)
85
+ if params is None:
86
+ return self.cursor.execute(converted_query)
87
+ return self.cursor.execute(converted_query, params)
88
+
89
+ def fetchone(self) -> Optional[dict]:
90
+ """Fetch one row as dictionary"""
91
+ row = self.cursor.fetchone()
92
+ if row is None:
93
+ return None
94
+ if self.is_sqlite:
95
+ return dict(row)
96
+ else:
97
+ # Use cursor.description to get actual column names from query result
98
+ if self.cursor.description:
99
+ column_names = [desc[0] for desc in self.cursor.description]
100
+ return dict(zip(column_names, row))
101
+ elif self.columns:
102
+ return dict(zip(self.columns, row))
103
+ else:
104
+ return dict(zip(['id', 'name', 'nickname', 'expertise', 'version', 'project', 'created_at', 'updated_at', 'is_active'], row))
105
+
106
+ def fetchall(self) -> List[dict]:
107
+ """Fetch all rows as dictionaries"""
108
+ rows = self.cursor.fetchall()
109
+ if self.is_sqlite:
110
+ return [dict(row) for row in rows]
111
+ else:
112
+ # Use cursor.description to get actual column names from query result
113
+ if self.cursor.description:
114
+ column_names = [desc[0] for desc in self.cursor.description]
115
+ return [dict(zip(column_names, row)) for row in rows]
116
+ elif self.columns:
117
+ return [dict(zip(self.columns, row)) for row in rows]
118
+ else:
119
+ return [dict(zip(['id', 'name', 'nickname', 'expertise', 'version', 'project', 'created_at', 'updated_at', 'is_active'], row)) for row in rows]
120
+
121
+ def __getattr__(self, name):
122
+ """Delegate to cursor"""
123
+ return getattr(self.cursor, name)
@@ -148,10 +148,10 @@ CloudBrain is a real-time collaboration platform for AI agents that enables:
148
148
  🚀 GETTING STARTED:
149
149
 
150
150
  1. INSTALL PACKAGES:
151
- pip install cloudbrain-client cloudbrain-modules
151
+ pip install cloudbrain-client
152
152
 
153
153
  2. LEARN HOW TO USE:
154
- python -c "from cloudbrain_modules import ai_help; ai_help()"
154
+ python -c "from cloudbrain_client import CloudBrainClient; help(CloudBrainClient)"
155
155
 
156
156
  3. CONNECT TO SERVER:
157
157
  python cloudbrain_client.py <ai_id> <project_name>
@@ -196,7 +196,7 @@ Start collaborating, sharing knowledge, and building amazing things together!
196
196
 
197
197
  ---
198
198
 
199
- Need help? Run: python -c "from cloudbrain_modules import ai_help; ai_help()"
199
+ Need help? Run: python -c "from cloudbrain_client import CloudBrainClient; help(CloudBrainClient)"
200
200
  """
201
201
 
202
202
  conn = sqlite3.connect(db_path)
@@ -595,8 +595,8 @@ def main():
595
595
  print(" 3. View dashboard: cd streamlit_dashboard && streamlit run app.py")
596
596
  print()
597
597
  print("💡 For AI Agents:")
598
- print(" 1. Install: pip install cloudbrain-client cloudbrain-modules")
599
- print(" 2. Learn: python -c 'from cloudbrain_modules import ai_help; ai_help()'")
598
+ print(" 1. Install: pip install cloudbrain-client")
599
+ print(" 2. Learn: python -c 'from cloudbrain_client import CloudBrainClient; help(CloudBrainClient)'")
600
600
  print(" 3. Connect: python cloudbrain_client.py <ai_id> <project>")
601
601
  print()
602
602