Beispiel #1
0
    def get(self):
        doc = common.Document(title='pushmaster: recent pushes')

        pushes = query.open_pushes()

        doc.body(T.h1('Recent Pushes'), T.ol(map(push_item, pushes), class_='requests'))
        doc.serialize(self.response.out)
Beispiel #2
0
    def get(self, datestr):
        from_date, to_date = report_date_range(datestr)

        doc = common.Document(title='pushmaster: reports')
        doc.body(T.h1('Report for ', from_date.strftime('%e %b %Y'), ' - ', to_date.strftime('%e %b %Y')))

        pushes = query.pushes_for_the_week_of(from_date)
        for push in pushes:
            pushdiv = T.div(class_='push')
            pushdiv(T.h2(
                    T.a(href=push.uri)(
                        push.ltime.replace(tzinfo=timezone.UTC()).astimezone(config.timezone).strftime('%a, %l:%M %p, %e %b %Y'),
                        T.span(' '),
                        push.name or '',
                        ), 
                    T.span(' by '),
                    common.display_user_email(push.owner),
                    ))
            reqlist = T.ol(class_='requests')
            for request in query.push_requests(push):
                reqlist(common.request_item(request))
            pushdiv(reqlist)
            doc.body(pushdiv)

        doc.body(common.jquery_js, common.jquery_ui_js, common.pushmaster_js)

        doc.serialize(self.response.out)
Beispiel #3
0
 def get(self):
     doc = common.Document(title="pushmaster: today's pushes")
     
     pushes = query.live_pushes_today()
     
     doc.body(T.h1("Today's Pushes"), T.ol(map(push_item_full, pushes)))
     self.dispatch_daily_push_report_email(doc)
     doc.serialize(self.response.out)
Beispiel #4
0
    def get(self):
        doc = common.Document(title='pushmaster: pushes')
        
        pushes = query.open_pushes()

        push_list = T.ol(map(push_item, pushes))
        
        doc.body(T.h1('Recent Pushes'))
        doc.body(push_list)
        doc.body(common.jquery_js, common.jquery_ui_js, common.pushmaster_js)
        doc.serialize(self.response.out)
Beispiel #5
0
    def get(self):
        doc = common.Document(title='pushmaster: reports')

        doc.body(T.h1('Reports'))

        last_monday = last_monday_datetime()
        report_dates = [last_monday - datetime.timedelta(days=(7 * n)) for n in xrange(0, 10)]

        ol = T.ol(class_='reports')
        for date in report_dates:
            ol(T.li(T.a(href=urls.report(date))(
                        date.strftime('%e %b %Y'),
                        T.span(' - '),
                        (date + datetime.timedelta(days=6)).strftime('%e %b %Y'),
                        )))
        doc.body(ol, common.jquery_js, common.jquery_ui_js, common.pushmaster_js)

        doc.serialize(self.response.out)
Beispiel #6
0
    def render_push_div(self, current_user, push, requests, pending_requests):
        push_div = T.div(class_='push')

        if current_user == push.owner:
            push_div(push_actions_form(push, requests)(class_='small push-action'))
        elif push.can_change_owner:
            push_div(common.take_ownership_form(push)(class_='small push-action'))

        header = T.h1(common.display_datetime(push.ptime), T.span(class_='name')(push.name or ''), common.user_home_link(push.owner, logic.user_info(push.owner)))

        if any(request.push_plans for request in requests):
            header(common.push_plans_badge())

        if any(request.js_serials for request in requests):
            header(common.js_serials_badge())

        if any(request.img_serials for request in requests):
            header(common.img_serials_badge())

        push_div(header)
        requests_div = T.div(class_='requests')
        push_div(requests_div)

        def requests_with_state(state):
            return filter(lambda r: r.state == state, requests)

        if push.state == 'live':
            requests_div(accepted_list(requests_with_state('live'), state='live'))
        else:
            def onstage_request_item(request):
                li = common.request_item(request)
                if current_user == push.owner:
                    li.children.insert(0, T.div(class_='actions')(mark_tested_form(request), T.span('or', class_='sep'), withdraw_form(request)))
                elif current_user == request.owner:
                    li.children.insert(0, T.div(class_='actions')(mark_tested_form(request)))
                return li

            def withdrawable_request_item(request):
                li = common.request_item(request)
                if current_user == push.owner:
                    li.children.insert(0, T.div(class_='actions')(withdraw_form(request)))
                return li

            def accepted_request_item(request):
                li = common.request_item(request)
                if current_user == push.owner:
                    li.children.insert(0, T.div(class_='actions')(
                            mark_checked_in_form(request),
                            T.span('or', class_='sep'),
                            withdraw_form(request),
                            T.span('or', class_='sep'),
                            reject_request_link(request),
                            ))
                return li

            request_states = [
                ('Verified on Stage', 'tested', withdrawable_request_item),
                ('On Stage (%s)' % push.stage, 'onstage', onstage_request_item),
                ('Checked In', 'checkedin', withdrawable_request_item),
                ('Accepted', 'accepted', accepted_request_item),
                ]
            for label, state, request_item in request_states:
                subrequests = requests_with_state(state)
                if subrequests:
                    if len(subrequests) > 5:
                        label = '%(label)s (%(count)d)' % {'label': label, 'count': len(subrequests)}
                    requestors = ', '.join(set(request.owner.nickname() for request in subrequests))
                    label = '%(label)s - %(requestors)s' % {'label': label, 'requestors': requestors}
                    requests_div(T.h3(label), accepted_list(subrequests, request_item=request_item, state=state))

        if current_user == push.owner:
            accepted_requests = requests_with_state('accepted')
            if accepted_requests:
                requests_div(T.div('cherry-pick-branches %s' % (' '.join(['"%s"' % request.branch for request in accepted_requests if request.branch]),), class_='code'))

        if push.editable:
            if pending_requests:
                pending_requests_title = ('Pending Requests (%d)' % len(pending_requests)) if len(pending_requests) > 5 else 'Pending Requests'
                push_div(T.h2(class_='pending')(pending_requests_title), push_pending_list(push, pending_requests))

        return push_div