| 171 | |
| 172 | |
| 173 | class ChannelState(namedtuple('ChannelState', 'pending closed')): |
| 174 | |
| 175 | def __new__(cls, pending=0, *, closed=False): |
| 176 | self = super().__new__(cls, pending, closed) |
| 177 | return self |
| 178 | |
| 179 | def incr(self): |
| 180 | return type(self)(self.pending + 1, closed=self.closed) |
| 181 | |
| 182 | def decr(self): |
| 183 | return type(self)(self.pending - 1, closed=self.closed) |
| 184 | |
| 185 | def close(self, *, force=True): |
| 186 | if self.closed: |
| 187 | if not force or self.pending == 0: |
| 188 | return self |
| 189 | return type(self)(0 if force else self.pending, closed=True) |
| 190 | |
| 191 | |
| 192 | def run_action(cid, action, end, state, *, hideclosed=True): |
searching dependent graphs…