Esempio n. 1
0
def _generate_tree_item(state, data, tag, key='PARENT', indent=True):
    id = dm.get(data, 'ID')

    tbl = tag.table(klass='tree')
    tr = tbl.tr()

    status = dm.get_status(data)
    tr.td(klass='status-box status-%s' % (status,))
    _add_link(tr.td(klass='tree'), data)

    for child_data in state.children(dm.get(data, 'ID')):
        _generate_tree_item(state, child_data, tag.div(klass='tree-indent'), key=key)
Esempio n. 2
0
def execute(state, args):
    key = args.file[0]
    data = state.get(key)
    status = args.status[0]

    dm.set(data, 'STATUS', status)
    logging.info('"%s" is now %s' % (dm.get(data, 'NAME'), status))

    state.save(key)
Esempio n. 3
0
def execute(state, args):
    key = args.file[0]
    data = state.get(key)
    status = args.status[0]

    dm.set(data, 'STATUS', status)
    logging.info('"%s" is now %s' % (dm.get(data, 'NAME'), status))

    state.save(key)
Esempio n. 4
0
def _check_data(state, data):
    errors = []

    for key in ['ID', 'NAME']:
        _add_error(errors, _has_value(data, key))

    if errors:
        print('File: %s' % state.relative_path(dm.get(data, 'ID')))
        for err in errors:
            print(' - %s' % (err,))
        print('')
Esempio n. 5
0
def execute(state, args):
    _setup_paths(args)

    _write_html(os.path.join(args.output, 'list.html'),
                _generate_item_list(state))

    _write_html(os.path.join(args.output, 'tree.html'),
                _generate_tree(state))

    for data in state.get_all():
        _write_html(os.path.join(args.output, dm.get(data, 'ID') + '.html'),
                    _generate_item_page(state, data))
Esempio n. 6
0
def _link(state, args, data, path):
    other = state.get_by_path(path)
    other_id = dm.get(other, 'ID')
    if not other_id:
        logging.warn('Can not link to "%s", no id.', path)
        return

    key = args.type.upper()

    if not key in data:
        data[key] = []

    name = dm.get(data, 'NAME', path)
    for line in data[key]:
        if line.startswith(other_id):
            logging.info('Already linked to "%s"', dm.get(other, 'NAME', '?'))
            return

    dm.add_last(data, key, '%s %s' % (other_id, name))

    logging.info('Linking "%s" to "%s"', dm.get(data, 'NAME', '?'),
                 dm.get(other, 'NAME', '?'))
Esempio n. 7
0
def _link(state, args, data, path):
    other = state.get_by_path(path)
    other_id = dm.get(other, 'ID')
    if not other_id:
        logging.warn('Can not link to "%s", no id.', path)
        return

    key = args.type.upper()

    if not key in data:
        data[key] = []

    name = dm.get(data, 'NAME', path)
    for line in data[key]:
        if line.startswith(other_id):
            logging.info('Already linked to "%s"',
                         dm.get(other, 'NAME', '?'))
            return

    dm.add_last(data, key, '%s %s' % (other_id, name))

    logging.info('Linking "%s" to "%s"',
                 dm.get(data, 'NAME', '?'),
                 dm.get(other, 'NAME', '?'))
Esempio n. 8
0
def _generate_item_list(state):
    logging.info('Generating item list')

    root, tag = _make_page_base('Item list')
    data_seq = sorted(state.get_all(),
                   key=lambda x: dm.get(x, 'NAME'))

    grouped_data = _group_items(data_seq)

    for key in ['ongoing', 'waiting', 'not-started', 'done']:
        if key in grouped_data:
            tag.h2(key)
            _generate_item_list_part(tag, grouped_data[key])
            tag.br()

    return root
Esempio n. 9
0
def _generate_item_list_part(tag, data_seq):
    tbl = tag.table()
    tr = tbl.tr()
    for name in ['Task', 'Assigned', 'Estimated', 'Left', 'On track-o-meter', 'Projection']:
        tr.th(name)

    for data in data_seq:
        spent = dm.get_time_spent(data)
        remaining = dm.get_remaining_time(data)
        estimate = dm.get_estimate(data)
        time_projection = dm.get_projected_time_diff(data)

        tr = tbl.tr()
        _add_link(tr.td(), data)
        tr.td(dm.get(data, 'ASSIGNED', '-'))
        tr.td(str(estimate))
        tr.td('%d' % (remaining,))
        _make_relative_meter(tr.td(), -time_projection, estimate)
        tr.td('%+d' % (time_projection,))
Esempio n. 10
0
File: state.py Progetto: Tobbe/cog
 def get_by_key(self, key, value):
     for data in self.dat.values():
         if dm.get(data, key) == value:
             return data
Esempio n. 11
0
def _add_link(tag, data):
    id = dm.get(data, 'ID')
    name = dm.get(data, 'NAME', id)
    link = '%s.html' % (id,)
    tag.a(name, href=link)
Esempio n. 12
0
def _generate_item_page(state, data):
    name = dm.get(data, 'NAME', '?')
    logging.debug('Generating "%s"', name)
    root, tag = _make_page_base(name)

    # basic
    tag.h2('Basics')
    tbl = tag.table()
    for key in ['NAME', 'ID', 'PRIORITY']:
        title = key[0] + key[1:].lower()
        tr = tbl.tr()
        tr.th(title)
        tr.td(dm.get(data, key, '?'))
    tr = tbl.tr()
    tr.th('Status')
    tr.td(dm.get_status(data))
    tr = tbl.tr()
    tr.th('Assigned')
    tr.td(', '.join(filter(len, data.get('ASSIGNED', []))))

    # links
    tag.h2('Links')
    tbl = tag.table()
    tr = tbl.tr()
    for header in ['Parent', 'Child', 'Related']:
        tr.th(header, width='33%')

    parents = [state.get(key)
               for key in dm.get_links(data, 'PARENT')]
    children = state.children(dm.get(data, 'ID'))
    related = [state.get(key)
               for key in dm.get_links(data, 'LINK')]

    for i in range(max(map(len, [parents, children, related]))):
        tr = tbl.tr()
        for items in [parents, children, related]:
            if len(items) > i:
                _add_link(tr.td(), items[i])
            else:
                tr.td()

    # description
    tag.h2('Description')
    if not dm.null(data, 'DESCRIPTION'):
        div = tag.div(klass='description')
        for line in data.get('DESCRIPTION', []):
            div.text(line)
            div.br()

    # time
    tag.h2('Time')

    tbl = tag.table(klass='small')
    for key, value in [('Original estimate', dm.get_estimate(data)),
                       ('Total time spent', dm.get_time_spent(data)),
                       ('Current remaining time', dm.get_remaining_time(data))]:
        tr = tbl.tr()
        tr.th(key)
        tr.td(str(value))
    tr = tbl.tr()
    tr.th('Status')
    _make_relative_meter(tr.td(),
                         -dm.get_projected_time_diff(data),
                         dm.get_estimate(data))

    tag.br()

    tbl = tag.table()
    tr = tbl.tr()
    for header in ['Reported', 'User', 'Spent', 'Remaining']:
        tr.th(header)
    for rep in dm.get_time_reports(data):
        tr = tbl.tr()
        for key in ['time', 'user', 'spent', 'remaining']:
            tr.td(rep[key])

    return root