def test_registration(self): class TestMixin: pass self.assertTrue(Mixin.register('mixin', TestMixin)) self.assertTrue(Mixin.unregister('mixin')) self.assertFalse(Mixin.unregister('mixin'))
self.default_validator() assert payload['type'] assert payload['type'] in valid_payload_types except AssertionError: raise RequestError("Invalid payload: %s" % payload) return fn(self, **kwargs) return validator class Query: """ Query handler """ @validate def execute(self, host=None): """ Handle an inbound query """ key, value = self.packet.payload['type'], self.packet.payload['value'] result = [] for host in self._r.keys(pattern="host_*"): host = json.JSONDecoder().decode(self._r.get(host)) query_values = host.get(key, None) if query_values: if value in query_values: result.append(host) return result Mixin.register("heard of?", Query)
""" Validates a packet""" payload = self.packet.payload try: valid_payload_types = ('hosts', 'services', 'addresses', 'disks') self.default_validator() print payload assert payload['type'] assert payload['type'] in valid_payload_types assert type(payload['export']) == list assert len(payload['export']) > 0 except AssertionError: raise RequestError("Invalid payload: %s" % payload) return fn(self, **kwargs) return validator class Export: """ Export handler """ @validate def execute(self, host=None): """ handle an inbound export """ if not host: host = self.packet.payload['host'] key = 'host_%s' % host return self._store(key, self.packet.payload) Mixin.register("i have", Export)
from pynpoint.errors import RequestError def validate(fn): """ Validation decorator """ def validator(self, **kwargs): """ Validates a packet""" payload = self.packet.payload try: self.default_validator() assert payload['host'] or kwargs['host'] except AssertionError: raise RequestError("Invalid payload: %s" % payload) return fn(self, **kwargs) return validator class Announcement: """ Announcement RequestHandler mixin """ @validate def execute(self, host=None): """ handle a hello """ if not host: host = self.packet.payload['host'] key = 'host_%s' % host return self._store(key, self.packet.payload) Mixin.register("hi!", Announcement)