[ENH]: Consistency of logging #239
80 changed files with 284 additions and 100 deletions
1
docs/changes/newsfragments/239.enh
Normal file
1
docs/changes/newsfragments/239.enh
Normal file
|
|
@ -0,0 +1 @@
|
|||
Improve logging consistency of components by `Synchon Mandal`_
|
||||
|
|
@ -23,6 +23,7 @@ DataGrabbers, Preprocessors, Markers, etc., following the *junifer* way.
|
|||
:caption: Contents:
|
||||
|
||||
extension
|
||||
logging
|
||||
datagrabber
|
||||
marker
|
||||
preprocessor
|
||||
|
|
|
|||
38
docs/extending/logging.rst
Normal file
38
docs/extending/logging.rst
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
.. include:: ../links.inc
|
||||
|
||||
.. _logging_in_extension:
|
||||
|
||||
Logging in a ``junifer`` extension
|
||||
==================================
|
||||
|
||||
It is important to have proper logging in your code and ``junifer`` makes it trivial to do so for your extensions.
|
||||
|
||||
For DataGrabber:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from junifer.datagrabber import logger
|
||||
|
||||
|
||||
For Preprocessor:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from junifer.preprocess import logger
|
||||
|
||||
|
||||
For Marker:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from junifer.marker import logger
|
||||
|
||||
|
||||
For Storage:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from junifer.storage import logger
|
||||
|
||||
|
||||
Importing the correct logger will give you a properly set up logger which will fit right in with the rest of ``junifer``\'s log output.
|
||||
|
|
@ -10,6 +10,8 @@ import os
|
|||
import shutil
|
||||
from pathlib import Path
|
||||
|
||||
import structlog
|
||||
|
||||
from ..api.queue_context import GnuParallelLocalAdapter, HTCondorAdapter
|
||||
from ..datagrabber import BaseDataGrabber
|
||||
from ..markers import BaseMarker
|
||||
|
|
@ -27,11 +29,14 @@ from ..typing import (
|
|||
PreprocessorLike,
|
||||
StorageLike,
|
||||
)
|
||||
from ..utils import logger, raise_error, warn_with_log, yaml
|
||||
from ..utils import raise_error, warn_with_log, yaml
|
||||
|
||||
|
||||
__all__ = ["collect", "list_elements", "queue", "reset", "run"]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="api")
|
||||
|
||||
|
||||
def _get_datagrabber(datagrabber_config: dict) -> DataGrabberLike:
|
||||
"""Get DataGrabber.
|
||||
|
|
|
|||
|
|
@ -9,12 +9,13 @@ from pathlib import Path
|
|||
from typing import Any
|
||||
|
||||
from ...typing import Elements
|
||||
from ...utils import logger, make_executable, raise_error, run_ext_cmd
|
||||
from ...utils import make_executable, raise_error, run_ext_cmd
|
||||
from .queue_context_adapter import (
|
||||
EnvKind,
|
||||
EnvShell,
|
||||
QueueContextAdapter,
|
||||
QueueContextEnv,
|
||||
logger,
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -10,12 +10,13 @@ from pathlib import Path
|
|||
from typing import Any
|
||||
|
||||
from ...typing import Elements
|
||||
from ...utils import logger, make_executable, raise_error, run_ext_cmd
|
||||
from ...utils import make_executable, raise_error, run_ext_cmd
|
||||
from .queue_context_adapter import (
|
||||
EnvKind,
|
||||
EnvShell,
|
||||
QueueContextAdapter,
|
||||
QueueContextEnv,
|
||||
logger,
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ else:
|
|||
from abc import ABC, abstractmethod
|
||||
from enum import Enum
|
||||
|
||||
import structlog
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
|
||||
from ...utils import raise_error
|
||||
|
|
@ -26,6 +27,9 @@ from ...utils import raise_error
|
|||
|
||||
__all__ = ["EnvKind", "EnvShell", "QueueContextAdapter", "QueueContextEnv"]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="api")
|
||||
|
||||
|
||||
class EnvKind(str, Enum):
|
||||
"""Accepted Python environment kind."""
|
||||
|
|
|
|||
|
|
@ -10,13 +10,17 @@ import sys
|
|||
from pathlib import Path
|
||||
|
||||
import pandas as pd
|
||||
import structlog
|
||||
|
||||
from ..typing import Elements
|
||||
from ..utils import logger, raise_error, warn_with_log, yaml
|
||||
from ..utils import raise_error, warn_with_log, yaml
|
||||
|
||||
|
||||
__all__ = ["parse_elements", "parse_yaml"]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="cli")
|
||||
|
||||
|
||||
def parse_yaml(filepath: str | Path) -> dict: # noqa: C901
|
||||
"""Parse YAML.
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import numpy as np
|
|||
from numpy.typing import ArrayLike
|
||||
|
||||
from ...pipeline import WorkDirManager
|
||||
from ...utils import logger, run_ext_cmd
|
||||
from ...utils import run_ext_cmd
|
||||
|
||||
|
||||
__all__ = ["ANTsCoordinatesWarper"]
|
||||
|
|
@ -46,6 +46,9 @@ class ANTsCoordinatesWarper:
|
|||
The transformed coordinates.
|
||||
|
||||
"""
|
||||
# Imported here to avoid circular import
|
||||
from ._coordinates import logger
|
||||
|
||||
logger.debug("Using ANTs for coordinates transformation")
|
||||
|
||||
# Create element-specific tempdir for storing post-warping assets
|
||||
|
|
|
|||
|
|
@ -9,10 +9,11 @@ from typing import Any
|
|||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import structlog
|
||||
from junifer_data import get
|
||||
from numpy.typing import ArrayLike
|
||||
|
||||
from ...utils import logger, raise_error
|
||||
from ...utils import raise_error
|
||||
from ..pipeline_data_registry_base import BasePipelineDataRegistry
|
||||
from ..utils import JUNIFER_DATA_PARAMS, get_dataset_path, get_native_warper
|
||||
from ._ants_coordinates_warper import ANTsCoordinatesWarper
|
||||
|
|
@ -21,6 +22,9 @@ from ._fsl_coordinates_warper import FSLCoordinatesWarper
|
|||
|
||||
__all__ = ["CoordinatesRegistry"]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="data")
|
||||
|
||||
|
||||
class CoordinatesRegistry(BasePipelineDataRegistry):
|
||||
"""Class for coordinates data registry.
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import numpy as np
|
|||
from numpy.typing import ArrayLike
|
||||
|
||||
from ...pipeline import WorkDirManager
|
||||
from ...utils import logger, run_ext_cmd
|
||||
from ...utils import run_ext_cmd
|
||||
|
||||
|
||||
__all__ = ["FSLCoordinatesWarper"]
|
||||
|
|
@ -46,6 +46,9 @@ class FSLCoordinatesWarper:
|
|||
The transformed coordinates.
|
||||
|
||||
"""
|
||||
# Imported here to avoid circular import
|
||||
from ._coordinates import logger
|
||||
|
||||
logger.debug("Using FSL for coordinates transformation")
|
||||
|
||||
# Create element-specific tempdir for storing post-warping assets
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from typing import TYPE_CHECKING, Any
|
|||
import nibabel as nib
|
||||
|
||||
from ...pipeline import WorkDirManager
|
||||
from ...utils import logger, raise_error, run_ext_cmd
|
||||
from ...utils import raise_error, run_ext_cmd
|
||||
from ..template_spaces import get_template, get_xfm
|
||||
|
||||
|
||||
|
|
@ -71,6 +71,9 @@ class ANTsMapsWarper:
|
|||
If ``warp_data`` is None when ``dst="T1w"``.
|
||||
|
||||
"""
|
||||
# Imported here to avoid circular import
|
||||
from ._maps import logger
|
||||
|
||||
# Create element-scoped tempdir so that warped maps is
|
||||
# available later as nibabel stores file path reference for
|
||||
# loading on computation
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from typing import TYPE_CHECKING, Any
|
|||
import nibabel as nib
|
||||
|
||||
from ...pipeline import WorkDirManager
|
||||
from ...utils import logger, run_ext_cmd
|
||||
from ...utils import run_ext_cmd
|
||||
|
||||
|
||||
if TYPE_CHECKING:
|
||||
|
|
@ -53,6 +53,9 @@ class FSLMapsWarper:
|
|||
The transformed maps image.
|
||||
|
||||
"""
|
||||
# Imported here to avoid circular import
|
||||
from ._maps import logger
|
||||
|
||||
logger.debug("Using FSL for maps transformation")
|
||||
|
||||
# Create element-scoped tempdir so that warped maps is
|
||||
|
|
|
|||
|
|
@ -9,9 +9,10 @@ from typing import TYPE_CHECKING, Any, Optional
|
|||
import nibabel as nib
|
||||
import nilearn.image as nimg
|
||||
import numpy as np
|
||||
import structlog
|
||||
from junifer_data import get
|
||||
|
||||
from ...utils import logger, raise_error
|
||||
from ...utils import raise_error
|
||||
from ..pipeline_data_registry_base import BasePipelineDataRegistry
|
||||
from ..utils import (
|
||||
JUNIFER_DATA_PARAMS,
|
||||
|
|
@ -29,6 +30,9 @@ if TYPE_CHECKING:
|
|||
|
||||
__all__ = ["MapsRegistry"]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="data")
|
||||
|
||||
|
||||
class MapsRegistry(BasePipelineDataRegistry):
|
||||
"""Class for maps data registry.
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import nibabel as nib
|
|||
import numpy as np
|
||||
|
||||
from ...pipeline import WorkDirManager
|
||||
from ...utils import logger, raise_error, run_ext_cmd
|
||||
from ...utils import raise_error, run_ext_cmd
|
||||
from ..template_spaces import get_template, get_xfm
|
||||
|
||||
|
||||
|
|
@ -92,6 +92,9 @@ class ANTsMaskWarper:
|
|||
If ``warp_data`` is None when ``dst="T1w"``.
|
||||
|
||||
"""
|
||||
# Imported here to avoid circular import
|
||||
from ._masks import logger
|
||||
|
||||
# Create element-scoped tempdir so that warped mask is
|
||||
# available later as nibabel stores file path reference for
|
||||
# loading on computation
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import nibabel as nib
|
|||
import numpy as np
|
||||
|
||||
from ...pipeline import WorkDirManager
|
||||
from ...utils import logger, run_ext_cmd
|
||||
from ...utils import run_ext_cmd
|
||||
|
||||
|
||||
if TYPE_CHECKING:
|
||||
|
|
@ -74,6 +74,9 @@ class FSLMaskWarper:
|
|||
The transformed mask image.
|
||||
|
||||
"""
|
||||
# Imported here to avoid circular import
|
||||
from ._masks import logger
|
||||
|
||||
logger.debug("Using FSL for mask transformation")
|
||||
|
||||
# Create element-scoped tempdir so that warped mask is
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ from typing import (
|
|||
import nibabel as nib
|
||||
import nilearn.image as nimg
|
||||
import numpy as np
|
||||
import structlog
|
||||
from junifer_data import get
|
||||
from nilearn.masking import (
|
||||
compute_background_mask,
|
||||
|
|
@ -22,7 +23,7 @@ from nilearn.masking import (
|
|||
intersect_masks,
|
||||
)
|
||||
|
||||
from ...utils import logger, raise_error
|
||||
from ...utils import raise_error
|
||||
from ..pipeline_data_registry_base import BasePipelineDataRegistry
|
||||
from ..template_spaces import get_template
|
||||
from ..utils import (
|
||||
|
|
@ -41,6 +42,9 @@ if TYPE_CHECKING:
|
|||
|
||||
__all__ = ["MaskRegistry", "compute_brain_mask"]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="data")
|
||||
|
||||
|
||||
def compute_brain_mask(
|
||||
target_data: dict[str, Any],
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from typing import TYPE_CHECKING, Any
|
|||
import nibabel as nib
|
||||
|
||||
from ...pipeline import WorkDirManager
|
||||
from ...utils import logger, raise_error, run_ext_cmd
|
||||
from ...utils import raise_error, run_ext_cmd
|
||||
from ..template_spaces import get_template, get_xfm
|
||||
|
||||
|
||||
|
|
@ -71,6 +71,9 @@ class ANTsParcellationWarper:
|
|||
If ``warp_data`` is None when ``dst="T1w"``.
|
||||
|
||||
"""
|
||||
# Imported here to avoid circular import
|
||||
from ._parcellations import logger
|
||||
|
||||
# Create element-scoped tempdir so that warped parcellation is
|
||||
# available later as nibabel stores file path reference for
|
||||
# loading on computation
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from typing import TYPE_CHECKING, Any
|
|||
import nibabel as nib
|
||||
|
||||
from ...pipeline import WorkDirManager
|
||||
from ...utils import logger, run_ext_cmd
|
||||
from ...utils import run_ext_cmd
|
||||
|
||||
|
||||
if TYPE_CHECKING:
|
||||
|
|
@ -53,6 +53,9 @@ class FSLParcellationWarper:
|
|||
The transformed parcellation image.
|
||||
|
||||
"""
|
||||
# Imported here to avoid circular import
|
||||
from ._parcellations import logger
|
||||
|
||||
logger.debug("Using FSL for parcellation transformation")
|
||||
|
||||
# Create element-scoped tempdir so that warped parcellation is
|
||||
|
|
|
|||
|
|
@ -13,9 +13,10 @@ import nibabel as nib
|
|||
import nilearn.image as nimg
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import structlog
|
||||
from junifer_data import get
|
||||
|
||||
from ...utils import logger, raise_error, warn_with_log
|
||||
from ...utils import raise_error, warn_with_log
|
||||
from ..pipeline_data_registry_base import BasePipelineDataRegistry
|
||||
from ..utils import (
|
||||
JUNIFER_DATA_PARAMS,
|
||||
|
|
@ -36,6 +37,9 @@ __all__ = [
|
|||
"merge_parcellations",
|
||||
]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="data")
|
||||
|
||||
|
||||
class ParcellationRegistry(BasePipelineDataRegistry):
|
||||
"""Class for parcellation data registry.
|
||||
|
|
@ -58,8 +62,12 @@ class ParcellationRegistry(BasePipelineDataRegistry):
|
|||
# The built-in parcellations are files that are shipped with the
|
||||
# junifer-data dataset.
|
||||
# Make built-in and external dictionaries for validation later
|
||||
self._builtin = {}
|
||||
self._external = {}
|
||||
self._builtin: dict[
|
||||
str, dict[str, str | int | Path | list[str] | list[int]]
|
||||
] = {}
|
||||
self._external: dict[
|
||||
str, dict[str, str | int | Path | list[str] | list[int]]
|
||||
] = {}
|
||||
|
||||
# Add SUIT
|
||||
self._builtin.update(
|
||||
|
|
|
|||
|
|
@ -8,15 +8,19 @@ from typing import Any, Union
|
|||
|
||||
import nibabel as nib
|
||||
import numpy as np
|
||||
import structlog
|
||||
from junifer_data import get
|
||||
from templateflow import api as tflow
|
||||
|
||||
from ..utils import logger, raise_error
|
||||
from ..utils import raise_error
|
||||
from .utils import JUNIFER_DATA_PARAMS, closest_resolution, get_dataset_path
|
||||
|
||||
|
||||
__all__ = ["get_template", "get_xfm"]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="data")
|
||||
|
||||
|
||||
def get_xfm(src: str, dst: str) -> Path: # pragma: no cover
|
||||
"""Fetch warp files to convert from ``src`` to ``dst``.
|
||||
|
|
|
|||
|
|
@ -8,8 +8,9 @@ from collections.abc import MutableMapping
|
|||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
import structlog
|
||||
|
||||
from ..utils import config, logger, raise_error
|
||||
from ..utils import config, raise_error
|
||||
|
||||
|
||||
__all__ = [
|
||||
|
|
@ -21,6 +22,8 @@ __all__ = [
|
|||
"get_native_warper",
|
||||
]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="data")
|
||||
|
||||
# junifer-data version constant
|
||||
JUNIFER_DATA_VERSION = "7"
|
||||
|
|
|
|||
|
|
@ -26,10 +26,11 @@ __all__ = [
|
|||
"DataType",
|
||||
"ConfoundsFormat",
|
||||
"register_confounds_format",
|
||||
"logger",
|
||||
]
|
||||
|
||||
# These 4 need to be in this order, otherwise it is a circular import
|
||||
from .base import BaseDataGrabber, DataType
|
||||
from .base import BaseDataGrabber, DataType, logger
|
||||
from .datalad_base import DataladDataGrabber
|
||||
from .pattern import (
|
||||
PatternDataGrabber,
|
||||
|
|
|
|||
|
|
@ -11,16 +11,20 @@ from enum import Enum
|
|||
from pathlib import Path
|
||||
from typing import Annotated, Any
|
||||
|
||||
import structlog
|
||||
from aenum import Enum as AEnum
|
||||
from pydantic import BaseModel, BeforeValidator, ConfigDict, Field
|
||||
|
||||
from ..pipeline import UpdateMetaMixin
|
||||
from ..typing import Element, Elements
|
||||
from ..utils import ensure_list, logger, raise_error
|
||||
from ..utils import ensure_list, raise_error
|
||||
|
||||
|
||||
__all__ = ["BaseDataGrabber", "DataType"]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="datagrabber", step="datagrabber")
|
||||
|
||||
|
||||
class DataType(str, AEnum):
|
||||
"""Accepted data type."""
|
||||
|
|
@ -64,11 +68,16 @@ class BaseDataGrabber(BaseModel, ABC, UpdateMetaMixin):
|
|||
datadir: Path
|
||||
|
||||
def model_post_init(self, context: Any): # noqa: D102
|
||||
logger.debug("Initializing BaseDataGrabber")
|
||||
logger.debug(f"\tdatadir = {self.datadir}")
|
||||
logger.debug(f"\ttypes = {self.types}")
|
||||
# Run extra validation for datagrabbers and fail early if needed
|
||||
self.validate_datagrabber_params()
|
||||
# Convert to correct data type
|
||||
self.types = [
|
||||
DataType(t) if isinstance(t, str) else t for t in self.types
|
||||
]
|
||||
logger.info(
|
||||
f"Parameters: {self.model_dump(mode='json')}",
|
||||
component=self.__class__.__name__,
|
||||
)
|
||||
|
||||
def validate_datagrabber_params(self) -> None:
|
||||
"""Run extra logical validation for datagrabber.
|
||||
|
|
|
|||
|
|
@ -20,8 +20,8 @@ from pydantic import AnyUrl, Field, field_validator
|
|||
from ..api.decorators import register_datagrabber
|
||||
from ..pipeline import WorkDirManager
|
||||
from ..typing import Element
|
||||
from ..utils import config, logger, raise_error, warn_with_log
|
||||
from .base import BaseDataGrabber
|
||||
from ..utils import config, raise_error, warn_with_log
|
||||
from .base import BaseDataGrabber, logger
|
||||
|
||||
|
||||
__all__ = ["DataladDataGrabber"]
|
||||
|
|
|
|||
|
|
@ -16,8 +16,8 @@ from pydantic import Field
|
|||
|
||||
from ..api.decorators import register_datagrabber
|
||||
from ..typing import DataGrabberPatterns, Elements
|
||||
from ..utils import logger, raise_error
|
||||
from .base import BaseDataGrabber
|
||||
from ..utils import raise_error
|
||||
from .base import BaseDataGrabber, logger
|
||||
from .pattern_validation_mixin import PatternValidationMixin
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
from pydantic import ConfigDict
|
||||
|
||||
from ..api.decorators import register_datagrabber
|
||||
from ..utils import logger
|
||||
from .base import logger
|
||||
from .datalad_base import DataladDataGrabber
|
||||
from .pattern import PatternDataGrabber
|
||||
|
||||
|
|
|
|||
|
|
@ -16,9 +16,9 @@ from collections.abc import Iterator, MutableMapping
|
|||
|
||||
from aenum import extend_enum
|
||||
|
||||
from ..datagrabber import DataType
|
||||
from ..typing import DataGrabberPatterns
|
||||
from ..utils import logger, raise_error, warn_with_log
|
||||
from ..utils import raise_error, warn_with_log
|
||||
from .base import DataType, logger
|
||||
|
||||
|
||||
__all__ = [
|
||||
|
|
|
|||
|
|
@ -8,15 +8,18 @@ from pathlib import Path
|
|||
|
||||
import nibabel as nib
|
||||
import pandas as pd
|
||||
import structlog
|
||||
from pydantic import BaseModel
|
||||
|
||||
from ..api.decorators import register_datareader
|
||||
from ..pipeline import PipelineStepMixin, UpdateMetaMixin
|
||||
from ..utils.logging import logger, warn_with_log
|
||||
from ..utils.logging import warn_with_log
|
||||
|
||||
|
||||
__all__ = ["DefaultDataReader"]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="datareader", step="datareader")
|
||||
|
||||
# Map each file extension to a type
|
||||
_extensions = {
|
||||
|
|
|
|||
|
|
@ -23,9 +23,10 @@ __all__ = [
|
|||
"TemporalSNRParcels",
|
||||
"TemporalSNRSpheres",
|
||||
"BrainPrint",
|
||||
"logger",
|
||||
]
|
||||
|
||||
from .base import BaseMarker
|
||||
from .base import BaseMarker, logger
|
||||
from .ets_rss import RSSETSMarker
|
||||
from .maps_aggregation import MapsAggregation
|
||||
from .parcel_aggregation import ParcelAggregation
|
||||
|
|
|
|||
|
|
@ -8,17 +8,21 @@ from abc import ABC, abstractmethod
|
|||
from copy import deepcopy
|
||||
from typing import Any, ClassVar
|
||||
|
||||
import structlog
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
|
||||
from ..datagrabber import DataType
|
||||
from ..pipeline import PipelineStepMixin, UpdateMetaMixin
|
||||
from ..storage import StorageType
|
||||
from ..typing import MarkerInOutMappings, StorageLike
|
||||
from ..utils import logger, raise_error
|
||||
from ..utils import raise_error
|
||||
|
||||
|
||||
__all__ = ["BaseMarker"]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="markers", step="marker")
|
||||
|
||||
|
||||
class BaseMarker(BaseModel, ABC, PipelineStepMixin, UpdateMetaMixin):
|
||||
"""Abstract base class for marker.
|
||||
|
|
@ -84,6 +88,9 @@ class BaseMarker(BaseModel, ABC, PipelineStepMixin, UpdateMetaMixin):
|
|||
self.validate_marker_params()
|
||||
# Set default name if not provided
|
||||
self.name = self.__class__.__name__ if self.name is None else self.name
|
||||
logger.info(
|
||||
f"Parameters: {self.model_dump(mode='json')}", component=self.name
|
||||
)
|
||||
|
||||
@property
|
||||
def valid_inputs(self) -> list[DataType]:
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@ from ..external.BrainPrint.brainprint.surfaces import surf_to_vtk
|
|||
from ..pipeline import ExtDep, WorkDirManager
|
||||
from ..storage import StorageType
|
||||
from ..typing import Dependencies, ExternalDependencies, MarkerInOutMappings
|
||||
from ..utils import logger, run_ext_cmd
|
||||
from .base import BaseMarker
|
||||
from ..utils import run_ext_cmd
|
||||
from .base import BaseMarker, logger
|
||||
|
||||
|
||||
__all__ = ["BrainPrint"]
|
||||
|
|
|
|||
|
|
@ -9,7 +9,8 @@ import neurokit2 as nk
|
|||
import numpy as np
|
||||
|
||||
from ...api.decorators import register_marker
|
||||
from ...utils import logger, warn_with_log
|
||||
from ...utils import warn_with_log
|
||||
from ..base import logger
|
||||
from .complexity_base import ComplexityBase
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,8 @@ import neurokit2 as nk
|
|||
import numpy as np
|
||||
|
||||
from ...api.decorators import register_marker
|
||||
from ...utils import logger, warn_with_log
|
||||
from ...utils import warn_with_log
|
||||
from ..base import logger
|
||||
from .complexity_base import ComplexityBase
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,8 @@ import neurokit2 as nk
|
|||
import numpy as np
|
||||
|
||||
from ...api.decorators import register_marker
|
||||
from ...utils import logger, warn_with_log
|
||||
from ...utils import warn_with_log
|
||||
from ..base import logger
|
||||
from .complexity_base import ComplexityBase
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,8 @@ import neurokit2 as nk
|
|||
import numpy as np
|
||||
|
||||
from ...api.decorators import register_marker
|
||||
from ...utils import logger, warn_with_log
|
||||
from ...utils import warn_with_log
|
||||
from ..base import logger
|
||||
from .complexity_base import ComplexityBase
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,8 @@ import neurokit2 as nk
|
|||
import numpy as np
|
||||
|
||||
from ...api.decorators import register_marker
|
||||
from ...utils import logger, warn_with_log
|
||||
from ...utils import warn_with_log
|
||||
from ..base import logger
|
||||
from .complexity_base import ComplexityBase
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,8 @@ import neurokit2 as nk
|
|||
import numpy as np
|
||||
|
||||
from ...api.decorators import register_marker
|
||||
from ...utils import logger, warn_with_log
|
||||
from ...utils import warn_with_log
|
||||
from ..base import logger
|
||||
from .complexity_base import ComplexityBase
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,8 @@ import neurokit2 as nk
|
|||
import numpy as np
|
||||
|
||||
from ...api.decorators import register_marker
|
||||
from ...utils import logger, warn_with_log
|
||||
from ...utils import warn_with_log
|
||||
from ..base import logger
|
||||
from .complexity_base import ComplexityBase
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@ from ..api.decorators import register_marker
|
|||
from ..datagrabber import DataType
|
||||
from ..storage import StorageType
|
||||
from ..typing import Dependencies, MarkerInOutMappings
|
||||
from ..utils import ensure_list, ensure_list_or_none, logger
|
||||
from .base import BaseMarker
|
||||
from ..utils import ensure_list, ensure_list_or_none
|
||||
from .base import BaseMarker, logger
|
||||
from .parcel_aggregation import ParcelAggregation
|
||||
from .utils import _ets
|
||||
|
||||
|
|
|
|||
|
|
@ -15,8 +15,9 @@ import nibabel as nib
|
|||
|
||||
from ...pipeline import ExtDep, WorkDirManager
|
||||
from ...typing import ExternalDependencies
|
||||
from ...utils import logger, run_ext_cmd
|
||||
from ...utils import run_ext_cmd
|
||||
from ...utils.singleton import Singleton
|
||||
from ..base import logger
|
||||
|
||||
|
||||
if TYPE_CHECKING:
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@ from nilearn import image as nimg
|
|||
|
||||
from ...pipeline import WorkDirManager
|
||||
from ...typing import Dependencies
|
||||
from ...utils import logger
|
||||
from ...utils.singleton import Singleton
|
||||
from ..base import logger
|
||||
|
||||
|
||||
if TYPE_CHECKING:
|
||||
|
|
|
|||
|
|
@ -20,8 +20,8 @@ from pydantic import BeforeValidator, PositiveFloat
|
|||
from ...datagrabber import DataType
|
||||
from ...storage import StorageType
|
||||
from ...typing import ConditionalDependencies, MarkerInOutMappings
|
||||
from ...utils import ensure_list_or_none, logger
|
||||
from ..base import BaseMarker
|
||||
from ...utils import ensure_list_or_none
|
||||
from ..base import BaseMarker, logger
|
||||
from ._afni_falff import AFNIALFF
|
||||
from ._junifer_falff import JuniferALFF
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ from typing import Any
|
|||
|
||||
from ...api.decorators import register_marker
|
||||
from ...datagrabber import DataType
|
||||
from ...utils import logger
|
||||
from ..base import logger
|
||||
from ..maps_aggregation import MapsAggregation
|
||||
from .falff_base import ALFFBase
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@ from pydantic import BeforeValidator
|
|||
|
||||
from ...api.decorators import register_marker
|
||||
from ...datagrabber import DataType
|
||||
from ...utils import ensure_list, logger
|
||||
from ...utils import ensure_list
|
||||
from ..base import logger
|
||||
from ..parcel_aggregation import ParcelAggregation
|
||||
from .falff_base import ALFFBase
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ from pydantic import PositiveFloat
|
|||
|
||||
from ...api.decorators import register_marker
|
||||
from ...datagrabber import DataType
|
||||
from ...utils import logger
|
||||
from ..base import logger
|
||||
from ..sphere_aggregation import SphereAggregation
|
||||
from .falff_base import ALFFBase
|
||||
|
||||
|
|
|
|||
|
|
@ -13,8 +13,8 @@ from ...api.decorators import register_marker
|
|||
from ...datagrabber import DataType
|
||||
from ...storage import StorageType
|
||||
from ...typing import Dependencies, MarkerInOutMappings
|
||||
from ...utils import ensure_list_or_none, logger, raise_error
|
||||
from ..base import BaseMarker
|
||||
from ...utils import ensure_list_or_none, raise_error
|
||||
from ..base import BaseMarker, logger
|
||||
from ..parcel_aggregation import ParcelAggregation
|
||||
from ..utils import _correlate_dataframes
|
||||
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@ from ..datagrabber import DataType
|
|||
from ..stats import get_aggfunc_by_name
|
||||
from ..storage import StorageType
|
||||
from ..typing import Dependencies, MarkerInOutMappings
|
||||
from ..utils import ensure_list_or_none, logger, raise_error, warn_with_log
|
||||
from .base import BaseMarker
|
||||
from ..utils import ensure_list_or_none, raise_error, warn_with_log
|
||||
from .base import BaseMarker, logger
|
||||
|
||||
|
||||
__all__ = ["MapsAggregation"]
|
||||
|
|
|
|||
|
|
@ -20,11 +20,10 @@ from ..typing import Dependencies, MarkerInOutMappings
|
|||
from ..utils import (
|
||||
ensure_list,
|
||||
ensure_list_or_none,
|
||||
logger,
|
||||
raise_error,
|
||||
warn_with_log,
|
||||
)
|
||||
from .base import BaseMarker
|
||||
from .base import BaseMarker, logger
|
||||
|
||||
|
||||
__all__ = ["ParcelAggregation"]
|
||||
|
|
|
|||
|
|
@ -15,8 +15,9 @@ import nibabel as nib
|
|||
|
||||
from ...pipeline import ExtDep, WorkDirManager
|
||||
from ...typing import ExternalDependencies
|
||||
from ...utils import logger, run_ext_cmd
|
||||
from ...utils import run_ext_cmd
|
||||
from ...utils.singleton import Singleton
|
||||
from ..base import logger
|
||||
|
||||
|
||||
if TYPE_CHECKING:
|
||||
|
|
|
|||
|
|
@ -19,8 +19,9 @@ from nilearn import masking as nmask
|
|||
|
||||
from ...pipeline import WorkDirManager
|
||||
from ...typing import Dependencies
|
||||
from ...utils import logger, raise_error
|
||||
from ...utils import raise_error
|
||||
from ...utils.singleton import Singleton
|
||||
from ..base import logger
|
||||
|
||||
|
||||
if TYPE_CHECKING:
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@ from pydantic import BeforeValidator
|
|||
from ...datagrabber import DataType
|
||||
from ...storage import StorageType
|
||||
from ...typing import ConditionalDependencies, MarkerInOutMappings
|
||||
from ...utils import ensure_list_or_none, logger
|
||||
from ..base import BaseMarker
|
||||
from ...utils import ensure_list_or_none
|
||||
from ..base import BaseMarker, logger
|
||||
from ._afni_reho import AFNIReHo
|
||||
from ._junifer_reho import JuniferReHo
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import numpy as np
|
|||
|
||||
from ...api.decorators import register_marker
|
||||
from ...datagrabber import DataType
|
||||
from ...utils import logger
|
||||
from ..base import logger
|
||||
from ..maps_aggregation import MapsAggregation
|
||||
from .reho_base import ReHoBase
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,8 @@ from pydantic import BeforeValidator
|
|||
|
||||
from ...api.decorators import register_marker
|
||||
from ...datagrabber import DataType
|
||||
from ...utils import ensure_list, logger
|
||||
from ...utils import ensure_list
|
||||
from ..base import logger
|
||||
from ..parcel_aggregation import ParcelAggregation
|
||||
from .reho_base import ReHoBase
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ from pydantic import PositiveFloat
|
|||
|
||||
from ...api.decorators import register_marker
|
||||
from ...datagrabber import DataType
|
||||
from ...utils import logger
|
||||
from ..base import logger
|
||||
from ..sphere_aggregation import SphereAggregation
|
||||
from .reho_base import ReHoBase
|
||||
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@ from ..external.nilearn import JuniferNiftiSpheresMasker
|
|||
from ..stats import get_aggfunc_by_name
|
||||
from ..storage import StorageType
|
||||
from ..typing import Dependencies, MarkerInOutMappings
|
||||
from ..utils import ensure_list_or_none, logger, raise_error, warn_with_log
|
||||
from .base import BaseMarker
|
||||
from ..utils import ensure_list_or_none, raise_error, warn_with_log
|
||||
from .base import BaseMarker, logger
|
||||
|
||||
|
||||
__all__ = ["SphereAggregation"]
|
||||
|
|
|
|||
|
|
@ -5,13 +5,17 @@
|
|||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import structlog
|
||||
|
||||
from ..typing import StorageLike
|
||||
from ..utils import logger, raise_error, warn_with_log
|
||||
from ..utils import raise_error, warn_with_log
|
||||
|
||||
|
||||
__all__ = ["read_transform"]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="onthefly")
|
||||
|
||||
|
||||
def read_transform(
|
||||
storage: StorageLike,
|
||||
|
|
|
|||
|
|
@ -7,14 +7,19 @@
|
|||
from collections import Counter
|
||||
from pathlib import Path
|
||||
|
||||
import structlog
|
||||
|
||||
from ..datareader import DefaultDataReader
|
||||
from ..pipeline import DataObjectDumper, PipelineStepMixin, WorkDirManager
|
||||
from ..typing import DataGrabberLike, MarkerLike, PreprocessorLike, StorageLike
|
||||
from ..utils import config, logger, raise_error
|
||||
from ..utils import config, raise_error
|
||||
|
||||
|
||||
__all__ = ["MarkerCollection"]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="pipeline")
|
||||
|
||||
|
||||
class MarkerCollection:
|
||||
"""Class for marker collection.
|
||||
|
|
|
|||
|
|
@ -8,13 +8,18 @@
|
|||
import importlib
|
||||
from collections.abc import Mapping
|
||||
|
||||
import structlog
|
||||
|
||||
from ..typing import DataGrabberLike, MarkerLike, PreprocessorLike, StorageLike
|
||||
from ..utils import logger, raise_error
|
||||
from ..utils import raise_error
|
||||
from ..utils.singleton import Singleton
|
||||
|
||||
|
||||
__all__ = ["PipelineComponentRegistry"]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="pipeline")
|
||||
|
||||
|
||||
class PipelineComponentRegistry(metaclass=Singleton):
|
||||
"""Class for pipeline component registry.
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ from typing import Any
|
|||
|
||||
from pydantic import validate_call
|
||||
|
||||
from ..utils.logging import raise_error, warn_with_log
|
||||
from ..utils import raise_error, warn_with_log
|
||||
|
||||
|
||||
__all__ = ["ExtDep", "check_ext_dependencies"]
|
||||
|
|
|
|||
|
|
@ -8,12 +8,16 @@ import shutil
|
|||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
from ..utils import logger
|
||||
import structlog
|
||||
|
||||
from ..utils.singleton import Singleton
|
||||
|
||||
|
||||
__all__ = ["WorkDirManager"]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="pipeline")
|
||||
|
||||
|
||||
class WorkDirManager(metaclass=Singleton):
|
||||
"""Class for working directory manager.
|
||||
|
|
|
|||
|
|
@ -9,9 +9,10 @@ __all__ = [
|
|||
"SmoothingImpl",
|
||||
"TemporalSlicer",
|
||||
"TemporalFilter",
|
||||
"logger",
|
||||
]
|
||||
|
||||
from .base import BasePreprocessor
|
||||
from .base import BasePreprocessor, logger
|
||||
from .confounds import fMRIPrepConfoundRemover, Confounds, Strategy
|
||||
from .warping import SpaceWarper, SpaceWarpingImpl
|
||||
from .smoothing import Smoothing, SmoothingImpl
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ from ..data import get_data
|
|||
from ..datagrabber import DataType
|
||||
from ..pipeline import WorkDirManager
|
||||
from ..typing import Dependencies
|
||||
from ..utils import ensure_list_or_none, logger
|
||||
from .base import BasePreprocessor
|
||||
from ..utils import ensure_list_or_none
|
||||
from .base import BasePreprocessor, logger
|
||||
|
||||
|
||||
__all__ = ["TemporalFilter"]
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@ from ..api.decorators import register_preprocessor
|
|||
from ..datagrabber import DataType
|
||||
from ..pipeline import WorkDirManager
|
||||
from ..typing import Dependencies
|
||||
from ..utils import logger, raise_error
|
||||
from .base import BasePreprocessor
|
||||
from ..utils import raise_error
|
||||
from .base import BasePreprocessor, logger
|
||||
|
||||
|
||||
__all__ = ["TemporalSlicer"]
|
||||
|
|
|
|||
|
|
@ -8,15 +8,19 @@ from abc import ABC, abstractmethod
|
|||
from collections.abc import Sequence
|
||||
from typing import Annotated, Any, ClassVar
|
||||
|
||||
import structlog
|
||||
from pydantic import BaseModel, BeforeValidator, ConfigDict
|
||||
|
||||
from ..datagrabber import DataType
|
||||
from ..pipeline import PipelineStepMixin, UpdateMetaMixin
|
||||
from ..utils import ensure_list_or_none, logger, raise_error
|
||||
from ..utils import ensure_list_or_none, raise_error
|
||||
|
||||
|
||||
__all__ = ["BasePreprocessor"]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="preprocess", step="preprocessing")
|
||||
|
||||
|
||||
class BasePreprocessor(BaseModel, ABC, PipelineStepMixin, UpdateMetaMixin):
|
||||
"""Abstract base class for preprocessor.
|
||||
|
|
@ -97,6 +101,10 @@ class BasePreprocessor(BaseModel, ABC, PipelineStepMixin, UpdateMetaMixin):
|
|||
DataType(t) if isinstance(t, str) else t
|
||||
for t in self.required_data_types
|
||||
]
|
||||
logger.info(
|
||||
f"Parameters: {self.model_dump(mode='json')}",
|
||||
component=self.__class__.__name__,
|
||||
)
|
||||
|
||||
@property
|
||||
def valid_inputs(self) -> list[DataType]:
|
||||
|
|
|
|||
|
|
@ -35,8 +35,8 @@ from ...data import get_data
|
|||
from ...datagrabber import DataType
|
||||
from ...pipeline import WorkDirManager
|
||||
from ...typing import Dependencies
|
||||
from ...utils import ensure_list_or_none, logger, raise_error
|
||||
from ..base import BasePreprocessor
|
||||
from ...utils import ensure_list_or_none, raise_error
|
||||
from ..base import BasePreprocessor, logger
|
||||
|
||||
|
||||
__all__ = ["Confounds", "Strategy", "fMRIPrepConfoundRemover"]
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@ import nibabel as nib
|
|||
|
||||
from ...pipeline import ExtDep, WorkDirManager
|
||||
from ...typing import Dependencies, ExternalDependencies
|
||||
from ...utils import logger, run_ext_cmd
|
||||
from ...utils import run_ext_cmd
|
||||
from ..base import logger
|
||||
|
||||
|
||||
__all__ = ["AFNISmoothing"]
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@ import nibabel as nib
|
|||
|
||||
from ...pipeline import ExtDep, WorkDirManager
|
||||
from ...typing import Dependencies, ExternalDependencies
|
||||
from ...utils import logger, run_ext_cmd
|
||||
from ...utils import run_ext_cmd
|
||||
from ..base import logger
|
||||
|
||||
|
||||
__all__ = ["FSLSmoothing"]
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ from numpy.typing import ArrayLike
|
|||
|
||||
from ...pipeline import WorkDirManager
|
||||
from ...typing import Dependencies
|
||||
from ...utils import logger
|
||||
from ..base import logger
|
||||
|
||||
|
||||
__all__ = ["NilearnSmoothing"]
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@ from pydantic import BeforeValidator
|
|||
from ...api.decorators import register_preprocessor
|
||||
from ...datagrabber import DataType
|
||||
from ...typing import ConditionalDependencies
|
||||
from ...utils import ensure_list_or_none, logger
|
||||
from ..base import BasePreprocessor
|
||||
from ...utils import ensure_list_or_none
|
||||
from ..base import BasePreprocessor, logger
|
||||
from ._afni_smoothing import AFNISmoothing
|
||||
from ._fsl_smoothing import FSLSmoothing
|
||||
from ._nilearn_smoothing import NilearnSmoothing
|
||||
|
|
|
|||
|
|
@ -14,7 +14,8 @@ import numpy as np
|
|||
from ...data import get_template, get_xfm
|
||||
from ...pipeline import ExtDep, WorkDirManager
|
||||
from ...typing import Dependencies, ExternalDependencies
|
||||
from ...utils import logger, raise_error, run_ext_cmd
|
||||
from ...utils import raise_error, run_ext_cmd
|
||||
from ..base import logger
|
||||
|
||||
|
||||
__all__ = ["ANTsWarper"]
|
||||
|
|
|
|||
|
|
@ -13,7 +13,8 @@ import numpy as np
|
|||
|
||||
from ...pipeline import ExtDep, WorkDirManager
|
||||
from ...typing import Dependencies, ExternalDependencies
|
||||
from ...utils import logger, raise_error, run_ext_cmd
|
||||
from ...utils import raise_error, run_ext_cmd
|
||||
from ..base import logger
|
||||
|
||||
|
||||
__all__ = ["FSLWarper"]
|
||||
|
|
|
|||
|
|
@ -13,8 +13,8 @@ from templateflow import api as tflow
|
|||
from ...api.decorators import register_preprocessor
|
||||
from ...datagrabber import DataType
|
||||
from ...typing import ConditionalDependencies
|
||||
from ...utils import ensure_list_or_none, logger, raise_error
|
||||
from ..base import BasePreprocessor
|
||||
from ...utils import ensure_list_or_none, raise_error
|
||||
from ..base import BasePreprocessor, logger
|
||||
from ._ants_warper import ANTsWarper
|
||||
from ._fsl_warper import FSLWarper
|
||||
|
||||
|
|
|
|||
|
|
@ -9,11 +9,12 @@ from enum import Enum
|
|||
from typing import Any
|
||||
|
||||
import numpy as np
|
||||
import structlog
|
||||
from pydantic import validate_call
|
||||
from scipy.stats import mode, trim_mean
|
||||
from scipy.stats.mstats import winsorize
|
||||
|
||||
from .utils import logger, raise_error
|
||||
from .utils import raise_error
|
||||
|
||||
|
||||
__all__ = [
|
||||
|
|
@ -24,6 +25,9 @@ __all__ = [
|
|||
"winsorized_mean",
|
||||
]
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="stats")
|
||||
|
||||
|
||||
class AggFunc(str, Enum):
|
||||
"""Accepted aggregation function names.
|
||||
|
|
|
|||
|
|
@ -6,9 +6,10 @@ __all__ = [
|
|||
"PandasBaseFeatureStorage",
|
||||
"SQLiteFeatureStorage",
|
||||
"Upsert",
|
||||
"logger",
|
||||
]
|
||||
|
||||
from .base import BaseFeatureStorage, MatrixKind, StorageType
|
||||
from .base import BaseFeatureStorage, MatrixKind, StorageType, logger
|
||||
from .hdf5 import HDF5FeatureStorage
|
||||
from .pandas_base import PandasBaseFeatureStorage
|
||||
from .sqlite import SQLiteFeatureStorage, Upsert
|
||||
|
|
|
|||
|
|
@ -12,9 +12,10 @@ from typing import Any, ClassVar
|
|||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import structlog
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
|
||||
from ..utils import logger, raise_error
|
||||
from ..utils import raise_error
|
||||
|
||||
|
||||
__all__ = ["BaseFeatureStorage", "MatrixKind", "StorageType"]
|
||||
|
|
@ -28,6 +29,10 @@ class MatrixKind(str, Enum):
|
|||
Full = "full"
|
||||
|
||||
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="storage", step="storage")
|
||||
|
||||
|
||||
class StorageType(str, Enum):
|
||||
"""Accepted storage type."""
|
||||
|
||||
|
|
@ -79,6 +84,10 @@ class BaseFeatureStorage(BaseModel, ABC):
|
|||
"does not exist, creating now"
|
||||
)
|
||||
self.uri.parent.mkdir(parents=True, exist_ok=True)
|
||||
logger.info(
|
||||
f"Parameters: {self.model_dump(mode='json')}",
|
||||
component=self.__class__.__name__,
|
||||
)
|
||||
|
||||
def validate_input(self, input_: list[str]) -> None:
|
||||
"""Validate the input to the pipeline step.
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ from ..external.h5io.h5io import (
|
|||
read_hdf5,
|
||||
write_hdf5,
|
||||
)
|
||||
from ..utils import logger, raise_error
|
||||
from .base import BaseFeatureStorage, MatrixKind, StorageType
|
||||
from ..utils import raise_error
|
||||
from .base import BaseFeatureStorage, MatrixKind, StorageType, logger
|
||||
from .utils import (
|
||||
element_to_prefix,
|
||||
matrix_to_vector,
|
||||
|
|
|
|||
|
|
@ -16,8 +16,8 @@ from sqlalchemy import create_engine, inspect
|
|||
from tqdm import tqdm
|
||||
|
||||
from ..api.decorators import register_storage
|
||||
from ..utils import logger, raise_error, warn_with_log
|
||||
from .base import MatrixKind
|
||||
from ..utils import raise_error, warn_with_log
|
||||
from .base import MatrixKind, logger
|
||||
from .pandas_base import PandasBaseFeatureStorage
|
||||
from .utils import (
|
||||
element_to_prefix,
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ from importlib.metadata import PackageNotFoundError, version
|
|||
import numpy as np
|
||||
from pydantic import validate_call
|
||||
|
||||
from ..utils import logger, raise_error
|
||||
from .base import MatrixKind
|
||||
from ..utils import raise_error
|
||||
from .base import MatrixKind, logger
|
||||
|
||||
|
||||
__all__ = [
|
||||
|
|
|
|||
|
|
@ -111,7 +111,8 @@ structlog.configure(
|
|||
cache_logger_on_first_use=True,
|
||||
)
|
||||
|
||||
logger = logging.getLogger("junifer")
|
||||
_log = structlog.get_logger("junifer")
|
||||
logger = _log.bind(pkg="utils")
|
||||
|
||||
# Remove datalad logger handlers to avoid duplicate logging
|
||||
_datalad_lgr_hdlrs = datalad.log.lgr.handlers
|
||||
|
|
|
|||
Loading…
Reference in a new issue