@@ -827,36 +827,54 @@ def poll_query_until(self,
827
827
query ,
828
828
username = None ,
829
829
max_attempts = 60 ,
830
- sleep_time = 1 ):
830
+ sleep_time = 1 ,
831
+ expected = True ,
832
+ raise_programming_error = True ,
833
+ raise_internal_error = True ):
831
834
"""
832
- Run a query once a second until it retursTrue .
835
+ Run a query once a second until it returs'expected' .
833
836
834
837
Args:
835
838
dbname: database name to connect to (str).
836
839
query: query to be executed (str).
837
840
username: database user name (str).
838
841
max_attempts: how many times should we try?
839
842
sleep_time: how long should we sleep after a failure?
843
+ expected: what should be returned to break the cycle?
844
+ raise_programming_error: mute ProgrammingError?
845
+ raise_internal_error: mute InternalError?
840
846
"""
841
847
842
848
attemps = 0
843
849
while attemps < max_attempts :
844
- res = self .execute (dbname = dbname ,
845
- query = query ,
846
- username = username ,
847
- commit = True )
850
+ try :
851
+ res = self .execute (dbname = dbname ,
852
+ query = query ,
853
+ username = username ,
854
+ commit = True )
855
+
856
+ if expected is None and res is None :
857
+ return # done
858
+
859
+ if res is None :
860
+ raise QueryException ('Query returned None' )
861
+
862
+ if len (res )== 0 :
863
+ raise QueryException ('Query returned 0 rows' )
848
864
849
- if res is None :
850
- raise QueryException ('Query returnedNone ' )
865
+ if len ( res [ 0 ]) == 0 :
866
+ raise QueryException ('Query returned0 columns ' )
851
867
852
- if len ( res ) == 0 :
853
- raise QueryException ( 'Query returned 0 rows' )
868
+ if res [ 0 ][ 0 ] :
869
+ return # done
854
870
855
- if len (res [0 ])== 0 :
856
- raise QueryException ('Query returned 0 columns' )
871
+ except pglib .ProgrammingError as e :
872
+ if raise_programming_error :
873
+ raise e
857
874
858
- if res [0 ][0 ]:
859
- return # done
875
+ except pglib .InternalError as e :
876
+ if raise_internal_error :
877
+ raise e
860
878
861
879
time .sleep (sleep_time )
862
880
attemps += 1