Poznámky (de)kodéra

Nesouvislé fragmenty kódu

Issue tracker pomocí Trello

| 0 comments

U své malé android aplikace Kdo volal používám pro správu úkolů Trello. Časem jsem začal potřebovat i triviální Issue tracking system s možností integrace do stránky aplikace. Stránka aplikace je v Python-u a běží na appengine.google.com

Napadlo mě proč k tomu vlastně nepoužít stávající systém?

Celé to bylo překvapivě jednoduché. Potřebova jsem k tomu jen následující:

Nastavení boardu v Trello

Ze všeho nejdříve je dobré si rozmyslet jak karty evidovat, formátovat a taggovat. Já použil možnost označovat karty barevnými tagy (labels).  Nerozlišuji jednotlivé záznamy (cards) podle seznamu (list) ve kterém se nachází ale právě podle barevných tagů. Výhodou je, že mám ukončené karty v různých seznamech, tak aby to zapadalo do mého systému.

trello03trello01

Dalším krokem je vygenerování API klíče a získání identifikátoru správného board-u. Celý postup je sepsán na stránce Getting Started.

Zobrazení na webu

Samotné čtení a zobrazení na webu je pak triviální záležitost. Ukázka byla ořezána o mezikrok s cache a některé další nepodstatné části kódu.

# *-* coding: UTF-8 *-*
import webapp2
import trollop
from trollop import TrelloConnection

TRELLO_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
TRELLO_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

PNORMAL = '1'
PHIGH   = '2'
SOPENED = '3'
SCLOSED = '4'

class WebHandler(webapp2.RequestHandler):
    """
    Handler to show the home page
    """

    def get(self):
        """ Returns a simple HTML form for home """
        params = {}
        issues = self.trello()
        return self.render_template('home.html', issues=issues, **params)

    def trello(self):
        def isIn(self, haystack, needle):
            for l in haystack:
                if l['name'].lower() == needle.lower():
                    return True
            return False

        issues = []
        self.conn = TrelloConnection(TRELLO_KEY, TRELLO_SECRET)
        board  = self.conn.get_board('xxxxxxxxxxxxxxxxxxxxxxxx')
        for card in board.cards:
            if card.name.startswith("[#"):
                closed = isIn(card.labels, 'issue completed')
                issues.append(dict(
                    id=card.name[1:card.name.find(']')],
                    name=card.name[card.name.find(']') + 1:],
                    state=SCLOSED if closed else SOPENED,
                    closed=closed,
                    type=PNORMAL if isIn(card.labels, 'issue normal') else PHIGH
            ))
        return issues

Výsledek je k nahlédnutí na webu aplikace – https://kdovolal.appspot.com/

trello02

Napsat komentář

Required fields are marked *.


Current ye@r *