aiospamc package

Submodules

aiospamc.connections module

ConnectionManager classes for TCP and Unix sockets.

class aiospamc.connections.Timeout(total: float = 600, connection: float = None, response: float = None)[source]

Bases: object

Container object for defining timeouts.

__init__(total: float = 600, connection: float = None, response: float = None)None[source]

Timeout constructor.

Parameters
  • total – The total length of time in seconds to set the timeout.

  • connection – The length of time in seconds to allow for a connection to live before timing out.

  • response – The length of time in seconds to allow for a response from the server before timing out.

class aiospamc.connections.ConnectionManager(timeout: aiospamc.connections.Timeout = None)[source]

Bases: object

Stores connection parameters and creates connections.

__init__(timeout: aiospamc.connections.Timeout = None)None[source]

Initialize self. See help(type(self)) for accurate signature.

property logger

Return the logger object.

async request(data: bytes)bytes[source]

Send bytes data and receive a response.

Raises

AIOSpamcConnectionFailed

Raises

ClientTimeoutException

Parameters

data – Data to send.

async open() → Tuple[asyncio.streams.StreamReader, asyncio.streams.StreamWriter][source]

Opens a connection, returning the reader and writer objects.

property connection_string

String representation of the connection.

class aiospamc.connections.TcpConnectionManager(host: str, port: int, ssl_context: ssl.SSLContext = None, timeout: aiospamc.connections.Timeout = None)[source]

Bases: aiospamc.connections.ConnectionManager

__init__(host: str, port: int, ssl_context: ssl.SSLContext = None, timeout: aiospamc.connections.Timeout = None)None[source]

TcpConnectionManager constructor.

Parameters
  • host – Hostname or IP address.

  • port – TCP port.

  • ssl_context – SSL context.

async open() → Tuple[asyncio.streams.StreamReader, asyncio.streams.StreamWriter][source]

Opens a TCP connection.

Raises

AIOSpamcConnectionFailed

Returns

Reader and writer for the connection.

property connection_string
Returns

TCP hostname/IP and port.

class aiospamc.connections.UnixConnectionManager(path: str, timeout: aiospamc.connections.Timeout = None)[source]

Bases: aiospamc.connections.ConnectionManager

__init__(path: str, timeout: aiospamc.connections.Timeout = None)[source]

UnixConnectionManager constructor.

Parameters

path – Unix socket path.

async open() → Tuple[asyncio.streams.StreamReader, asyncio.streams.StreamWriter][source]

Opens a unix socket path connection.

Raises

AIOSpamcConnectionFailed

Returns

Reader and writer for the connection.

property connection_string
Returns

Unix connection path.

aiospamc.connections.new_ssl_context(verify: Optional[Any]) → Optional[ssl.SSLContext][source]

Creates an SSL context based on the supplied parameter.

Parameters

verify – Use SSL for the connection. If True, will use root certificates. If False, will not verify the certificate. If a string to a path or a Path object, the connection will use the certificates found there.

aiospamc.connections.new_connection(host: Optional[str] = None, port: Optional[int] = None, socket_path: Optional[str] = None, timeout: Optional[aiospamc.connections.Timeout] = None, context: Optional[ssl.SSLContext] = None)aiospamc.connections.ConnectionManager[source]

aiospamc.exceptions module

Collection of exceptions.

exception aiospamc.exceptions.ClientException[source]

Bases: Exception

Base class for exceptions raised from the client.

exception aiospamc.exceptions.BadRequest[source]

Bases: aiospamc.exceptions.ClientException

Request is not in the expected format.

exception aiospamc.exceptions.BadResponse[source]

Bases: aiospamc.exceptions.ClientException

Response is not in the expected format.

exception aiospamc.exceptions.AIOSpamcConnectionFailed[source]

Bases: aiospamc.exceptions.ClientException

Connection failed.

exception aiospamc.exceptions.ResponseException(code: int, message: str)[source]

