pyzor.client

Networked spam-signature detection client.

>>> import pyzor
>>> import pyzor.client
>>> import pyzor.digest
>>> import pyzor.config

To load the accounts file:

>>> accounts = pyzor.config.load_accounts(filename)

To create a client (to then issue commands):

>>> client = pyzor.client.Client(accounts)

To create a client, using the anonymous user:

>>> client = pyzor.client.Client()

To get a digest (of an email.message.Message object, or similar):

>>> digest = pyzor.digest.get_digest(msg)

To query a server (where address is a (host, port) pair):

>>> client.ping(address)
>>> client.info(digest, address)
>>> client.report(digest, address)
>>> client.whitelist(digest, address)
>>> client.check(digest, address)

To query the default server (public.pyzor.org):

>>> client.ping()
>>> client.info(digest)
>>> client.report(digest)
>>> client.whitelist(digest)
>>> client.check(digest)

Response will contain, depending on the type of request, some of the following keys (e.g. client.ping()[‘Code’]):

All responses will have: - ‘Diag’ ‘OK’ or error message - ‘Code’ ‘200’ if OK - ‘PV’ Protocol Version - ‘Thread’

info and check responses will also contain: - ‘[WL-]Count’ Whitelist/Blacklist count

info responses will also have: - ‘[WL-]Entered’ timestamp when message was first whitelisted/blacklisted - ‘[WL-]Updated’ timestamp when message was last whitelisted/blacklisted

class pyzor.client.BatchClient(accounts=None, timeout=None, spec=None, batch_size=10)

Bases: pyzor.client.Client

Like the normal Client but with support for batching reports.

flush()

Deleting any saved digest reports.

force()

Force send any remaining reports.

report(digest, address=('public.pyzor.org', 24441))
whitelist(digest, address=('public.pyzor.org', 24441))
class pyzor.client.CheckClientRunner(routine, r_count=0, wl_count=0)

Bases: pyzor.client.ClientRunner

handle_response(response, message)
class pyzor.client.Client(accounts=None, timeout=None, spec=None)

Bases: object

check(digest, address=('public.pyzor.org', 24441))
info(digest, address=('public.pyzor.org', 24441))
max_packet_size = 8192
ping(address=('public.pyzor.org', 24441))
pong(digest, address=('public.pyzor.org', 24441))
read_response(sock, expected_id)
report(digest, address=('public.pyzor.org', 24441))
send(msg, address=('public.pyzor.org', 24441))
timeout = 5
whitelist(digest, address=('public.pyzor.org', 24441))
class pyzor.client.ClientRunner(routine)

Bases: object

handle_response(response, message)

mesaage is a string we’ve built up so far

run(server, args, kwargs=None)
class pyzor.client.InfoClientRunner(routine)

Bases: pyzor.client.ClientRunner

handle_response(response, message)