angelos.net.base

Base classes and other functions for the network stack.

class angelos.net.base.AcceptPacket(*args)

Bases: angelos.net.base.Packet

Accept a packet handler session.

class angelos.net.base.BusyPacket(*args)

Bases: angelos.net.base.Packet

Indicate for initiating session packet handler that it is busy asking to come back later.

class angelos.net.base.ClientProtoMixin

Bases: object

Client of packet manager.

classmethod connect(facade: angelos.facade.facade.Facade, host: Union[str, ipaddress.IPv4Address, ipaddress.IPv6Address], port: int)angelos.net.base.Protocol

Connect to server.

connection_lost(exc: Exception)

Clean up.

class angelos.net.base.ClientSessionStateMachine

Bases: angelos.net.base.WaypointState

Waypoints for setting session mode over a protocol.

property event

Expose event.

property future
class angelos.net.base.ClientStateExchangeMachine

Bases: angelos.net.base.WaypointState

Waypoints for exchanging a state over a protocol.

property event

Expose event.

class angelos.net.base.ConfirmCode(value)

Bases: enum.IntEnum

Answer codes for ConfirmPackage

NO = 2
NO_COMMENT = 0
YES = 1
class angelos.net.base.ConfirmPacket(*args)

Bases: angelos.net.base.Packet

Answer on a sent proposal. 1=Yes, 2=No, 0=No comment.

exception angelos.net.base.ConnectionClosed

Bases: RuntimeWarning

When connection unexpectedly closed.

class angelos.net.base.ConnectionManager

Bases: object

Keeps track of connections with server protocols.

add(proto: angelos.net.base.ServerProtoMixin)

Add server protocol connection.

remove(proto: angelos.net.base.ServerProtoMixin)

Remove server protocol connection

class angelos.net.base.DataType(value)

Bases: enum.IntEnum

Custom data types for use with packets and msgpack.

BYTES_FIX = 3
BYTES_VAR = 4
DATETIME = 5
UINT = 1
UUID = 2
class angelos.net.base.DonePacket(*args)

Bases: angelos.net.base.Packet

Indicate for initiating session packet handler that all is done.

class angelos.net.base.EnquiryPacket(*args)

Bases: angelos.net.base.Packet

Enquire the state of a thing. Client/server

class angelos.net.base.ErrorCode(value)

Bases: enum.IntEnum

Error codes

ABORTED = 2
BUSY = 3
MALFORMED = 1
UNEXPECTED = 4
class angelos.net.base.ErrorPacket(*args)

Bases: angelos.net.base.Packet

Error packet.

class angelos.net.base.FinishPacket(*args)

Bases: angelos.net.base.Packet

Finalize a packet handler session.

exception angelos.net.base.GotoStateError

Bases: RuntimeWarning

When it’s not possible to go to a state.

class angelos.net.base.Handler(manager: Protocol, states: dict, sessions: dict, max_sesh: int)

Bases: object

Base handler of protocol source of services.

LEVEL = 0
PACKETS = {115: <class 'angelos.net.base.EnquiryPacket'>, 116: <class 'angelos.net.base.ResponsePacket'>, 117: <class 'angelos.net.base.TellPacket'>, 118: <class 'angelos.net.base.ShowPacket'>, 119: <class 'angelos.net.base.ConfirmPacket'>, 120: <class 'angelos.net.base.StartPacket'>, 121: <class 'angelos.net.base.FinishPacket'>, 122: <class 'angelos.net.base.AcceptPacket'>, 123: <class 'angelos.net.base.RefusePacket'>, 124: <class 'angelos.net.base.BusyPacket'>, 125: <class 'angelos.net.base.DonePacket'>, 126: <class 'angelos.net.base.UnknownPacket'>, 127: <class 'angelos.net.base.ErrorPacket'>}
PKT_ACCEPT = 122
PKT_BUSY = 124
PKT_CONFIRM = 119
PKT_DONE = 125
PKT_ENQUIRY = 115
PKT_ERROR = 127
PKT_FINISH = 121
PKT_REFUSE = 123
PKT_RESPONSE = 116
PKT_SHOW = 118
PKT_START = 120
PKT_TELL = 117
PKT_UNKNOWN = 126
PROCESS = {}
RANGE = 0
context(sesh_type: int, **kwargs)

Run a protocol session as a context manager with state sync.

get_session(session: int)angelos.net.base.ProtocolSession

Load a given session.

property manager

Expose the packet manager.

packet_handler()

Handle received packet.

If packet type class, method or processor isn’t found An unknown packet is returned to the senders handler.

process_accept(packet: angelos.net.base.AcceptPacket)

Accept response to start session.

process_busy(packet: angelos.net.base.BusyPacket)

Busy response to start session.

process_confirm(packet: angelos.net.base.ConfirmPacket)

Process a confirmation of state received and acceptance.

process_done(packet: angelos.net.base.DonePacket)

Indication there is nothing more to do in session.

process_enquiry(packet: angelos.net.base.EnquiryPacket)

Process an enquiry.

process_error(packet: angelos.net.base.ErrorPacket)

Handle an error packet response.

This method MUST never return an unknown or error in order to prevent an infinite loop over the network.

process_finish(packet: angelos.net.base.FinishPacket)

Close an open session.

process_refuse(packet: angelos.net.base.RefusePacket)

Refuse response to start session.

process_response(packet: angelos.net.base.ResponsePacket)

Process response of enquiry

process_show(packet: angelos.net.base.ShowPacket)

Process request to show state.

process_start(packet: angelos.net.base.StartPacket)

Session start requested.

process_tell(packet: angelos.net.base.TellPacket)

Process a state push.

process_unknown(packet: angelos.net.base.UnknownPacket)