Bases: Exception

Base class for exceptions raised from a response.

__init__(code: int, message: str)None[source]

Initialize self. See help(type(self)) for accurate signature.

exception aiospamc.exceptions.UsageException(message: str)[source]

Bases: aiospamc.exceptions.ResponseException

Command line usage error.

__init__(message: str)None[source]

Initialize self. See help(type(self)) for accurate signature.

exception aiospamc.exceptions.DataErrorException(message: str)[source]

Bases: aiospamc.exceptions.ResponseException

Data format error.

__init__(message: str)None[source]

Initialize self. See help(type(self)) for accurate signature.

exception aiospamc.exceptions.NoInputException(message: str)[source]

Bases: aiospamc.exceptions.ResponseException

Cannot open input.

__init__(message: str)None[source]

Initialize self. See help(type(self)) for accurate signature.

exception aiospamc.exceptions.NoUserException(message: str)[source]

Bases: aiospamc.exceptions.ResponseException

Addressee unknown.

__init__(message: str)None[source]

Initialize self. See help(type(self)) for accurate signature.

exception aiospamc.exceptions.NoHostException(message: str)[source]

Bases: aiospamc.exceptions.ResponseException

Hostname unknown.

__init__(message: str)None[source]

Initialize self. See help(type(self)) for accurate signature.

exception aiospamc.exceptions.UnavailableException(message: str)[source]

Bases: aiospamc.exceptions.ResponseException

Service unavailable.

__init__(message: str)None[source]

Initialize self. See help(type(self)) for accurate signature.

exception aiospamc.exceptions.InternalSoftwareException(message: str)[source]

Bases: aiospamc.exceptions.ResponseException

Internal software error.

__init__(message: str)None[source]

Initialize self. See help(type(self)) for accurate signature.

exception aiospamc.exceptions.OSErrorException(message: str)[source]

Bases: aiospamc.exceptions.ResponseException

System error (e.g. can’t fork the process).

__init__(message: str)None[source]

Initialize self. See help(type(self)) for accurate signature.

exception aiospamc.exceptions.OSFileException(message: str)[source]

Bases: aiospamc.exceptions.ResponseException

Critical operating system file missing.

__init__(message: str)None[source]

Initialize self. See help(type(self)) for accurate signature.

exception aiospamc.exceptions.CantCreateException(message: str)[source]

Bases: aiospamc.exceptions.ResponseException

Can’t create (user) output file.

__init__(message: str)None[source]

Initialize self. See help(type(self)) for accurate signature.

exception aiospamc.exceptions.IOErrorException(message: str)[source]

Bases: aiospamc.exceptions.ResponseException

Input/output error.

__init__(message: str)None[source]

Initialize self. See help(type(self)) for accurate signature.

exception aiospamc.exceptions.TemporaryFailureException(message: str)[source]

Bases: aiospamc.exceptions.ResponseException

Temporary failure, user is invited to try again.

__init__(message: str)None[source]

Initialize self. See help(type(self)) for accurate signature.

exception aiospamc.exceptions.ProtocolException(message: str)[source]

Bases: aiospamc.exceptions.ResponseException

Remote error in protocol.

__init__(message: str)None[source]

Initialize self. See help(type(self)) for accurate signature.

exception aiospamc.exceptions.NoPermissionException(message: str)[source]

Bases: aiospamc.exceptions.ResponseException

Permission denied.

__init__(message: str)None[source]

Initialize self. See help(type(self)) for accurate signature.

exception aiospamc.exceptions.ConfigException(message: str)[source]

Bases: aiospamc.exceptions.ResponseException

Configuration error.

__init__(message: str)None[source]

Initialize self. See help(type(self)) for accurate signature.

exception aiospamc.exceptions.TimeoutException[source]

Bases: Exception

General timeout exception.

exception aiospamc.exceptions.ServerTimeoutException(message: str)[source]

