Update.
This commit is contained in:
		
							parent
							
								
									44ac1d2bfa
								
							
						
					
					
						commit
						dd108c2004
					
				| @ -13,7 +13,7 @@ from snek.service.user_property import UserPropertyService | ||||
| from snek.service.util import UtilService | ||||
| from snek.service.repository import RepositoryService | ||||
| from snek.system.object import Object | ||||
| 
 | ||||
| from snek.service.db import DBService | ||||
| 
 | ||||
| @functools.cache | ||||
| def get_services(app): | ||||
| @ -31,6 +31,7 @@ def get_services(app): | ||||
|             "drive_item": DriveItemService(app=app), | ||||
|             "user_property": UserPropertyService(app=app), | ||||
|             "repository": RepositoryService(app=app), | ||||
|             "db": DBService(app=app), | ||||
|         } | ||||
|     ) | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										71
									
								
								src/snek/service/db.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								src/snek/service/db.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,71 @@ | ||||
| from snek.system.service import BaseService | ||||
| import dataset  | ||||
| import uuid  | ||||
| 
 | ||||
| from datetime import datetime  | ||||
| 
 | ||||
| class DBService(BaseService): | ||||
|      | ||||
|     async def get_db(self, user_uid): | ||||
|          | ||||
|         home_folder = await self.app.services.user.get_home_folder(user_uid) | ||||
|         home_folder.mkdir(parents=True, exist_ok=True) | ||||
|         db_path = home_folder.joinpath("snek/user.db") | ||||
|         db_path.parent.mkdir(parents=True, exist_ok=True) | ||||
|         return dataset.connect("sqlite:///" + str(db_path))  | ||||
|      | ||||
|     async def insert(self, user_uid, table_name, values): | ||||
|         db = await self.get_db(user_uid) | ||||
|         return db[table_name].insert(values) | ||||
|          | ||||
| 
 | ||||
|     async def update(self, user_uid, table_name, values, filters): | ||||
|         db = await self.get_db(user_uid) | ||||
|         if not filters: | ||||
|             filters = {} | ||||
|         if not values: | ||||
|             return False | ||||
|         return db[table_name].update(values, filters) | ||||
| 
 | ||||
|     async def upsert(self, user_uid, table_name, values, keys): | ||||
|         db = await self.get_db(user_uid) | ||||
|         return db[table_name].upsert(values, keys) | ||||
| 
 | ||||
|     async def find(self, user_uid, table_name, kwargs): | ||||
|         db = await self.get_db(user_uid) | ||||
|         kwargs['_limit'] = kwargs.get('_limit', 30) | ||||
|         return [dict(row) for row in db[table_name].find(**kwargs)] | ||||
| 
 | ||||
|     async def get(self, user_uid, table_name, filters): | ||||
|         db = await self.get_db(user_uid) | ||||
|         if not filters: | ||||
|             filters = {} | ||||
|         try: | ||||
|             return dict(db[table_name].find_one(**filters)) | ||||
|         except ValueError: | ||||
|             return None | ||||
| 
 | ||||
| 
 | ||||
|     async def delete(self, user_uid, table_name, filters): | ||||
|         db = await self.get_db(user_uid) | ||||
|         if not filters: | ||||
|             filters = {} | ||||
|         return db[table_name].delete(**filters) | ||||
| 
 | ||||
|     async def query(self, sql,values): | ||||
|         db = await self.app.db | ||||
|         return [dict(row) for row in db.query(sql, values or {})] | ||||
| 
 | ||||
|     async def exists(self, user_uid, table_name, filters): | ||||
|         db = await self.get_db(user_uid) | ||||
|         if not filters: | ||||
|             filters = {} | ||||
|         return bool(db[table_name].find_one(**filters)) | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|     async def count(self, user_uid, table_name, filters): | ||||
|         db = await self.get_db(user_uid) | ||||
|         if not filters: | ||||
|             filters = {} | ||||
|         return db[table_name].count(**filters) | ||||
| @ -26,6 +26,31 @@ class RPCView(BaseView): | ||||
|             self.services = self.app.services | ||||
|             self.ws = ws | ||||
| 
 | ||||
|         async def db_insert(self, table_name, record): | ||||
|             self._require_login() | ||||
| 
 | ||||
|             return await self.services.db.insert(self.user_uid, table_name, record) | ||||
|         async def db_update(self, table_name, record): | ||||
|             self._require_login() | ||||
|             return await self.services.db.update(self.user_uid, table_name, record) | ||||
|         async def db_delete(self, table_name, record): | ||||
|             self._require_login() | ||||
|             return await self.services.db.delete(self.user_uid, table_name, record) | ||||
|         async def db_get(self, table_name, record): | ||||
|             self._require_login() | ||||
|             return await self.services.db.get(self.user_uid, table_name, record) | ||||
|         async def db_find(self, table_name, record): | ||||
|             self._require_login() | ||||
|             return await self.services.db.find(self.user_uid, table_name, record) | ||||
|         async def db_upsert(self, table_name, record,keys): | ||||
|             self._require_login() | ||||
|             return await self.services.db.upsert(self.user_uid, table_name, record,keys) | ||||
| 
 | ||||
|         async def db_query(self, table_name, args): | ||||
|             self._require_login() | ||||
|             return await self.services.db.query(self.user_uid, table_name, sql, args) | ||||
| 
 | ||||
| 
 | ||||
|         @property | ||||
|         def user_uid(self): | ||||
|             return self.view.session.get("uid") | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user