Handle an unknown packet response.

This method MUST never return an unknown or error in order to prevent an infinite loop over the network.

property processor

Expose current task.

property queue

Expose current queue.

session_done(sesh: angelos.net.base.ProtocolSession)

Tell client there is no more to do in session.

session_prepare(sesh: angelos.net.base.ProtocolSession)

Call to make preparations for a session.

sync(states: tuple, sesh: Optional[angelos.net.base.ProtocolSession] = None) → bool

Run several state synchronizations in a batch.

exception angelos.net.base.NetworkError

Bases: RuntimeError

Unrepairable network errors.

ALREADY_CONNECTED = ('Already connected.', 101)
ATTEMPTED_ATTACK = ('Attempted attack with error/unknown packets.', 104)
FALSE_CHECK_METHOD = ('Check method must be a NetCallable', 105)
NO_TRANSPORT = ('Transport layer is missing.', 100)
SESSION_NO_SYNC = ('Failed to sync one or several states in session', 102)
SESSION_TYPE_INCONSISTENCY = ('Session type inconsistent.', 103)
exception angelos.net.base.NotAuthenticated

Bases: RuntimeWarning

When there is not authenticated portfolio.

class angelos.net.base.Packet(*args)

Bases: object

Network packet base class.

Example: class MyPacket(Packet, fields=(“uint”, “uuid”, “fixed”, “variable”, “date”), fields_info=(

(DataType.UINT, 100, 200), (DataType.UUID,), (DataType.BYTES_FIX, 128), (DataType.BYTES_VAR,), (DataType.DATETIME,))):

pass

property tuple

Expose internal tuple.

classmethod unpack(data: bytes)angelos.net.base.Packet

Unpack data into packet class.

class angelos.net.base.Protocol(facade: angelos.facade.facade.Facade, server: bool = False, manager: ConnectionManager = None)

Bases: asyncio.protocols.Protocol

Protocol for handling packages going from and to packet handlers.

authentication_made(portfolio: angelos.portfolio.collection.Portfolio, node: Union[bool, angelos.document.domain.Node])

Indicate that authentication has taken place. Never call from outside, internal use only.

check()

Raise exception if connection is closed.

close()
connection_made(transport: asyncio.transports.Transport)

Connection is made.

data_received(data: bytes)

Data received.

error(error: int, pkt_type: int, pkt_level, process: int = 0)

Error happened is returned to sender.

property facade

Expose the facade.

get_handler(range: int)angelos.net.base.Handler

Get packet handler for given range if available or None.

is_server() → bool

Whether is a server.

property manager

Expose the connection manager.

property portfolio

Expose connecting portfolio.

send_packet(pkt_type: int, pkt_level: int, packet: angelos.net.base.Packet)

Send packet over socket.

unknown(pkt_type: int, pkt_level: int, process: int = 0)

Unknown packet is returned to sender.

class angelos.net.base.ProtocolSession(type: int, id: int, states: dict, server: bool)

Bases: object

Session that run within a protocol handler with states.

property event

Expose enquiry event for session.

property id

Expose session id.

property own

Expose the sessions states.

property state_machines

Expose the sessions states.

property states

Expose the sessions states.

property type

Expose session type.

class angelos.net.base.RefusePacket(*args)

Bases: angelos.net.base.Packet

Refuse a packet handler session.

class angelos.net.base.ResponsePacket(*args)

Bases: angelos.net.base.Packet

Respond to enquiry. Client/server

class angelos.net.base.ServerProtoMixin

Bases: object

Server of packet manager.

connection_lost(exc: Exception)

Clean up.

connection_made(transport: asyncio.transports.Transport)

Add serving protocol to local dict and set.

eof_received()

End of communication.

classmethod listen(facade: angelos.facade.facade.Facade, host: Union[str, ipaddress.IPv4Address, ipaddress.IPv6Address], port: int, manager: Optional[angelos.net.base.ConnectionManager] = None) → asyncio.base_events.Server

Start a listening server.

class angelos.net.base.ServerSessionStateMachine

Bases: angelos.net.base.WaypointState

Waypoints for setting session mode over a protocol.

class angelos.net.base.ServerStateExchangeMachine(check: angelos.common.misc.SyncCallable = <angelos.common.misc.SyncCallable object>)

Bases: angelos.net.base.WaypointState

Waypoints for exchanging a state over a protocol.

property condition

Expose condition.

evaluate() → int

Evaluate value.

predicate() → bool

Condition predicate true if confirmation is yes.

class angelos.net.base.SessionCode(value)

Bases: enum.IntEnum

Session future return code for RefusePacket, BusyPacket, AcceptPacket

ACCEPT = 0
BUSY = 1
DONE = 3
REFUSE = 2
class angelos.net.base.ShowPacket(*args)

Bases: angelos.net.base.Packet

Get the state of a thing. Client/server

class angelos.net.base.StartPacket(*args)

Bases: angelos.net.base.Packet

Initiate a packet handler session. Initializer is always the finalizer.

class angelos.net.base.TellPacket(*args)

Bases: angelos.net.base.Packet

Tell the state of a thing. Client/server

class angelos.net.base.UnknownPacket(*args)

Bases: angelos.net.base.Packet

Unknown packet.

class angelos.net.base.WaypointState(states: dict)

Bases: angelos.common.misc.StateMachine

A state machine that allows switching between states according to predefined paths.

property available

Expose available options.

goto(state: unicode)

Go to another state that is available.

angelos.net.base.default()

Custom message pack type converter.

angelos.net.base.ext_hook()

Custom message unpack type converter.

angelos.net.base.r()

Interval boundaries for given range.

angelos.net.base.ri()

Range for given number.