Bases: aiospamc.exceptions.ResponseException, aiospamc.exceptions.TimeoutException

Timeout exception from the server.

__init__(message: str)None[source]

Initialize self. See help(type(self)) for accurate signature.

exception aiospamc.exceptions.ClientTimeoutException[source]

Bases: aiospamc.exceptions.ClientException, aiospamc.exceptions.TimeoutException

Timeout exception from the client.

exception aiospamc.exceptions.ParseError(message=None)[source]

Bases: Exception

Error occurred while parsing.

__init__(message=None)None[source]

Construct parsing exception with optional message.

Parameters

message – User friendly message.

exception aiospamc.exceptions.NotEnoughDataError(message=None)[source]

Bases: aiospamc.exceptions.ParseError

Expected more data than what the protocol content specified.

exception aiospamc.exceptions.TooMuchDataError(message=None)[source]

Bases: aiospamc.exceptions.ParseError

Too much data was received than what the protocol content specified.

aiospamc.frontend module

Frontend functions for the package.

class aiospamc.frontend.Client(ssl_context_factory, connection_factory, parser_factory)[source]

Bases: tuple

ssl_context_factory: Callable[[Any], Optional[ssl.SSLContext]]

Alias for field number 0

connection_factory: Callable[[Optional[str], Optional[int], Optional[str], Optional[aiospamc.connections.Timeout], Optional[ssl.SSLContext]], aiospamc.connections.ConnectionManager]

Alias for field number 1

parser_factory: Type[aiospamc.incremental_parser.ResponseParser]

Alias for field number 2

async aiospamc.frontend.request(req: aiospamc.requests.Request, connection: aiospamc.connections.ConnectionManager, parser: aiospamc.incremental_parser.ResponseParser)aiospamc.responses.Response[source]

Sends a request and returns the parsed response.

Parameters
  • req – The request to send.

  • connection – An instance of a connection.

  • parser – An instance of a response parser.

Returns

The parsed response.

Raises

BadResponse – If the response from SPAMD is ill-formed this exception will be raised.

async aiospamc.frontend.check(message: Union[bytes, SupportsBytes], *, host: str = 'localhost', port: int = 783, socket_path: str = None, timeout: aiospamc.connections.Timeout = None, verify: Optional[Any] = None, user: str = None, compress: bool = False, **kwargs)aiospamc.responses.Response[source]

Checks a message if it’s spam and return a response with a score header.

Parameters
  • message – Copy of the message.

  • host – Hostname or IP address of the SPAMD service, defaults to localhost.

  • port – Port number for the SPAMD service, defaults to 783.

  • socket_path – Path to Unix socket.

  • timeout – Timeout settings.

  • verify – Enable SSL. True will use the root certificates from the :module:`certifi` package. False will use SSL, but not verify the root certificates. Passing a string to a filename will use the path to verify the root certificates.

  • user – Username to pass to the SPAMD service.

  • compress – Enable compress of the request body.

Returns

A successful response with a “Spam” header showing if the message is considered spam as well as the score.

Raises
async aiospamc.frontend.headers(message: Union[bytes, SupportsBytes], *, host: str = 'localhost', port: int = 783, socket_path: str = None, timeout: aiospamc.connections.Timeout = None, verify: Optional[Any] = None, user: str = None, compress: bool = False, **kwargs)aiospamc.responses.Response[source]

Checks a message if it’s spam and return the modified message headers.

Parameters
  • message – Copy of the message.

  • host – Hostname or IP address of the SPAMD service, defaults to localhost.

  • port – Port number for the SPAMD service, defaults to 783.

  • socket_path – Path to Unix socket.

  • timeout – Timeout settings.

  • verify – Enable SSL. True will use the root certificates from the :module:`certifi` package. False will use SSL, but not verify the root certificates. Passing a string to a filename will use the path to verify the root certificates.

  • user – Username to pass to the SPAMD service.

  • compress – Enable compress of the request body.

