150 lines
4.4 KiB
Python
150 lines
4.4 KiB
Python
# thanks to the awesome work of @svbergerem
|
|
# -> svbergerem/nextcloud-deck-export-import.py
|
|
# https://gist.github.com/svbergerem/5914d7f87764901aefddba125af99938
|
|
|
|
import requests
|
|
import config
|
|
|
|
urlFrom = config.urlFrom
|
|
authFrom = config.authFrom
|
|
|
|
urlTo = config.urlTo
|
|
authTo = config.authTo
|
|
|
|
|
|
headers = {'OCS-APIRequest': 'true', 'Content-Type': 'application/json'}
|
|
|
|
def getBoards():
|
|
response = requests.get(
|
|
f'{urlFrom}/index.php/apps/deck/api/v1.0/boards',
|
|
auth=authFrom,
|
|
headers=headers)
|
|
response.raise_for_status()
|
|
return response.json()
|
|
|
|
def getBoardDetails(boardId):
|
|
response = requests.get(
|
|
f'{urlFrom}/index.php/apps/deck/api/v1.0/boards/{boardId}',
|
|
auth=authFrom,
|
|
headers=headers)
|
|
response.raise_for_status()
|
|
return response.json()
|
|
|
|
def getStacks(boardId):
|
|
response = requests.get(
|
|
f'{urlFrom}/index.php/apps/deck/api/v1.0/boards/{boardId}/stacks',
|
|
auth=authFrom,
|
|
headers=headers)
|
|
response.raise_for_status()
|
|
return response.json()
|
|
|
|
def getStacksArchived(boardId):
|
|
response = requests.get(
|
|
f'{urlFrom}/index.php/apps/deck/api/v1.0/boards/{boardId}/stacks/archived',
|
|
auth=authFrom,
|
|
headers=headers)
|
|
response.raise_for_status()
|
|
return response.json()
|
|
|
|
def createBoard(title, color):
|
|
response = requests.post(
|
|
f'{urlTo}/index.php/apps/deck/api/v1.0/boards',
|
|
auth=authTo,
|
|
json={
|
|
'title': title,
|
|
'color': color
|
|
},
|
|
headers=headers)
|
|
response.raise_for_status()
|
|
board = response.json()
|
|
boardId = board['id']
|
|
# remove all default labels
|
|
for label in board['labels']:
|
|
labelId = label['id']
|
|
response = requests.delete(
|
|
f'{urlTo}/index.php/apps/deck/api/v1.0/boards/{boardId}/labels/{labelId}',
|
|
auth=authTo,
|
|
headers=headers)
|
|
response.raise_for_status()
|
|
return board
|
|
|
|
def createLabel(title, color, boardId):
|
|
response = requests.post(
|
|
f'{urlTo}/index.php/apps/deck/api/v1.0/boards/{boardId}/labels',
|
|
auth=authTo,
|
|
json={
|
|
'title': title,
|
|
'color': color
|
|
},
|
|
headers=headers)
|
|
response.raise_for_status()
|
|
return response.json()
|
|
|
|
def createStack(title, order, boardId):
|
|
response = requests.post(
|
|
f'{urlTo}/index.php/apps/deck/api/v1.0/boards/{boardId}/stacks',
|
|
auth=authTo,
|
|
json={
|
|
'title': title,
|
|
'order': order
|
|
},
|
|
headers=headers)
|
|
response.raise_for_status()
|
|
return response.json()
|
|
|
|
def createCard(title, ctype, order, description, duedate, boardId, stackId):
|
|
response = requests.post(
|
|
f'{urlTo}/index.php/apps/deck/api/v1.0/boards/{boardId}/stacks/{stackId}/cards',
|
|
auth=authTo,
|
|
json={
|
|
'title': title,
|
|
'type': ctype,
|
|
'order': order,
|
|
'description': description,
|
|
'duedate': duedate
|
|
},
|
|
headers=headers)
|
|
response.raise_for_status()
|
|
return response.json()
|
|
|
|
def assignLabel(labelId, cardId, boardId, stackId):
|
|
response = requests.put(
|
|
f'{urlTo}/index.php/apps/deck/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/assignLabel',
|
|
auth=authTo,
|
|
json={
|
|
'labelId': labelId
|
|
},
|
|
headers=headers)
|
|
response.raise_for_status()
|
|
|
|
def archiveCard(card, boardId, stackId):
|
|
cardId = card['id']
|
|
card['archived'] = True
|
|
response = requests.put(
|
|
f'{urlTo}/index.php/apps/deck/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}',
|
|
auth=authTo,
|
|
json=card,
|
|
headers=headers)
|
|
response.raise_for_status()
|
|
|
|
def copyCard(card, boardIdTo, stackIdTo, labelsMap):
|
|
createdCard = createCard(
|
|
card['title'],
|
|
card['type'],
|
|
card['order'],
|
|
card['description'],
|
|
card['duedate'],
|
|
boardIdTo,
|
|
stackIdTo
|
|
)
|
|
|
|
# copy card labels
|
|
if card['labels']:
|
|
for label in card['labels']:
|
|
assignLabel(labelsMap[label['id']], createdCard['id'], boardIdTo, stackIdTo)
|
|
|
|
if card['archived']:
|
|
archiveCard(createdCard, boardIdTo, stackIdTo)
|
|
|
|
|