[Python] Redmine API 사용법

반응형

redmine이란?

Redmine(레드 마인)은 오픈소스(Open Source) 웹 기반의 프로젝트 관리 도구입니다. 프로젝트를 생성하고, 프로젝트 내에서 일감을 추가하여 작성하고, 일감끼리 서로 연결하여 정리가 가능합니다. 또한, 일이 어떻게 진행되고 있는지 달력 형태 또는 그래프 형태로 시각화하여 볼 수 도 있고, 검색하여 일감을 찾을 수 도있습니다. 

 

[Tools] - Redmine 페이지에서 레드 마인에 대해 자세히 설명하였습니다.

 

[Python] Redmine API란?

먼저, API(Application Programming Interface)는 응용 프로그램을 프로그래밍 언어를 통해 제어할 수 있는 인터페이스를 의미합니다.

Pyhon Redmine API는 Python 언어를 통해 Redmine에서 해야 할 일들을 프로그래밍으로 제어할 수 있는 기능을 의미합니다. 기초적인 사용법은 Python-Redmine 페이지에 자세히 나와있습니다.

 

Install

python redmine api 설치

pip install python-redmine

 

Redmine API 기초 사용법

redmine 라이브러리(redminelib)를 import 하고, redmine 객체를 사용해서 레드 마인에 파일을 업로드하고, 다운로드하는 방법을 알아보겠습니다.

 

python을 이용해 redmine api를 사용하기 위해선 레드 마인의 Key값이 필요합니다.

API 접근키 가져오기

레드 마인에서 [내 계정 -> API 접근키 -> 보기]를 누르면, API 접근 키값이 나옵니다. 

 

from redminelib import Redmine
import argparse

parser = argparse.ArgumentParser(description="Redmine upload or download")
parser.add_argument('-m','--mode',dest='Mode',help='download or upload',required=True)
parser.add_argument('-i','--id',dest='ID',help='redmine job id',required=True)
parser.add_argument('-p','--path',dest='Path',help='if download save path,or upload file path(Up to the directory name containing the file)',required=True)
parser.add_argument('-n','--name',dest='Name',help='if upload,need to specify filename',required=False)
args=parser.parse_args()

mode = args.Mode
jid = args.ID
path = args.Path
filename = args.Name

redmine = Redmine('[레드마인 주소]', key='[API 접근키]')

# need uploading file's path, name
def upload(jid,path,filename):
    redmine.issue.update(jid, uploads = [{"path" : path+"/"+filename, "filename" : filename}])

def download(jid,path):
    redmine_page = list(redmine.issue.get(jid,include='attachments'))
    file_li = dict(subject for subject in redmine_page if subject[0]=='attachments')['attachments']
    file_dict = dict((file['filename'],file['content_url']) for file in file_li)
    filename,content_url = list(file_dict.items())[0]
    redmine.download(content_url, savepath = path, filename=filename)

if mode.lower() == 'download':
    download(jid,path)
elif mode.lower() == 'upload':
    upload(jid,path,filename)

위 코드에서 [레드 마인 주소]와 [API 접근키]를 채우고 redmine.py라는 python 파일로 저장합니다.

python 3.6을 기준으로 하였으며, redminelib 라이브러리와 argparse 라이브러리가 있어야 합니다. (argparse 라이브러리는 기본으로 제공. 없으면 pip install argparse)

 

  • 코드 간단 설명

[레드 마인 주소]와 [API 접근키]를 사용하여 redmine 객체를 생성합니다. redmine 객체는 레드 마인 홈페이지의 모든 프로젝트, 일감에 접근할 수 있습니다. upload 함수는 서버에서 파일을 레드 마인 홈페이지의 특정 일감에 바로 업로드할 수 있게 해주는 함수입니다. download 함수는 레드 마인 홈페이지의 특정 일감 번호를 지정하여, 가장 처음에 올라온 파일(레드 마인 일감에서 가장 상위에 존재하는 파일)을 다운로드해주는 함수입니다. (수정해서 file name을 지정하게 할 수 도있습니다.)

 

  • 명령어
python redmine.py -m upload -i [레드마인 일감번호] -p [업로드할 파일의 경로] -n [업로드할 파일 이름]
python redmine.py -m download  -i [레드마인 일감번호] -p [파일 저장할 경로] #해당 일감에서 가장 상위에 있는 파일을 다운로드

위 명령어를 사용하면 업로드하고자 하는 파일을 레드 마인 일감에 업로드하는 것을 자동화할 수 있습니다. 또한, 여러 일감에서 제일 처음 올라온 파일을 일괄적으로 다운로드하고자 할 때는, 일감 번호 list를 생성하여 위 명령어(download)를 통해 일괄적으로 다운로드할 수 있습니다.

반응형

댓글

Designed by JB FACTORY