@@ -120,27 +120,33 @@ class PythonFramworkBaseClass(getNewOriginalModel()):
120120 __abstract__ = True
121121 def __onChange__ (self , * args , eventType = OnORMChangeEventType .UNKNOWN , ** kwargs ):
122122 return self
123+ def __safelyOnChange__ (self , * args , eventType = OnORMChangeEventType .UNKNOWN , ** kwargs ):
124+ try :
125+ self .__onChange__ (* args , eventType = eventType , ** kwargs )
126+ except Exception exception :
127+ log .warning (self , 'Not possible to handle __onChange__ properly' , exception = exception )
128+ return self
123129 def __onInit__ (self , args , kwargs ):
124- self .__onChange__ (args , kwargs , eventType = OnORMChangeEventType .INIT )
130+ self .__safelyOnChange__ (args , kwargs , eventType = OnORMChangeEventType .INIT )
125131 def __onAttach__ (self , session ):
126- self .__onChange__ (session , eventType = OnORMChangeEventType .ATTACH )
132+ self .__safelyOnChange__ (session , eventType = OnORMChangeEventType .ATTACH )
127133 def __onLoad__ (self , context ):
128- self .__onChange__ (context , eventType = OnORMChangeEventType .LOAD )
134+ self .__safelyOnChange__ (context , eventType = OnORMChangeEventType .LOAD )
129135 def __onRefresh__ (self , context , attributes ):
130- self .__onChange__ (context , attributes , eventType = OnORMChangeEventType .REFRESH )
136+ self .__safelyOnChange__ (context , attributes , eventType = OnORMChangeEventType .REFRESH )
131137 def __onExpire__ (self , attrs ):
132- self .__onChange__ (attrs , eventType = OnORMChangeEventType .EXPIRE )
138+ self .__safelyOnChange__ (attrs , eventType = OnORMChangeEventType .EXPIRE )
133139 def __onDeteachedToPersistent__ (self , session ):
134- self .__onChange__ (session , eventType = OnORMChangeEventType .DETEACHED_TO_PERSISTENT )
140+ self .__safelyOnChange__ (session , eventType = OnORMChangeEventType .DETEACHED_TO_PERSISTENT )
135141 def __onTransientToPending__ (self , session ):
136- self .__onChange__ (session , eventType = OnORMChangeEventType .TRANSIENT_TO_PENDING )
142+ self .__safelyOnChange__ (session , eventType = OnORMChangeEventType .TRANSIENT_TO_PENDING )
137143 def __onPendingToTransient__ (self , session ):
138- self .__onChange__ (session , eventType = OnORMChangeEventType .PENDING_TO_TRANSIENT )
144+ self .__safelyOnChange__ (session , eventType = OnORMChangeEventType .PENDING_TO_TRANSIENT )
139145 def __onPersistentToTransient__ (self , session ):
140- self .__onChange__ (session , eventType = OnORMChangeEventType .PERSISTENT_TO_TRANSIENT )
146+ self .__safelyOnChange__ (session , eventType = OnORMChangeEventType .PERSISTENT_TO_TRANSIENT )
141147
142148 def setDefaultValues (self , * args , eventType = OnORMChangeEventType .SELF , ** kwargs ):
143- return self .__onChange__ (* args , eventType = eventType , ** kwargs )
149+ return self .__safelyOnChange__ (* args , eventType = eventType , ** kwargs )
144150 def loadDefaultValues (self , * args , eventType = OnORMChangeEventType .SELF , ** kwargs ):
145151 return self .setDefaultValues (* args , eventType = eventType , ** kwargs )
146152 def reload (self , * args , eventType = OnORMChangeEventType .SELF , ** kwargs ):
@@ -204,9 +210,11 @@ def getOneToOneChild(child, parent, refferenceModel):
204210 parentAttribute = relationship (parent , back_populates = attributeIt (child ))
205211 return parentAttribute , parentId
206212
213+ ###- deprecated
207214def isNeitherNoneNorBlank (thing ):
208- return ObjectHelper .isNotNone (thing ) and StringHelper . isNotBlank ( str ( thing ) )
215+ return ObjectHelper .isNeitherNoneNorBlank (thing )
209216
217+ ###- deprecated
210218def isNoneOrBlank (thing ):
211219 return ObjectHelper .isNone (thing ) or StringHelper .isBlank (str (thing ))
212220
@@ -325,7 +333,7 @@ def close(self):
325333 def getUrl (self , dialect ):
326334 log .log (self .getUrl , 'Loading repository configuration' )
327335 url = EnvironmentHelper .get (self .ENV_DATABASE_URL )
328- if isNeitherNoneNorBlank (url ):
336+ if ObjectHelper . isNeitherNoneNorBlank (url ):
329337 dialect = None
330338 driver = None
331339 database = None
@@ -337,7 +345,7 @@ def getUrl(self, dialect):
337345 log .log (self .getUrl , f'Prioritising repository url in { self .ENV_DATABASE_URL } environment variable' )
338346 else :
339347 url = self .globals .getSetting (f'{ self .KW_API } { c .DOT } { self .KW_DATABASE } { c .DOT } { self .KW_REPOSITORY_URL } ' )
340- if isNeitherNoneNorBlank (url ):
348+ if ObjectHelper . isNeitherNoneNorBlank (url ):
341349 dialect = None
342350 driver = None
343351 database = None
@@ -356,15 +364,15 @@ def getUrl(self, dialect):
356364 host = self .globals .getSetting (f'{ self .KW_API } { c .DOT } { self .KW_DATABASE } { c .DOT } { self .KW_REPOSITORY_HOST } ' )
357365 port = self .globals .getSetting (f'{ self .KW_API } { c .DOT } { self .KW_DATABASE } { c .DOT } { self .KW_REPOSITORY_PORT } ' )
358366 schema = self .globals .getSetting (f'{ self .KW_API } { c .DOT } { self .KW_DATABASE } { c .DOT } { self .KW_REPOSITORY_SCHEMA } ' )
359- if isNeitherNoneNorBlank (username ) and isNeitherNoneNorBlank (password ):
367+ if ObjectHelper . isNeitherNoneNorBlank (username ) and ObjectHelper . isNeitherNoneNorBlank (password ):
360368 url += f'{ username } { c .COLON } { password } '
361- if isNeitherNoneNorBlank (host ) and isNeitherNoneNorBlank (port ):
369+ if ObjectHelper . isNeitherNoneNorBlank (host ) and ObjectHelper . isNeitherNoneNorBlank (port ):
362370 url += f'{ c .ARROBA } { host } { c .COLON } { port } '
363371 url += c .SLASH
364- database = f'{ database } ' if isNeitherNoneNorBlank (database ) else f'{ self .DEFAULT_LOCAL_STORAGE_NAME if ObjectHelper .isNone (self .globals .apiName ) else self .globals .apiName } { c .DOT } { self .EXTENSION } '
365- if not isNeitherNoneNorBlank (dialect ):
372+ database = f'{ database } ' if ObjectHelper . isNeitherNoneNorBlank (database ) else f'{ self .DEFAULT_LOCAL_STORAGE_NAME if ObjectHelper .isNone (self .globals .apiName ) else self .globals .apiName } { c .DOT } { self .EXTENSION } '
373+ if not ObjectHelper . isNeitherNoneNorBlank (dialect ):
366374 dialect = self .DEFAULT_DIALECT
367- plusDriverOrNothing = f'{ c .PLUS } { driver } ' if isNeitherNoneNorBlank (driver ) else c .NOTHING
375+ plusDriverOrNothing = f'{ c .PLUS } { driver } ' if ObjectHelper . isNeitherNoneNorBlank (driver ) else c .NOTHING
368376 dialectAndDriver = f'''{ dialect } { plusDriverOrNothing } '''
369377 url = f'{ dialectAndDriver } { c .COLON } { c .DOUBLE_SLASH } { url } { database } '
370378 log .log (self .getUrl , 'Prioritising repository yamel configuration' )
@@ -438,12 +446,16 @@ def backupContext(self):
438446 @Method
439447 def reloadContextFromBackup (self ):
440448 for index , instance in enumerate (self .getContext ()):
441- self .context .pop (index )
449+ self .context .pop (self . context . index ( instance ) )
442450 if instance not in self .session .dirty :
443451 self .session .dirty .add (instance )
444452
445453 @Method
446- def getQueryFilter (self , query , modelClass , additionalCondition = None ):
454+ def getQueryFilter (self , query , modelClass , joinList = None , additionalCondition = None ):
455+ sessionQuery = self .session .query (modelClass )
456+ if ObjectHelper .isNotEmpty (joinList ):
457+ for join in joinList :
458+ sessionQuery .join (join )
447459 return self .session .query (modelClass ).filter (
448460 getCollectionCondition (
449461 query ,
@@ -567,26 +579,28 @@ def findAllByStatusInAndCommit(self, statusList, modelClass):
567579 return self .load (instanceList )
568580
569581 @Method
570- def existsByQueryAndCommit (self , query , modelClass , additionalCondition = None ):
582+ def existsByQueryAndCommit (self , query , modelClass , joinList = None , additionalCondition = None ):
571583 exists = self .session .query (
572584 literal (True )
573585 ).filter (
574586 self .getQueryFilter (
575587 query ,
576588 modelClass ,
589+ joinList = joinList ,
577590 additionalCondition = additionalCondition
578591 ).exists ()
579592 ).scalar ()
580593 self .session .commit ()
581594 return exists
582595
583596 @Method
584- def findAllByQueryAndCommit (self , query , modelClass , additionalCondition = None ):
597+ def findAllByQueryAndCommit (self , query , modelClass , joinList = None , additionalCondition = None ):
585598 instanceList = []
586599 if ObjectHelper .isNotNone (query ):
587600 instanceList = self .getQueryFilter (
588601 query ,
589602 modelClass ,
603+ joinList = joinList ,
590604 additionalCondition = additionalCondition
591605 ).all ()
592606 self .session .commit ()
0 commit comments