
Security News
The Hidden Blast Radius of the Axios Compromise
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.
wh2api
Advanced tools
wh2api.shot_task.read(task_idx)
wh2api.asset_task.read(task_idx)
로직 변경
로그인 방식 변경
모듈
json 출력 포맷 변경
{
"shots": [
{ "shot_idx": "1", "name": "s0010_c0010", "shot_order": "1" },
{ "shot_idx": "2", "name": "s0010_c0020", "shot_order": "2" },
{ "shot_idx": "3", "name": "s0010_c0030", "shot_order": "3" },
{ "shot_idx": "4", "name": "s0010_c0040", "shot_order": "4" },
{ "shot_idx": "5", "name": "s0010_c0050", "shot_order": "5" },
{ "shot_idx": "6", "name": "s0010_c0060", "shot_order": "6" },
{ "shot_idx": "7", "name": "s0010_c0070", "shot_order": "7" },
{ "shot_idx": "8", "name": "s0010_c0080", "shot_order": "8" },
{ "shot_idx": "9", "name": "s0010_c0090", "shot_order": "9" },
{ "shot_idx": "10", "name": "s0010_c0100", "shot_order": "10" }
{
"shots": [
{ "idx": "1", "name": "s0010_c0010", "order": "1" },
{ "idx": "2", "name": "s0010_c0020", "order": "2" },
{ "idx": "3", "name": "s0010_c0030", "order": "3" },
{ "idx": "4", "name": "s0010_c0040", "order": "4" },
{ "idx": "5", "name": "s0010_c0050", "order": "5" },
{ "idx": "6", "name": "s0010_c0060", "order": "6" },
{ "idx": "7", "name": "s0010_c0070", "order": "7" },
{ "idx": "8", "name": "s0010_c0080", "order": "8" },
{ "idx": "9", "name": "s0010_c0090", "order": "9" },
{ "idx": "10", "name": "s0010_c0100", "order": "10" }
]
}
삭제 getdata = urllib3.request.urlencode(data)
수정 전 result = http.request('Get', url=wh.Login.url + api + '?'+ gestdata, headers={"cookie":wh_token})
수정 후 result = http.request('Get', url=wh.Login.url + api + '?',fields=data, headers={"cookie":wh_token})
웜홀 api는 python3이상에서 원활하게 작동 됩니다. pip의 최신버전으로 업데이트 후 설치 하시기 바랍니다.
pip install --upgrade pip
pip패키지 install(필수)
pip install wh2api #웜홀 API
pip install requests
pip install json
from wh2api import wh
import wh2api
wh.Login('http://host','id','pw')
#로그인 성공시 whtoken을 "Login.whtoken"라는 클래스 변수로 가지고 있음
wh.Login('http://host','id',wh_token = "login_token")
#로그인 성공시 받은 wh_token을 넣으면 로그인이됨
#사용방법
wh = wh.Login('http://host','id','pw')
wh_token = wh.whtoken['whtoken']
#토큰을 아는경우
wh = wh.Login('http://host','id',wh_token = wh_token)
wh2api.project.list(finished="")
# finished = '1' 끝난 프로젝트도 조회
# 웜홀에 있는 모든 프로젝트를 조회
wh2api.project.read(project_idx)
#Porject의 상세 내용 조회
#버전업 및 퍼블리시 저장 경로 조회
#진행 상황 조회
wh2api.episode.list(project_idx)
#프로젝트 내부 에피소드 리스트 조회
wh2api.episode.create(project_idx,episode_name,description="")
#에피소드 생성
wh2api.sequence.list(project_idx,episode_idx)
#에피소드 내부 시퀀스 리스트 조회
wh2api.shot.list(project_idx,episode_idx,sequence_idx)
#시퀀스 내부 샷 리스트 조회
wh2api.shot.read(shot_idx)
#특정 샷의 세부내용 조회
wh2api.shot.create(project_idx,episode_idx,sequence_idx,shot_name,description="",status_idx="1")
#샷 생성
#status_idx 비어있을때 기본값 1번
wh2api.shot.thumbnail_update(project_idx,shot_idx,thumbnail_path)
#특정샷의 썸네일 업로드
#Thubmnail_path 입력시 윈도우는 'r'을 붙혀서 업로드 해야 오류 없음
#ex) r'H:\c2mosnter\test.jpg'
#지원 포맷 *.jpg, *.png
wh2api.shot.overview(project_idx,episode_idx="")
#overview페이지 조회
#episode가 비어있는경우 프로젝트 전체조회
wh2api.shot.relation(project_idx, which,which_idx)
'''
샷에 연결된 Asset 리스트 출력하기
:param project_idx:프로젝트 인덱스
:param which: 'episode,sequence,shot'중 선택
:param which_idx:which의 인덱스 입력
:return:
'''
#샷에 연관된 에셋의 목록 조회
#웜홀의 Relation페이지 연동
wh2api.shot.last_version_list(episode_idx)
'''
에피소드에 포함된 모든 샷의 마지막 버전 정보 취득
:param episode_idx: 에피소드 인덱스
:return:
'''
wh2api.shot_task.list(project_idx,shot_idx)
#샷 내부의 Task조회
wh2api.shot_task.create(project_idx,shot_idx,tasktype_name)
#샷내부에 Task 생성
#중복 될경우 에러 발생
wh2api.shot_task.bulk_create(project_idx,shot_idx=[],tasktype_name=[])
#shot_idx와 tasktype_name을 똑같은 수를 배열로 보내야함
#ex)
shot_idx = [1,1,1,1,2,2,2,2]
tasktype = ['comp','animation','fx','final','comp','animation','fx','final']
#인덱스가 1,2번인 샷에 'comp','animation','fx','final' 4개의 테스크를 각각 등록
wh2api.shot_task.status_change(project_idx,task_idx,status_idx)
#특정 Task의 Task Staus를 변경
wh2api.shot_task.start(project_idx,task_idx)
#Task Start(MyTask>Todo)
wh2api.shot_task.stop(project_idx,task_idx)
#Task Stop(MyTask>Todo)
wh2api.category.list(project_idx)
#프로젝트 내부에 Asset의 Category조회
wh2api.category.create(project_idx,category_name,description="")
#Category생성
wh2api.asset.list(project_idx,category_idx)
#특정 Category의 Asset 조회
wh2api.asset.read(asset_idx)
#특정 에셋의 세부내용 조회
wh2api.asset.create(project_idx,category_idx,asset_name,description="",status_idx="1")
#Asset생성
wh2api.asset.thumbnail_update(project_idx,asset_idx,thumbnail_path)
#특정 Asset의 썸네일 업로드
#Thubmnail_path 입력시 윈도우는 'r'을 붙혀서 업로드 해야 오류 없음
#ex) r'H:\c2mosnter\test.jpg'
#지원 포맷 *.jpg, *.png
wh2api.asset.overview(project_idx,category_idx="")
#Asset Overview조회
wh2api.asset_task.list(project_idx,asset_idx)
#에셋 내부의 Task조회
wh2api.asset_task.create(project_idx,asset_idx,tasktype_name)
#에셋내부에 Task 생성
#중복 될경우 에러 발생
wh2api.asset_task.bulk_create(project_idx,asset_idx=[],tasktype_name=[])
#asset_idx와 tasktype_name을 똑같은 수를 배열로 보내야함
#ex)
tasktype = ['concept','modeling','texture','lodev','concept','modeling','texture','lodev']
#인덱스가 1,2번인 에셋에 'concept','modeling','texture','lodev' 4개의 테스크를 각각 등록
wh2api.asset_task.status_change(project_idx,task_idx,status_idx)
#특정 Task의 Task Staus를 변경
wh2api.asset_task.start(project_idx,task_idx)
#Task Start(MyTask>Todo)
wh2api.asset_task.stop(project_idx,task_idx)
#Task Stop(MyTask>Todo)
wh2api.version.key(task_idx, which='shot or asset')
#특정 Task의 Key를 얻어내는 함수
#Version_key생성
wh2api.version.key_read(version_key)
#Version_key 정보 조회
wh2api.version.create(task_idx='',
which='shot or asset',
version_name='',
task_status_idx='',
version_status_idx='',
reviewer_user_idx='',
hour_spent='',
version_path=[],
metadata= [],
description="",
cc_user_idx='',
thumbnail_path = ""):
# 윈도우의경우 version Path입력시 'r'을 입력
#ex) version_path = r'c:\\c2monster\test.mov'
# 지원 *.mp4
# 서버에서 컨버팅 하는 과정이 없기때문에 업로드하는 버전의 용량이 클 경우 플레이가 안될 수 있음
#참조 인원 cc_user_idx=[1,2,3]
# #version_path와 metadata의 리스트의 개수와 순서는 같아야 합니다.
# version_path = ['a','b','c']
# metadata = ['a_meta','b_meta','c_meta']
wh2api.user.list()
#웜홀에 가입되있는 유저 조회
wh2api.team.list()
#Team의 목록 조회
wh2api.team.user_list(team_idx)
#선택한 Team안에 있는 User조회
wh2api.mytask.todo(observed_user_idx="")
#observed_user_idx가 공백인경우 본인
#observed_user_idx에 User_idx를 추가할 경우 해당 인원의 MyTask조회
wh2api.mytask.inprogress(last="")
#last입력시 마지막 버전만 조회
wh2api.mytask.done()
#끝난Task조회
wh2api.mytask.cc(last="")
#last입력시 마지막 버전만 조회
wh2api.org.read(org_id='std')
#std가 기본값임
#System information 정보 조회 가능
wh2api.publish.key(task_idx, which='shot or asset')
#which는 'shot' 또는 'asset'이라고 입력 합니다.
wh2api.publish.key_read(publish_key)
#퍼블리시키의 상세정보 조회
#퍼블리시 생성시 사용
wh2api.publish.create(task_idx='',
which='shot or asset',
version_idx='',
publish_name ='',
task_status_idx='',
version_status_idx='',
publish_path=[],
description='',
tag=''):
#필수 입력값 : Task_idx,which,version_idx,Task_Status_idx,Version_status_idx,Publish_path
#publish_Path는 유효성 겁사를 진행, 해당경로에 파일이나 폴더가 없다면 리스트에서 제외한 후 진행합니다.
# publish_path의 유효성 검사 중, 한개의 파일 또는 폴더가 없다면 프로세스는 종료 됩니다.
Wormhole의 Track페이지에 나오는 항목을 조회
wh2api.track.version(projectidx=int
from_date="yy-mm-dd",
to_date="yy-mm-dd",
last=""
)
'''
:param project_idx:프로젝트 index
:param from_date: 시작일정
:param to_date: 종료일정
:param last: 마지막 버전만 확인하고 싶을땐 "last"입력
:return:
'''
wh2api.track.shot_task(project_idx,episode_idx,sequence_idx="all",page=1)
'''
:param project_idx:프로젝트 인덱스
:param episode_idx: 에피소드 인덱스
:param sequence_idx: 필요시 인덱스 입력
:param page: 기본값 1페이지
{'next_data': False, 'page': 2 }으로 다음페이지여부가 표시됨
:return:
'''
wh2api.track.asset_task(project_idx,category_idx='all',page=1)
'''
:param project_idx: 프로젝트 인덱스
:param category_idx: 필요시 카테고리 인덱스 입력
:param page: 기본값1페이지
{'next_data': False, 'page': 2 }으로 다음페이지여부가 표시됨
:return:
'''
c2monster는 영화 드라마 제작을 위한 소프트웨어를 개발하는 회사 입니다.
E-mail : wfjo852@c2monster.com , contact@c2monster.com
FAQs
wormhole API for Python
We found that wh2api demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.

Research
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.

Research
Malicious versions of the Telnyx Python SDK on PyPI delivered credential-stealing malware via a multi-stage supply chain attack.