MantisThrift

MantisへSOAP通信でデータの登録を行うMantisConnectをThrift化してみました。

元記事

ThriftでMantisConnectの代わりのサービスを作成 ベータ版

ソース

phpのモジュールとthriftファイル
mantis_thrift001.zip

使い方

mantisが稼働しているサーバーにmantis_thrift001.zipを解凍した内容をコピーします。
コピーする位置は、/var/www/mantis/api/

http://mants_server.example.com/mantis/api/thrift/mantisthrift.php

このURLでthriftからアクセスします。

サンプルプログラム

解凍したフォルダのconf/mantisthrift.thriftが使用している定義体です。
thriftコマンドで雛形を出力すれば任意の言語でmantisthriftにアクセスできます。

例として、pythonからアクセスしてみます。
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import sys
sys.path.append('./gen-py')

from mantisthrift import MantisThrift
from mantisthrift.ttypes import *

#お決まりのimport
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.transport import THttpClient


try:
    transport = THttpClient.THttpClient("http://www.example.com/mantis/api/thrift/mantisthrift.php")
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    
    client = MantisThrift.Client(protocol)
    transport.open()
    
    #指定したmt_versionメソッドを呼び出す
    version = client.mt_version()
    print version
    
    #指定したIDの案件が存在するか
    if client.mt_issue_exists("administrator", "password", 1):
        print "exist"
    else:
        print "not exist"
    
    #指定した案件データの取得
    r = client.mt_issue_get("administrator", "password", 1)
    print r.id
    print r.view_state.id
    print unicode(r.view_state.name, 'utf-8')
    print r.last_updated
    
    #新規案件の登録
    issue = IssueData()
    objref = ObjectRef()
    objref.id = 2
    issue.project = objref
    issue.category = 'その他'
    issue.summary = 'お問い合わせタイトル'
    issue.description = "お問い合わせ本文\n改行\n改行\n改行\n改行"
    
    print client.mt_issue_add("administrator", "password", issue)
    
    #ファイルの登録
    f = open('test.xls','rb')
    content = f.read()
    f.close()
    
    print client.mt_issue_attachment_add("administrator", "password", 1, "test.xls", 'application/vnd.ms-excel', content)
    
    #後始末
    transport.close()
    

#except Thrift.TException, tx:
except ThriftException,tx:
    print "error!"
    print tx.faultcode
    print tx.faultactor
    print tx.faultstring

実装状況


MantisConnectの全メソッドは実装できてません。
実装状況は以下の通り。
MantisConnectのメソッドMantisThriftの対応メソッド機能戻り値の例
mc_versionmt_versionMantis本体のバージョン1.1.8
mc_enum_statusmt_enum_statusステータス10 新規、20 フィードバック、30 内容確認済
mc_enum_prioritiesmt_enum_priorities優先度10 未定、20 低、30 中
mc_enum_severitiesmt_enum_severities重要度10 要望、20 些細な、30 表示
mc_enum_reproducibilitiesmt_enum_reproducibilities再現性10 毎回、30 時々、50 不定
mc_enum_projectionsmt_enum_projections修正方法10 未定、30 些細な修正、50 小さな修正
mc_enum_etasmt_enum_etas予定工数10 未定、20 1日以内、30 2~3日
mc_enum_resolutionsmt_enum_resolutions解決状況10 不明、20 実装済、30 差戻し
mc_enum_access_levelsmt_enum_access_levelsアクセス権10 参照、25 レポーター、40 編集者
mc_enum_project_statusmt_enum_project_statusプロジェクトステータス10 開発、30 リリース
mc_enum_project_view_statesmt_enum_project_view_statesプロジェクトの公開10 公開、50 非公開
mc_enum_view_statesmt_enum_view_states案件の公開状況10 公開、50 非公開
mc_enum_custom_field_typesmt_enum_custom_field_typesカスタム項目0 文字列、1 整数、2 浮動小数点
mc_enum_getmt_enum_get列挙体の取得-
mc_issue_existsmt_issue_exists案件の存在チェックtrue:false
mc_issue_getmt_issue_get案件情報の取得Issueオブジェクト
mc_issue_get_biggest_idmt_issue_get_biggest_id指定したプロジェクトの中で最大の懸案IDを取得2
mc_issue_get_id_from_summarymt_issue_get_id_from_summary要約でプロジェクトのIDを検索する1
mc_issue_addmt_issue_add案件を追加追加した案件のID
mc_issue_updatemt_issue_update案件を更新 
mc_issue_deletemt_issue_delete案件を削除 
mc_issue_note_addmt_issue_note_addコメントを追加 
mc_issue_note_deletemt_issue_note_deleteコメントを削除 
mc_issue_relationship_addmt_issue_relationship_add関連を追加 
mc_issue_relationship_deletemt_issue_relationship_delete関連を削除 
mc_issue_attachment_addmt_issue_attachment_addファイルを添付 
mc_issue_attachment_deletemt_issue_attachment_delete添付ファイルを削除 
mc_issue_attachment_getmt_issue_attachment_get添付ファイルの取得 
mc_project_add(未実装)  
mc_project_delete(未実装)  
mc_project_get_issues(未実装)  
mc_project_get_issue_headers(未実装)  
mc_project_get_users(未実装)  
mc_projects_get_user_accessible(未実装)  
mc_project_get_categories(未実装)  
mc_project_get_versions(未実装)  
mc_project_version_add(未実装)  
mc_project_version_update(未実装)  
mc_project_version_delete(未実装)  
mc_project_get_released_versions(未実装)  
mc_project_get_unreleased_versions(未実装)  
mc_project_get_attachments(未実装)  
mc_project_get_custom_fields(未実装)  
mc_project_attachment_get(未実装)  
mc_project_attachment_add(未実装)  
mc_project_attachment_delete(未実装)  
mc_filter_get(未実装)  
mc_filter_get_issues(未実装)  
mc_filter_get_issue_headers(未実装)  
mc_config_get_string(未実装)  
mc_issue_checkin(未実装)  

TOPページへ戻る inserted by FC2 system