CustomRequestHelper

class labpyproject.core.net.custom_TCP.CustomRequestHelper[source]

Bases : object

Utilitaire statique proposant des services :

  • de support de codes et arguments de commandes

  • de découpage, indexation, envoi et réception de requêtes

  • d’analyse d’erreurs

Attributes Summary

ASK_FOR_UID

demande d’id unique de client

BLOC_PREFIX

marqueur de début de bloc

BLOC_SUFFIX

marqueur de fin de bloc

BUFFERSIZE

Taille de buffer par défaut considérée pour les requêtes

CLIENT_CONNECTED

le client est connecté au serveur

CLIENT_DISCONNECTED

le serveur se déconnecte mais ne s’arrête pas totalement

CLIENT_SHUTDOWN

le client va s’arrêter

CONFIRM_RECEPTION

tag un msg comme confirmation de réception

CONNECTION_MAX_COUNT

nombre max de tentatives successives de connection

CONNECTION_REFUSED

connection refusée par le serveur

ERRNO_CON

erreur de type connection

ERRNO_DATA

erreur de donnée

ERRNO_DICT

dict de qualification des erreurs

ERRNO_NET

erreur de type réseau

ERRNO_SEND

erreur d’envoi

ERRNO_SYS

erreur de type système

INACTIVE_COUNT

nombre d’erreurs à partir duquel on considère une connection comme probablement inactive

MSGUID_INCREMENT

incrément d’uid de messages

NEED_CONFIRMATION

indique que le message nécessite un accusé de réception

PING

vérification de connection

RECONNECTION_DELAY

délai avant tentative de re connection

RECONNECTION_TIMEOUT

time out de reconnection (par défaut 120 sec, on le réduit)

REGEXP_CMD

Création et compilation de la regex d’interprétation des commandes

REGEXP_MSGUID

Création et compilation de la regex des identifiants uniques de messages

RESEND_DELAY

délai avant nouvelle tentative d’envoi

SELECT_TIMEOUT

Timeout select

SEND_MAX_COUNT

nombre max de tentatives d’envoi

SERVER_CONNECTED

le serveur est connecté

SERVER_DISCONNECTED

le serveur se déconnecte mais ne s’arrête pas totalement

SERVER_SHUTDOWN

le serveur va s’arrêter

SET_CLIENT_READ_INFOS

indique les données de connexion à client.socket_read

STATUS_CONNECTED

connection active

STATUS_DISCONNECTED

arrêt temporaire

STATUS_ERROR_CONNECTION

erreur

STATUS_REJECTED

connection refusée par le serveur

STATUS_SHUTDOWN

arrêt définiif

STATUS_UNDEFINED

probablement en erreur

UID_SET_BY_SERVER

pour informer BUS/externalHandler de l’affectation

Methods Summary

create_cmd_msg(code[, kwargs])

Formate un message de commande client/serveur.

create_dict_receive()

Génère le dictionnaire non renseigné destiné à retenir les données d’une requête reçue.

create_indexed_request(msg, uid)

Indexe, découpe au besoin la chaine msg envoyée par l’objet d’id uid.

create_test_msg([confirmrecept, latin1])

Crée un message de test d’une longueur > buffsize pour forcer l’envoi de plusieurs blocs

get_ip()

Retourne l’ip primaire, à la différence de socket.gethostbyname(socket.gethostname()) qui retourne plus systématiquement 127.0.x.1

is_error_fatal(error)

Indique si l’erreur reçue est fatale ou bien si l’on peut ré essayer l’action tentée.

mark_msg_as_unique(asker, msg)

Ajoute un identifiant unique de message à msg :

prefix_msg_with_code(msg, code[, kwargs])

Préfixe le msg avec un entête de commande.

receive_indexed_request(sock)

Prend en charge la réception sur la socket sock d’une série de requètes indéxées associées à un message.

send_indexed_request(sock, bytesblocs)

Prend en charge l’envoi via la socket sock de la liste de blocs binaires listbyteblocs.

split_cmd_and_msg(msg)

Sépare code de commande, dict d’arguments et fin du message dans un message parsé.

split_unique_mark_and_msg(msg)

Sépare identifiants unique de message et message initial.

Attributes Documentation

ASK_FOR_UID = 'ASK_FOR_UID'

demande d’id unique de client

BLOC_PREFIX = '<#bp#>'

marqueur de début de bloc

BLOC_SUFFIX = '<#bs#>'

marqueur de fin de bloc

