diff --git a/warden_server/warden_server.py b/warden_server/warden_server.py index ec4bf8928cb5c1979b57b09cf22dac7a48b5999a..bbf4ff9efd6c020f6ef5e76d857dacc2503ebb20 100755 --- a/warden_server/warden_server.py +++ b/warden_server/warden_server.py @@ -6,6 +6,7 @@ from __future__ import print_function +import abc import sys import os import io @@ -133,17 +134,6 @@ class Error(Exception): return d -def override_required(method): - def abstract_method(self, *args, **kwargs): - method(self, *args, **kwargs) - raise NotImplementedError( - "Class %s needs to implement the %s() method" % - (type(self).__name__, method.__name__) - ) - abstract_method.__doc__ = method.__doc__ - return abstract_method - - def get_clean_root_logger(level=logging.INFO): """ Attempts to get logging module into clean slate state """ @@ -509,7 +499,7 @@ class DataBase(ObjectBase): self.db = None self.con = None - @override_required + @abc.abstractmethod def connect(self): pass @@ -628,7 +618,7 @@ class DataBase(ObjectBase): def _get_not(self, b): return "" if b else "NOT" - @override_required + @abc.abstractmethod def _build_get_client_by_name(self, cert_names, name, secret): """Build query and params for client lookup""" @@ -647,7 +637,7 @@ class DataBase(ObjectBase): return Client(**rows[0]) if rows else None - @override_required + @abc.abstractmethod def _build_get_clients(self, id): """Build query and params for client lookup by id""" @@ -659,7 +649,7 @@ class DataBase(ObjectBase): rows = db.query_all(query, params, ret=ret) return [Client(**row) for row in rows] - @override_required + @abc.abstractmethod def _build_add_modify_client(self, id, **kwargs): """Build query and params for adding/modifying client""" @@ -675,11 +665,11 @@ class DataBase(ObjectBase): newid = res_id if id is None else id return newid - @override_required + @abc.abstractmethod def _build_get_debug_version(self): pass - @override_required + @abc.abstractmethod def _build_get_debug_tablestat(self): pass @@ -707,13 +697,13 @@ class DataBase(ObjectBase): maps.append(mapped) return set(maps) # unique - @override_required + @abc.abstractmethod def _build_fetch_events( self, client, id, count, cat, nocat, tag, notag, group, nogroup): """Build query and params for fetching events based on id, count and category, tag and group filters""" - @override_required + @abc.abstractmethod def _load_event_json(self, data): """Return decoded json from data loaded from database, if unable to decode, return None""" @@ -770,15 +760,15 @@ class DataBase(ObjectBase): "events": events } - @override_required + @abc.abstractmethod def _build_store_events_event(self, client, event, raw_event): """Build query and params for event insertion""" - @override_required + @abc.abstractmethod def _build_store_events_categories(self, event_id, cat_ids): """Build query and params for insertion of event-categories mapping""" - @override_required + @abc.abstractmethod def _build_store_events_tags(self, event_id, tag_ids): """Build query and params for insertion of event-tags mapping""" @@ -809,7 +799,7 @@ class DataBase(ObjectBase): exception.log(self.log) return [{"error": 500, "message": "DB error %s" % type(e).__name__}] - @override_required + @abc.abstractmethod def _build_insert_last_received_id(self, client, id): """Build query and params for insertion of the last event id received by client""" @@ -820,7 +810,7 @@ class DataBase(ObjectBase): with attempt as db: db.execute(query, params) - @override_required + @abc.abstractmethod def _build_get_last_event_id(self): """Build query and params for querying the id of the last inserted event""" @@ -831,7 +821,7 @@ class DataBase(ObjectBase): id_ = db.query_one(query, params, ret=ret)["id"] return id_ or 1 - @override_required + @abc.abstractmethod def _build_get_last_received_id(self, client): """Build query and params for querying the last event id received by client""" @@ -852,11 +842,11 @@ class DataBase(ObjectBase): return id - @override_required + @abc.abstractmethod def _build_load_maps_tags(self): """Build query and params for updating the tag map""" - @override_required + @abc.abstractmethod def _build_load_maps_cats(self): """Build query and params for updating the catetgory map""" @@ -867,7 +857,7 @@ class DataBase(ObjectBase): db.execute(tquery, tparams) db.execute(cquery, cparams) - @override_required + @abc.abstractmethod def _build_purge_lastlog(self, days): """Build query and params for purging stored client last event mapping older than days""" @@ -876,11 +866,11 @@ class DataBase(ObjectBase): with self as db: return db.query_rowcount(query, params, ret=ret) - @override_required + @abc.abstractmethod def _build_purge_events_get_id(self, days): """Build query and params to get largest event id of events older than days""" - @override_required + @abc.abstractmethod def _build_purge_events_events(self, id_): """Build query and params to remove events older then days and their mappings""" @@ -895,6 +885,9 @@ class DataBase(ObjectBase): return affected +DataBase = abc.ABCMeta("DataBase", (DataBase,), {}) + + class MySQL(DataBase): def __init__(