Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
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())
Exemplo n.º 3
0
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))
Exemplo n.º 4
0
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())
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
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
Exemplo n.º 12
0
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'
Exemplo n.º 13
0
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'
Exemplo n.º 14
0
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?', ]
Exemplo n.º 15
0
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())
Exemplo n.º 16
0
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
Exemplo n.º 17
0
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
Exemplo n.º 18
0
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)
Exemplo n.º 19
0
 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)