Supporing DESCCHANGED events

Adding support for DESCCHANGED events. These are trivial since... well, they
don't contain any attributes. I'm also filling in some missing EventType enum
documentation and changing the API docs for events to automatically pick up new
event types (there's no point in using autoclass rather than automodule in this
case).
This commit is contained in:
Damian Johnson 2012-11-21 09:05:40 -08:00
parent 84ec250529
commit 7f73e1c2c9
4 changed files with 49 additions and 22 deletions

View File

@ -15,12 +15,5 @@ Responses
Events
------
.. autoclass:: stem.response.events.Event
.. autoclass:: stem.response.events.LogEvent
.. autoclass:: stem.response.events.AddrMapEvent
.. autoclass:: stem.response.events.BandwidthEvent
.. autoclass:: stem.response.events.CircuitEvent
.. autoclass:: stem.response.events.NewDescEvent
.. autoclass:: stem.response.events.ORConnEvent
.. autoclass:: stem.response.events.StreamEvent
.. automodule:: stem.response.events

View File

@ -69,20 +69,23 @@ providing its own for interacting at a higher level.
:class:`~stem.control.Controller` can listen for. Enums are mapped to
:class:`~stem.response.events.Event` subclasses as follows...
=========== ===========
EventType Event Class
=========== ===========
**DEBUG** :class:`stem.response.events.LogEvent`
**INFO** :class:`stem.response.events.LogEvent`
**NOTICE** :class:`stem.response.events.LogEvent`
**WARN** :class:`stem.response.events.LogEvent`
**ERR** :class:`stem.response.events.LogEvent`
**BW** :class:`stem.response.events.BandwidthEvent`
**CIRC** :class:`stem.response.events.CircuitEvent`
**NEWDESC** :class:`stem.response.events.NewDescEvent`
**ORCONN** :class:`stem.response.events.ORConnEvent`
**STREAM** :class:`stem.response.events.StreamEvent`
=========== ===========
===================== ===========
EventType Event Class
===================== ===========
**DEBUG** :class:`stem.response.events.LogEvent`
**INFO** :class:`stem.response.events.LogEvent`
**NOTICE** :class:`stem.response.events.LogEvent`
**WARN** :class:`stem.response.events.LogEvent`
**ERR** :class:`stem.response.events.LogEvent`
**ADDRMAP** :class:`stem.response.events.AddrMapEvent`
**AUTHDIR_NEWDESCS** :class:`stem.response.events.AuthDirNewDescEvent`
**BW** :class:`stem.response.events.BandwidthEvent`
**CIRC** :class:`stem.response.events.CircuitEvent`
**DESCCHANGED** :class:`stem.response.events.DescChangedEvent`
**NEWDESC** :class:`stem.response.events.NewDescEvent`
**ORCONN** :class:`stem.response.events.ORConnEvent`
**STREAM** :class:`stem.response.events.StreamEvent`
===================== ===========
"""
from __future__ import with_statement

View File

@ -282,6 +282,14 @@ class CircuitEvent(Event):
log_id = "event.circ.unknown_remote_reason.%s" % self.remote_reason
log.log_once(log_id, log.INFO, unrecognized_msg % ('remote reason', self.remote_reason))
class DescChangedEvent(Event):
"""
Event that indicates that our descriptor has changed. This was first added in
tor version 0.1.2.2.
"""
pass
class LogEvent(Event):
"""
Tor logging event. These are the most visible kind of event since, by
@ -473,6 +481,7 @@ EVENT_TYPE_TO_CLASS = {
"AUTHDIR_NEWDESCS": AuthDirNewDescEvent,
"BW": BandwidthEvent,
"CIRC": CircuitEvent,
"DESCCHANGED": DescChangedEvent,
"NEWDESC": NewDescEvent,
"ORCONN": ORConnEvent,
"STREAM": StreamEvent,

View File

@ -138,6 +138,17 @@ class TestEvents(unittest.TestCase):
self.assertEqual(None, event.error)
self.assertEqual(datetime.datetime(2012, 11, 19, 8, 50, 13), event.gmt_expiry)
def test_authdir_newdesc_event(self):
# TODO: We aren't actually parsing the event yet. Until then we can only
# check that we properly get a AuthDirNewDescEvent for it.
event = _get_event("650 AUTHDIR_NEWDESCS")
self.assertTrue(isinstance(event, stem.response.events.AuthDirNewDescEvent))
self.assertEqual("AUTHDIR_NEWDESCS", str(event))
self.assertEqual([], event.positional_args)
self.assertEqual({}, event.keyword_args)
def test_bw_event(self):
event = _get_event("650 BW 15 25")
@ -255,6 +266,17 @@ class TestEvents(unittest.TestCase):
self.assertEqual(None, event.reason)
self.assertEqual(None, event.remote_reason)
def test_descchanged_event(self):
# all we can check for is that the event is properly parsed as a
# DescChangedEvent instance
event = _get_event("650 DESCCHANGED")
self.assertTrue(isinstance(event, stem.response.events.DescChangedEvent))
self.assertEqual("DESCCHANGED", str(event))
self.assertEqual([], event.positional_args)
self.assertEqual({}, event.keyword_args)
def test_newdesc_event(self):
event = _get_event(NEWDESC_SINGLE)
expected_relays = (("B3FA3110CC6F42443F039220C134CBD2FC4F0493", "Sakura"),)