Skip to content

bradsacks99/pyvalve

Repository files navigation

pyvalve

Asyncio python clamav client library

Usage Examples

Ping

pvs = await PyvalveNetwork()
response = await pvs.ping()

ClamAv will respond with "PONG"

Scanning

pvs = await PyvalveNetwork()
response = await pvs.scan(path)

Stream Scanning

from io import BytesIO
from aiofile import AIOFile

buffer = BytesIO()
async with AIOFile('some/file', 'r') as file_pointer:
    line = await file_pointer.read_bytes()
    buffer.write(line)
    buffer.seek(0)
response = await pvs.instream(buffer)

Documentation

class Pyvalve()

Bases: object

Pyvalve base class

set_persistant_connection(persist)

Set persistent connection

  • Parameters

    bool (persist) – persistent connection True/False

  • Return type

    None

set_stream_buffer(length)

Set stream buffer

  • Parameters

    int (length) – Desired stream buffer in bytes

  • Return type

    None

async allmatchscan(path)

Send allmatchscan command

  • Parameters

    str (path) – Path to file/directory to be scanned

  • Returns

    Response from clamav

  • Return type

    str

  • Raises

    PyvalveScanningError – If path is not found

async contscan(path)

Send constscan command

  • Parameters

    str (path) – Path to file/directory to be scanned

  • Returns

    Response from clamav

  • Return type

    str

  • Raises

    PyvalveScanningError – If path is not found

async instream(buffer)

Send a stream to clamav

  • Parameters

    buffer (BinaryIO) – a buffer object

  • Returns

    Response from clamav

  • Return type

    str

  • Raises

    • PyvalveConnectionError – If connection is broken

    • PyvalveStreamMaxLength – If stream size limit exceeded

async multiscan(path)

Send multiscan command

  • Parameters

    str (path) – Path to file/directory to be scanned

  • Returns

    Response from clamav

  • Return type

    str

  • Raises

    PyvalveScanningError – If path is not found

async ping()

Send ping command

  • Returns

    Response from clamav

  • Return type

    str

async reload()

Send reload command

  • Returns

    Response from clamav

  • Return type

    str

async scan(path)

Send scan command

  • Parameters

    str (path) – Path to file/directory to be scanned

  • Returns

    Response from clamav

  • Return type

    str

  • Raises

    PyvalveScanningError – If path is not found

async shutdown()

Send shutdown command

  • Returns

    Response from clamav

  • Return type

    str

async stats()

Send stats command

  • Returns

    Response from clamav

  • Return type

    str

async version()

Send version command

  • Returns

    Response from clamav

  • Return type

    str

class PyvalveNetwork(host='localhost', port=3310, timeout=None)

Bases: Pyvalve

Asyncio Clamd network client

async _init_(host='localhost', port=3310, timeout=None)

PyvalveNetwork Constructor

  • Parameters

    • str (host) – host address for clamav

    • int (timeout) – listening port for clamav

    • int – socket timemout

class PyvalveSocket(socket='/tmp/clamd.socket', timeout=None)

Bases: Pyvalve

Asyncio Clamd socket client

async _init_(socket='/tmp/clamd.socket', timeout=None)

PyvalveSocket Constructor

  • Parameters

    • str (socket) – Path to socket file

    • int (timeout) – socket timemout

Exceptions

exception PyvalveError()

Bases: Exception

Pyvalve exception base class

exception PyvalveConnectionError()

Bases: PyvalveError

Exception communicating with clamd

exception PyvalveResponseError()

Bases: PyvalveError

Exception processing response

exception PyvalveScanningError()

Bases: PyvalveError

Exception scanning. Could be path not found.

exception PyvalveStreamMaxLength()

Bases: PyvalveResponseError

Exception using INSTREAM with a buffer length > StreamMaxLength in /etc/clamav/clamd.conf