Coverage for collectra/tasks/__init__.py: 42.86%

14 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-16 09:56 +0000

1"""Task classes with lazy optional-backend imports.""" 

2 

3from __future__ import annotations 

4 

5from importlib import import_module 

6 

7_EXPORTS = { 

8 "Task": "collectra.tasks.base", 

9 "TaskNode": "collectra.tasks.base", 

10 "YOLOTask": "collectra.tasks.machine_learning.yolo", 

11 "ObjectDetectionYOLO": "collectra.tasks.object_detection.yolo", 

12 "ImageClassifierYOLO": "collectra.tasks.image_classifier.yolo", 

13 "ImageClassifierTorchvision": "collectra.tasks.image_classifier.torchvision", 

14 "ImageClassifierHuggingFace": "collectra.tasks.image_classifier.huggingface", 

15 "ObjectDetectionDETR": "collectra.tasks.object_detection.detr", 

16 "DetectionTrainResult": "collectra.tasks.object_detection.detr", 

17 "ObjectDetectionRFDETR": "collectra.tasks.object_detection.rfdetr", 

18 "ImageOrienter": "collectra.tasks.machine_learning.orienters", 

19 "ImageSegmentationSam3": "collectra.tasks.image_segmentation.sam3", 

20 "LLM": "collectra.tasks.llms", 

21 "LLMCanonicaliser": "collectra.tasks.canonicalisers", 

22 "IRNResolver": "collectra.tasks.irn_resolvers", 

23 "normalise_column_name": "collectra.tasks.irn_resolvers", 

24 "render_card": "collectra.tasks.irn_resolvers", 

25 "OCRSuraya": "collectra.tasks.ocr", 

26 "LineDetectorSurya": "collectra.tasks.ocr", 

27 "LineDetectorRLSA": "collectra.tasks.line_detection", 

28 "ConcatenateText": "collectra.tasks.text", 

29} 

30 

31__all__ = sorted(_EXPORTS) 

32 

33 

34def __getattr__(name: str): 

35 try: 

36 module_name = _EXPORTS[name] 

37 except KeyError as error: 

38 raise AttributeError( 

39 f"module {__name__!r} has no attribute {name!r}" 

40 ) from error 

41 value = getattr(import_module(module_name), name) 

42 globals()[name] = value 

43 return value 

44 

45 

46def __dir__() -> list[str]: 

47 return sorted([*globals(), *__all__])