From 5bf973acbb888cf780ee9c67f19ad9c9badb54e3 Mon Sep 17 00:00:00 2001 From: Nathan Denny Date: Mon, 18 Nov 2024 10:39:13 -0500 Subject: [PATCH] refactoring more with better CARP returns from SFTP mover. --- lib/Bastion/CARP.py | 12 ++++++---- lib/Bastion/Movers/CARP.py | 49 ++++++++++++++++++++++++++++++++++++++ lib/Bastion/Movers/SFTP.py | 9 +++---- 3 files changed, 59 insertions(+), 11 deletions(-) create mode 100644 lib/Bastion/Movers/CARP.py diff --git a/lib/Bastion/CARP.py b/lib/Bastion/CARP.py index f5b365a..b607fe9 100644 --- a/lib/Bastion/CARP.py +++ b/lib/Bastion/CARP.py @@ -125,10 +125,11 @@ def toJDN(self, **kwargs): jdn = { 'ID': self.ID, 'action': self.action, - 'args': list(self.args), 'opened': self.when.isoformat(), 'context': { } } + if args: + jdn['args'] = list(args) for k, v in self.context.items(): jdn['context'][k] = v @@ -219,14 +220,15 @@ def toJDN(self, **kwargs): class Request(isRequest): + REPORT = Report def succeeded(self, doc, data = None, **kwargs): - return Report(self, ReplyStatus.Ok, doc, data, **kwargs) + return self.REPORT(self, ReplyStatus.Ok, doc, data, **kwargs) def failed(self, doc, data = None, **kwargs): - return Report(self, ReplyStatus.Failed, doc, data, **kwargs)) + return self.REPORT(self, ReplyStatus.Failed, doc, data, **kwargs)) def crashed(self, doc, data = None, **kwargs): - return Report(self, ReplyStatus.Crashed, doc, data, **kwargs)) + return self.REPORT(self, ReplyStatus.Crashed, doc, data, **kwargs)) def inconclusive(self, doc, data = None, **kwargs) - return Report(self, ReplyStatus.Inconclusive, doc, data, **kwargs) + return self.REPORT(self, ReplyStatus.Inconclusive, doc, data, **kwargs) diff --git a/lib/Bastion/Movers/CARP.py b/lib/Bastion/Movers/CARP.py new file mode 100644 index 0000000..bf8536a --- /dev/null +++ b/lib/Bastion/Movers/CARP.py @@ -0,0 +1,49 @@ +import os +import pathlib +import subprocess +import operator +import datetime +import json +import socket +import logging +import getpass +import shutil +import tarfile +import logging + +from Bastion.Common import Thing, Unknown +import Bastion.Model +from Bastion.Curator import Manifest, BLONDE, Snap +from Bastion.CARP import Request, Receipt + + +class PackRequest(Request): + REPORT = PackReport + def __init__(self, asset, spooled, basis = None, **kwargs): + Request.__init__(self, kwargs.get("action", "pack")) + + self.context['asset'] = str(asset.CURIE) + self.context['halo'] = str(asset.halo) + + if basis: + self.context['detail'] = 'D' + self.context['basis'] = str(kwargs['basis']) + self.context['whence'] = kwargs['whence'].isoformat() + if 'genus' in kwargs: + self.context['genus'] = kwargs['genus'] + else: + self.context['detail'] = 'F' + + +class PackReport(Receipt): + def __init__(self, request, status, doc, obj = None, **kwargs): + Report.__init__(self, request, status, doc, obj, **kwargs) + + + +class PutRequest(Request): + pass + + +class PutReceipt(Receipt): + pass diff --git a/lib/Bastion/Movers/SFTP.py b/lib/Bastion/Movers/SFTP.py index 997daf1..960f03a 100644 --- a/lib/Bastion/Movers/SFTP.py +++ b/lib/Bastion/Movers/SFTP.py @@ -14,6 +14,7 @@ from Bastion.Common import Thing, Unknown import Bastion.Model from Bastion.Curator import Manifest, BLONDE, Snap +from Bastion.CARP import Request, Receipt logger = logging.getLogger(__name__) @@ -26,6 +27,8 @@ def asPurePath(x): return pathlib.PurePosixPath(x) + + class Mover(Bastion.Model.isMover): def __init__(self, vault, **kwargs): isClerk.__init__(self) @@ -113,12 +116,6 @@ def pack(self, asset, basis = None, **kwargs): #-- use the built-in python tar archiver, using "pax" (POSIX.1-2001) extensions. pax((self.scratch / tag), asset.halo, **opts) - #-- start a receipt for packing the asset. - receipt = Bastion.Model.PackingReceipt(asset, blonded, spooled) - - #-- some optional information that might be of use... - receipt['size'] = spooled.stat().st_size - receipt['tag'] = str(tag) #-- Answer the receipt. return receipt