diff options
author | David Pursehouse <david.pursehouse@sonymobile.com> | 2013-09-11 09:57:16 +0900 |
---|---|---|
committer | David Pursehouse <david.pursehouse@sonymobile.com> | 2013-09-11 14:08:23 +0900 |
commit | 377d5f2dc91ac045f6148053112f59b4ba768b92 (patch) | |
tree | 3755a4d6539fd3b384a83306e51c23ac457fabcf | |
parent | 1b646c2b3ada19e3b96f36dd2eef261104917c31 (diff) | |
download | pygerrit-377d5f2dc91ac045f6148053112f59b4ba768b92.tar.gz |
Fix #3: Don't treat unhandled event types as errors
If an unknown event is received on the event stream, for example if a
new event has been added in a later version of Gerrit, do not raise
an error. Instead, generate an "UnhandledEvent" event.
Change-Id: Ia1902bf4a54883011b7ad3e004f58a2ba8739b21
-rw-r--r-- | pygerrit/events.py | 14 | ||||
-rw-r--r-- | testdata/unhandled-event.txt | 3 | ||||
-rwxr-xr-x | unittests.py | 9 |
3 files changed, 22 insertions, 4 deletions
diff --git a/pygerrit/events.py b/pygerrit/events.py index 76f1c86..8cf44cd 100644 --- a/pygerrit/events.py +++ b/pygerrit/events.py @@ -57,15 +57,14 @@ class GerritEventFactory(object): """ Create a new event instance. Return an instance of the `GerritEvent` subclass from `json_data` - Raise GerritError if `json_data` does not contain a `type` key, or - no corresponding event is registered. + Raise GerritError if `json_data` does not contain a `type` key. """ if not "type" in json_data: raise GerritError("`type` not in json_data") name = json_data["type"] if not name in cls._events: - raise GerritError("Unknown event: %s" % name) + name = 'unhandled-event' event = cls._events[name] module_name = event[0] class_name = event[1] @@ -82,6 +81,15 @@ class GerritEvent(object): self.json = json_data +@GerritEventFactory.register("unhandled-event") +class UnhandledEvent(GerritEvent): + + """ Unknown event type received in json data from Gerrit's event stream. """ + + def __init__(self, json_data): + super(UnhandledEvent, self).__init__(json_data) + + @GerritEventFactory.register("patchset-created") class PatchsetCreatedEvent(GerritEvent): diff --git a/testdata/unhandled-event.txt b/testdata/unhandled-event.txt new file mode 100644 index 0000000..6824cc8 --- /dev/null +++ b/testdata/unhandled-event.txt @@ -0,0 +1,3 @@ +{"type":"this-event-is-not-handled", + "title":"Unhandled event title", + "description":"Unhandled event description"} diff --git a/unittests.py b/unittests.py index 1588298..358d7f4 100755 --- a/unittests.py +++ b/unittests.py @@ -32,7 +32,7 @@ import unittest from pygerrit.events import PatchsetCreatedEvent, \ RefUpdatedEvent, ChangeMergedEvent, CommentAddedEvent, \ ChangeAbandonedEvent, ChangeRestoredEvent, \ - DraftPublishedEvent, GerritEventFactory, GerritEvent + DraftPublishedEvent, GerritEventFactory, GerritEvent, UnhandledEvent from pygerrit.client import GerritClient from setup import REQUIRES as setup_requires @@ -58,6 +58,7 @@ def _create_event(name, gerrit): data = open(os.path.join("testdata", name + ".txt")) json_data = json.loads(data.read().replace("\n", "")) gerrit.put_event(json_data) + return json_data class TestConsistentDependencies(unittest.TestCase): @@ -247,6 +248,12 @@ class TestGerritEvents(unittest.TestCase): self.assertEquals(event.title, "Event title") self.assertEquals(event.description, "Event description") + def test_unhandled_event(self): + json_data = _create_event("unhandled-event", self.gerrit) + event = self.gerrit.get_event(False) + self.assertTrue(isinstance(event, UnhandledEvent)) + self.assertEquals(event.json, json_data) + def test_add_duplicate_event(self): try: @GerritEventFactory.register("user-defined-event") |