Skip to content

Commit

Permalink
move enums to separate files and module
Browse files Browse the repository at this point in the history
  • Loading branch information
denniswittich committed Dec 6, 2024
1 parent 8c004ec commit 798fb45
Show file tree
Hide file tree
Showing 30 changed files with 116 additions and 98 deletions.
8 changes: 4 additions & 4 deletions demo_segmentation_tool/app_code/annotation_tool.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,8 @@
import numpy as np

from learning_loop_node.annotation.annotator_logic import AnnotatorLogic
from learning_loop_node.data_classes import (AnnotationEventType, Point,
SegmentationAnnotation, Shape,
ToolOutput, UserInput)
from learning_loop_node.data_classes import Point, SegmentationAnnotation, Shape, ToolOutput, UserInput
from learning_loop_node.enums import AnnotationEventType

KWONLY_SLOTS = {'kw_only': True, 'slots': True} if sys.version_info >= (3, 10) else {}

Expand Down Expand Up @@ -63,7 +62,8 @@ def create_path(pixel: List[Point]) -> str:


class SegmentationTool(AnnotatorLogic):
async def handle_user_input(self, user_input: UserInput, history: History) -> ToolOutput:
# TODO: fix signature
async def handle_user_input(self, user_input: UserInput, history: History) -> ToolOutput: # type: ignore
coordinate = user_input.data.coordinate
output = ToolOutput(svg="", annotation=None)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
from learning_loop_node.data_classes import (AnnotationData,
AnnotationEventType, Category,
CategoryType, Context, Point,
UserInput)
from learning_loop_node.data_classes import AnnotationData, Category, Context, Point, UserInput
from learning_loop_node.enums import AnnotationEventType, CategoryType


class MockAsyncClient(): # pylint: disable=too-few-public-methods
Expand Down
15 changes: 7 additions & 8 deletions learning_loop_node/data_classes/__init__.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
from .annotations import AnnotationData, AnnotationEventType, SegmentationAnnotation, ToolOutput, UserInput
from .annotations import AnnotationData, SegmentationAnnotation, ToolOutput, UserInput
from .detections import (BoxDetection, ClassificationDetection, Detections, Observation, Point, PointDetection,
SegmentationDetection, Shape)
from .general import (AboutResponse, AnnotationNodeStatus, Category, CategoryType, Context, DetectionStatus,
ErrorConfiguration, ModelInformation, ModelVersionResponse, NodeState, NodeStatus)
from .general import (AboutResponse, AnnotationNodeStatus, Category, Context, DetectionStatus, ErrorConfiguration,
ModelInformation, ModelVersionResponse, NodeState, NodeStatus)
from .image_metadata import ImageMetadata
from .socket_response import SocketResponse
from .training import (Errors, PretrainedModel, TrainerState, Training, TrainingError, TrainingOut, TrainingStateData,
TrainingStatus)
from .training import Errors, PretrainedModel, Training, TrainingError, TrainingOut, TrainingStateData, TrainingStatus

__all__ = [
'AboutResponse', 'AnnotationData', 'AnnotationEventType', 'SegmentationAnnotation', 'ToolOutput', 'UserInput',
'AboutResponse', 'AnnotationData', 'SegmentationAnnotation', 'ToolOutput', 'UserInput',
'BoxDetection', 'ClassificationDetection', 'ImageMetadata', 'Observation', 'Point', 'PointDetection',
'SegmentationDetection', 'Shape', 'Detections',
'AnnotationNodeStatus', 'Category', 'CategoryType', 'Context', 'DetectionStatus', 'ErrorConfiguration',
'AnnotationNodeStatus', 'Category', 'Context', 'DetectionStatus', 'ErrorConfiguration',
'ModelInformation', 'NodeState', 'NodeStatus', 'ModelVersionResponse',
'SocketResponse',
'Errors', 'PretrainedModel', 'TrainerState', 'Training',
'Errors', 'PretrainedModel', 'Training',
'TrainingError', 'TrainingOut', 'TrainingStateData', 'TrainingStatus',
]
12 changes: 1 addition & 11 deletions learning_loop_node/data_classes/annotations.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,14 @@
import sys
from dataclasses import dataclass
from enum import Enum
from typing import Optional, Union

