1+ from surrealdb import Surreal
2+ import logging
3+
4+ logging .basicConfig (level = logging .INFO )
5+
6+ class SurrealClient :
7+
8+ def __init__ (self ) -> None :
9+ self .isSeeded = False
10+
11+ async def query (self , sql ):
12+ host = "db"
13+ port = 8000
14+ async with Surreal (f"ws://{ host } :{ port } /rpc" ) as db :
15+ await db .signin ({"user" : "root" , "pass" : "pass" })
16+ await db .use ("test" , "test" )
17+ x = await db .query (sql )
18+ return x [0 ]['result' ]
19+
20+
21+ async def seed (self ):
22+ if self .isSeeded == True :
23+ return
24+
25+ results = []
26+ records = [
27+ { "breed" : "Am Bulldog" , "color" : "White" , "my_id" : '1' },
28+ { "breed" : "Blue Tick" , "color" : "Grey" , "my_id" : '2' },
29+ { "breed" : "Labrador" , "color" : "Black" , "my_id" : '3' },
30+ { "breed" : "Gr Shepard" , "color" : "Brown" , "my_id" : '4' }
31+ ]
32+ for record in records :
33+ sql = "insert into dog {"
34+ for k , v in record .items ():
35+ sql += f"{ k } : '{ v } ',"
36+ sql += "};"
37+ results .append (await self .query (sql ))
38+
39+ self .isSeeded = True
40+
41+ return results
42+
43+ class Endpoint :
44+ """Create singleton"""
45+ def __new__ (cls ):
46+ if not hasattr (cls , 'instance' ):
47+ cls .instance = super (Endpoint , cls ).__new__ (cls )
48+ return cls .instance
49+
50+ def __init__ (self ) -> None :
51+ self .client = SurrealClient ()
52+
53+ async def get_all (self ):
54+ await self .client .seed ()
55+ sql = 'select * from dog'
56+ return await self .client .query (sql )
57+
58+ async def filter_by (self , filter , filter_val ):
59+ await self .client .seed ()
60+ sql = f'select * from dog where { filter } = "{ filter_val } "'
61+ return await self .client .query (sql )
62+
63+ async def delete (self , filter , filter_val ):
64+ await self .client .seed ()
65+ sql = f'delete from dog where { filter } = "{ filter_val } "'
66+ await self .client .query (sql )
67+ return await self .get_all ()
68+
69+ async def insert (self , new_breed , new_color ):
70+ await self .client .seed ()
71+ records = [
72+ { "breed" : new_breed , "color" : new_color , "my_id" : '0' }
73+ ]
74+
75+ sql = ''
76+ for record in records :
77+ sql = "insert into dog {"
78+ for k , v in record .items ():
79+ sql += f"{ k } : '{ v } ',"
80+ sql += "};"
81+ await self .client .query (sql )
82+ return await self .get_all ()
83+
84+ async def update (self , filter , filter_val ):
85+ await self .client .seed ()
86+ logging .info (f"filter: { filter } , value: { filter_val } " )
87+ sql = f"update dog set breed='updated', color='updated', my_id='99' where { filter } = '{ filter_val } ';"
88+ await self .client .query (sql )
89+ return await self .get_all ()
0 commit comments