⑴ 임포트 플러그인

Upload(임포트) 플러그인의 역할, 입력 계약, 기본 구현, 전처리 단계, 사용자 입력 옵션 선언 방법

Upload(임포트) 플러그인이 스토리지 파일을 검증하고 Synapse 데이터유닛으로 생성하는 흐름을 구현합니다.


진행 순서


  1. 임포트 플러그인의 역할을 확인합니다.
  2. 업로드 파일의 입력 계약을 확인합니다.
  3. 기본 임포트 플러그인 코드를 구현합니다.
  4. 필요한 경우 전처리 단계를 추가합니다.
  5. 필요한 경우 사용자 입력 옵션을 config.yaml에 선언합니다.

1. 임포트 플러그인 역할 확인


Upload(임포트) 플러그인은 파일 수집, 검증, 업로드, 데이터유닛 생성을 처리합니다.

기본 골격이 표준 업로드 절차를 포함하므로, 일반적인 임포트 플러그인은 필요한 제한 조건과 전처리 로직만 추가해서 구현할 수 있습니다.

처리 단계설명
파일 수집스토리지에서 임포트 대상 파일을 가져옵니다.
파일 검증데이터 컬렉션에 정의된 파일 사양에 맞는지 확인합니다.
파일 업로드검증된 파일을 업로드합니다.
데이터유닛 생성업로드된 파일을 Synapse 데이터유닛으로 생성합니다.

2. 파일 사양 확인하기


업로드되는 파일은 데이터 컬렉션에 정의된 파일 사양(file specification) 과 맞아야 합니다.

검증 대상에는 허용 확장자, 파일 크기 제한, 필수 파일 존재 여부가 포함됩니다.

항목설명
허용 확장자파일 사양별로 업로드 가능한 확장자를 제한합니다.
파일 크기기본 파일 크기 제한은 50 MB입니다. 옵션으로 조정할 수 있습니다.
필수 파일데이터유닛 생성에 필요한 파일이 모두 있는지 확인합니다.
파일 그룹같은 파일명 stem을 가진 파일은 하나의 데이터유닛으로 묶입니다.
중복 파일중복 파일은 자동으로 건너뛰며 실패로 처리하지 않습니다.

예를 들어 0001.jpg0001.pcd는 파일명 stem이 0001로 같기 때문에 하나의 데이터유닛으로 생성됩니다.

📘

파일명 stem 기준

파일명 stem은 확장자를 제외한 파일 이름입니다. 임포트 플러그인은 같은 stem을 가진 파일을 하나의 데이터유닛으로 묶습니다.


3. 기본 임포트 플러그인 구현


기본 구현에서는 DefaultUploadActionUploadParams를 사용합니다.

최소 임포트 플러그인은 허용 확장자만 정의해도 동작할 수 있습니다.

from synapse_sdk.plugins.actions.upload import DefaultUploadAction, UploadParams

class UploadAction(DefaultUploadAction[UploadParams]):
    action_name = 'upload'
    params_model = UploadParams

    def get_allowed_extensions(self):
        return {'image': ['.jpg', '.jpeg', '.png']}

코드 구성

항목설명
DefaultUploadAction표준 업로드 절차를 제공하는 베이스 클래스입니다.
UploadParams업로드 액션에서 사용하는 기본 파라미터 모델입니다.
get_allowed_extensions파일 사양별 허용 확장자를 반환합니다.

4. 전처리 단계 추가


표준 업로드 흐름 중간에 플러그인별 전처리 단계를 추가할 수 있습니다.

기본 업로드 절차를 유지하려면 먼저 super().setup_steps(registry)를 호출한 뒤, 원하는 위치에 커스텀 단계를 삽입합니다.

def setup_steps(self, registry):
    super().setup_steps(registry)
    registry.insert_after('organize_files', MyPreprocessStep())
📘

전처리 단계 추가 기준

기본 업로드 흐름을 유지하려면 super().setup_steps(registry)를 먼저 호출하세요. 이후 registry.insert_after(...)를 사용해 필요한 위치에 커스텀 전처리 단계를 추가합니다.


5. 사용자 입력 옵션 선언


플러그인 전용 옵션은 config.yamlui_schema에 선언합니다.

스토리지, 경로, 데이터 컬렉션처럼 플랫폼에서 공통으로 처리하는 입력값은 ui_schema에 추가하지 않습니다.

actions:
  upload:
    entrypoint:plugin.upload.UploadAction
    method:job
    ui_schema:
    -$formkit:text
      name:frame_per_second
      label:초당 추출 프레임 수
      required:false

사용자가 입력한 값은 실행 시 다음 경로로 전달됩니다.

context.params['extra_params']
⚠️

주의사항

스토리지, 경로, 데이터 컬렉션처럼 플랫폼에서 공통으로 제공하는 입력값은 ui_schema에 선언하지 마세요.

ui_schema에는 플러그인에서만 필요한 고유 옵션만 선언합니다.



Did this page help you?