Returns

A successful response with a “Spam” header showing if the message is considered spam as well as the score. The body contains the modified message headers, but not the content of the message.

Raises
async aiospamc.frontend.ping(*, host: str = 'localhost', port: int = 783, socket_path: str = None, timeout: aiospamc.connections.Timeout = None, verify: Optional[Any] = None, **kwargs)aiospamc.responses.Response[source]

Sends a ping to the SPAMD service.

Parameters
  • host – Hostname or IP address of the SPAMD service, defaults to localhost.

  • port – Port number for the SPAMD service, defaults to 783.

  • socket_path – Path to Unix socket.

  • timeout – Timeout settings.

  • verify – Enable SSL. True will use the root certificates from the :module:`certifi` package. False will use SSL, but not verify the root certificates. Passing a string to a filename will use the path to verify the root certificates.

Returns

A response with “PONG”.

Raises
async aiospamc.frontend.process(message: Union[bytes, SupportsBytes], *, host: str = 'localhost', port: int = 783, socket_path: str = None, timeout: aiospamc.connections.Timeout = None, verify: Optional[Any] = None, user: str = None, compress: bool = False, **kwargs)aiospamc.responses.Response[source]

Checks a message if it’s spam and return a response with a score header.

Parameters
  • message – Copy of the message.

  • host – Hostname or IP address of the SPAMD service, defaults to localhost.

  • port – Port number for the SPAMD service, defaults to 783.

  • socket_path – Path to Unix socket.

  • timeout – Timeout settings.

  • verify – Enable SSL. True will use the root certificates from the :module:`certifi` package. False will use SSL, but not verify the root certificates. Passing a string to a filename will use the path to verify the root certificates.

  • user – Username to pass to the SPAMD service.

  • compress – Enable compress of the request body.

Returns

A successful response with a “Spam” header showing if the message is considered spam as well as the score. The body contains a modified copy of the message.

Raises
async aiospamc.frontend.report(message: Union[bytes, SupportsBytes], *, host: str = 'localhost', port: int = 783, socket_path: str = None, timeout: aiospamc.connections.Timeout = None, verify: Optional[Any] = None, user: str = None, compress: bool = False, **kwargs)aiospamc.responses.Response[source]

Checks a message if it’s spam and return a response with a score header.

Parameters
  • message – Copy of the message.

  • host – Hostname or IP address of the SPAMD service, defaults to localhost.

  • port – Port number for the SPAMD service, defaults to 783.

  • socket_path – Path to Unix socket.

  • timeout – Timeout settings.

  • verify – Enable SSL. True will use the root certificates from the :module:`certifi` package. False will use SSL, but not verify the root certificates. Passing a string to a filename will use the path to verify the root certificates.

  • user – Username to pass to the SPAMD service.

  • compress – Enable compress of the request body.

Returns

A successful response with a “Spam” header showing if the message is considered spam as well as the score. The body contains a report.

Raises
async aiospamc.frontend.report_if_spam(message: Union[bytes, SupportsBytes], *, host: str = 'localhost', port: int = 783, socket_path: str = None, timeout: aiospamc.connections.Timeout = None, verify: Optional[Any] = None, user: str = None, compress: bool = False, **kwargs)aiospamc.responses.Response[source]

Checks a message if it’s spam and return a response with a score header.

Parameters
  • message – Copy of the message.

  • host – Hostname or IP address of the SPAMD service, defaults to localhost.

  • port – Port number for the SPAMD service, defaults to 783.

  • socket_path – Path to Unix socket.

  • timeout – Timeout settings.

  • verify – Enable SSL. True will use the root certificates from the :module:`certifi` package. False will use SSL, but not verify the root certificates. Passing a string to a filename will use the path to verify the root certificates.

  • user – Username to pass to the SPAMD service.

  • compress – Enable compress of the request body.

Returns

A successful response with a “Spam” header showing if the message is considered spam as well as the score. The body contains a report if the message is considered spam.

