mirror of https://github.com/wekan/wekan
Thanks to xet7 ! Related #1482reviewable/pr3342/r1
parent
1f207c493d
commit
051f7b2769
@ -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 ----------- |
Loading…
Reference in new issue