Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stricter linter configuration #1193

Merged
merged 3 commits into from
Oct 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
[tool.ruff]
src = ["python"]
include = ["python/**/*.py"]
exclude = ["python/react-series-data-viewer"]
line-length = 120
preview = true

[tool.ruff.lint]
ignore = ["E202", "E203", "E221", "E241", "E251", "E272"]
# TODO: Select "F", "I", "N", "UP" and format the codebase accordingly.
select = ["E", "W"]
select = ["E", "F", "I", "N", "UP", "W"]

# The strict type checking configuration is used to type check only the modern (typed) modules. An
# additional basic type checking configuration to type check legacy modules can be found in the
Expand Down
23 changes: 12 additions & 11 deletions python/bids_import.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,22 @@

"""Script to import BIDS structure into LORIS."""

import os
import sys
import getopt
import re
import json
import os
import re
import sys

import lib.exitcode
import lib.utilities
import lib.physiological
from lib.database import Database
from lib.candidate import Candidate
import lib.utilities
from lib.bidsreader import BidsReader
from lib.session import Session
from lib.eeg import Eeg
from lib.mri import Mri
from lib.candidate import Candidate
from lib.database import Database
from lib.database_lib.config import Config
from lib.eeg import Eeg
from lib.mri import Mri
from lib.session import Session

__license__ = "GPLv3"

Expand Down Expand Up @@ -63,7 +64,7 @@ def main():
)

