람다 플러그인 Python

모듈명

《Python Interpreter》 를 직접 실행 했을 경우 __main__ 모듈로 으로 실행되는 루틴과 구분하기 위해 《엔서》 의 람다는 《Answer Python Plugin》 의 약자인 __app__ 을 사용합니다. 다음과 같은 진입점을 추가할 수 있습니다.

1if __name__ == '__app__'
2    pass

참고

이 기능은 1.1.8 버전 부터 작동 합니다.

on_set

1def on_set(key, val):
2    pass

속성 값을 변경 할 때 발생되는 이벤트 입니다.

on_get

1def on_get(key):
2    return ''

속성 값을 획득 할 때 발생되는 이벤트 입니다.

on_init

1def on_init():
2    return True

람다가 생성된 후 초기화 할 때 호출됩니다.

반환 값이 True 가 아닐 경우 람다 초기화를 종료합니다.

on_valid

1def on_valid():
2    return True

람다의 정합성을 확인합니다.

반환 값이 True 가 아닐 경우 람다를 실행하지 못합니다.

on_run

1def on_run(array):
2    return {
3        "result": array[slices]
4    }

람다를 실행할 구현부 입니다. (위의 예제는 array 입력과 result 출력을 갖는 람다 입니다.)

JSONcontrols.input 슬롯 이름을 인자로 구현해야 합니다.

또한 JSONcontrols.output 슬롯 이름을 키 값으로 dict 타입을 반환해야 합니다.

on_destroy

1def on_destroy():
2    pass

람다가 소멸될 때 호출됩니다.

Full example

다음은 numpy slice 예제 입니다.

 1# -*- coding: utf-8 -*-
 2
 3import numpy as np
 4
 5slices = list()
 6
 7
 8def int_or_none(val):
 9    return int(val) if val else None
10
11
12def str_to_slice(val):
13    result = list()
14    for s in str(val).split(':'):
15        result.append(int_or_none(s))
16    return result
17
18
19def str_to_slices(val):
20    result = list()
21    for s in str(val).split(','):
22        result.append(str_to_slice(s))
23    return result
24
25
26def slice_to_str(val):
27    if len(val) == 0:
28        return '::'
29    elif len(val) == 1:
30        return str(val[0])
31    elif len(val) == 2:
32        return f'{val[0]}:{val[1]}'
33    elif len(val) == 3:
34        return ','.join(val)
35    else:
36        raise IndexError('A slice must have 3 or fewer elements.')
37
38
39def slices_to_str(val):
40    ','.join(list(slice_to_str(x) for x in val))
41
42
43def on_set(key, val):
44    if key == 'slices':
45        global slices
46        slices = str_to_slices(val)
47
48
49def on_get(key):
50    if key == 'slices':
51        return slices_to_str(slices)
52
53
54def on_init():
55    return True
56
57
58def on_valid():
59    return True
60
61
62def on_run(array):
63    return {
64        "result": array[slices]
65    }
66
67
68def on_destroy():
69    pass
70
71
72if __name__ == '__app__':
73    pass