from ..enums import AnnotationEventType
from .detections import Point, Shape
from .general import Category, Context

KWONLY_SLOTS = {'kw_only': True, 'slots': True} if sys.version_info >= (3, 10) else {}


class AnnotationEventType(str, Enum):
LeftMouseDown = 'left_mouse_down'
RightMouseDown = 'right_mouse_down'
MouseMove = 'mouse_move'
LeftMouseUp = 'left_mouse_up'
RightMouseUp = 'right_mouse_up'
KeyUp = 'key_up'
KeyDown = 'key_down'


@dataclass(**KWONLY_SLOTS)
class AnnotationData():
coordinate: Point
Expand Down
9 changes: 2 additions & 7 deletions learning_loop_node/data_classes/general.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,9 @@

from dacite import from_dict

KWONLY_SLOTS = {'kw_only': True, 'slots': True} if sys.version_info >= (3, 10) else {}

from ..enums import CategoryType

class CategoryType(str, Enum):
Box = 'box'
Point = 'point'
Segmentation = 'segmentation'
Classification = 'classification'
KWONLY_SLOTS = {'kw_only': True, 'slots': True} if sys.version_info >= (3, 10) else {}


@dataclass(**KWONLY_SLOTS)
Expand Down
22 changes: 1 addition & 21 deletions learning_loop_node/data_classes/training.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
import sys
import time
from dataclasses import dataclass, field
from enum import Enum
from pathlib import Path
from typing import Any, Dict, List, Optional
from uuid import uuid4

from ..enums import TrainerState
from ..helpers.misc import create_image_folder, create_training_folder
# pylint: disable=no-name-in-module
from .general import Category, Context
Expand All @@ -21,26 +21,6 @@ class PretrainedModel():
description: str


class TrainerState(str, Enum):
Idle = 'idle'
Initialized = 'initialized'
Preparing = 'preparing'
DataDownloading = 'data_downloading'
DataDownloaded = 'data_downloaded'
TrainModelDownloading = 'train_model_downloading'
TrainModelDownloaded = 'train_model_downloaded'
TrainingRunning = 'running'
TrainingFinished = 'training_finished'
ConfusionMatrixSyncing = 'confusion_matrix_syncing'
ConfusionMatrixSynced = 'confusion_matrix_synced'
TrainModelUploading = 'train_model_uploading'
TrainModelUploaded = 'train_model_uploaded'
Detecting = 'detecting'
Detected = 'detected'
DetectionUploading = 'detection_uploading'
ReadyForCleanup = 'ready_for_cleanup'


@dataclass(**KWONLY_SLOTS)
class TrainingStatus():
id: str # NOTE this must not be changed, but tests wont detect a change -> update tests!
Expand Down
9 changes: 1 addition & 8 deletions learning_loop_node/detector/detector_node.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import subprocess
from dataclasses import asdict
from datetime import datetime
from enum import Enum
from threading import Thread
from typing import Dict, List, Optional

Expand All @@ -19,6 +18,7 @@
ModelVersionResponse, Shape)
from ..data_classes.socket_response import SocketResponse
from ..data_exchanger import DataExchanger, DownloadError
from ..enums import OperationMode, VersionMode
from ..globals import GLOBALS
from ..helpers import environment_reader
from ..node import Node
Expand All @@ -32,13 +32,6 @@
from .rest import operation_mode as rest_mode
from .rest import outbox_mode as rest_outbox_mode
from .rest import upload as rest_upload
from .rest.operation_mode import OperationMode


class VersionMode(str, Enum):
FollowLoop = 'follow_loop' # will follow the loop
SpecificVersion = 'specific_version' # will follow the specific version
Pause = 'pause' # will pause the updates


