def test_not_empty(self): self.assertFalse(id_url.is_empty(id_url.field(ethan_bin))) self.assertFalse(id_url.is_empty(id_url.field(ethan_text))) self.assertTrue(id_url.field(ethan_bin)) self.assertTrue(id_url.field(ethan_text)) self.assertTrue(bool(id_url.field(ethan_text)) is True) self.assertTrue(id_url.field(ethan_text).to_bin() != dave)
def is_correspondent(idurl): """ Return True if given ID is found in correspondents list. """ if id_url.is_empty(idurl): return False return id_url.field(idurl).to_bin() in id_url.to_bin_list(correspondents_ids())
def is_supplier(idurl, customer_idurl=None): """ Return True if given ID is found in suppliers list. """ if id_url.is_empty(idurl): return False return id_url.field(idurl).to_bin() in id_url.to_bin_list(suppliers(customer_idurl=customer_idurl))
def is_customer(idurl): """ Return True if given ID is found in customers list. """ if id_url.is_empty(idurl): return False return id_url.field(idurl).to_bin() in id_url.to_bin_list(customers())
def handshake(idurl, channel=None, ack_timeout=15, ping_retries=2, keep_alive=False): """ Immediately doing handshake with remote node by fetching remote identity file and then sending my own Identity() to remote peer and wait for an Ack() packet. Returns Deferred object. """ idurl = strng.to_bin(idurl) if _Debug: lg.args(_DebugLevel, idurl=idurl, keep_alive=keep_alive, channel=channel, ack_timeout=ack_timeout, ping_retries=ping_retries) result = Deferred() result.addErrback(on_ping_failed, idurl=idurl, channel=channel) if id_url.is_empty(idurl): result.errback(Exception('empty idurl provided')) return result if not id_url.is_cached(idurl): if _Debug: lg.dbg(_DebugLevel, 'user identity %r not cached yet, executing clean handshake' % idurl) return handshaker.ping( idurl=idurl, ack_timeout=ack_timeout, ping_retries=ping_retries, channel=channel or 'clean_handshake', keep_alive=keep_alive, ) idurl = id_url.field(idurl) if not isKnown(idurl): if not check_create(idurl, keep_alive=keep_alive): raise Exception('can not create instance') A(idurl, 'handshake', result, channel=channel, ack_timeout=ack_timeout, ping_retries=ping_retries, original_idurl=idurl.to_original()) return result
def ping(idurl, channel=None, ack_timeout=15, ping_retries=0, keep_alive=False): """ Doing handshake with remote node only if it is currently not connected. Returns Deferred object. """ idurl = strng.to_bin(idurl) if _Debug: lg.args(_DebugLevel, idurl=idurl, keep_alive=keep_alive, channel=channel) result = Deferred() result.addErrback(on_ping_failed, idurl=idurl, channel=channel) if id_url.is_empty(idurl): result.errback(Exception('empty idurl provided')) return result if not id_url.is_cached(idurl): if _Debug: lg.dbg(_DebugLevel, 'user identity %r not cached yet, executing clean handshake' % idurl) return handshaker.ping( idurl=idurl, ack_timeout=ack_timeout, ping_retries=ping_retries, channel=channel or 'clean_ping', keep_alive=keep_alive, ) idurl = id_url.field(idurl) if not isKnown(idurl): if not check_create(idurl, keep_alive=keep_alive): raise Exception('can not create instance') A(idurl, 'ping-now', result, channel=channel, ack_timeout=ack_timeout, ping_retries=ping_retries, original_idurl=idurl.to_original()) return result
def existing(customer_idurl): """ Returns instance of existing `queue_keeper()` or None. """ global _QueueKeepers customer_idurl = id_url.to_bin(customer_idurl) if id_url.is_empty(customer_idurl): return None if not id_url.is_cached(customer_idurl): lg.warn('customer idurl is not cached yet, can not start QueueKeeper()') return None customer_idurl = id_url.field(customer_idurl) return customer_idurl in _QueueKeepers
def getInstance(idurl, autocreate=True): """ """ if _ShutdownFlag: return None if id_url.is_empty(idurl): return None if not id_url.is_cached(idurl): return None idurl = id_url.field(idurl) if not isKnown(idurl) and not autocreate: return None check_create(idurl) return A(idurl)
def check_create(idurl, keep_alive=True): """ Creates new instance of online_status() state machine and send "init" event to it. """ idurl = strng.to_bin(idurl) if id_url.is_empty(idurl): return False if not id_url.is_cached(idurl): return False idurl = id_url.field(idurl) if idurl not in list(_OnlineStatusDict.keys()): A(idurl, 'init', keep_alive=keep_alive) if _Debug: lg.out(_DebugLevel, 'online_status.check_create instance for %r was not found, made a new with state OFFLINE' % idurl) return True
def getStatusLabel(idurl): """ Return some text description about the current state of that user. """ global _ShutdownFlag if _ShutdownFlag: return '?' if id_url.is_empty(idurl): return '?' if not id_url.is_cached(idurl): return '?' idurl = id_url.field(idurl) if not isKnown(idurl): return '?' return stateToLabel(A(idurl).state)
def getCurrentState(idurl): """ Return the current state of that user or `None` if that contact is unknown. """ global _ShutdownFlag if _ShutdownFlag: return None if id_url.is_empty(idurl): return None if not id_url.is_cached(idurl): return None idurl = id_url.field(idurl) if not isKnown(idurl): return None return A(idurl).state
def isCheckingNow(idurl): """ Return True if given contact's state is PING or ACK?. """ global _ShutdownFlag if _ShutdownFlag: return False if id_url.is_empty(idurl): return False if not id_url.is_cached(idurl): return False idurl = id_url.field(idurl) if not isKnown(idurl): return False return A(idurl).state == 'PING'
def isOffline(idurl): """ Return True if given contact's state is OFFLINE. """ global _ShutdownFlag if _ShutdownFlag: return True if id_url.is_empty(idurl): return True if not id_url.is_cached(idurl): return True idurl = id_url.field(idurl) if not isKnown(idurl): return True return A(idurl).state == 'OFFLINE'
def isOnline(idurl): """ Return True if given contact's state is ONLINE. """ global _ShutdownFlag if _ShutdownFlag: return False if id_url.is_empty(idurl): return False if not id_url.is_cached(idurl): return False idurl = id_url.field(idurl) if not isKnown(idurl): return False return A(idurl).state in ['CONNECTED', 'PING?', ]
def isKnown(idurl): """ Return `True` if state machine online_status() already exists for this user. """ global _OnlineStatusDict global _ShutdownFlag if _ShutdownFlag: return False if id_url.is_empty(idurl): return False if not id_url.is_cached(idurl): return False idurl = id_url.field(idurl) return idurl in list(_OnlineStatusDict.keys())
def close(customer_idurl): """ Closes instance of queue_keeper() state machine related to given customer. """ customer_idurl = strng.to_bin(customer_idurl) if id_url.is_empty(customer_idurl): return False if not id_url.is_cached(customer_idurl): lg.warn('customer idurl is not cached yet, can not stop QueueKeeper()') return False customer_idurl = id_url.field(customer_idurl) if customer_idurl not in queue_keepers().keys(): lg.warn('instance of queue_keeper() not found for given customer') return False A(customer_idurl, 'shutdown') return True
def close(customer_idurl): """ Closes instance of queue_keeper() state machine related to given customer. """ customer_idurl = strng.to_bin(customer_idurl) if _Debug: lg.args(_DebugLevel, customer_idurl=customer_idurl) if id_url.is_empty(customer_idurl): return False if not id_url.is_cached(customer_idurl): lg.warn('customer idurl is not cached yet, can not stop QueueKeeper()') return False customer_idurl = id_url.field(customer_idurl) qk = queue_keepers().get(customer_idurl) if not qk: lg.warn('instance of queue_keeper() not found for given customer %r' % customer_idurl) return False qk.event('shutdown') del qk return True
def check_create(customer_idurl, auto_create=True, event='init'): """ Creates new instance of `queue_keeper()` state machine and send "init" event to it. """ customer_idurl = id_url.to_bin(customer_idurl) if _Debug: lg.args(_DebugLevel, customer_idurl=customer_idurl) if id_url.is_empty(customer_idurl): return None if not id_url.is_cached(customer_idurl): lg.warn('customer idurl is not cached yet, can not start QueueKeeper()') return None customer_idurl = id_url.field(customer_idurl) if customer_idurl not in list(queue_keepers().keys()): if not auto_create: return None if event: A(customer_idurl, event) if _Debug: lg.out(_DebugLevel, 'queue_keeper.check_create instance for customer %r was not found, made a new instance' % customer_idurl) return A(customer_idurl)
def test_empty(self): self.assertTrue(id_url.is_empty(id_url.field(b''))) self.assertTrue(id_url.is_empty(id_url.field(''))) self.assertTrue(id_url.is_empty(id_url.field(None))) self.assertTrue(id_url.is_empty(id_url.field(b'None'))) self.assertTrue(id_url.is_empty(None)) self.assertTrue(id_url.is_empty(b'')) self.assertTrue(id_url.is_empty('')) self.assertTrue(id_url.is_empty(b'None')) self.assertTrue(id_url.is_empty('None')) self.assertFalse(id_url.field(b'')) self.assertFalse(id_url.field('')) self.assertFalse(id_url.field(None)) self.assertFalse(id_url.field('None')) self.assertFalse(id_url.field(b'None')) self.assertTrue(bool(id_url.field(b'')) is False) self.assertTrue(bool(id_url.field('')) is False) self.assertTrue(bool(id_url.field(None)) is False) self.assertTrue(bool(id_url.field('None')) is False) self.assertTrue(bool(id_url.field(b'None')) is False) self.assertTrue(id_url.field(b'') is not None) self.assertTrue(id_url.field('') is not None) self.assertFalse(id_url.field(None) is None) self.assertTrue(id_url.field(None) is not None) self.assertTrue(id_url.field(b'') == b'') self.assertTrue(id_url.field('') == '') self.assertTrue(id_url.field('') == b'') self.assertTrue(id_url.field(None) == '') self.assertTrue(id_url.field(None) == b'') l = [ b'', None, '', id_url.field(''), id_url.field(None), id_url.field(b''), ] self.assertIn(b'', l) self.assertIn('', l) self.assertIn(None, l) self.assertTrue(id_url.is_some_empty(l)) self.assertEqual(l.count(None), 4) self.assertEqual(id_url.empty_count(l), 6) self.assertTrue(None in [ id_url.field(None), ]) self.assertTrue(None in [ id_url.field(b''), ]) self.assertTrue(b'' in [ id_url.field(None), ]) self.assertTrue(b'' in [ id_url.field(b''), ]) self.assertTrue(id_url.is_in(None, [ id_url.field(None), ])) self.assertTrue(id_url.is_in(None, [ id_url.field(b''), ])) self.assertTrue(id_url.is_in(b'', [ id_url.field(None), ])) self.assertTrue(id_url.is_in(b'', [ id_url.field(b''), ])) d = {id_url.field(''): 0, id_url.field(None): 1, id_url.field(b''): 2} self.assertTrue(len(d), 1) self.assertTrue(b'' in d) self.assertTrue('' in d) self.assertFalse(b'' not in d) self.assertFalse('' not in d) self.assertNotIn(None, d) self.assertIn(id_url.field(''), d) self.assertIn(id_url.field(b''), d) self.assertIn(id_url.field(None), d)