ソースを参照

REST API: Added Wekan REST API Python CLI, for adding card, downloading attachments etc.

Thanks to xet7 !

Related #1482
Lauri Ojansivu 4 年 前
コミット
051f7b2769
1 ファイル変更265 行追加0 行削除
  1. 265 0
      api.py

+ 265 - 0
api.py

@@ -0,0 +1,265 @@
+#! /usr/bin/env python3
+# -*- coding: utf-8 -*-
+# vi:ts=4:et
+
+# Wekan API Python CLI, originally from here, where is more details:
+# https://github.com/wekan/wekan/wiki/New-card-with-Python3-and-REST-API
+
+try:
+    # python 3
+    from urllib.parse import urlencode
+except ImportError:
+    # python 2
+    from urllib import urlencode
+
+import json
+import requests
+import sys
+
+arguments = len(sys.argv) - 1
+
+if arguments == 0:
+    print("=== Wekan API Python CLI: Shows IDs for addcard ===")
+    print("AUTHORID is USERID that writes card.")
+    print("If *nix:  chmod +x api.py => ./api.py users")
+    print("Syntax:")
+    print("  python3 api.py users              # All users")
+    print("  python3 api.py boards USERID      # Boards of USERID")
+    print("  python3 api.py board BOARDID      # Info of BOARDID")
+    print("  python3 api.py swimlanes BOARDID  # Swimlanes of BOARDID")
+    print("  python3 api.py lists BOARDID      # Lists of BOARDID")
+    print("  python3 api.py createlist BOARDID LISTTITLE # Create list")
+    print("  python3 api.py addcard AUTHORID BOARDID SWIMLANEID LISTID CARDTITLE CARDDESCRIPTION")
+    print("  python3 api.py listattachments BOARDID # List attachments")
+# TODO:
+#    print("  python3 api.py attachmentdownload BOARDID ATTACHMENTID # One attachment as file")
+#    print("  python3 api.py attachmentsdownload BOARDID # All attachments as files")
+    exit
+
+# ------- SETTINGS START -------------
+
+# Username is your Wekan username or email address.
+# OIDC/OAuth2 etc uses email address as username.
+
+username = 'testtest'
+
+password = 'testtest'
+
+wekanurl = 'http://localhost:4000/'
+
+# ------- SETTINGS END -------------
+
+"""
+EXAMPLE:
+
+python3 api.py
+
+OR:
+chmod +x api.py
+./api.py
+
+=== Wekan API Python CLI: Shows IDs for addcard ===
+AUTHORID is USERID that writes card.
+Syntax:
+  python3 api.py users              # All users
+  python3 api.py boards USERID      # Boards of USERID
+  python3 api.py board BOARDID      # Info of BOARDID
+  python3 api.py swimlanes BOARDID  # Swimlanes of BOARDID
+  python3 api.py lists BOARDID      # Lists of BOARDID
+  python3 api.py createlist BOARDID LISTTITLE # Create list
+  python3 api.py addcard AUTHORID BOARDID SWIMLANEID LISTID CARDTITLE CARDDESCRIPTION
+  python3 api.py listattachments BOARDID # List attachments
+  python3 api.py attachmentjson BOARDID ATTACHMENTID # One attachment as JSON base64
+  python3 api.py attachmentbinary BOARDID ATTACHMENTID # One attachment as binary file
+
+=== USERS ===
+
+python3 api.py users
+
+=> abcd1234
+
+=== BOARDS ===
+
+python3 api.py boards abcd1234
+
+
+=== SWIMLANES ===
+
+python3 api.py swimlanes dYZ
+
+[{"_id":"Jiv","title":"Default"}
+]
+
+=== LISTS ===
+
+python3 api.py lists dYZ
+
+[]
+
+There is no lists, so create a list:
+
+=== CREATE LIST ===
+
+python3 api.py createlist dYZ 'Test'
+
+{"_id":"7Kp"}
+
+#  python3 api.py addcard AUTHORID BOARDID SWIMLANEID LISTID CARDTITLE CARDDESCRIPTION
+
+python3 api.py addcard ppg dYZ Jiv 7Kp 'Test card' 'Test description'
+
+=== LIST ATTACHMENTS WITH DOWNLOAD URLs ====
+
+python3 api.py listattachments BOARDID
+
+"""
+
+# ------- API URL GENERATION START -----------
+
+loginurl = 'users/login'
+wekanloginurl = wekanurl + loginurl
+apiboards = 'api/boards/'
+apiattachments = 'api/attachments/'
+apiusers = 'api/users'
+e = 'export'
+s = '/'
+l = 'lists'
+sw = 'swimlane'
+sws = 'swimlanes'
+cs = 'cards'
+bs = 'boards'
+atl = 'attachmentslist'
+at = 'attachment'
+ats = 'attachments'
+users = wekanurl + apiusers
+
+# ------- API URL GERENARTION END -----------
+
+# ------- LOGIN TOKEN START -----------
+
+data = {"username": username, "password": password}
+body = requests.post(wekanloginurl, data=data)
+d = body.json()
+apikey = d['token']
+
+# ------- LOGIN TOKEN END -----------
+
+if arguments == 7:
+
+    if sys.argv[1] == 'addcard':
+        # ------- WRITE TO CARD START -----------
+        authorid = sys.argv[2]
+        boardid = sys.argv[3]
+        swimlaneid = sys.argv[4]
+        listid = sys.argv[5]
+        cardtitle = sys.argv[6]
+        carddescription = sys.argv[7]
+        cardtolist = wekanurl + apiboards + boardid + s + l + s + listid + s + cs
+        # Write to card
+        headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
+        post_data = {'authorId': '{}'.format(authorid), 'title': '{}'.format(cardtitle), 'description': '{}'.format(carddescription), 'swimlaneId': '{}'.format(swimlaneid)}
+        body = requests.post(cardtolist, data=post_data, headers=headers)
+        print(body.text)
+        # ------- WRITE TO CARD END -----------
+
+if arguments == 3:
+
+    if sys.argv[1] == 'createlist':
+
+        # ------- CREATE LIST START -----------
+        boardid = sys.argv[2]
+        listtitle = sys.argv[3]
+        list = wekanurl + apiboards + boardid + s + l
+        headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
+        post_data = {'title': '{}'.format(listtitle)}
+        body = requests.post(list, data=post_data, headers=headers)
+        print("=== CREATE LIST ===\n")
+        print(body.text)
+        # ------- CREATE LIST END -----------
+
+    if sys.argv[1] == 'attachmentjson':
+
+        # ------- ATTACHMENT AS JSON BASE64 START -----------
+        boardid = sys.argv[2]
+        attachmentid = sys.argv[3]
+        attachmentjson = wekanurl + apiboards + boardid + s + ats + s + attachmentid
+        print(attachmentjson)
+        headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
+        print("=== ATTACHMENT AS JSON BASE64 ===\n")
+        body = requests.get(attachmentjson, headers=headers)
+        data2 = body.text.replace('}',"}\n")
+        print(data2)
+        # ------- ATTACHMENT AS JSON BASE64 END -----------
+
+if arguments == 2:
+
+    # ------- BOARDS LIST START -----------
+    userid = sys.argv[2]
+    boards = users + s + userid + s + bs
+    if sys.argv[1] == 'boards':
+        headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
+        #post_data = {'userId': '{}'.format(userid)}
+        body = requests.get(boards, headers=headers)
+        print("=== BOARDS ===\n")
+        data2 = body.text.replace('}',"}\n")
+        print(data2)
+    # ------- BOARDS LIST END -----------
+    if sys.argv[1] == 'board':
+
+        # ------- BOARD INFO START -----------
+        boardid = sys.argv[2]
+        board = wekanurl + apiboards + boardid
+        headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
+        body = requests.get(board, headers=headers)
+        print("=== BOARD ===\n")
+        data2 = body.text.replace('}',"}\n")
+        print(data2)
+        # ------- BOARD INFO END -----------
+
+    if sys.argv[1] == 'swimlanes':
+        boardid = sys.argv[2]
+        swimlanes = wekanurl + apiboards + boardid + s + sws
+        # ------- SWIMLANES OF BOARD START -----------
+        headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
+        print("=== SWIMLANES ===\n")
+        body = requests.get(swimlanes, headers=headers)
+        data2 = body.text.replace('}',"}\n")
+        print(data2)
+        # ------- SWIMLANES OF BOARD END -----------
+
+    if sys.argv[1] == 'lists':
+
+        # ------- LISTS OF BOARD START -----------
+        boardid = sys.argv[2]
+        attachments = wekanurl + apiboards + boardid
+        headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
+        print("=== LISTS ===\n")
+        body = requests.get(lists, headers=headers)
+        data2 = body.text.replace('}',"}\n")
+        print(data2)
+        # ------- LISTS OF BOARD END -----------
+
+    if sys.argv[1] == 'listattachments':
+
+        # ------- LISTS OF ATTACHMENTS START -----------
+        boardid = sys.argv[2]
+        listattachments = wekanurl + apiboards + boardid + s + ats
+        headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
+        print("=== LIST OF ATTACHMENTS ===\n")
+        body = requests.get(listattachments, headers=headers)
+        data2 = body.text.replace('}',"}\n")
+        print(data2)
+        # ------- LISTS OF ATTACHMENTS END -----------
+
+if arguments == 1:
+
+    if sys.argv[1] == 'users':
+
+        # ------- LIST OF USERS START -----------
+        headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
+        print(users)
+        print("=== USERS ===\n")
+        body = requests.get(users, headers=headers)
+        data2 = body.text.replace('}',"}\n")
+        print(data2)
+        # ------- LIST OF USERS END -----------