mirror of
https://github.com/OpenSPG/openspg.git
synced 2025-07-28 11:32:37 +00:00
84 lines
1.7 KiB
Python
84 lines
1.7 KiB
Python
from abc import ABC
|
|
from enum import Enum
|
|
from typing import Union
|
|
|
|
from knext.component.base import Component, ComponentTypeEnum
|
|
|
|
|
|
class ComponentLabelEnum(str, Enum):
|
|
SourceReader = "SOURCE_READER"
|
|
Extractor = "EXTRACTOR"
|
|
Mapping = "MAPPING"
|
|
Evaluator = "EVALUATOR"
|
|
SinkWriter = "SINK_WRITER"
|
|
|
|
|
|
class BuilderComponent(Component, ABC):
|
|
@property
|
|
def type(self):
|
|
return ComponentTypeEnum.Builder
|
|
|
|
@property
|
|
def input_keys(self):
|
|
return
|
|
|
|
@property
|
|
def output_keys(self):
|
|
return
|
|
|
|
|
|
class SourceReader(BuilderComponent, ABC):
|
|
@property
|
|
def upstream_types(self):
|
|
return None
|
|
|
|
@property
|
|
def downstream_types(self):
|
|
return Union[SPGExtractor, Mapping]
|
|
|
|
@property
|
|
def label(self):
|
|
return ComponentLabelEnum.SourceReader
|
|
|
|
|
|
class SPGExtractor(BuilderComponent, ABC):
|
|
@property
|
|
def upstream_types(self):
|
|
return Union[SourceReader, SPGExtractor]
|
|
|
|
@property
|
|
def downstream_types(self):
|
|
return Union[SPGExtractor, Mapping]
|
|
|
|
@property
|
|
def label(self):
|
|
return ComponentLabelEnum.Extractor
|
|
|
|
|
|
class Mapping(BuilderComponent, ABC):
|
|
@property
|
|
def upstream_types(self):
|
|
return Union[SourceReader, SPGExtractor]
|
|
|
|
@property
|
|
def downstream_types(self):
|
|
return Union[SinkWriter]
|
|
|
|
@property
|
|
def label(self):
|
|
return ComponentLabelEnum.Mapping
|
|
|
|
|
|
class SinkWriter(BuilderComponent, ABC):
|
|
@property
|
|
def upstream_types(self):
|
|
return Union[Mapping]
|
|
|
|
@property
|
|
def downstream_types(self):
|
|
return None
|
|
|
|
@property
|
|
def label(self):
|
|
return ComponentLabelEnum.SinkWriter
|