wasp_general.network.messenger package¶
Submodules¶
wasp_general.network.messenger.auth module¶
wasp_general.network.messenger.coders module¶
-
class
wasp_general.network.messenger.coders.WMessengerAESLayer[source]¶ Bases:
wasp_general.network.messenger.layers.WMessengerOnionCoderLayerProtoWMessengerOnionCoderLayerProtoclass implementation. This class encrypts/decrypts message with the specified AES cipher-
decode(envelope, session, aes_cipher=None, **kwargs)[source]¶ WMessengerOnionCoderLayerProto.decode()method implementation.Parameters: - envelope – original envelope
- session – original session
- aes_cipher – cipher to use
- kwargs – additional arguments
Returns: WMessengerBytesEnvelope
-
encode(envelope, session, aes_cipher=None, **kwargs)[source]¶ WMessengerOnionCoderLayerProto.encode()method implementation.Parameters: - envelope – original envelope
- session – original session
- aes_cipher – cipher to use
- kwargs – additional arguments
Returns: WMessengerBytesEnvelope
-
-
class
wasp_general.network.messenger.coders.WMessengerBase64Layer[source]¶ Bases:
wasp_general.network.messenger.layers.WMessengerOnionCoderLayerProtoWMessengerOnionCoderLayerProtoclass implementation. This class translate binary message to the corresponding base64 encoded bytes, or decodes it from base64 encoded bytes to the original binary representation.-
decode(envelope, session, **kwargs)[source]¶ WMessengerOnionCoderLayerProto.decode()method implementation.Parameters: - envelope – original envelope
- session – original session
- kwargs – additional arguments
Returns: WMessengerBytesEnvelope
-
encode(envelope, session, **kwargs)[source]¶ WMessengerOnionCoderLayerProto.encode()method implementation.Parameters: - envelope – original envelope
- session – original session
- kwargs – additional arguments
Returns: WMessengerBytesEnvelope
-
-
class
wasp_general.network.messenger.coders.WMessengerEncodingLayer[source]¶ Bases:
wasp_general.network.messenger.layers.WMessengerOnionCoderLayerProtoThis layer can encode str-object to the related encoding (to the bytes-object). Or decode bytes-object from the specified encoding (from bytes-object to str-object)
-
decode(envelope, session, encoding=None, **kwargs)[source]¶ WMessengerOnionCoderLayerProto.decode()method implementation.Parameters: - envelope – original envelope
- session – original session
- encoding – encoding to use (default is ‘utf-8’)
- kwargs – additional arguments
Returns: WMessengerTextEnvelope
-
encode(envelope, session, encoding=None, **kwargs)[source]¶ WMessengerOnionCoderLayerProto.encode()method implementation.Parameters: - envelope – original envelope
- session – original session
- encoding – encoding to use (default is ‘utf-8’)
- kwargs – additional arguments
Returns: WMessengerBytesEnvelope
-
-
class
wasp_general.network.messenger.coders.WMessengerFixedModificationLayer[source]¶ Bases:
wasp_general.network.messenger.layers.WMessengerOnionCoderLayerProtoWMessengerOnionCoderLayerProtoclass implementation. This class applies fixed modification to specified messages.In
WMessengerFixedModificationLayer.encode()method this class appends “header” to the message start or appends “tail” to the message end. One of them must be specified.For
WMessengerTextEnvelopeenvelope, “header” or “tail” must be “str” type. ForWMessengerBytesEnvelopeenvelope, “header” or “tail” must be “bytes” type.-
class
Target[source]¶ Bases:
enum.EnumModification mode. Specifies whether modification code must be appended to start or to the end of a message
-
head= 1¶ Modification code must be inserted to a message start
-
tail= 2¶ Modification code must be added to a message end
-
-
decode(envelope, session, target=None, modification_code=None, **kwargs)[source]¶ Methods checks envelope for ‘modification_code’ existence and removes it.
Parameters: - envelope – original envelope
- session – original session
- target – flag, that specifies whether code must be searched and removed at the start or at the end
- modification_code – code to search/remove
- kwargs – additional arguments
Returns: WMessengerTextEnvelope or WMessengerBytesEnvelope (depends on the original envelope)
-
encode(envelope, session, target=None, modification_code=None, **kwargs)[source]¶ Methods appends ‘modification_code’ to the specified envelope.
Parameters: - envelope – original envelope
- session – original session
- target – flag, that specifies whether code must be appended to the start or to the end
- modification_code – code to append
- kwargs – additional arguments
Returns: WMessengerTextEnvelope or WMessengerBytesEnvelope (depends on the original envelope)
-
class
-
class
wasp_general.network.messenger.coders.WMessengerHexLayer[source]¶ Bases:
wasp_general.network.messenger.layers.WMessengerOnionCoderLayerProtoWMessengerOnionCoderLayerProtoclass implementation. This class translate message to corresponding hex-string, or decodes it from hex-string to original binary representation.-
decode(envelope, session, **kwargs)[source]¶ WMessengerOnionCoderLayerProto.decode()method implementation.Parameters: - envelope – original envelope
- session – original session
- kwargs – additional arguments
Returns: WMessengerBytesEnvelope
-
encode(envelope, session, **kwargs)[source]¶ WMessengerOnionCoderLayerProto.encode()method implementation.Parameters: - envelope – original envelope
- session – original session
- kwargs – additional arguments
Returns: WMessengerTextEnvelope
-
-
class
wasp_general.network.messenger.coders.WMessengerRSALayer[source]¶ Bases:
wasp_general.network.messenger.layers.WMessengerOnionCoderLayerProtoWMessengerOnionCoderLayerProtoclass implementation. This class encrypts/decrypts message with specified RSA cipher-
decode(envelope, session, private_key=None, sha_digest_size=32, **kwargs)[source]¶ WMessengerOnionCoderLayerProto.decode()method implementation.Parameters: - envelope – original envelope
- session – original session
- private_key – private key to decrypt
- sha_digest_size – SHA digest size to use
- kwargs – additional arguments
Returns: WMessengerBytesEnvelope
-
encode(envelope, session, public_key=None, sha_digest_size=32, **kwargs)[source]¶ WMessengerOnionCoderLayerProto.encode()method implementation.Parameters: - envelope – original envelope
- session – original session
- public_key – public key to encrypt
- sha_digest_size – SHA digest size to use
- kwargs – additional arguments
Returns: WMessengerBytesEnvelope
-
wasp_general.network.messenger.composer module¶
-
class
wasp_general.network.messenger.composer.WMessengerComposerLayer[source]¶ Bases:
wasp_general.network.messenger.proto.WMessengerOnionLayerProto-
process(envelope, session, mode=None, composer_factory=None, **kwargs)[source]¶ WMessengerOnionLayerProto.process()implementation
-
wasp_general.network.messenger.envelope module¶
-
class
wasp_general.network.messenger.envelope.WMessengerBytesEnvelope(data, meta=None)[source]¶ Bases:
wasp_general.network.messenger.envelope.WMessengerEnvelopeEnvelope for bytes-objects
-
class
wasp_general.network.messenger.envelope.WMessengerDictEnvelope(data, meta=None)[source]¶ Bases:
wasp_general.network.messenger.envelope.WMessengerEnvelopeEnvelope for dict-objects (dictionary objects)
-
class
wasp_general.network.messenger.envelope.WMessengerEnvelope(data, meta=None)[source]¶ Bases:
wasp_general.network.messenger.proto.WMessengerEnvelopeProtoSimple
WMessengerEnvelopeProtoimplementation. “Meta-dictionary” is used as is without any restrictions or limitations, so any further envelopes (envelopes that uses this envelope as meta) can rewrite or remove saved information
-
class
wasp_general.network.messenger.envelope.WMessengerTextEnvelope(data, meta=None)[source]¶ Bases:
wasp_general.network.messenger.envelope.WMessengerEnvelopeEnvelope for str-objects
wasp_general.network.messenger.layers module¶
-
class
wasp_general.network.messenger.layers.WMessengerOnionCoderLayerProto(name)[source]¶ Bases:
wasp_general.network.messenger.layers.WMessengerOnionModeLayerProtoClass for layers, that are used for encryption/decryption, encoding/decoding. This layer class works with strings and bytes and as a result generates strings and bytes
-
class
Mode[source]¶ Bases:
enum.EnumSpecifies layers mode
-
decode= 2¶ Decryption/decoding mode
-
encode= 1¶ Encryption/encoding mode
-
-
class
-
class
wasp_general.network.messenger.layers.WMessengerOnionModeLayerProto(name, mode_cls)[source]¶ Bases:
wasp_general.network.messenger.proto.WMessengerOnionLayerProtoSimple WMessengerOnionLayerProto implementation, that can have different message processing mechanisms (depends on the “mode” value). This “mode” must be always specified as mode argument in
WMessengerOnionModeLayerProto.process()method. This argument must be the same type (or be a subclass of the type), that is specified in constructor-
process(envelope, session, mode=None, **kwargs)[source]¶ WMessengerOnionLayerProto.process()implementation
-
-
class
wasp_general.network.messenger.layers.WMessengerOnionPackerLayerProto(name)[source]¶ Bases:
wasp_general.network.messenger.layers.WMessengerOnionModeLayerProtoClass for layers, that are used for packing/unpacking, serializing/de-serializing. This layer class can pack “any” envelope and produce WMessengerTextEnvelope or WMessengerBytesEnvelope or can unpack WMessengerTextEnvelope (or WMessengerBytesEnvelope) to “any” object
(not “any” but the most)
-
class
Mode[source]¶ Bases:
enum.EnumSpecifies layers mode
-
pack= 1¶ Encryption/encoding mode
-
unpack= 2¶ Decryption/decoding mode
-
-
class
-
class
wasp_general.network.messenger.layers.WMessengerSimpleCastingLayer[source]¶ Bases:
wasp_general.network.messenger.proto.WMessengerOnionLayerProto
wasp_general.network.messenger.onion module¶
-
class
wasp_general.network.messenger.onion.WMessengerOnion(*layers)[source]¶ Bases:
wasp_general.network.messenger.proto.WMessengerOnionProtoWMessengerOnionProtoimplementation. This class holds layers (WMessengerOnionLayerProtoclass) that can be used for message processing.-
add_layers(*layers)[source]¶ Append given layers to this onion
Parameters: layers – layer to add Returns: None
-
layer(layer_name)[source]¶ WMessengerOnionProto.layer()method implementation.
-
wasp_general.network.messenger.packers module¶
-
class
wasp_general.network.messenger.packers.WMessengerJSONPacker[source]¶ Bases:
wasp_general.network.messenger.layers.WMessengerOnionPackerLayerProto
wasp_general.network.messenger.proto module¶
-
class
wasp_general.network.messenger.proto.WMessengerEnvelopeProto[source]¶ Bases:
objectEach real processed message is wrapped in this class. This helps in object type checking (layers can check if message is a subclass of some envelope subclass) and helps to keep meta data, that may be generated/processed by layers
-
message()[source]¶ Return real message. It can be anything - string, bytes, structure…
Returns: any-type object or None
-
meta()[source]¶ Return message meta data (dictionary object). For dictionary keys, values usage scenario see current implementation (
WMessengerEnvelope)Returns: dict
-
-
class
wasp_general.network.messenger.proto.WMessengerOnionLayerProto(name)[source]¶ Bases:
objectMessenger layer, that do one simple job like encryption, encoding, parsing and etc.
-
process(envelope, session, **kwargs)[source]¶ Parse/combine, decrypt/encrypt, decode/encode message.
Parameters: - envelope – message to parse/combine/decrypt/encrypt/decode/encode
- session – related session
- kwargs – arguments that help to customize a layer (they are set in
WMessengerOnionSessionFlowProto.IteratorInfoobjects)
Returns: WMessengerEnvelopeProto
-
-
class
wasp_general.network.messenger.proto.WMessengerOnionProto[source]¶ Bases:
objectAbstract class for onion-messenger. Messengers job is divided into onions layers. Where each layer do its own small job. Layers are united in a session, that is used for message parsing or generation. Each layer has a name, which must be unique within single onion.
Possible layer are transport encryption/decryption layers (rsa, aes,…), data encoding/decoding layers (base64, utf8,…), structure packing/unpacking layers (json, pickle, …), lexical layers (shlex, json, pickle, …), authentication/authorization layers and many more.
-
class
wasp_general.network.messenger.proto.WMessengerOnionSessionFlowProto[source]¶ Bases:
objectThis class is used in the following class
WMessengerOnionSessionPrototo determine layer execution order.-
class
Iterator(layer_name, next_iterator=None, **kwargs)[source]¶ Bases:
wasp_general.network.messenger.proto.IteratorInfoIterator that is used to determine layers call sequence. Each iterator holds information for current layer call (
WMessengerOnionSessionFlowProto.IteratorInfo) and layer to be called next. Iterators next layer (next iterator) can be defined at a runtime.
-
class
-
class
wasp_general.network.messenger.proto.WMessengerOnionSessionProto[source]¶ Bases:
objectClass represent messenger single session. Inside a onion messenger, this class process single message.
wasp_general.network.messenger.session module¶
-
class
wasp_general.network.messenger.session.WMessengerOnionSession(onion, session_flow)[source]¶ Bases:
wasp_general.network.messenger.proto.WMessengerOnionSessionProtoWMessengerOnionSessionProtoclass implementation. This class executes layers from onion in order they described inWMessengerOnionSessionFlowclass-
onion()[source]¶ WMessengerOnionSessionProto.onion()method implementation.
-
process(envelope)[source]¶ WMessengerOnionSessionProto.process()method implementation.
-
session_flow()[source]¶ Return related
WMessengerOnionSessionFlowobject :return: WMessengerOnionSessionFlow
-
-
class
wasp_general.network.messenger.session.WMessengerOnionSessionFlexFlow(*flow_comparator_pairs, default_flow=None)[source]¶ Bases:
wasp_general.network.messenger.proto.WMessengerOnionSessionFlowProtoFlexible flow that choose one of the given flows depends on the given envelope. Flows are passed as pairs (pair of flow and object that checks the envelope) and as default flow (flow that is selected, if envelope wasn’t “matched” to any flow)
-
class
FlowComparatorPair(comparator, flow)[source]¶ Bases:
objectPair that links comparator and flow
-
class
ReComparator(pattern)[source]¶ Bases:
wasp_general.network.messenger.session.MessageComparatorSimple
WMessengerOnionSessionFlexFlow.MessageComparatorimplementation, that checks if envelope (text or binary) matches the given regular expression-
match(envelope)[source]¶ WMessengerOnionSessionFlexFlow.MessageComparator.match()implementation
-
-
class
-
class
wasp_general.network.messenger.session.WMessengerOnionSessionFlow(iterator)[source]¶ Bases:
wasp_general.network.messenger.proto.WMessengerOnionSessionFlowProtoSimple
WMessengerOnionSessionFlowProtoimplementation. This class returns iterator, that was given in constructor-
iterator(envelope)[source]¶ WMessengerOnionSessionFlowProto.iterator()implementation
-
classmethod
sequence(*info)[source]¶ Useful method to generate iterator. It is generated by chaining the given info. If no info is specified, then None is returned
Parameters: info – iterator info sequence Returns: WMessengerOnionSessionFlowProto.Iterator or None
-
static
sequence_flow(*info)[source]¶ Same method as
WMessengerOnionSessionFlow.sequence(), but as a resultWMessengerOnionSessionFlowobject created (if no info is specified, then None is returned)Parameters: info – iterator info sequence Returns: WMessengerOnionSessionFlow or None
-
-
class
wasp_general.network.messenger.session.WMessengerOnionSessionFlowSequence(*flows)[source]¶ Bases:
wasp_general.network.messenger.proto.WMessengerOnionSessionFlowProtoSession flow that “iterates” over flows, that was given in constructor. So this class returns iterator, that smoothly iterates a iterator from the first given flow, then from the second one, and so on. If no flows are specified in a constructor, then
WMessengerOnionSessionFlowSequence.iterator()method returns None. InWMessengerOnionSessionFlowSequence.iterator()method no iterator is returned if all of the given flows doesn’t return iterator for the specified envelope.-
class
FlowSequenceIterator(info, *flows)[source]¶ Bases:
wasp_general.network.messenger.proto.IteratorIterator that has it’s own information and sequence of flows to iterate. During iteration (in
WMessengerOnionSessionFlowSequence.FlowSequenceIterator.next()method) this class doesn’t return the following iterator, but returns itself instead. By eachWMessengerOnionSessionFlowSequence.FlowSequenceIterator.next()call this object saves a “real” iterator and saves its state (layer name and arguments), so when layer information is requested, information from the “real” iterator is returned-
layer_args()[source]¶ WMessengerOnionSessionFlowProto.IteratorInfo.layer_args()implementation
-
layer_name()[source]¶ WMessengerOnionSessionFlowProto.IteratorInfo.layer_name()implementation
-
next(envelope)[source]¶ WMessengerOnionSessionFlowProto.Iterator.next()implementation
-
-
class
wasp_general.network.messenger.transport module¶
-
class
wasp_general.network.messenger.transport.WMessengerSendAgentLayer[source]¶ Bases:
wasp_general.network.messenger.proto.WMessengerOnionLayerProto
-
class
wasp_general.network.messenger.transport.WMessengerSyncReceiveAgentLayer[source]¶ Bases:
wasp_general.network.messenger.proto.WMessengerOnionLayerProto