Raises
async aiospamc.frontend.symbols(message: Union[bytes, SupportsBytes], *, host: str = 'localhost', port: int = 783, socket_path: str = None, timeout: aiospamc.connections.Timeout = None, verify: Optional[Any] = None, user: str = None, compress: bool = False, **kwargs)aiospamc.responses.Response[source]

Checks a message if it’s spam and return a response with rules that matched.

Parameters
  • message – Copy of the message.

  • host – Hostname or IP address of the SPAMD service, defaults to localhost.

  • port – Port number for the SPAMD service, defaults to 783.

  • socket_path – Path to Unix socket.

  • timeout – Timeout settings.

  • verify – Enable SSL. True will use the root certificates from the :module:`certifi` package. False will use SSL, but not verify the root certificates. Passing a string to a filename will use the path to verify the root certificates.

  • user – Username to pass to the SPAMD service.

  • compress – Enable compress of the request body.

Returns

A successful response with a “Spam” header showing if the message is considered spam as well as the score. The body contains a comma-separated list of the symbols that were hit.

Raises
async aiospamc.frontend.tell(message: Union[bytes, SupportsBytes], message_class: Union[str, aiospamc.options.MessageClassOption], remove_action: Union[str, aiospamc.options.ActionOption] = None, set_action: Union[str, aiospamc.options.ActionOption] = None, *, host: str = 'localhost', port: int = 783, socket_path: str = None, timeout: aiospamc.connections.Timeout = None, verify: Optional[Any] = None, user: str = None, compress: bool = False, **kwargs)aiospamc.responses.Response[source]

Checks a message if it’s spam and return a response with a score header.

Parameters
  • message – Copy of the message.

  • message_class – Classify the message as ‘spam’ or ‘ham’.

  • remove_action – Remove message class for message in database.

  • set_action – Set message class for message in database.

  • host – Hostname or IP address of the SPAMD service, defaults to localhost.

  • port – Port number for the SPAMD service, defaults to 783.

  • socket_path – Path to Unix socket.

  • timeout – Timeout settings.

  • verify – Enable SSL. True will use the root certificates from the :module:`certifi` package. False will use SSL, but not verify the root certificates. Passing a string to a filename will use the path to verify the root certificates.

  • user – Username to pass to the SPAMD service.

  • compress – Enable compress of the request body.

Returns

A successful response with “DidSet” and/or “DidRemove” headers along with the actions that were taken.

Raises

aiospamc.header_values module

Collection of request and response header value objects.

class aiospamc.header_values.HeaderValue[source]

Bases: object

class aiospamc.header_values.BytesHeaderValue(value: bytes)[source]

Bases: aiospamc.header_values.HeaderValue

Header with bytes value.

Parameters

value – Value of the header.

__init__(value: bytes)None[source]

Initialize self. See help(type(self)) for accurate signature.

class aiospamc.header_values.GenericHeaderValue(value: str, encoding='utf8')[source]

Bases: aiospamc.header_values.HeaderValue

Generic header value.

__init__(value: str, encoding='utf8')None[source]

Generic header constructor.

Parameters
  • value – Value of the header.

  • encoding – String encoding to use, defaults to “utf8”.

class aiospamc.header_values.CompressValue(algorithm='zlib')[source]

Bases: aiospamc.header_values.HeaderValue

Compress header. Specifies what encryption scheme to use. So far only ‘zlib’ is supported.

__init__(algorithm='zlib')None[source]

Constructor

Parameters

algorithm – Compression algorithm to use. Currently only zlib is supported.

class aiospamc.header_values.ContentLengthValue(length: int = 0)[source]

Bases: aiospamc.header_values.HeaderValue

ContentLength header. Indicates the length of the body in bytes.

__init__(length: int = 0)None[source]

ContentLength constructor.

Parameters

length – Length of the body.

