"""ALyx File related errors and warnings.
A set of Alyx and ALF related error classes which provide a more verbose description of the raised
issues.
"""
[docs]
class ALFError(Exception):
"""A base class for ALF-related errors.
Attributes
----------
explanation : str
An optional, verbose but general explanation of the error class. All errors will display
the same explanation.
"""
explanation = ''
def __init__(self, *args, terse=False):
"""A base ALF exception.
Parameters
----------
args : str, any
A specific error message to display or items to include in message.
terse : bool
If True, the explanation string is not included in exception message.
Examples
--------
>>> raise ALFError("ALF directory doesn't exist")
one.alf.exceptions.ALFError: ALF directory doesn't exist
>>> raise ALFError('invalid/path/one', 'invalid/path/two')
one.alf.exceptions.ALFError: "invalid/path/one", "invalid/path/two"
"""
if args:
if len(args) == 1 and isinstance(args[0], str):
self.message = args[0]
else:
self.message = '"' + '", "'.join(map(str, args)) + '"'
else:
self.message = ''
self.terse = terse
def __str__(self):
if not self.message and not self.explanation:
return ''
return self.message if self.terse else f'{self.message} \n {self.explanation} '
[docs]
class AlyxSubjectNotFound(ALFError):
"""'Subject not found' error"""
explanation = 'The subject was not found in Alyx database'
[docs]
class ALFObjectNotFound(ALFError):
"""'Object not found' error"""
explanation = ('The ALF object was not found. This may occur if the object or namespace or '
'incorrectly formatted e.g. the object "_ibl_trials.intervals.npy" would be '
'found with the filters `object="trials", namespace="ibl"`')
[docs]
class ALFMultipleObjectsFound(ALFError):
"""'Multiple objects found' error"""
explanation = ('Dataset files belonging to more than one object found. '
'ALF names have the pattern '
'(_namespace_)object.attribute(_timescale).extension, e.g. for the file '
'"_ibl_trials.intervals.npy" the object is "trials"')
[docs]
class ALFMultipleCollectionsFound(ALFError):
"""'Multiple collections found' error"""
explanation = ('The matching object/file(s) belong to more than one collection. '
'ALF names have the pattern '
'collection/(_namespace_)object.attribute(_timescale).extension, e.g. for the '
'file "alf/probe01/spikes.times.npy" the collection is "alf/probe01"')
[docs]
class ALFMultipleRevisionsFound(ALFError):
"""'Multiple objects found' error"""
explanation = ('The matching object/file(s) belong to more than one revision. '
'Multiple datasets in different revision folders were found with no default '
'specified.')
[docs]
class ALFWarning(Warning):
"""Cautions when loading ALF datasets."""
pass
[docs]
class ALFInvalid(ALFError, ValueError):
"""ALF path invalid."""
explanation = ('The file path provided is does not match the ALF path specification defined '
'in `one.alf.spec`.')