Skip to content
Draft
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions src/bids_validator/context.py
Original file line number Diff line number Diff line change
Expand Up @@ -298,3 +298,78 @@ def from_file(cls, file: FileTree, schema: Namespace) -> t.Self:
suffix=suffix,
extension=extension,
)

@attrs.define
class Context:

file: FileTree
dataset: Dataset
schema: Namespace = attrs.field(init=False)
file_parts: FileParts = attrs.field(init=False)

def __attrs_post_init__(self):
self.schema = self.dataset.schema
self.file_parts = FileParts.from_file(self.file, self.schema)

@property
def path(self) -> str:
return self.file_parts.path

@property
def entiities(self) -> dict[str, str] | None:
return self.file_parts.entities

@property
def datatype(self) -> str | None:
return self.file_parts.datatype

@property
def suffix(self) -> str | None:
return self.file_parts.suffix

@property
def extension(self) -> str | None:
return self.file_parts.extension

@property
def modality(self) -> str | None:
modalities = self.schema.rules.modalities
for mod_name, mod_dtypes in modalities.items():
if self.datatype in mod_dtypes.datatypes:
return mod_name

@property
def size(self) -> int:
return self.file.direntry.stat().st_size

@property
def subject(self) -> ctx.Subject | None:
return ctx.Subject()

@property
def associations(self) -> ctx.Associations:
return ctx.Associations()

@property
def columns(self) -> None:
pass

@property
def json(self) -> None:
pass

@property
def gzip(self) -> None:
pass

@property
def nifti_header(self) -> None:
pass

@property
def ome(self) -> None:
pass

@property
def tiff(self) -> None:
pass
29 changes: 29 additions & 0 deletions tests/test_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,32 @@ def test_fileparts(examples, schema):
suffix='T1w',
extension='.nii',
)

def test_context(examples, schema):

tree = FileTree.read_from_filesystem(examples / 'synthetic')
ds = context.Dataset(tree, schema)
T1w = tree / 'sub-01' / 'ses-01' / 'anat' / 'sub-01_ses-01_T1w.nii'

file_context = context.Context(T1w, ds)

assert file_context.schema == schema
assert file_context.dataset == ds
assert file_context.entiities == {'sub': '01', 'ses': '01'}
assert file_context.path == '/sub-01/ses-01/anat/sub-01_ses-01_T1w.nii'
assert file_context.datatype == 'anat'
assert file_context.suffix == 'T1w'
assert file_context.extension == '.nii'
assert file_context.modality == 'mri'
assert file_context.size == 352

## Tests for:
# subject
# sidecar
# associations
# columns
# json
# gzip
# nifti_header
# ome
# tiff
Loading