Skip to content

Commit

Permalink
refactor operation logger to log also genoetwork API calls
Browse files Browse the repository at this point in the history
  • Loading branch information
mki-c2c committed Jan 29, 2025
1 parent d96ddaa commit ba0cd4d
Showing 1 changed file with 28 additions and 2 deletions.
30 changes: 28 additions & 2 deletions backend/maelstro/core/operations.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
from requests.exceptions import HTTPError
from geonetwork import GnSession


class OpLogger:
def __init__(self):
self.operations = []
self.services = []

def add_gn_service(self, gs_service, url: str, is_source: bool):
gn_service = GnOpService(self, gs_service, url, is_source)
def add_gn_service(self, gn_service, url: str, is_source: bool):
op_service = OpService(self, None, url, is_source, True)
gn_service.session = GnSessionWrapper(op_service, gn_service.session, url)
self.services.append(gn_service)
return gn_service

Expand Down Expand Up @@ -50,6 +52,7 @@ def __init__(self, op_logger, service, url, is_source, is_geonetwork, dry_run=Fa
self.dry = dry_run

def log_operation(self, operation):
#print(operation, self.url, self.context, self.service_type)
self.op_logger.log_operation(operation, self.url, self.context, self.service_type)


Expand All @@ -69,6 +72,29 @@ def put_record_zip(self, zipdata):
return self.service.put_record_zip(zipdata)


class GnSessionWrapper(GnSession):
def __init__(self, op_service, rest_client, url):
self.rest_client = rest_client
self.op_service = op_service
self.url = url
self._request = rest_client.request

def __getattribute__(self, key):
if key in ["get", "put", "post", "delete"]:

def create_request_wrapper(method):
def request_wrapper(path, *args, **kwargs):
rest_client = object.__getattribute__(self, "rest_client")
resp = rest_client.__getattribute__(method).__call__(path, *args, **kwargs)
op_service = object.__getattribute__(self, "op_service")
url = object.__getattribute__(self, "url")
op_service.log_operation(f"{method} ({resp.status_code}) {path.replace(url, '')}")
return resp
return request_wrapper
return create_request_wrapper(key)
return object.__getattribute__(self, "rest_client").__getattribute__(key)


class GsOpService(OpService):
def __init__(self, op_logger, gn_service, url, is_source, dry_run=False):
super().__init__(op_logger, gn_service, url, is_source, False, dry_run)
Expand Down

0 comments on commit ba0cd4d

Please sign in to comment.