class DetectorNode(Node):
Expand Down
7 changes: 1 addition & 6 deletions learning_loop_node/detector/outbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
from asyncio import Task
from dataclasses import asdict
from datetime import datetime
from enum import Enum
from glob import glob
from io import BufferedReader, TextIOWrapper
from multiprocessing import Event
Expand All @@ -20,15 +19,11 @@
from fastapi.encoders import jsonable_encoder

from ..data_classes import ImageMetadata
from ..enums import OutboxMode
from ..globals import GLOBALS
from ..helpers import environment_reader


class OutboxMode(Enum):
CONTINUOUS_UPLOAD = 'continuous_upload'
STOPPED = 'stopped'


class Outbox():
def __init__(self) -> None:
self.log = logging.getLogger()
Expand Down
11 changes: 2 additions & 9 deletions learning_loop_node/detector/rest/operation_mode.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,17 @@
import logging
from enum import Enum
from typing import TYPE_CHECKING

from fastapi import APIRouter, HTTPException, Request
from fastapi.responses import PlainTextResponse

from ...enums import OperationMode

if TYPE_CHECKING:
from learning_loop_node.detector.detector_node import DetectorNode

router = APIRouter()


class OperationMode(str, Enum):
Startup = 'startup' # used until model is loaded
Idle = 'idle' # will check and perform updates
Detecting = 'detecting' # Blocks updates

# NOTE: This is only ment to be used by a detector node


