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.WMessengerOnionCoderLayerProto

WMessengerOnionCoderLayerProto class 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.WMessengerOnionCoderLayerProto

WMessengerOnionCoderLayerProto class 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.WMessengerOnionCoderLayerProto

This 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.WMessengerOnionCoderLayerProto

WMessengerOnionCoderLayerProto class 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 WMessengerTextEnvelope envelope, “header” or “tail” must be “str” type. For WMessengerBytesEnvelope envelope, “header” or “tail” must be “bytes” type.

class Target[source]

Bases: enum.Enum

Modification 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 wasp_general.network.messenger.coders.WMessengerHexLayer[source]

Bases: wasp_general.network.messenger.layers.WMessengerOnionCoderLayerProto

WMessengerOnionCoderLayerProto class 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.WMessengerOnionCoderLayerProto

WMessengerOnionCoderLayerProto class 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

class Mode[source]

Bases: enum.Enum

An enumeration.

compose = 1
decompose = 2
compose(envelope, session, composer_factory, **kwargs)[source]
decompose(envelope, session, composer_factory, **kwargs)[source]
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.WMessengerEnvelope

Envelope for bytes-objects

class wasp_general.network.messenger.envelope.WMessengerDictEnvelope(data, meta=None)[source]

Bases: wasp_general.network.messenger.envelope.WMessengerEnvelope

Envelope for dict-objects (dictionary objects)

class wasp_general.network.messenger.envelope.WMessengerEnvelope(data, meta=None)[source]

Bases: wasp_general.network.messenger.proto.WMessengerEnvelopeProto

Simple WMessengerEnvelopeProto implementation. “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

add_meta(key, value)[source]

Add meta-information (value) for the given key

Parameters:
  • key – meta-key
  • value – meta-value
Returns:

None

message()[source]

Return original message

Returns:any type
meta()[source]

Return envelope dictionary copy

Returns:dict
class wasp_general.network.messenger.envelope.WMessengerTextEnvelope(data, meta=None)[source]

Bases: wasp_general.network.messenger.envelope.WMessengerEnvelope

Envelope for str-objects

wasp_general.network.messenger.layers module

class wasp_general.network.messenger.layers.WMessengerOnionCoderLayerProto(name)[source]

Bases: wasp_general.network.messenger.layers.WMessengerOnionModeLayerProto

Class 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.Enum

Specifies layers mode

decode = 2

Decryption/decoding mode

encode = 1

Encryption/encoding mode

decode(envelope, session, **kwargs)[source]

Decrypt/decode message

Parameters:
  • envelope – message to decrypt/decode
  • session – original session
Returns:

WMessengerTextEnvelope or WMessengerBytesEnvelope

encode(envelope, session, **kwargs)[source]

Encrypt/encode message

Parameters:
  • envelope – message to encrypt/encode
  • session – original session
Returns:

WMessengerTextEnvelope or WMessengerBytesEnvelope

class wasp_general.network.messenger.layers.WMessengerOnionModeLayerProto(name, mode_cls)[source]

Bases: wasp_general.network.messenger.proto.WMessengerOnionLayerProto

Simple 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.WMessengerOnionModeLayerProto

Class 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.Enum

Specifies layers mode

pack = 1

Encryption/encoding mode

unpack = 2

Decryption/decoding mode

pack(envelope, session, **kwargs)[source]

Pack/serialize message

Parameters:
  • envelope – message to pack/serialize
  • session – original session
Returns:

WMessengerTextEnvelope or WMessengerBytesEnvelope

unpack(envelope, session, **kwargs)[source]

Unpack/de-serialize message

Parameters:
  • envelope – message to unpack/de-serialize
  • session – original session
Returns:

WMessengerEnvelopeProto

class wasp_general.network.messenger.layers.WMessengerSimpleCastingLayer[source]

Bases: wasp_general.network.messenger.proto.WMessengerOnionLayerProto

process(envelope, session, from_envelope=None, to_envelope=None, **kwargs)[source]

wasp_general.network.messenger.onion module

class wasp_general.network.messenger.onion.WMessengerOnion(*layers)[source]

Bases: wasp_general.network.messenger.proto.WMessengerOnionProto

WMessengerOnionProto implementation. This class holds layers (WMessengerOnionLayerProto class) 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.

layers_names()[source]

WMessengerOnionProto.layer_names() method implementation.

wasp_general.network.messenger.packers module

class wasp_general.network.messenger.packers.WMessengerJSONPacker[source]

Bases: wasp_general.network.messenger.layers.WMessengerOnionPackerLayerProto

class JSONEncoder(skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)[source]

Bases: json.encoder.JSONEncoder

default(o)[source]
pack(envelope, session, **kwargs)[source]
unpack(envelope, session, **kwargs)[source]

wasp_general.network.messenger.proto module

class wasp_general.network.messenger.proto.WMessengerEnvelopeProto[source]

