Skip to content

Commit

Permalink
mostly minor bug fixes and enhancements; however, big fix in SFTP cle…
Browse files Browse the repository at this point in the history
…rk and sCURLer to better handle getting permission bits.
  • Loading branch information
ndenny committed May 29, 2025
1 parent a10fa2e commit 51fa2dd
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 57 deletions.
5 changes: 3 additions & 2 deletions bin/bastion.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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']
Expand Down
20 changes: 19 additions & 1 deletion lib/Bastion/Chronology.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__)

Expand Down Expand Up @@ -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):
"""
Expand Down
19 changes: 5 additions & 14 deletions lib/Bastion/Clerks/SFTP.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
87 changes: 47 additions & 40 deletions lib/Bastion/NetOps/sCURL.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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
Expand Down Expand Up @@ -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)

Expand All @@ -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 |
#↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Expand All @@ -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):
Expand All @@ -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):
Expand Down Expand Up @@ -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)

Expand Down Expand Up @@ -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),
Expand Down

0 comments on commit 51fa2dd

Please sign in to comment.