@router.put("/operation_mode")
async def put_operation_mode(request: Request):
'''
Expand Down
6 changes: 6 additions & 0 deletions learning_loop_node/enums/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from .annotator import AnnotationEventType
from .detector import OperationMode, OutboxMode, VersionMode
from .general import CategoryType
from .trainer import TrainerState

__all__ = ['VersionMode', 'OperationMode', 'OutboxMode', 'AnnotationEventType', 'CategoryType', 'TrainerState']
11 changes: 11 additions & 0 deletions learning_loop_node/enums/annotator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from enum import Enum


class AnnotationEventType(str, Enum):
LeftMouseDown = 'left_mouse_down'
RightMouseDown = 'right_mouse_down'
MouseMove = 'mouse_move'
LeftMouseUp = 'left_mouse_up'
RightMouseUp = 'right_mouse_up'
KeyUp = 'key_up'
KeyDown = 'key_down'
18 changes: 18 additions & 0 deletions learning_loop_node/enums/detector.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from enum import Enum


class VersionMode(str, Enum):
FollowLoop = 'follow_loop' # will follow the loop
SpecificVersion = 'specific_version' # will follow the specific version
Pause = 'pause' # will pause the updates


class OperationMode(str, Enum):
Startup = 'startup' # used until model is loaded
Idle = 'idle' # will check and perform updates
Detecting = 'detecting' # Blocks updates


class OutboxMode(Enum):
CONTINUOUS_UPLOAD = 'continuous_upload'
STOPPED = 'stopped'
9 changes: 9 additions & 0 deletions learning_loop_node/enums/general.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@

from enum import Enum


class CategoryType(str, Enum):
Box = 'box'
Point = 'point'
Segmentation = 'segmentation'
Classification = 'classification'
22 changes: 22 additions & 0 deletions learning_loop_node/enums/trainer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@

from enum import Enum


class TrainerState(str, Enum):
Idle = 'idle'
Initialized = 'initialized'
Preparing = 'preparing'
DataDownloading = 'data_downloading'
DataDownloaded = 'data_downloaded'
TrainModelDownloading = 'train_model_downloading'
TrainModelDownloaded = 'train_model_downloaded'
TrainingRunning = 'running'
TrainingFinished = 'training_finished'
ConfusionMatrixSyncing = 'confusion_matrix_syncing'
ConfusionMatrixSynced = 'confusion_matrix_synced'
TrainModelUploading = 'train_model_uploading'
TrainModelUploaded = 'train_model_uploaded'
Detecting = 'detecting'
Detected = 'detected'
DetectionUploading = 'detection_uploading'
ReadyForCleanup = 'ready_for_cleanup'
4 changes: 2 additions & 2 deletions learning_loop_node/tests/annotator/test_annotator_node.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@

from ...annotation.annotator_logic import AnnotatorLogic
from ...annotation.annotator_node import AnnotatorNode
from ...data_classes import (AnnotationData, AnnotationEventType, Category, CategoryType, Context, Point, ToolOutput,
UserInput)
from ...data_classes import AnnotationData, Category, Context, Point, ToolOutput, UserInput
from ...enums import AnnotationEventType, CategoryType


class MockedAnnotatatorLogic(AnnotatorLogic):
Expand Down
3 changes: 2 additions & 1 deletion learning_loop_node/tests/general/test_data_classes.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
from dacite import from_dict
from fastapi.encoders import jsonable_encoder

from ...data_classes import AnnotationData, AnnotationEventType, Category, Context, Point
from ...data_classes import AnnotationData, Category, Context, Point
from ...enums import AnnotationEventType

# Used by all Nodes

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import asyncio

from ....data_classes import TrainerState
from ....enums import TrainerState
from ....trainer.trainer_logic import TrainerLogic
from ...test_helper import get_dummy_detections
from ..state_helper import assert_training_state, create_active_training_file
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import asyncio
import os

from ....data_classes import TrainerState
from ....enums import TrainerState
from ... import test_helper
from ..state_helper import assert_training_state, create_active_training_file
from ..testing_trainer_logic import TestingTrainerLogic
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import asyncio

from ....data_classes import Context, TrainerState
from ....data_classes import Context
from ....enums import TrainerState
from ....trainer.trainer_logic import TrainerLogic
from ..state_helper import assert_training_state, create_active_training_file
from ..testing_trainer_logic import TestingTrainerLogic
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from pytest_mock import MockerFixture # pip install pytest-mock

from ....data_classes import TrainerState
from ....enums import TrainerState
from ....trainer.trainer_logic import TrainerLogic
from ....trainer.trainer_node import TrainerNode
from ..state_helper import assert_training_state, create_active_training_file
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from ....data_classes import TrainerState
from ....enums import TrainerState
from ...test_helper import condition
from ..state_helper import assert_training_state, create_active_training_file
from ..testing_trainer_logic import TestingTrainerLogic
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
import pytest
from dacite import from_dict

from ....data_classes import BoxDetection, Context, Detections, TrainerState
from ....data_classes import BoxDetection, Context, Detections
from ....enums import TrainerState
from ....loop_communication import LoopCommunicator
from ....trainer.trainer_logic import TrainerLogic
from ...test_helper import get_dummy_detections
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

from pytest_mock import MockerFixture

from ....data_classes import Context, TrainerState
from ....data_classes import Context
from ....enums import TrainerState
from ....trainer.trainer_logic import TrainerLogic
from ..state_helper import assert_training_state, create_active_training_file
from ..testing_trainer_logic import TestingTrainerLogic
Expand Down
2 changes: 1 addition & 1 deletion learning_loop_node/tests/trainer/test_errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

import pytest

from ...data_classes import TrainerState
from ...enums import TrainerState
from .state_helper import assert_training_state, create_active_training_file
from .testing_trainer_logic import TestingTrainerLogic

Expand Down
3 changes: 2 additions & 1 deletion learning_loop_node/tests/trainer/test_trainer_states.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@

from uuid import uuid4

from ...data_classes import Context, TrainerState, Training
from ...data_classes import Context, Training
from ...enums import TrainerState
from ...trainer.io_helpers import LastTrainingIO
from ...trainer.trainer_node import TrainerNode
from .testing_trainer_logic import TestingTrainerLogic
Expand Down
Loading

0 comments on commit 798fb45

Please sign in to comment.