class aiospamc.header_values.MessageClassValue(value: aiospamc.options.MessageClassOption = None)[source]

Bases: aiospamc.header_values.HeaderValue

MessageClass header. Used to specify whether a message is ‘spam’ or ‘ham.’

__init__(value: aiospamc.options.MessageClassOption = None)None[source]

MessageClass constructor.

Parameters

value – Specifies the classification of the message.

class aiospamc.header_values.SetOrRemoveValue(action: aiospamc.options.ActionOption = None)[source]

Bases: aiospamc.header_values.HeaderValue

Base class for headers that implement “local” and “remote” rules.

__init__(action: aiospamc.options.ActionOption = None)None[source]

_SetRemoveBase constructor.

Parameters

action – Actions to be done on local or remote.

class aiospamc.header_values.SpamValue(value: bool = False, score: float = 0.0, threshold: float = 0.0)[source]

Bases: aiospamc.header_values.HeaderValue

Spam header. Used by the SPAMD service to report on if the submitted message was spam and the score/threshold that it used.

__init__(value: bool = False, score: float = 0.0, threshold: float = 0.0)None[source]

Spam header constructor.

Parameters
  • value – True if the message is spam, False if not.

  • score – Score of the message after being scanned.

  • threshold – Threshold of which the message would have been marked as spam.

class aiospamc.header_values.UserValue(name: str = None)[source]

Bases: aiospamc.header_values.HeaderValue

User header. Used to specify which user the SPAMD service should use when loading configuration files.

__init__(name: str = None)None[source]

User constructor.

Parameters

name – Name of the user account.

aiospamc.incremental_parser module

Module for the parsing functions and objects.

class aiospamc.incremental_parser.States(value)[source]

Bases: enum.Enum

States for the parser state machine.

Status = 1
Header = 2
Body = 3
Done = 4
class aiospamc.incremental_parser.Parser(delimiter: bytes, status_parser: Callable[[bytes], Mapping[str, str]], header_parser: Callable[[bytes], Tuple[str, Any]], body_parser: Callable[[bytes, int], bytes], start: aiospamc.incremental_parser.States = <States.Status: 1>)[source]

Bases: object

The parser state machine.

Variables

result – Storage location for parsing results.

__init__(delimiter: bytes, status_parser: Callable[[bytes], Mapping[str, str]], header_parser: Callable[[bytes], Tuple[str, Any]], body_parser: Callable[[bytes, int], bytes], start: aiospamc.incremental_parser.States = <States.Status: 1>)None[source]

Parser constructor.

Parameters
  • delimiter – Byte string to split the different sections of the message.

  • status_parser – Callable to parse the status line of the message.

  • header_parser – Callable to parse each header line of the message.

  • body_parser – Callable to parse the body of the message.

  • start – The state to start the parser on. Allowed for easier testing.

property state

The current state of the parser.

Returns

The States instance.

parse(stream: bytes) → Mapping[str, Any][source]

Entry method to parse a message.

Parameters

stream – Byte string to parse.

Returns

Returns the parser results dictionary stored in the class attribute result.

Raises
status()None[source]

Splits the message at the delimiter and sends the first part of the message to the status_line callable to be parsed. If successful then the results are stored in the result class attribute and the state transitions to States.Header.

Raises
  • NotEnoughDataError – When there is no delimiter the message is incomplete.

  • ParseError – When the status_line callable experiences an error.

header()None[source]

Splits the message at the delimiter and sends the line to the header_parser.

When splitting the action will be determined depending what is matched:

Header line

Delimiter

Leftover

Action

No

Yes

Delimiter

Headers done, empty body. Clear buffer and transition to States.Body.

No

Yes

N/A

Headers done. Transition to States.Body.

Yes

Yes

N/A

Parse header. Record in result class attribute.

No

No

No

Message was a status line only. Transition to States.Body.

Raises

ParseError – None of the previous conditions are matched.

body()None[source]

