11from sqlalchemy_utils .functions import database_exists as db_exists
22from .models .sessions import VFSessions as VFS
3+ from sqlalchemy_filters import apply_filters
34from .models .siddhis import Siddhis as VFSD
5+ from res .vmnf_banners import case_header
6+ from datetime import datetime as dt
7+ from sqlalchemy import or_ , and_
8+ from sqlalchemy import func ,exc ,inspect
9+ from neotermcolor import cprint
410from .config import db , app
11+ import os
512
6- from datetime import datetime as dt
713
14+ def x ():
15+ print ('in x' )
816
917class VFSiddhis :
10- def __init__ (self , ** vmnf_handler ):
11- self .vmnf_handler = vmnf_handler
18+ def __init__ (self , ** siddhi_specs : dict ):
19+ self .siddhi_specs = siddhi_specs
1220
13- def register_siddhi (self ,** data ):
14- if self .get_session (data ['session_id' ]):
15- if self .vmnf_handler .get ('debug' , False ):
16- print (f"[{ dt .now ()} ] Session { data ['session_id' ]} already exists!" )
17- return False
21+ def commit (self ,entry ):
22+ db .session .add (entry )
23+ db .session .commit ()
24+
25+ def register_siddhi (self ):
26+ if not inspect (db .engine ).has_table ("_SIDDHIS_" ):
27+ self .create_siddhi_tbl ()
28+
29+ self .commit (VFSD (** self .siddhi_specs ))
30+
31+ def handle_OpErr (self , exception ):
32+ if (str (exception .orig )).startswith ('no such table:' ):
33+ case_header ()
34+ cprint ("[vf:list] It seems like you haven't populated the database yet.\n " , 'yellow' )
35+ os ._exit (os .EX_OK )
36+
37+ def list_siddhis_db (self , filters :list ):
38+ try :
39+ return (apply_filters (db .session .query (VFSD ), filters ).all ())
40+ except exc .OperationalError as OE :
41+ self .handle_OpErr (OE )
42+
43+ def get_siddhi (self , siddhi_name ):
44+ try :
45+ return VFSD .query .filter_by (name = siddhi_name .lower ()).first ()
46+ except exc .OperationalError as OE :
47+ self .handle_OpErr (OE )
48+
49+ def get_all_siddhis (self ):
50+ return VFSD .query .all ()
1851
19- self .commit (VFSD (** data ))
52+ def create_siddhi_tbl (self ):
53+ try :
54+ VFSD .__table__ .drop (db .engine )
55+ except exc .OperationalError as OE :
56+ pass
57+
58+ VFSD .__table__ .create (db .engine )
2059
2160class VFDBOps :
2261 def __init__ (self , ** vmnf_handler ):
@@ -52,11 +91,16 @@ def commit(self,entry):
5291 def clean_db (self ):
5392 db .drop_all ()
5493
55- def get_session (self , _sid_ ):
94+ def get_session (self ,_sid_ ):
5695 return VFS .query .filter_by (session_id = _sid_ ).first ()
5796
5897 def get_all_sessions (self ):
59- return VFS .query .all ()
98+ try :
99+ return VFS .query .all ()
100+ except exc .OperationalError as OE :
101+ self .create_db ()
102+
103+ return False
60104
61105 def create_db (self ):
62106 if not db_exists (app .config ["SQLALCHEMY_DATABASE_URI" ]):
@@ -70,11 +114,20 @@ def register_session(self):
70114 print (f"[{ dt .now ()} ] Missing session data" )
71115 return False
72116
117+ if not inspect (db .engine ).has_table ("_SESSIONS_" ):
118+ self .create_sessions_tbl ()
119+
73120 if self .get_session (self .session ['session_id' ]):
74121 print (f"[{ dt .now ()} ] Session { data ['session_id' ]} already exists!" )
75122 return False
76123
77124 self .commit (VFS (** self .session ))
78125
126+ def create_sessions_tbl (self ):
127+ try :
128+ VFS .__table__ .drop (db .engine )
129+ except exc .OperationalError as OE :
130+ pass
79131
132+ VFS .__table__ .create (db .engine )
80133
0 commit comments