try:
opts, args = getopt.getopt(sys.argv[1:], 'hp:d:csinat:v', long_options)
opts, _ = getopt.getopt(sys.argv[1:], 'hp:d:csinat:v', long_options)
except getopt.GetoptError:
print(usage)
sys.exit(lib.exitcode.GETOPT_FAILURE)
Expand Down Expand Up @@ -321,7 +322,7 @@ def read_and_insert_bids(
event_metadata = json.load(metadata_file)
blake2 = lib.utilities.compute_blake2b_hash(root_event_metadata_file.path)
physio = lib.physiological.Physiological(db, verbose)
file_id, dataset_tag_dict = physio.insert_event_metadata(
_, dataset_tag_dict = physio.insert_event_metadata(
event_metadata=event_metadata,
event_metadata_file=event_metadata_path,
physiological_file_id=None,
Expand Down
11 changes: 6 additions & 5 deletions python/extract_eeg_bids_archive.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,16 @@
"""Script that extract EEG archives"""

import os
import sys
import re
from lib.lorisgetopt import LorisGetOpt
from lib.imaging_io import ImagingIO
import sys

import lib.utilities as utilities
from lib.database import Database
from lib.database_lib.config import Config
from lib.exitcode import SUCCESS, BAD_CONFIG_SETTING
from lib.exitcode import BAD_CONFIG_SETTING, SUCCESS
from lib.imaging_io import ImagingIO
from lib.log import Log
import lib.utilities as utilities
from lib.lorisgetopt import LorisGetOpt

__license__ = "GPLv3"

Expand Down
7 changes: 4 additions & 3 deletions python/ingest_eeg_bids_datasets.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
"""Script that ingests EEG BIDS datasets"""

import os
import subprocess
import sys
from lib.lorisgetopt import LorisGetOpt

from lib.database import Database
from lib.database_lib.config import Config
from lib.exitcode import SUCCESS, INVALID_ARG
import subprocess
from lib.exitcode import INVALID_ARG, SUCCESS
from lib.lorisgetopt import LorisGetOpt

__license__ = "GPLv3"

Expand Down
12 changes: 7 additions & 5 deletions python/lib/aws_s3.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
"""This class interacts with S3 Buckets"""

import boto3
import lib.utilities
import os

import boto3
from botocore.exceptions import ClientError, EndpointConnectionError

import lib.utilities

__license__ = "GPLv3"


Expand Down Expand Up @@ -214,7 +216,7 @@ def delete_file(self, s3_object_name):
print(f"Deleting {s3_object_name}")

try:
(s3_bucket_name, s3_bucket, s3_file_name) = self.get_s3_object_path_part(s3_object_name)
(_, s3_bucket, s3_file_name) = self.get_s3_object_path_part(s3_object_name)
objects_to_delete = [{'Key': obj.key} for obj in s3_bucket.objects.filter(Prefix=s3_file_name)]
s3_bucket.delete_objects(
Delete={
Expand All @@ -239,8 +241,8 @@ def copy_file(self, src_s3_object_name, dst_s3_object_name, delete = False):
print(f"Copying {src_s3_object_name} to {dst_s3_object_name}")

try:
(src_s3_bucket_name, src_s3_bucket, src_s3_file_name) = self.get_s3_object_path_part(src_s3_object_name)
(dst_s3_bucket_name, dst_s3_bucket, dst_s3_file_name) = self.get_s3_object_path_part(dst_s3_object_name)
(_, src_s3_bucket, src_s3_file_name) = self.get_s3_object_path_part(src_s3_object_name)
(_, dst_s3_bucket, dst_s3_file_name) = self.get_s3_object_path_part(dst_s3_object_name)
for obj in src_s3_bucket.objects.filter(Prefix=src_s3_file_name):
subcontent = obj.key.replace(src_s3_file_name, "")
dst_s3_bucket.Object(
Expand Down
6 changes: 3 additions & 3 deletions python/lib/bidsreader.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
"""Reads a BIDS structure into a data dictionary using bids.grabbids."""

import json
import re
import sys
import json

from bids import BIDSLayout

import lib.exitcode
import lib.utilities as utilities

from bids import BIDSLayout

# import bids
# BIDSLayoutIndexer is required for PyBIDS >= 0.12.1
# bids_pack_version = list(map(int, bids.__version__.split('.')))
Expand Down
4 changes: 3 additions & 1 deletion python/lib/candidate.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
"""This class gather functions for candidate handling."""

import random
import sys

from dateutil.parser import parse

import lib.exitcode
import sys

__license__ = "GPLv3"

Expand Down
9 changes: 4 additions & 5 deletions python/lib/database.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
"""Allows LORIS database connectivity for LORIS-MRI python code base"""

import MySQLdb
import sys
import lib.exitcode

import MySQLdb

import lib.exitcode

__license__ = "GPLv3"

Expand Down Expand Up @@ -166,9 +167,7 @@ def insert(self, table_name, column_names, values, get_last_id=False):

placeholders = ','.join(map(lambda x: '%s', column_names))

query = "INSERT INTO %s (%s) VALUES (%s)" % (
table_name, ', '.join(column_names), placeholders
)
query = f"INSERT INTO {table_name} ({', '.join(column_names)}) VALUES ({placeholders})"

if self.verbose:
print("\nExecuting query:\n\t" + query + "\n"
Expand Down
1 change: 0 additions & 1 deletion python/lib/database_lib/candidate_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

from typing_extensions import deprecated


__license__ = "GPLv3"


Expand Down
1 change: 1 addition & 0 deletions python/lib/database_lib/mri_scanner.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""This class performs database queries for the mri_scanner table"""

import datetime

from lib.candidate import Candidate

__license__ = "GPLv3"
Expand Down
1 change: 1 addition & 0 deletions python/lib/database_lib/physiological_coord_system.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"""

from typing import Dict, List

# from lib.point_3d import Point3D
# from lib.database_lib.point_3d import Point3DDB

Expand Down
1 change: 0 additions & 1 deletion python/lib/database_lib/visit_windows.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

from typing_extensions import deprecated


__license__ = "GPLv3"


Expand Down
2 changes: 1 addition & 1 deletion python/lib/db/connect.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from typing import Any

from sqlalchemy import create_engine
from sqlalchemy.orm import Session


default_port = 3306


Expand Down
2 changes: 2 additions & 0 deletions python/lib/db/model/candidate.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from datetime import date
from typing import Optional

from sqlalchemy.orm import Mapped, mapped_column

from lib.db.base import Base


Expand Down
4 changes: 3 additions & 1 deletion python/lib/db/model/dicom_archive.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
from datetime import date, datetime
from typing import List, Optional

from sqlalchemy import String
from sqlalchemy.orm import Mapped, mapped_column, relationship
from lib.db.base import Base

import lib.db.model.dicom_archive_file as db_dicom_archive_file
import lib.db.model.dicom_archive_series as db_dicom_archive_series
import lib.db.model.mri_upload as db_mri_upload
from lib.db.base import Base


class DbDicomArchive(Base):
Expand Down
6 changes: 4 additions & 2 deletions python/lib/db/model/dicom_archive_file.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from typing import Optional
from sqlalchemy.orm import Mapped, mapped_column, relationship

from sqlalchemy import ForeignKey
from lib.db.base import Base
from sqlalchemy.orm import Mapped, mapped_column, relationship

import lib.db.model.dicom_archive as db_dicom_archive
import lib.db.model.dicom_archive_series as db_dicom_archive_series
from lib.db.base import Base


class DbDicomArchiveFile(Base):
Expand Down
6 changes: 4 additions & 2 deletions python/lib/db/model/dicom_archive_series.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from typing import List, Optional
from sqlalchemy.orm import Mapped, mapped_column, relationship

from sqlalchemy import ForeignKey
from lib.db.base import Base
from sqlalchemy.orm import Mapped, mapped_column, relationship

import lib.db.model.dicom_archive as db_dicom_archive
import lib.db.model.dicom_archive_file as db_dicom_archive_file
from lib.db.base import Base


class DbDicomArchiveSeries(Base):
Expand Down
4 changes: 3 additions & 1 deletion python/lib/db/model/mri_upload.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from datetime import datetime
from typing import Optional

from sqlalchemy import ForeignKey
from sqlalchemy.orm import Mapped, mapped_column, relationship
from lib.db.base import Base

import lib.db.model.dicom_archive as db_dicom_archive
from lib.db.base import Base


class DbMriUpload(Base):
Expand Down
2 changes: 2 additions & 0 deletions python/lib/db/model/session.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from datetime import date, datetime
from typing import Optional

from sqlalchemy.orm import Mapped, mapped_column

from lib.db.base import Base


Expand Down
2 changes: 2 additions & 0 deletions python/lib/db/model/visit_window.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from typing import Optional

from sqlalchemy.orm import Mapped, mapped_column

from lib.db.base import Base


Expand Down
1 change: 1 addition & 0 deletions python/lib/db/query/candidate.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from sqlalchemy import select
from sqlalchemy.orm import Session as Database

from lib.db.model.candidate import DbCandidate


Expand Down
1 change: 1 addition & 0 deletions python/lib/db/query/visit.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from sqlalchemy import select
from sqlalchemy.orm import Session as Database

from lib.db.model.visit_window import DbVisitWindow


Expand Down
19 changes: 9 additions & 10 deletions python/lib/dcm2bids_imaging_pipeline_lib/base_pipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,19 @@
import shutil
import sys

from lib.exception.determine_subject_exception import DetermineSubjectException
from lib.exception.validate_subject_exception import ValidateSubjectException
import lib.exitcode
import lib.utilities

from lib.database_lib.config import Config
from lib.database import Database
from lib.database_lib.config import Config
from lib.db.connect import connect_to_db
from lib.dicom_archive import DicomArchive
from lib.exception.determine_subject_info_error import DetermineSubjectInfoError
from lib.exception.validate_subject_info_error import ValidateSubjectInfoError
from lib.imaging import Imaging
from lib.log import Log
from lib.imaging_upload import ImagingUpload
from lib.log import Log
from lib.session import Session
from lib.validate_subject_ids import validate_subject_ids
from lib.db.connect import connect_to_db


class BasePipeline:
Expand Down Expand Up @@ -111,9 +110,9 @@ def __init__(self, loris_getopt_obj, script_name):
if self.dicom_archive_obj.tarchive_info_dict.keys():
try:
self.subject_id_dict = self.imaging_obj.determine_subject_ids(self.dicom_archive_obj.tarchive_info_dict)
except DetermineSubjectException as exception:
except DetermineSubjectInfoError as error:
self.log_error_and_exit(
exception.message,
error.message,
lib.exitcode.PROJECT_CUSTOMIZATION_FAILURE,
is_error="Y",
is_verbose="N"
Expand Down Expand Up @@ -259,8 +258,8 @@ def validate_subject_ids(self):
self.imaging_upload_obj.update_mri_upload(
upload_id=self.upload_id, fields=('IsCandidateInfoValidated',), values=('1',)
)
except ValidateSubjectException as exception:
self.log_info(exception.message, is_error='Y', is_verbose='N')
except ValidateSubjectInfoError as error:
self.log_info(error.message, is_error='Y', is_verbose='N')
self.imaging_upload_obj.update_mri_upload(
upload_id=self.upload_id, fields=('IsCandidateInfoValidated',), values=('0',)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ def _run_dcm2niix_conversion(self):
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT
)
stdout, stderr = dcm2niix_process.communicate()
stdout, _ = dcm2niix_process.communicate()
self.log_info(stdout, is_error="N", is_verbose="Y")

return nifti_tmp_dir
Expand Down Expand Up @@ -302,7 +302,7 @@ def _run_nifti_insertion(self, nifti_file_path, json_file_path, bval_file_path=N
nifti_insertion_command.append("-v")

insertion_process = subprocess.Popen(nifti_insertion_command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
stdout, stderr = insertion_process.communicate()
stdout, _ = insertion_process.communicate()

if insertion_process.returncode == 0:
message = f"run_nifti_insertion.py successfully executed for file {nifti_file_path}"
Expand Down
Loading
Loading