Uses the length defined in the Content-length header (defaulted to 0) to determine how many bytes the body contains.

Raises

TooMuchDataError – When there are too many bytes in the buffer compared to the Content-length header value. Transitions the state to States.Done.

aiospamc.incremental_parser.parse_request_status(stream: bytes) → Dict[str, str][source]

Parses the status line from a request.

Parameters

stream – The byte stream to parse.

Returns

A dictionary with the keys verb, protocol and version.

Raises

ParseError – When the status line is in an invalid format, not a valid verb, or doesn’t have the correct protocol.

aiospamc.incremental_parser.parse_response_status(stream: bytes) → Dict[str, Union[str, int]][source]

Parse the status line for a response.

Parameters

stream – The byte stream to parse.

Returns

A dictionary with the keys protocol, version, status_code, and message.

Raises

ParseError – When the status line is in an invalid format, status code is not an integer, or doesn’t have the correct protocol.

aiospamc.incremental_parser.parse_message_class_value(stream: Union[str, aiospamc.options.MessageClassOption])aiospamc.header_values.MessageClassValue[source]

Parses the Message-class header value.

Parameters

stream – String or MessageClassOption instance.

Returns

A MessageClassValue instance representing the value.

Raises

ParseError – When the value doesn’t match either ham or spam.

aiospamc.incremental_parser.parse_content_length_value(stream: Union[str, int])aiospamc.header_values.ContentLengthValue[source]

Parses the Content-length header value.

Parameters

stream – String or integer value of the header.

Returns

A ContentLengthValue instance.

Raises

ParseError – When the value cannot be cast to an integer.

aiospamc.incremental_parser.parse_compress_value(stream: str)aiospamc.header_values.CompressValue[source]

Parses a value for the Compress header.

Parameters

stream – String to parse.

Returns

A CompressValue instance.

aiospamc.incremental_parser.parse_set_remove_value(stream: Union[aiospamc.options.ActionOption, str])aiospamc.header_values.SetOrRemoveValue[source]

Parse a value for the DidRemove, DidSet, Remove, and Set headers.

Parameters

stream – String to parse or an instance of ActionOption.

Returns

A SetOrRemoveValue instance.

aiospamc.incremental_parser.parse_spam_value(stream: str)aiospamc.header_values.SpamValue[source]

Parses the values for the Spam header.

Parameters

stream – String to parse.

Returns

An SpamValue instance.

Raises

ParseError – Raised if there is no true/false value, or valid numbers for the score or threshold.

aiospamc.incremental_parser.parse_user_value(stream: str)aiospamc.header_values.UserValue[source]
aiospamc.incremental_parser.parse_header_value(header: str, value: Union[str, bytes])aiospamc.header_values.HeaderValue[source]

Sends the header value stream to the header value parsing function.

Parameters
  • header – Name of the header.

  • value – String or byte stream of the header value.

Returns

The HeaderValue instance from the parsing function.

aiospamc.incremental_parser.parse_header(stream: bytes) → Tuple[str, aiospamc.header_values.HeaderValue][source]

Splits the header line and sends to the header parsing function.

Parameters

stream – Byte stream of the header line.

Returns

A tuple of the header name and value.

aiospamc.incremental_parser.parse_body(stream: bytes, content_length: int)bytes[source]

Parses the body of a message.

Parameters
  • stream – Byte stream for the body.

  • content_length – Expected length of the body in bytes.

Returns

Byte stream of the body.

Raises
aiospamc.incremental_parser.header_value_parsers = {'Compress': <function parse_compress_value>, 'Content-length': <function parse_content_length_value>, 'DidRemove': <function parse_set_remove_value>, 'DidSet': <function parse_set_remove_value>, 'Message-class': <function parse_message_class_value>, 'Remove': <function parse_set_remove_value>, 'Set': <function parse_set_remove_value>, 'Spam': <function parse_spam_value>, 'User': <function parse_user_value>}

Mapping for header names to their parsing functions.

