Skip to content

Commit dd12c17

Browse files
committed
add group callback
1 parent 6391a4d commit dd12c17

1 file changed

Lines changed: 31 additions & 14 deletions

File tree

src/varnishapi.py

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1616,9 +1616,7 @@ def __Setup10(self):
16161616
return(1)
16171617

16181618

1619-
def __Dispatch10(self, cb, priv=None):
1620-
self._cb = cb
1621-
self._priv = priv
1619+
def __Dispatch10(self, groupcount):
16221620
while True:
16231621
if not self.vslq:
16241622
# Reconnect VSM
@@ -1636,12 +1634,21 @@ def __Dispatch10(self, cb, priv=None):
16361634
self.vslq = self.lva.VSLQ_New(
16371635
self.vsl, c, self.__g_arg, self.__q_arg)
16381636
self.error = 'Log reacquired'
1637+
1638+
self._wrkcb = False
16391639
i = self.lva.VSLQ_Dispatch(
16401640
self.vslq, VSLQ_dispatch_f(self._callBack), None)
16411641

16421642
if i == 1:
1643-
continue
1644-
elif i > -2:
1643+
if self._groupcb and self._wrkcb:
1644+
self._wrkcb = False
1645+
self._groupcb(self, self._priv)
1646+
if groupcount != 1:
1647+
if groupcount > 1:
1648+
groupcount-=1
1649+
continue
1650+
1651+
if i > -2:
16451652
return i
16461653
if not self.vsm:
16471654
return i
@@ -1657,9 +1664,7 @@ def __Dispatch10(self, cb, priv=None):
16571664
self.error = "Log overrun"
16581665
return i
16591666

1660-
def __Dispatch20(self, cb, priv=None):
1661-
self._cb = cb
1662-
self._priv = priv
1667+
def __Dispatch20(self, groupcount):
16631668
while True:
16641669
if self.vsm:
16651670
stat = self.lva.VSM_Status(self.vsm)
@@ -1679,12 +1684,20 @@ def __Dispatch20(self, cb, priv=None):
16791684
self.hascursor = 1
16801685
self.lva.VSLQ_SetCursor(self.vslq, byref(cast(c, c_void_p)))
16811686

1687+
self._wrkcb = False
16821688
i = self.lva.VSLQ_Dispatch(
16831689
self.vslq, VSLQ_dispatch_f(self._callBack), None)
1684-
1690+
16851691
if i == 1:
1686-
continue
1687-
elif i > -2:
1692+
if self._groupcb and self._wrkcb:
1693+
self._wrkcb = False
1694+
self._groupcb(self, self._priv)
1695+
if groupcount != 1:
1696+
if groupcount > 1:
1697+
groupcount-=1
1698+
continue
1699+
1700+
if i > -2:
16881701
return i
16891702
if not self.vsm:
16901703
return i
@@ -1698,11 +1711,14 @@ def __Dispatch20(self, cb, priv=None):
16981711
self.error = "Log overrun"
16991712
return i
17001713

1701-
def Dispatch(self, cb, priv=None):
1714+
def Dispatch(self, cb, priv=None, groupcount=1, groupcb=None):
1715+
self._cb = cb
1716+
self._priv = priv
1717+
self._groupcb = groupcb
17021718
if self.lva.apiversion >= 2.0:
1703-
return self.__Dispatch20(cb, priv)
1719+
return self.__Dispatch20(groupcount)
17041720
else:
1705-
return self.__Dispatch10(cb, priv)
1721+
return self.__Dispatch10(groupcount)
17061722

17071723
def Fini(self):
17081724
if self.vslq:
@@ -1720,6 +1736,7 @@ def __VSLQ_Name2Grouping(self, arg):
17201736
return self.lva.VSLQ_Name2Grouping(arg, -1)
17211737

17221738
def _callBack(self, vsl, pt, fo):
1739+
self._wrkcb = True
17231740
idx = -1
17241741
while 1:
17251742
idx += 1

0 commit comments

Comments
 (0)