#! /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 7 Kp ' 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 GENERATION 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 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 -----------