diff --git a/t4_devkit/sanity/checker.py b/t4_devkit/sanity/checker.py index a43fe2a..86365f0 100644 --- a/t4_devkit/sanity/checker.py +++ b/t4_devkit/sanity/checker.py @@ -35,13 +35,11 @@ def is_error(self) -> bool: class Checker(ABC): """Base class for sanity checkers.""" + id: RuleID name: RuleName description: str severity: Severity - def __init__(self, id: RuleID) -> None: - self.id = id - def __call__(self, context: SanityContext) -> Report: match self.can_skip(context): case Some(skip): diff --git a/t4_devkit/sanity/format/base.py b/t4_devkit/sanity/format/base.py index 39f2b57..d9773eb 100644 --- a/t4_devkit/sanity/format/base.py +++ b/t4_devkit/sanity/format/base.py @@ -20,6 +20,7 @@ class FieldTypeChecker(Checker): """Base class for format checkers. Attributes: + id (RuleID): The ID of the rule. name (RuleName): The name of the rule. severity (Severity): The severity of the rule. description (str): The description of the rule. diff --git a/t4_devkit/sanity/format/fmt001.py b/t4_devkit/sanity/format/fmt001.py index b70ad07..6063df5 100644 --- a/t4_devkit/sanity/format/fmt001.py +++ b/t4_devkit/sanity/format/fmt001.py @@ -9,10 +9,11 @@ __all__ = ["FMT001"] -@CHECKERS.register(RuleID("FMT001")) +@CHECKERS.register() class FMT001(FieldTypeChecker): """A checker of FMT001.""" + id = RuleID("FMT001") name = RuleName("attribute-field") severity = Severity.ERROR description = "All types of 'Attribute' fields are valid." diff --git a/t4_devkit/sanity/format/fmt002.py b/t4_devkit/sanity/format/fmt002.py index ccd6d85..ef12e56 100644 --- a/t4_devkit/sanity/format/fmt002.py +++ b/t4_devkit/sanity/format/fmt002.py @@ -9,10 +9,11 @@ __all__ = ["FMT002"] -@CHECKERS.register(RuleID("FMT002")) +@CHECKERS.register() class FMT002(FieldTypeChecker): """A checker of FMT002.""" + id = RuleID("FMT002") name = RuleName("calibrated-sensor-field") severity = Severity.ERROR description = "All types of 'CalibratedSensor' fields are valid." diff --git a/t4_devkit/sanity/format/fmt003.py b/t4_devkit/sanity/format/fmt003.py index 33352e8..04081d2 100644 --- a/t4_devkit/sanity/format/fmt003.py +++ b/t4_devkit/sanity/format/fmt003.py @@ -9,10 +9,11 @@ __all__ = ["FMT003"] -@CHECKERS.register(RuleID("FMT003")) +@CHECKERS.register() class FMT003(FieldTypeChecker): """A checker of FMT003.""" + id = RuleID("FMT003") name = RuleName("category-field") severity = Severity.ERROR description = "All types of 'Category' fields are valid." diff --git a/t4_devkit/sanity/format/fmt004.py b/t4_devkit/sanity/format/fmt004.py index ccfbc8b..1c5e0f5 100644 --- a/t4_devkit/sanity/format/fmt004.py +++ b/t4_devkit/sanity/format/fmt004.py @@ -9,10 +9,11 @@ __all__ = ["FMT004"] -@CHECKERS.register(RuleID("FMT004")) +@CHECKERS.register() class FMT004(FieldTypeChecker): """A checker of FMT004.""" + id = RuleID("FMT004") name = RuleName("ego-pose-field") severity = Severity.ERROR description = "All types of 'EgoPose' fields are valid." diff --git a/t4_devkit/sanity/format/fmt005.py b/t4_devkit/sanity/format/fmt005.py index b8d5d57..6eac636 100644 --- a/t4_devkit/sanity/format/fmt005.py +++ b/t4_devkit/sanity/format/fmt005.py @@ -9,10 +9,11 @@ __all__ = ["FMT005"] -@CHECKERS.register(RuleID("FMT005")) +@CHECKERS.register() class FMT005(FieldTypeChecker): """A checker of FMT005.""" + id = RuleID("FMT005") name = RuleName("instance-field") severity = Severity.ERROR description = "All types of 'Instance' fields are valid." diff --git a/t4_devkit/sanity/format/fmt006.py b/t4_devkit/sanity/format/fmt006.py index 23a4132..8c381ba 100644 --- a/t4_devkit/sanity/format/fmt006.py +++ b/t4_devkit/sanity/format/fmt006.py @@ -9,10 +9,11 @@ __all__ = ["FMT006"] -@CHECKERS.register(RuleID("FMT006")) +@CHECKERS.register() class FMT006(FieldTypeChecker): """A checker of FMT006.""" + id = RuleID("FMT006") name = RuleName("log-field") severity = Severity.ERROR description = "All types of 'Log' fields are valid." diff --git a/t4_devkit/sanity/format/fmt007.py b/t4_devkit/sanity/format/fmt007.py index f2e9eab..f89dda1 100644 --- a/t4_devkit/sanity/format/fmt007.py +++ b/t4_devkit/sanity/format/fmt007.py @@ -9,10 +9,11 @@ __all__ = ["FMT007"] -@CHECKERS.register(RuleID("FMT007")) +@CHECKERS.register() class FMT007(FieldTypeChecker): """A checker of FMT007.""" + id = RuleID("FMT007") name = RuleName("map-field") severity = Severity.ERROR description = "All types of 'Map' fields are valid." diff --git a/t4_devkit/sanity/format/fmt008.py b/t4_devkit/sanity/format/fmt008.py index 9d7a743..cd1be61 100644 --- a/t4_devkit/sanity/format/fmt008.py +++ b/t4_devkit/sanity/format/fmt008.py @@ -9,10 +9,11 @@ __all__ = ["FMT008"] -@CHECKERS.register(RuleID("FMT008")) +@CHECKERS.register() class FMT008(FieldTypeChecker): """A checker of FMT008.""" + id = RuleID("FMT008") name = RuleName("sample-field") severity = Severity.ERROR description = "All types of 'Sample' fields are valid." diff --git a/t4_devkit/sanity/format/fmt009.py b/t4_devkit/sanity/format/fmt009.py index 12e38fb..79e0ef9 100644 --- a/t4_devkit/sanity/format/fmt009.py +++ b/t4_devkit/sanity/format/fmt009.py @@ -9,10 +9,11 @@ __all__ = ["FMT009"] -@CHECKERS.register(RuleID("FMT009")) +@CHECKERS.register() class FMT009(FieldTypeChecker): """A checker of FMT009.""" + id = RuleID("FMT009") name = RuleName("sample-annotation-field") severity = Severity.ERROR description = "All types of 'SampleAnnotation' fields are valid." diff --git a/t4_devkit/sanity/format/fmt010.py b/t4_devkit/sanity/format/fmt010.py index 447193c..a38321d 100644 --- a/t4_devkit/sanity/format/fmt010.py +++ b/t4_devkit/sanity/format/fmt010.py @@ -9,10 +9,11 @@ __all__ = ["FMT010"] -@CHECKERS.register(RuleID("FMT010")) +@CHECKERS.register() class FMT010(FieldTypeChecker): """A checker of FMT010.""" + id = RuleID("FMT010") name = RuleName("sample-data-field") severity = Severity.ERROR description = "All types of 'SampleData' fields are valid." diff --git a/t4_devkit/sanity/format/fmt011.py b/t4_devkit/sanity/format/fmt011.py index 368efba..f6a3998 100644 --- a/t4_devkit/sanity/format/fmt011.py +++ b/t4_devkit/sanity/format/fmt011.py @@ -9,10 +9,11 @@ __all__ = ["FMT011"] -@CHECKERS.register(RuleID("FMT011")) +@CHECKERS.register() class FMT011(FieldTypeChecker): """A checker of FMT011.""" + id = RuleID("FMT011") name = RuleName("scene-field") severity = Severity.ERROR description = "All types of 'Scene' fields are valid." diff --git a/t4_devkit/sanity/format/fmt012.py b/t4_devkit/sanity/format/fmt012.py index a70bcbb..f847915 100644 --- a/t4_devkit/sanity/format/fmt012.py +++ b/t4_devkit/sanity/format/fmt012.py @@ -9,10 +9,11 @@ __all__ = ["FMT012"] -@CHECKERS.register(RuleID("FMT012")) +@CHECKERS.register() class FMT012(FieldTypeChecker): """A checker of FMT012.""" + id = RuleID("FMT012") name = RuleName("sensor-field") severity = Severity.ERROR description = "All types of 'Sensor' fields are valid." diff --git a/t4_devkit/sanity/format/fmt013.py b/t4_devkit/sanity/format/fmt013.py index 028e6b9..e530e81 100644 --- a/t4_devkit/sanity/format/fmt013.py +++ b/t4_devkit/sanity/format/fmt013.py @@ -9,10 +9,11 @@ __all__ = ["FMT013"] -@CHECKERS.register(RuleID("FMT013")) +@CHECKERS.register() class FMT013(FieldTypeChecker): """A checker of FMT013.""" + id = RuleID("FMT013") name = RuleName("visibility-field") severity = Severity.ERROR description = "All types of 'Visibility' fields are valid." diff --git a/t4_devkit/sanity/format/fmt014.py b/t4_devkit/sanity/format/fmt014.py index 7b4ed4b..41566f5 100644 --- a/t4_devkit/sanity/format/fmt014.py +++ b/t4_devkit/sanity/format/fmt014.py @@ -9,10 +9,11 @@ __all__ = ["FMT014"] -@CHECKERS.register(RuleID("FMT014")) +@CHECKERS.register() class FMT014(FieldTypeChecker): """A checker of FMT014.""" + id = RuleID("FMT014") name = RuleName("lidarseg-field") severity = Severity.ERROR description = "All types of 'LidarSeg' fields are valid." diff --git a/t4_devkit/sanity/format/fmt015.py b/t4_devkit/sanity/format/fmt015.py index e56dc68..7ae34ce 100644 --- a/t4_devkit/sanity/format/fmt015.py +++ b/t4_devkit/sanity/format/fmt015.py @@ -9,10 +9,11 @@ __all__ = ["FMT015"] -@CHECKERS.register(RuleID("FMT015")) +@CHECKERS.register() class FMT015(FieldTypeChecker): """A checker of FMT015.""" + id = RuleID("FMT015") name = RuleName("object-ann-field") severity = Severity.ERROR description = "All types of 'ObjectAnn' fields are valid." diff --git a/t4_devkit/sanity/format/fmt016.py b/t4_devkit/sanity/format/fmt016.py index 84df925..27a8921 100644 --- a/t4_devkit/sanity/format/fmt016.py +++ b/t4_devkit/sanity/format/fmt016.py @@ -9,10 +9,11 @@ __all__ = ["FMT016"] -@CHECKERS.register(RuleID("FMT016")) +@CHECKERS.register() class FMT016(FieldTypeChecker): """A checker of FMT016.""" + id = RuleID("FMT016") name = RuleName("surface-ann-field") severity = Severity.ERROR description = "All types of 'SurfaceAnn' fields are valid." diff --git a/t4_devkit/sanity/format/fmt017.py b/t4_devkit/sanity/format/fmt017.py index ca52efe..4ba4762 100644 --- a/t4_devkit/sanity/format/fmt017.py +++ b/t4_devkit/sanity/format/fmt017.py @@ -9,10 +9,11 @@ __all__ = ["FMT017"] -@CHECKERS.register(RuleID("FMT017")) +@CHECKERS.register() class FMT017(FieldTypeChecker): """A checker of FMT017.""" + id = RuleID("FMT017") name = RuleName("keypoint-field") severity = Severity.ERROR description = "All types of 'Keypoint' fields are valid." diff --git a/t4_devkit/sanity/format/fmt018.py b/t4_devkit/sanity/format/fmt018.py index 73b57ca..1d16d9b 100644 --- a/t4_devkit/sanity/format/fmt018.py +++ b/t4_devkit/sanity/format/fmt018.py @@ -9,10 +9,11 @@ __all__ = ["FMT018"] -@CHECKERS.register(RuleID("FMT018")) +@CHECKERS.register() class FMT018(FieldTypeChecker): """A checker of FMT018.""" + id = RuleID("FMT018") name = RuleName("vehicle-state-field") severity = Severity.ERROR description = "All types of 'VehicleState' fields are valid." diff --git a/t4_devkit/sanity/record/base.py b/t4_devkit/sanity/record/base.py index 162f7f5..57984ea 100644 --- a/t4_devkit/sanity/record/base.py +++ b/t4_devkit/sanity/record/base.py @@ -19,6 +19,7 @@ class RecordCountChecker(Checker): """Base class for record count checkers. Attributes: + id (RuleID): The ID of the rule. name (RuleName): The name of the rule. severity (Severity): The severity of the rule. description (str): The description of the rule. diff --git a/t4_devkit/sanity/record/rec001.py b/t4_devkit/sanity/record/rec001.py index 01c7927..dff52a8 100644 --- a/t4_devkit/sanity/record/rec001.py +++ b/t4_devkit/sanity/record/rec001.py @@ -10,10 +10,11 @@ __all__ = ["REC001"] -@CHECKERS.register(RuleID("REC001")) +@CHECKERS.register() class REC001(RecordCountChecker): """A checker of REC001.""" + id = RuleID("REC001") name = RuleName("scene-single") severity = Severity.ERROR description = "'Scene' record is a single." diff --git a/t4_devkit/sanity/record/rec002.py b/t4_devkit/sanity/record/rec002.py index 86d2e9f..48c6683 100644 --- a/t4_devkit/sanity/record/rec002.py +++ b/t4_devkit/sanity/record/rec002.py @@ -10,10 +10,11 @@ __all__ = ["REC002"] -@CHECKERS.register(RuleID("REC002")) +@CHECKERS.register() class REC002(RecordCountChecker): """A checker of REC002.""" + id = RuleID("REC002") name = RuleName("sample-not-empty") severity = Severity.ERROR description = "'Sample' record is not empty." diff --git a/t4_devkit/sanity/record/rec003.py b/t4_devkit/sanity/record/rec003.py index d4f2d98..748f018 100644 --- a/t4_devkit/sanity/record/rec003.py +++ b/t4_devkit/sanity/record/rec003.py @@ -10,10 +10,11 @@ __all__ = ["REC003"] -@CHECKERS.register(RuleID("REC003")) +@CHECKERS.register() class REC003(RecordCountChecker): """A checker of REC003.""" + id = RuleID("REC003") name = RuleName("sample-data-not-empty") severity = Severity.ERROR description = "'SampleData' record is not empty." diff --git a/t4_devkit/sanity/record/rec004.py b/t4_devkit/sanity/record/rec004.py index a9a12ea..93ac1ca 100644 --- a/t4_devkit/sanity/record/rec004.py +++ b/t4_devkit/sanity/record/rec004.py @@ -10,10 +10,11 @@ __all__ = ["REC004"] -@CHECKERS.register(RuleID("REC004")) +@CHECKERS.register() class REC004(RecordCountChecker): """A checker of REC004.""" + id = RuleID("REC004") name = RuleName("ego-pose-not-empty") severity = Severity.ERROR description = "'EgoPose' record is not empty." diff --git a/t4_devkit/sanity/record/rec005.py b/t4_devkit/sanity/record/rec005.py index b4cd15a..6a02097 100644 --- a/t4_devkit/sanity/record/rec005.py +++ b/t4_devkit/sanity/record/rec005.py @@ -10,10 +10,11 @@ __all__ = ["REC005"] -@CHECKERS.register(RuleID("REC005")) +@CHECKERS.register() class REC005(RecordCountChecker): """A checker of REC005.""" + id = RuleID("REC005") name = RuleName("calibrated-sensor-not-empty") severity = Severity.ERROR description = "'CalibratedSensor' record is not empty." diff --git a/t4_devkit/sanity/record/rec006.py b/t4_devkit/sanity/record/rec006.py index 8a251af..0edee0c 100644 --- a/t4_devkit/sanity/record/rec006.py +++ b/t4_devkit/sanity/record/rec006.py @@ -10,10 +10,11 @@ __all__ = ["REC006"] -@CHECKERS.register(RuleID("REC006")) +@CHECKERS.register() class REC006(RecordCountChecker): """A checker of REC006.""" + id = RuleID("REC006") name = RuleName("instance-not-empty") severity = Severity.ERROR description = "'Instance' record is not empty." diff --git a/t4_devkit/sanity/reference/base.py b/t4_devkit/sanity/reference/base.py index 04ba8a3..28370f6 100644 --- a/t4_devkit/sanity/reference/base.py +++ b/t4_devkit/sanity/reference/base.py @@ -18,6 +18,7 @@ class RecordReferenceChecker(Checker): """Base class for record reference checkers. Attributes: + id (RuleID): The ID of the rule. name (RuleName): The name of the rule. severity (Severity): The severity of the rule. description (str): The description of the rule. diff --git a/t4_devkit/sanity/reference/ref001.py b/t4_devkit/sanity/reference/ref001.py index 007debe..c4f69e9 100644 --- a/t4_devkit/sanity/reference/ref001.py +++ b/t4_devkit/sanity/reference/ref001.py @@ -9,10 +9,11 @@ __all__ = ["REF001"] -@CHECKERS.register(RuleID("REF001")) +@CHECKERS.register() class REF001(RecordReferenceChecker): """A checker of REF001.""" + id = RuleID("REF001") name = RuleName("scene-to-log") severity = Severity.ERROR description = "'Scene.log_token' refers to 'Log' record." diff --git a/t4_devkit/sanity/reference/ref002.py b/t4_devkit/sanity/reference/ref002.py index ea2a25f..0ad3a83 100644 --- a/t4_devkit/sanity/reference/ref002.py +++ b/t4_devkit/sanity/reference/ref002.py @@ -9,10 +9,11 @@ __all__ = ["REF002"] -@CHECKERS.register(RuleID("REF002")) +@CHECKERS.register() class REF002(RecordReferenceChecker): """A checker of REF002.""" + id = RuleID("REF002") name = RuleName("scene-to-first-sample") severity = Severity.ERROR description = "'Scene.first_sample_token' refers to 'Sample' record." diff --git a/t4_devkit/sanity/reference/ref003.py b/t4_devkit/sanity/reference/ref003.py index a13677f..420d231 100644 --- a/t4_devkit/sanity/reference/ref003.py +++ b/t4_devkit/sanity/reference/ref003.py @@ -9,10 +9,11 @@ __all__ = ["REF003"] -@CHECKERS.register(RuleID("REF003")) +@CHECKERS.register() class REF003(RecordReferenceChecker): """A checker of REF003.""" + id = RuleID("REF003") name = RuleName("scene-to-last-sample") severity = Severity.ERROR description = "'Scene.last_sample_token' refers to 'Sample' record." diff --git a/t4_devkit/sanity/reference/ref004.py b/t4_devkit/sanity/reference/ref004.py index 8ae5498..a8bea29 100644 --- a/t4_devkit/sanity/reference/ref004.py +++ b/t4_devkit/sanity/reference/ref004.py @@ -9,10 +9,11 @@ __all__ = ["REF004"] -@CHECKERS.register(RuleID("REF004")) +@CHECKERS.register() class REF004(RecordReferenceChecker): """A checker of REF004.""" + id = RuleID("REF004") name = RuleName("sample-to-scene") severity = Severity.ERROR description = "'Sample.scene_token' refers to 'Scene' record." diff --git a/t4_devkit/sanity/reference/ref005.py b/t4_devkit/sanity/reference/ref005.py index 58ef57c..13ca061 100644 --- a/t4_devkit/sanity/reference/ref005.py +++ b/t4_devkit/sanity/reference/ref005.py @@ -11,10 +11,11 @@ __all__ = ["REF005"] -@CHECKERS.register(RuleID("REF005")) +@CHECKERS.register() class REF005(RecordReferenceChecker): """A checker of REF005.""" + id = RuleID("REF005") name = RuleName("sample-data-to-sample") severity = Severity.ERROR description = "'SampleData.sample_token' refers to 'Sample' record." diff --git a/t4_devkit/sanity/reference/ref006.py b/t4_devkit/sanity/reference/ref006.py index 638bf30..01dbf62 100644 --- a/t4_devkit/sanity/reference/ref006.py +++ b/t4_devkit/sanity/reference/ref006.py @@ -9,10 +9,11 @@ __all__ = ["REF006"] -@CHECKERS.register(RuleID("REF006")) +@CHECKERS.register() class REF006(RecordReferenceChecker): """A checker of REF006.""" + id = RuleID("REF006") name = RuleName("sample-data-to-ego-pose") severity = Severity.ERROR description = "'SampleData.ego_pose_token' refers to 'EgoPose' record." diff --git a/t4_devkit/sanity/reference/ref007.py b/t4_devkit/sanity/reference/ref007.py index 5cc7f1f..c7e9a82 100644 --- a/t4_devkit/sanity/reference/ref007.py +++ b/t4_devkit/sanity/reference/ref007.py @@ -9,10 +9,11 @@ __all__ = ["REF007"] -@CHECKERS.register(RuleID("REF007")) +@CHECKERS.register() class REF007(RecordReferenceChecker): """A checker of REF007.""" + id = RuleID("REF007") name = RuleName("sample-data-to-calibrated-sensor") severity = Severity.ERROR description = "'SampleData.calibrated_sensor_token' refers to 'CalibratedSensor' record." diff --git a/t4_devkit/sanity/reference/ref008.py b/t4_devkit/sanity/reference/ref008.py index dccec5c..c6cfc8d 100644 --- a/t4_devkit/sanity/reference/ref008.py +++ b/t4_devkit/sanity/reference/ref008.py @@ -9,10 +9,11 @@ __all__ = ["REF008"] -@CHECKERS.register(RuleID("REF008")) +@CHECKERS.register() class REF008(RecordReferenceChecker): """A checker of REF008.""" + id = RuleID("REF008") name = RuleName("calibrated-sensor-to-sensor") severity = Severity.ERROR description = "'CalibratedSensor.sensor_token' refers to 'Sensor' record." diff --git a/t4_devkit/sanity/reference/ref009.py b/t4_devkit/sanity/reference/ref009.py index 193ac78..61257e5 100644 --- a/t4_devkit/sanity/reference/ref009.py +++ b/t4_devkit/sanity/reference/ref009.py @@ -9,10 +9,11 @@ __all__ = ["REF009"] -@CHECKERS.register(RuleID("REF009")) +@CHECKERS.register() class REF009(RecordReferenceChecker): """A checker of REF009.""" + id = RuleID("REF009") name = RuleName("instance-to-category") severity = Severity.ERROR description = "'Instance.category_token' refers to 'Category' record." diff --git a/t4_devkit/sanity/reference/ref010.py b/t4_devkit/sanity/reference/ref010.py index 613ee7a..e268313 100644 --- a/t4_devkit/sanity/reference/ref010.py +++ b/t4_devkit/sanity/reference/ref010.py @@ -9,10 +9,11 @@ __all__ = ["REF010"] -@CHECKERS.register(RuleID("REF010")) +@CHECKERS.register() class REF010(RecordReferenceChecker): """A checker of REF010.""" + id = RuleID("REF010") name = RuleName("instance-to-first-sample-annotation") severity = Severity.ERROR description = "'Instance.first_annotation_token' refers to 'SampleAnnotation' record." diff --git a/t4_devkit/sanity/reference/ref011.py b/t4_devkit/sanity/reference/ref011.py index caac4c7..8e7413a 100644 --- a/t4_devkit/sanity/reference/ref011.py +++ b/t4_devkit/sanity/reference/ref011.py @@ -9,10 +9,11 @@ __all__ = ["REF011"] -@CHECKERS.register(RuleID("REF011")) +@CHECKERS.register() class REF011(RecordReferenceChecker): """A checker of REF011.""" + id = RuleID("REF011") name = RuleName("instance-to-last-sample-annotation") severity = Severity.ERROR description = "'Instance.last_annotation_token' refers to 'SampleAnnotation' record." diff --git a/t4_devkit/sanity/reference/ref012.py b/t4_devkit/sanity/reference/ref012.py index 5e317e2..3aa0f0e 100644 --- a/t4_devkit/sanity/reference/ref012.py +++ b/t4_devkit/sanity/reference/ref012.py @@ -9,10 +9,11 @@ __all__ = ["REF012"] -@CHECKERS.register(RuleID("REF012")) +@CHECKERS.register() class REF012(RecordReferenceChecker): """A checker of REF012.""" + id = RuleID("REF012") name = RuleName("lidarset-to-sample-data") severity = Severity.ERROR description = "'LidarSeg.sample_data_token' refers to 'SampleData' record." diff --git a/t4_devkit/sanity/reference/ref013.py b/t4_devkit/sanity/reference/ref013.py index 6adf0d0..233f710 100644 --- a/t4_devkit/sanity/reference/ref013.py +++ b/t4_devkit/sanity/reference/ref013.py @@ -17,10 +17,11 @@ __all__ = ["REF013"] -@CHECKERS.register(RuleID("REF013")) +@CHECKERS.register() class REF013(FileReferenceChecker): """A checker of REF013.""" + id = RuleID("REF013") name = RuleName("sample-data-filename-presence") severity = Severity.ERROR description = "'SampleData.filename' exists." diff --git a/t4_devkit/sanity/reference/ref014.py b/t4_devkit/sanity/reference/ref014.py index 09d07ca..2f455c8 100644 --- a/t4_devkit/sanity/reference/ref014.py +++ b/t4_devkit/sanity/reference/ref014.py @@ -17,10 +17,11 @@ __all__ = ["REF014"] -@CHECKERS.register(RuleID("REF014")) +@CHECKERS.register() class REF014(FileReferenceChecker): """A checker of REF014.""" + id = RuleID("REF014") name = RuleName("sample-data-filename-presence") severity = Severity.ERROR description = "'SampleData.filename' exists." diff --git a/t4_devkit/sanity/reference/ref015.py b/t4_devkit/sanity/reference/ref015.py index c12313b..c23adad 100644 --- a/t4_devkit/sanity/reference/ref015.py +++ b/t4_devkit/sanity/reference/ref015.py @@ -17,10 +17,11 @@ __all__ = ["REF015"] -@CHECKERS.register(RuleID("REF015")) +@CHECKERS.register() class REF015(FileReferenceChecker): """A checker of REF015.""" + id = RuleID("REF015") name = RuleName("lidarseg-filename-presence") severity = Severity.ERROR description = "'LidarSeg.filename' exists." diff --git a/t4_devkit/sanity/registry.py b/t4_devkit/sanity/registry.py index 1bcd388..46ae42b 100644 --- a/t4_devkit/sanity/registry.py +++ b/t4_devkit/sanity/registry.py @@ -37,37 +37,37 @@ def to_group(cls, id: RuleID) -> RuleGroup | None: class CheckerRegistry(dict[RuleGroup, dict[RuleID, type[Checker]]]): - def register(self, id: RuleID) -> Callable: + def register(self) -> Callable: """Register a checker class. - Args: - id (RuleID): The ID of the rule. - Returns: A decorator function that registers the checker class. """ - group = RuleGroup.to_group(id) - - if group is None: - raise ValueError(f"'{id}' doesn't belong to any rule groups: {RuleGroup.values()}") def _register_decorator(module: type[Checker]) -> type[Checker]: - self._add_module(module, group, id) + self._add_module(module) return module return _register_decorator - def _add_module(self, module: type[Checker], group: RuleGroup, id: RuleID) -> None: + def _add_module(self, module: type[Checker]) -> None: if not inspect.isclass(module): raise TypeError(f"module must be a class, but got {type(module)}.") + group = RuleGroup.to_group(module.id) + + if group is None: + raise ValueError( + f"'{module.id}' doesn't belong to any rule groups: {RuleGroup.values()}" + ) + if group not in self: self[group] = {} - if id in self[group]: - raise ValueError(f"'{id}' has already been registered.") + if module.id in self[group]: + raise ValueError(f"'{module.id}' has already been registered.") - self[group][id] = module + self[group][module.id] = module def build(self, excludes: Sequence[str] | None = None) -> list[Checker]: """Build a list of checkers from the registry. @@ -82,7 +82,7 @@ def build(self, excludes: Sequence[str] | None = None) -> list[Checker]: excludes = [] return [ - checker(id) + checker() for group, values in self.items() for id, checker in values.items() if id not in excludes and group.value not in excludes diff --git a/t4_devkit/sanity/structure/str001.py b/t4_devkit/sanity/structure/str001.py index c3d0a0b..9894e6d 100644 --- a/t4_devkit/sanity/structure/str001.py +++ b/t4_devkit/sanity/structure/str001.py @@ -15,10 +15,11 @@ __all__ = ["STR001"] -@CHECKERS.register(RuleID("STR001")) +@CHECKERS.register() class STR001(Checker): """A checker of STR001.""" + id = RuleID("STR001") name = RuleName("version-dir-presence") severity = Severity.WARNING description = "'version/' directory exists under the dataset root directory." diff --git a/t4_devkit/sanity/structure/str002.py b/t4_devkit/sanity/structure/str002.py index baee3cc..3a081fa 100644 --- a/t4_devkit/sanity/structure/str002.py +++ b/t4_devkit/sanity/structure/str002.py @@ -15,10 +15,11 @@ __all__ = ["STR002"] -@CHECKERS.register(RuleID("STR002")) +@CHECKERS.register() class STR002(Checker): """A checker of STR002.""" + id = RuleID("STR002") name = RuleName("annotation-dir-presence") severity = Severity.ERROR description = "'annotation/' directory exists under the dataset root directory." diff --git a/t4_devkit/sanity/structure/str003.py b/t4_devkit/sanity/structure/str003.py index bc95188..e83b3f1 100644 --- a/t4_devkit/sanity/structure/str003.py +++ b/t4_devkit/sanity/structure/str003.py @@ -15,10 +15,11 @@ __all__ = ["STR003"] -@CHECKERS.register(RuleID("STR003")) +@CHECKERS.register() class STR003(Checker): """A checker of STR003.""" + id = RuleID("STR003") name = RuleName("data-dir-presence") severity = Severity.ERROR description = "'data/' directory exists under the dataset root directory." diff --git a/t4_devkit/sanity/structure/str004.py b/t4_devkit/sanity/structure/str004.py index 5c4944a..2d0101e 100644 --- a/t4_devkit/sanity/structure/str004.py +++ b/t4_devkit/sanity/structure/str004.py @@ -15,10 +15,11 @@ __all__ = ["STR004"] -@CHECKERS.register(RuleID("STR004")) +@CHECKERS.register() class STR004(Checker): """A checker of STR004.""" + id = RuleID("STR004") name = RuleName("map-dir-presence") severity = Severity.WARNING description = "'map/' directory exists under the dataset root directory." diff --git a/t4_devkit/sanity/structure/str005.py b/t4_devkit/sanity/structure/str005.py index 7860a9d..911ca56 100644 --- a/t4_devkit/sanity/structure/str005.py +++ b/t4_devkit/sanity/structure/str005.py @@ -15,10 +15,11 @@ __all__ = ["STR005"] -@CHECKERS.register(RuleID("STR005")) +@CHECKERS.register() class STR005(Checker): """A checker of STR005.""" + id = RuleID("STR005") name = RuleName("bag-dir-presence") severity = Severity.WARNING description = "'input_bag/' directory exists under the dataset root directory." diff --git a/t4_devkit/sanity/structure/str006.py b/t4_devkit/sanity/structure/str006.py index 09da99b..7526964 100644 --- a/t4_devkit/sanity/structure/str006.py +++ b/t4_devkit/sanity/structure/str006.py @@ -15,10 +15,11 @@ __all__ = ["STR006"] -@CHECKERS.register(RuleID("STR006")) +@CHECKERS.register() class STR006(Checker): """A checker of STR006.""" + id = RuleID("STR006") name = RuleName("status-json-presence") severity = Severity.WARNING description = "'status.json' file exists under the dataset root directory." diff --git a/t4_devkit/sanity/structure/str007.py b/t4_devkit/sanity/structure/str007.py index 0819559..04652b6 100644 --- a/t4_devkit/sanity/structure/str007.py +++ b/t4_devkit/sanity/structure/str007.py @@ -17,10 +17,11 @@ __all__ = ["STR007"] -@CHECKERS.register(RuleID("STR007")) +@CHECKERS.register() class STR007(Checker): """A checker of STR007.""" + id = RuleID("STR007") name = RuleName("schema-file-presence") severity = Severity.ERROR description = "Mandatory schema JSON files exist under the `annotation/` directory." diff --git a/t4_devkit/sanity/structure/str008.py b/t4_devkit/sanity/structure/str008.py index d7f25d8..9503301 100644 --- a/t4_devkit/sanity/structure/str008.py +++ b/t4_devkit/sanity/structure/str008.py @@ -14,10 +14,11 @@ __all__ = ["STR008"] -@CHECKERS.register(RuleID("STR008")) +@CHECKERS.register() class STR008(Checker): """A checker of STR008.""" + id = RuleID("STR008") name = RuleName("lanelet-file-presence") severity = Severity.WARNING description = "'lanelet2_map.osm' file exists under the 'map/' directory." diff --git a/t4_devkit/sanity/structure/str009.py b/t4_devkit/sanity/structure/str009.py index 6f97220..24ba4f4 100644 --- a/t4_devkit/sanity/structure/str009.py +++ b/t4_devkit/sanity/structure/str009.py @@ -14,10 +14,11 @@ __all__ = ["STR009"] -@CHECKERS.register(RuleID("STR009")) +@CHECKERS.register() class STR009(Checker): """A checker of STR009.""" + id = RuleID("STR009") name = RuleName("pointcloud-map-dir-presence") severity = Severity.WARNING description = "'pointcloud_map.pcd' directory exists under the 'map/' directory." diff --git a/t4_devkit/sanity/tier4/tiv001.py b/t4_devkit/sanity/tier4/tiv001.py index e9174dd..036c866 100644 --- a/t4_devkit/sanity/tier4/tiv001.py +++ b/t4_devkit/sanity/tier4/tiv001.py @@ -18,10 +18,11 @@ __all__ = ["TIV001"] -@CHECKERS.register(RuleID("TIV001")) +@CHECKERS.register() class TIV001(Checker): """A checker for TIV001.""" + id = RuleID("TIV001") name = RuleName("load-tier4") severity = Severity.ERROR description = "Ensure 'Tier4' instance is loaded successfully."