diff --git a/bin/bastion.py b/bin/bastion.py index 0b811a7..682de5b 100755 --- a/bin/bastion.py +++ b/bin/bastion.py @@ -150,7 +150,8 @@ def site(self, s): else: raise ValueError('"{}" is not a valid reference to a site'.format(str(s))) - def asset(self, ark): + def asset(self, *args): + ark = ARK(*args) return self.site(ark.site).asset(ark) def vault(self, name, site = None): @@ -1027,7 +1028,7 @@ def do_become_conductor(self, request): app = App().configured() argdex = dict(enumerate(sys.argv)) if argdex.get(1, None) == 'shell': - if os.environ.get('BASTION_SITE', None) == 'rusina': + if argdex.get(2, None) == 'rusina': rusina = app.site('rusina') soundscapes = rusina.zone('soundscapes') asset = soundscapes['HackathonData'] diff --git a/lib/Bastion/Chronology.py b/lib/Bastion/Chronology.py index 363501b..252eb85 100644 --- a/lib/Bastion/Chronology.py +++ b/lib/Bastion/Chronology.py @@ -4,7 +4,13 @@ import string import datetime import logging -from Bastion.Common import SECONDS +from Bastion.Common import SECOND, SECONDS + +MILLISECOND = datetime.timedelta(milliseconds=1) +MILLISECONDS = datetime.timedelta(milliseconds=1) +MICROSECOND = datetime.timedelta(microseconds=1) +MICROSECONDS = datetime.timedelta(microseconds=1) + logger = logging.getLogger(__name__) @@ -113,6 +119,18 @@ def datetime(self): elapsed_seconds = ((self.qM * Quantim.QUANTIM) + (Quantim.QUANTIM / 2)) * SECONDS return (y + elapsed_seconds) + @property + def earliest(self): + y = datetime.datetime(self.dY + 2000, self.dM, self.dD, 0, 0, 0) + elapsed_seconds = (self.qM * Quantim.QUANTIM) * SECONDS + return (y + elapsed_seconds) + + @property + def latest(self): + y = datetime.datetime(self.dY + 2000, self.dM, self.dD, 0, 0, 0) + elapsed_seconds = (((self.qM + 1) * Quantim.QUANTIM) * SECONDS) - (1*MICROSECOND) + return (y + elapsed_seconds) + @property def quake(self): """ diff --git a/lib/Bastion/Clerks/SFTP.py b/lib/Bastion/Clerks/SFTP.py index 1168bed..6c92d7b 100644 --- a/lib/Bastion/Clerks/SFTP.py +++ b/lib/Bastion/Clerks/SFTP.py @@ -61,23 +61,14 @@ def manifest(self, *args): manifest(ark) manifest(site, zone, asset) """ - ark = None - if len(args) == 1: - arg = args[0] - if isinstance(arg, isAsset): - ark = arg.ARK - else: - ark = arg - elif len(args) == 3: - site, zone, asset = args - ark = ARK(site, zone, asset) - else: - raise ValueError - + ark = ARK(*args) blondes = [ ] cell = self.scurler / ark.site / ark.zone / ark.asset + logger.debug("Clerk.SFTP.manifest: checking for cell existence") if cell.exists: - for alien in cell.lsall(): + entries = cell.lsall() + for alien in entries: + logger.debug("for alien in entries: {}".format(str(alien))) if not alien.is_folder: blondes.append( BLONDE.decode(alien.stem) ) manifest = Manifest(ark, blondes) diff --git a/lib/Bastion/NetOps/sCURL.py b/lib/Bastion/NetOps/sCURL.py index d13ec4c..20ad367 100644 --- a/lib/Bastion/NetOps/sCURL.py +++ b/lib/Bastion/NetOps/sCURL.py @@ -130,16 +130,16 @@ class Alien: XATTRS = ('permits', 'size', 'mdate') def __init__(self, scurler, rpath, **kwargs): - self.scurler = scurler - self.rpath = pathlib.PurePosixPath(rpath) - self.permits = None - self.size = None - self.mdate = None + self.scurler = scurler + self.rpath = pathlib.PurePosixPath(rpath) + self._permits = Unknown + self.size = Unknown + self.mdate = Unknown #-- look for kwargs to set permits, size, and mtime #-- all of which default to None if not explicitly given. for k in self.XATTRS: - setattr(self, k, kwargs.get(k, None)) + setattr(self, k, kwargs.get(k, Unknown)) @classmethod def fromLS(cls, scurler, parsed): @@ -151,6 +151,17 @@ def fromLS(cls, scurler, parsed): return cls(scurler, rpath, **opts) + def _axs_permits(self, p = None): + if p is not None: + self._permits = p + else: + if self._permits is Unknown: + c = self.parent.catalog() + self._permits = c[self.name].permits + return self._permits + + permits = property(_axs_permits, _axs_permits) + def toDEX(self): dex = { } dex['user'] = self.scurler.user @@ -219,6 +230,10 @@ def ls(self): def lsall(self): return self.scurler.lsall(self.rpath) + def catalog(self): + #-- an alias for .lsall() + return self.scurler.lsall(self.rpath) + def mkdir(self): return self.scurler.mkdir(self.rpath) @@ -230,18 +245,6 @@ def rename(self, newname): self.scurler.rename(self.rpath, newpath) self.rpath = newpath - def is_file(self): - if self.permits is not None: - return (self.permits[0] != 'd') - else: - return Unknown - - def is_dir(self): - if self.permits is not None: - return (self.permits[0] == 'd') - else: - return Unknown - #----------------------------------------- #-- BEGIN pathlib.Path emulation methods | #↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ @@ -262,12 +265,7 @@ def stem(self): @property def parent(self): - return self.rpath.parent - - @property - def is_dir(self): - #-- alias for is_folder - return self.is_folder + return (self.scurler / self.rpath.parent) @property def exists(self): @@ -278,25 +276,28 @@ def exists(self): except NotADirectoryError: exists = False return exists + + def is_file(self): + if self.permits is not None: + return (self.permits[0] != 'd') + else: + return Unknown + + def is_dir(self): + if self.permits: + return (self.permits[0] == 'd') + else: + return Unknown + #↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ #-- END pathlib.Path emulation methods | #--------------------------------------- - @property def is_folder(self): - #-- First look at the permission bits. - #-- If we have permission bits, the first bit is the directory flag. - if self.permits: - if self.permits[0] == 'd': - return True - - #-- If we don't have permits, then try an ls operation on this path. - folderq = True - try: - self.scurler.ls(self.rpath) - except NotADirectoryError: - folderq = False - return folderq + if self.permits[0] == 'd': + return True + else: + return False @property def files(self): @@ -410,11 +411,11 @@ def __init__(self, *args, **kwargs): #if self.keypath is not None: # basecom.extend(['--key', str(self.keypath)]) if self.silent: - basecom.append('-s') + basecom.append('--silent') if self.verbose: basecom.append('-v') if not self.trusted: - basecom.append('-k') + basecom.append('--insecure') self.basecom = tuple(basecom) @@ -510,6 +511,12 @@ def lsall(self, rpath = None): else: raise NotADirectoryError + def catalog(self, rpath = None): + """ + An alias for .lsall() + """ + return self.lsall(rpath) + def put(self, lpath, rpath): """ Given a path to a local file (lpath) and the full path on the remote host (rpath),