Bases: object

Each 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: object

Messenger layer, that do one simple job like encryption, encoding, parsing and etc.

name()[source]

Return the layer name

Returns:str
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.IteratorInfo objects)
Returns:

WMessengerEnvelopeProto

class wasp_general.network.messenger.proto.WMessengerOnionProto[source]

Bases: object

Abstract 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.

layer(layer_name)[source]

Return messengers layer by its name

Parameters:layer_name – name of a layer
Returns:WMessengerOnionLayerProto instance
layers_names()[source]

Available layers names

Returns:list of str
class wasp_general.network.messenger.proto.WMessengerOnionSessionFlowProto[source]

Bases: object

This class is used in the following class WMessengerOnionSessionProto to determine layer execution order.

class Iterator(layer_name, next_iterator=None, **kwargs)[source]

Bases: wasp_general.network.messenger.proto.IteratorInfo

Iterator 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.

next(envelope)[source]

Return next layer (iterator) to be called or None to stop execution

Parameters:envelope – message that was processed by a layer specified in this class
Returns:WMessengerOnionSessionFlowProto.Iterator or None
class IteratorInfo(layer_name, **kwargs)[source]

Bases: object

Class that describes single layer call

layer_args()[source]

Return layer arguments

Returns:dict
layer_name()[source]

Return layer name

Returns:str
iterator(envelope)[source]

Return iterator to be used for message processing. Iterator may depend on incoming message

Parameters:envelope – original incoming message
Returns:WMessengerOnionSessionFlowProto.Iterator or None if there is no way to create session for the given message
class wasp_general.network.messenger.proto.WMessengerOnionSessionProto[source]

Bases: object

Class represent messenger single session. Inside a onion messenger, this class process single message.

onion()[source]

Return related onion. In most cases, it is the onion, that creates this session. :return: WMessengerOnionProto

process(envelope)[source]

Parse message, process it and generate response

Parameters:envelope – incoming or outgoing message or nothing. This value is passed to the first layer as is.
Returns:outgoing message or nothing. In most cases, this is a server response or client request.

wasp_general.network.messenger.session module

class wasp_general.network.messenger.session.WMessengerOnionSession(onion, session_flow)[source]

Bases: wasp_general.network.messenger.proto.WMessengerOnionSessionProto

WMessengerOnionSessionProto class implementation. This class executes layers from onion in order they described in WMessengerOnionSessionFlow class

onion()[source]

WMessengerOnionSessionProto.onion() method implementation.

process(envelope)[source]

WMessengerOnionSessionProto.process() method implementation.

session_flow()[source]

Return related WMessengerOnionSessionFlow object :return: WMessengerOnionSessionFlow

class wasp_general.network.messenger.session.WMessengerOnionSessionFlexFlow(*flow_comparator_pairs, default_flow=None)[source]

Bases: wasp_general.network.messenger.proto.WMessengerOnionSessionFlowProto

Flexible 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: object

Pair that links comparator and flow

comparator()[source]

Return comparator

Returns:WMessengerOnionSessionFlexFlow.MessageComparator
flow()[source]

Return flow

Returns:WMessengerOnionSessionFlowProto
class MessageComparator[source]

Bases: object

Abstract class that checks envelope

match(envelope)[source]

Check if envelope is suitable

Parameters:envelope – envelope to check
Returns:bool
class ReComparator(pattern)[source]

Bases: wasp_general.network.messenger.session.MessageComparator

Simple WMessengerOnionSessionFlexFlow.MessageComparator implementation, that checks if envelope (text or binary) matches the given regular expression

match(envelope)[source]

WMessengerOnionSessionFlexFlow.MessageComparator.match() implementation

iterator(envelope)[source]

WMessengerOnionSessionFlowProto.iterator() implementation

class wasp_general.network.messenger.session.WMessengerOnionSessionFlow(iterator)[source]

Bases: wasp_general.network.messenger.proto.WMessengerOnionSessionFlowProto

Simple WMessengerOnionSessionFlowProto implementation. 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 result WMessengerOnionSessionFlow object 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.WMessengerOnionSessionFlowProto

Session 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. In WMessengerOnionSessionFlowSequence.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.Iterator

Iterator 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 each WMessengerOnionSessionFlowSequence.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

iterator(envelope)[source]

WMessengerOnionSessionFlowProto.iterator() implementation

wasp_general.network.messenger.transport module

class wasp_general.network.messenger.transport.WMessengerSendAgentLayer[source]

Bases: wasp_general.network.messenger.proto.WMessengerOnionLayerProto

process(envelope, session, send_agent=None, handler=None, **kwargs)[source]
class wasp_general.network.messenger.transport.WMessengerSyncReceiveAgentLayer[source]

Bases: wasp_general.network.messenger.proto.WMessengerOnionLayerProto

process(envelope, session, receive_agent=None, timeout=None, copy_meta=None, **kwargs)[source]

Module contents