BUFFERSIZE = 2048

Taille de buffer par défaut considérée pour les requêtes

CLIENT_CONNECTED = 'CLIENT_CONNECTED'

le client est connecté au serveur

CLIENT_DISCONNECTED = 'CLIENT_DISCONNECTED'

le serveur se déconnecte mais ne s’arrête pas totalement

CLIENT_SHUTDOWN = 'CLIENT_SHUTDOWN'

le client va s’arrêter

CONFIRM_RECEPTION = 'CONFIRM_RECEPTION'

tag un msg comme confirmation de réception

CONNECTION_MAX_COUNT = 10

nombre max de tentatives successives de connection

CONNECTION_REFUSED = 'CONNECTION_REFUSED'

connection refusée par le serveur

ERRNO_CON = 'ERRNO_CON'

erreur de type connection

ERRNO_DATA = 'ERRNO_DATA'

erreur de donnée

ERRNO_DICT = {1: {'desc': 'Operation not permitted', 'errno-str': 'EPERM', 'fatal': True, 'os': 'linux, windows', 'type': 'ERRNO_SYS'}, 4: {'desc': 'Interrupted system call', 'errno-str': 'EINTR', 'fatal': False, 'os': 'linux, windows', 'type': 'ERRNO_SYS'}, 5: {'desc': 'I/O error', 'errno-str': 'EIO', 'fatal': True, 'os': 'linux, windows', 'type': 'ERRNO_SYS'}, 6: {'desc': 'No such device or address', 'errno-str': 'ENXIO', 'fatal': True, 'os': 'linux, windows', 'type': 'ERRNO_CON'}, 10: {'desc': 'No child processes', 'errno-str': 'ECHILD', 'fatal': True, 'os': 'linux, windows', 'type': 'ERRNO_SYS'}, 11: {'desc': 'Try again', 'errno-str': 'EAGAIN', 'fatal': False, 'os': 'linux, windows', 'type': 'ERRNO_SYS'}, 12: {'desc': 'Out of memory', 'errno-str': 'ENOMEM', 'fatal': False, 'os': 'linux, windows', 'type': 'ERRNO_SYS'}, 13: {'desc': 'Permission denied', 'errno-str': 'EACCES', 'fatal': True, 'os': 'linux, windows', 'type': 'ERRNO_SYS'}, 14: {'desc': 'Bad address', 'errno-str': 'EFAULT', 'fatal': True, 'os': 'linux, windows', 'type': 'ERRNO_CON'}, 32: {'desc': 'Broken pipe', 'errno-str': 'EPIPE', 'fatal': True, 'os': 'linux, windows', 'type': 'ERRNO_CON'}, 53: {'desc': 'Invalid request descriptor', 'errno-str': 'EBADR', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 56: {'desc': 'Invalid request code', 'errno-str': 'EBADRQC', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 61: {'desc': 'No data available', 'errno-str': 'ENODATA', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_DATA'}, 62: {'desc': 'Timer expired', 'errno-str': 'ETIME', 'fatal': False, 'os': 'linux', 'type': 'ERRNO_SYS'}, 64: {'desc': 'Machine is not on the network', 'errno-str': 'ENONET', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_NET'}, 70: {'desc': 'Communication error on send', 'errno-str': 'ECOMM', 'fatal': False, 'os': 'linux', 'type': 'ERRNO_SEND'}, 71: {'desc': 'Protocol error', 'errno-str': 'EPROTO', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_NET'}, 76: {'desc': 'Name not unique on network', 'errno-str': 'ENOTUNIQ', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_NET'}, 77: {'desc': 'File descriptor in bad state', 'errno-str': 'EBADFD', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 78: {'desc': 'Remote address changed', 'errno-str': 'EREMCHG', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 85: {'desc': 'Interrupted system call should be restarted', 'errno-str': 'ERESTART', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_SYS'}, 86: {'desc': 'Streams pipe error', 'errno-str': 'ESTRPIPE', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 87: {'desc': 'Too many users', 'errno-str': 'EUSERS', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_SYS'}, 88: {'desc': 'Socket operation on non-socket', 'errno-str': 'ENOTSOCK', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 89: {'desc': 'Destination address required', 'errno-str': 'EDESTADDRREQ', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 90: {'desc': 'Message too long', 'errno-str': 'EMSGSIZE', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_DATA'}, 91: {'desc': 'Protocol wrong type for socket', 'errno-str': 'EPROTOTYPE', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 92: {'desc': 'Protocol not available', 'errno-str': 'ENOPROTOOPT', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 93: {'desc': 'Protocol not supported', 'errno-str': 'EPROTONOSUPPORT', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 94: {'desc': 'Socket type not supported', 'errno-str': 'ESOCKTNOSUPPORT', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 96: {'desc': 'Protocol family not supported', 'errno-str': 'EPFNOSUPPORT', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 97: {'desc': 'Address family not supported by protocol', 'errno-str': 'EAFNOSUPPORT', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 98: {'desc': 'Address already in use', 'errno-str': 'EADDRINUSE', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 100: {'desc': 'Network is down', 'errno-str': 'ENETDOWN', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_NET'}, 101: {'desc': 'Network is unreachable', 'errno-str': 'ENETUNREACH', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_NET'}, 102: {'desc': 'Network dropped connection because of reset', 'errno-str': 'ENETRESET', 'fatal': False, 'os': 'linux', 'type': 'ERRNO_NET'}, 103: {'desc': 'Software caused connection abort', 'errno-str': 'ECONNABORTED', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 104: {'desc': 'Connection reset by peer', 'errno-str': 'ECONNRESET', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 105: {'desc': 'No buffer space available', 'errno-str': 'ENOBUFS', 'fatal': False, 'os': 'linux', 'type': 'ERRNO_CON'}, 106: {'desc': 'Transport endpoint is already connected', 'errno-str': 'EISCONN', 'fatal': False, 'os': 'linux', 'type': 'ERRNO_CON'}, 107: {'desc': 'Transport endpoint is not connected', 'errno-str': 'ENOTCONN', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 108: {'desc': 'Cannot send after transport endpoint shutdown', 'errno-str': 'ESHUTDOWN', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 110: {'desc': 'Connection timed out', 'errno-str': 'ETIMEDOUT', 'fatal': False, 'os': 'linux', 'type': 'ERRNO_CON'}, 111: {'desc': 'Connection refused', 'errno-str': 'ECONNREFUSED', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_CON'}, 112: {'desc': 'Host is down', 'errno-str': 'EHOSTDOWN', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_NET'}, 113: {'desc': 'No route to host', 'errno-str': 'EHOSTUNREACH', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_SYS'}, 114: {'desc': 'Operation already in progress', 'errno-str': 'EALREADY', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_SYS'}, 115: {'desc': 'Operation now in progress', 'errno-str': 'EINPROGRESS', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_SYS'}, 120: {'desc': 'No data available', 'errno-str': 'ENODATA', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_DATA'}, 121: {'desc': 'Remote I/O error', 'errno-str': 'EREMOTEIO', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_SYS'}, 122: {'desc': 'Quota exceeded', 'errno-str': 'EDQUOT', 'fatal': True, 'os': 'linux', 'type': 'ERRNO_SYS'}, 134: {'desc': 'Protocol error', 'errno-str': 'EPROTO', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_NET'}, 137: {'desc': 'Timer expired', 'errno-str': 'ETIME', 'fatal': False, 'os': 'windows', 'type': 'ERRNO_SYS'}, 10004: {'desc': 'Interrupted system call', 'errno-str': 'WSAEINTR', 'fatal': False, 'os': 'windows', 'type': 'ERRNO_SYS'}, 10013: {'desc': 'Permission denied', 'errno-str': 'WSAEACCES', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_SYS'}, 10014: {'desc': 'Bad address', 'errno-str': 'WSAEFAULT', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_CON'}, 10036: {'desc': 'Operation now in progress', 'errno-str': 'WSAEINPROGRESS', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_SYS'}, 10037: {'desc': 'Operation already in progress', 'errno-str': 'WSAEALREADY', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_SYS'}, 10038: {'desc': 'Socket operation on non-socket', 'errno-str': 'WSAENOTSOCK', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_CON'}, 10039: {'desc': 'Destination address required', 'errno-str': 'WSAEDESTADDRREQ', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_CON'}, 10040: {'desc': 'Message too long', 'errno-str': 'WSAEMSGSIZE', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_DATA'}, 10041: {'desc': 'Protocol wrong type for socket', 'errno-str': 'WSAEPROTOTYPE', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_CON'}, 10042: {'desc': 'Protocol not available', 'errno-str': 'WSAENOPROTOOPT', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_CON'}, 10043: {'desc': 'Protocol not supported', 'errno-str': 'WSAEPROTONOSUPPORT', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_CON'}, 10044: {'desc': 'Socket type not supported', 'errno-str': 'WSAESOCKTNOSUPPORT', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_CON'}, 10046: {'desc': 'Protocol family not supported', 'errno-str': 'WSAEPFNOSUPPORT', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_CON'}, 10047: {'desc': 'Address family not supported by protocol', 'errno-str': 'WSAEAFNOSUPPORT', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_CON'}, 10048: {'desc': 'Address already in use', 'errno-str': 'WSAEADDRINUSE', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_CON'}, 10050: {'desc': 'Network is down', 'errno-str': 'WSAENETDOWN', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_NET'}, 10051: {'desc': 'Network is unreachable', 'errno-str': 'WSAENETUNREACH', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_NET'}, 10052: {'desc': 'Network dropped connection because of reset', 'errno-str': 'WSAENETRESET', 'fatal': False, 'os': 'windows', 'type': 'ERRNO_NET'}, 10053: {'desc': 'Software caused connection abort', 'errno-str': 'WSAECONNABORTED', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_CON'}, 10054: {'desc': 'Connection reset by peer', 'errno-str': 'WSAECONNRESET', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_CON'}, 10055: {'desc': 'No buffer space available', 'errno-str': 'WSAENOBUFS', 'fatal': False, 'os': 'windows', 'type': 'ERRNO_CON'}, 10056: {'desc': 'Transport endpoint is already connected', 'errno-str': 'WSAEISCONN', 'fatal': False, 'os': 'windows', 'type': 'ERRNO_CON'}, 10057: {'desc': 'Transport endpoint is not connected', 'errno-str': 'WSAENOTCONN', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_CON'}, 10058: {'desc': 'Cannot send after transport endpoint shutdown', 'errno-str': 'WSAESHUTDOWN', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_CON'}, 10060: {'desc': 'Connection timed out', 'errno-str': 'WSAETIMEDOUT', 'fatal': False, 'os': 'windows', 'type': 'ERRNO_CON'}, 10061: {'desc': 'Connection refused', 'errno-str': 'WSAECONNREFUSED', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_CON'}, 10064: {'desc': 'Host is down', 'errno-str': 'WSAEHOSTDOWN', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_NET'}, 10065: {'desc': 'No route to host', 'errno-str': 'WSAEHOSTUNREACH', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_SYS'}, 10068: {'desc': 'Too many users', 'errno-str': 'WSAEUSERS', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_SYS'}, 10069: {'desc': 'Quota exceeded', 'errno-str': 'WSAEDQUOT', 'fatal': True, 'os': 'windows', 'type': 'ERRNO_SYS'}}

dict de qualification des erreurs

ERRNO_NET = 'ERRNO_NET'

erreur de type réseau

ERRNO_SEND = 'ERRNO_SEND'

erreur d’envoi

ERRNO_SYS = 'ERRNO_SYS'

erreur de type système

INACTIVE_COUNT = 20

nombre d’erreurs à partir duquel on considère une connection comme probablement inactive

MSGUID_INCREMENT = 90745

incrément d’uid de messages

NEED_CONFIRMATION = 'NEED_CONFIRMATION'

indique que le message nécessite un accusé de réception

PING = 'PING'

vérification de connection

RECONNECTION_DELAY = 0.05

délai avant tentative de re connection

RECONNECTION_TIMEOUT = 10

time out de reconnection (par défaut 120 sec, on le réduit)

REGEXP_CMD = re.compile('\\[cmd:[A-Za-z0-9_]*\\|([A-Za-z0-9_]*=[A-Za-z0-9_\\.]*&?)*\\]')

Création et compilation de la regex d’interprétation des commandes

REGEXP_MSGUID = re.compile('<MSGUID=[A-Za-z0-9_]*>')

Création et compilation de la regex des identifiants uniques de messages

RESEND_DELAY = 0.05

délai avant nouvelle tentative d’envoi

SELECT_TIMEOUT = 0.05

Timeout select

SEND_MAX_COUNT = 15

nombre max de tentatives d’envoi

SERVER_CONNECTED = 'SERVER_CONNECTED'

le serveur est connecté

SERVER_DISCONNECTED = 'SERVER_DISCONNECTED'

le serveur se déconnecte mais ne s’arrête pas totalement

SERVER_SHUTDOWN = 'SERVER_SHUTDOWN'

le serveur va s’arrêter

SET_CLIENT_READ_INFOS = 'SET_CLIENT_READ_INFOS'

indique les données de connexion à client.socket_read

STATUS_CONNECTED = 'STATUS_CONNECTED'

connection active

STATUS_DISCONNECTED = 'STATUS_DISCONNECTED'

arrêt temporaire

STATUS_ERROR_CONNECTION = 'STATUS_ERROR_CONNECTION'

erreur

STATUS_REJECTED = 'STATUS_REJECTED'

connection refusée par le serveur

STATUS_SHUTDOWN = 'STATUS_SHUTDOWN'

arrêt définiif

STATUS_UNDEFINED = 'STATUS_UNDEFINED'

probablement en erreur

UID_SET_BY_SERVER = 'UID_SET_BY_SERVER'

pour informer BUS/externalHandler de l’affectation

Methods Documentation

classmethod create_cmd_msg(code, kwargs=None)[source]

Formate un message de commande client/serveur.

Exemple d’entête ajouté : [cmd:CODE_TEST|v1=5&v2=0.0.0.0]

classmethod create_dict_receive()[source]

Génère le dictionnaire non renseigné destiné à retenir les données d’une requête reçue.

dictreceive = {
        "requestvalide": True,    # validité de la requête
        "AR_sended":False,        # accusé de réception envoyé sans erreur
        "sock": None,             # socket destinataire
        "uid": None               # uid du destinataire
        "msg": None,              # message reçu
        "listeparsedict": None,   # liste de blocs parsés (dicts)
        "code_cmd": None,         # code commande
        "dict_args": None,        # ensemble de clefs/valeurs sous forme de dict
        "msg_except_cmd": None,   # message sans code de commande ni uid de message
        "msguid": None,           # uid de message
        "errors": None,           # liste d'erreurs
        "complete": False,        # indicateur de complétion
        }
classmethod create_indexed_request(msg, uid)[source]

Indexe, découpe au besoin la chaine msg envoyée par l’objet d’id uid.

Renvoie

clef de comparaison pour AR (longueur du message), list: une liste de blocs convertis en bytes.

Type renvoyé

msglen

classmethod create_test_msg(confirmrecept=True, latin1=True)[source]

Crée un message de test d’une longueur > buffsize pour forcer l’envoi de plusieurs blocs

Paramètres
  • confirmrecept (bool) – ajoute le code d’accusé de réception

  • latin1 (bool) – limite les caractères à la plage latin-1, plage unicode complète sinon

Rq: les chars latin-1 sont codés 1 byte / char, les chars unicodes peuvent aller jusqu’à 4 bytes / char mais peuvent lever une exception lors d’un print (surrogates).

classmethod get_ip()[source]

Retourne l’ip primaire, à la différence de socket.gethostbyname(socket.gethostname()) qui retourne plus systématiquement 127.0.x.1

From https://stackoverflow.com/questions/166506/finding-local-ip-addresses-using-pythons-stdlib by Jamieson Becker

classmethod is_error_fatal(error)[source]

Indique si l’erreur reçue est fatale ou bien si l’on peut ré essayer l’action tentée.

Paramètres

error (OSError ou autre) –

Renvoie

False par défaut

Type renvoyé

boolean

classmethod mark_msg_as_unique(asker, msg)[source]

Ajoute un identifiant unique de message à msg :

Paramètres
  • asker – serveur ou client à l’origine de la demande

  • msg – chaine à marquer

Simplification : on ajoute la marque <MSGUID=valeur> en fin de message

classmethod prefix_msg_with_code(msg, code, kwargs=None)[source]

Préfixe le msg avec un entête de commande.

classmethod receive_indexed_request(sock)[source]

Prend en charge la réception sur la socket sock d’une série de requètes indéxées associées à un message.

Retourne le dict généré par CustomRequestHelper.create_dict_receive

classmethod send_indexed_request(sock, bytesblocs)[source]

Prend en charge l’envoi via la socket sock de la liste de blocs binaires listbyteblocs.

Paramètres

bytesblocs – liste de blocs binaires générée par CustomRequestHelper.create_indexed_request

Retourne None ou la première erreur survenue sinon (dès cette première erreur le process d’envoi des blocs a été interrompu).

classmethod split_cmd_and_msg(msg)[source]

Sépare code de commande, dict d’arguments et fin du message dans un message parsé.

Renvoie

code, **kwargs, msg sans cmd

Type renvoyé

tuple

classmethod split_unique_mark_and_msg(msg)[source]

Sépare identifiants unique de message et message initial.