[tor-dev] Stem code review 2012-12-04
Damian Johnson
atagar at torproject.org
Sat Dec 8 03:01:48 UTC 2012
Hi Sean. Thanks for code reviewing my recent commits!
> 1) I do not like the new _get_event() with assert_class and assert_content. There are transformations and tests and returned values all within what is a mock object builder, meaning it works via side-effect. This could be surprising to test writers.
> 2) I vote to keep "self.assertTrue(isinstance(event, stem.response.events.StatusEvent))" style tests after producing the event.
The assertions were opt-in (ie, only triggered if the caller sets
assert_class or assert_content) so I doubt that they would be a
surprise for test writers. That said, I went ahead and reverted it. I
agree that mixing those assertions with the event constructor was a
little clunky, and it really didn't end up having the readability
improvements I hoped it would.
> The quoted key/value mapping is more readable, now. Good work. Why not look for quoted positional args before non-quoted positional args? Why not do just like kwarg handling?
The reason I did this for kwargs was because it was necessary to avoid
having new spec additions break us. If a new quoted positional
argument appeared then the parser would ignore it, but a quoted
keyword arg would break all prior args. For instance...
========================================
class MyEvent(Event):
_POSITIONAL_ARGS = ("foo")
_KEYWORD_ARGS = {
'bar': 'bar',
}
========================================
MY_EVENT arg1 "quoted arg" bar=stuff
... would be parsed as...
foo = arg1
bar = stuff
positional_args = ['arg1', '"quoted', 'arg"']
keyword_args = {'bar': 'stuff'}
========================================
MY_EVENT arg1 bar=stuff blarg="quoted arg"
... would be parsed as...
foo = arg1
bar = None
positional_args = ['arg1', 'bar=stuff', 'blarg="quoted', 'arg"']
keyword_args = {}
========================================
This is because the parser would see the last bit ('arg"') and
conclude that it was a positional argument since it didn't match the
key=value pattern. This isn't strictly wrong according to the spec (it
makes no allowances for new additions being quoted), though that's
probably just an oversight.
I wouldn't mind for positional arguments to also check for quoted
values. I was simply avoiding that because screwy situations could
then break us. For instance...
MY_EVENT "arg1 arg2"
... where the spec says we really *do* have two non-quoted positional
arguments. That said, if we ever saw such a thing I'd probably
conclude that tor was *trying* to confuse us. :P
Patch welcome.
> Why restrict SignalEvents to expected_signals when control-spec.txt allows more? This may mean changes later to add support for things the protocol already claims to support.
It's not being restricted. The expected_signals is only used so that
we log if we get something else. It doesn't prevent us from having
other values - I'd just like to know if we get them since the pydocs
and spec would then need to be tweaked.
> I set up coverage.py for another project and I wondered if it would work with Stem. So, I ran "coverage run --parallel-mode --branch --omit="test*" ./run_tests.py -u -i -t RUN_NONE" in the stem directory. The results are 66% - 100% coverage per module. Another impressive accomplishment. And this is only running a subset of the possible tests.
Sweet! Mind sending me a link to the coverage tool? I'd like to see
which modules are lacking coverage.
Cheers! -Damian
More information about the tor-dev
mailing list