class aiospamc.incremental_parser.RequestParser[source]

Bases: aiospamc.incremental_parser.Parser

Sub-class of the parser for requests.

__init__()[source]

Parser constructor.

Parameters
  • delimiter – Byte string to split the different sections of the message.

  • status_parser – Callable to parse the status line of the message.

  • header_parser – Callable to parse each header line of the message.

  • body_parser – Callable to parse the body of the message.

  • start – The state to start the parser on. Allowed for easier testing.

class aiospamc.incremental_parser.ResponseParser[source]

Bases: aiospamc.incremental_parser.Parser

Sub-class of the parser for responses.

__init__()[source]

Parser constructor.

Parameters
  • delimiter – Byte string to split the different sections of the message.

  • status_parser – Callable to parse the status line of the message.

  • header_parser – Callable to parse each header line of the message.

  • body_parser – Callable to parse the body of the message.

  • start – The state to start the parser on. Allowed for easier testing.

aiospamc.options module

Data structures used for function parameters.

class aiospamc.options.MessageClassOption(value)[source]

Bases: enum.Enum

Option to be used for the MessageClass header.

spam = 'spam'
ham = 'ham'
class aiospamc.options.ActionOption(local: bool, remote: bool)[source]

Bases: tuple

Option to be used in the DidRemove, DidSet, Set, and Remove headers.

Parameters
  • local – An action will be performed on the SPAMD service’s local database.

  • remote – An action will be performed on the SPAMD service’s remote database.

local: bool

Alias for field number 0

remote: bool

Alias for field number 1

aiospamc.requests module

Contains all requests that can be made to the SPAMD service.

class aiospamc.requests.Request(verb: str, version: str = '1.5', headers: Dict[str, aiospamc.header_values.HeaderValue] = None, body: Union[bytes, SupportsBytes] = b'', **_)[source]

Bases: object

SPAMC request object.

__init__(verb: str, version: str = '1.5', headers: Dict[str, aiospamc.header_values.HeaderValue] = None, body: Union[bytes, SupportsBytes] = b'', **_)None[source]

Request constructor.

Parameters
  • verb – Method name of the request.

  • version – Version of the protocol.

  • headers – Collection of headers to be added.

  • body – Byte string representation of the body.

property body

aiospamc.responses module

Contains classes used for responses.

class aiospamc.responses.Status(value)[source]

Bases: enum.IntEnum

An enumeration.

EX_OK = 0
EX_USAGE = 64
EX_DATAERR = 65
EX_NOINPUT = 66
EX_NOUSER = 67
EX_NOHOST = 68
EX_UNAVAILABLE = 69
EX_SOFTWARE = 70
EX_OSERR = 71
EX_OSFILE = 72
EX_CANTCREAT = 73
EX_IOERR = 74
EX_TEMPFAIL = 75
EX_PROTOCOL = 76
EX_NOPERM = 77
EX_CONFIG = 78
EX_TIMEOUT = 79
class aiospamc.responses.Response(version: str = '1.5', status_code: Union[aiospamc.responses.Status, int] = 0, message: str = '', headers: Dict[str, aiospamc.header_values.HeaderValue] = None, body: bytes = b'', **_)[source]

Bases: object

Class to encapsulate response.

__init__(version: str = '1.5', status_code: Union[aiospamc.responses.Status, int] = 0, message: str = '', headers: Dict[str, aiospamc.header_values.HeaderValue] = None, body: bytes = b'', **_)[source]

Response constructor.

Parameters
  • version – Version reported by the SPAMD service response.

  • status_code – Success or error code.

  • message – Message associated with status code.

  • body – Byte string representation of the body.

  • headers – Collection of headers to be added.

property status_code
property body
raise_for_status()None[source]

Raises an exception if the status code isn’t zero.

Raises

Module contents

aiospamc package.

An asyncio-based library to communicate with SpamAssassin’s SPAMD service.