Example #1
0
def index():
    total = len(TalkProposal.objects)
    reviewed = len(TalkProposal.objects(status__ne='unreviewed'))
    remaining = total - reviewed
    accepted = len(TalkProposal.objects(status__in=('thunderdome',
                                                    'accepted')))
    rejected = len(TalkProposal.objects(status__in=('rejected', 'posted')))
    number_of_meetings = len(Meeting.objects)
    talks_per_meeting = float(reviewed) / number_of_meetings
    talks_by_status = TalkProposal.objects.item_frequencies('status').items()
    return flask.render_template(
        'index.html',
        total=total,
        reviewed=reviewed,
        remaining=remaining,
        percent_reviewed=float(reviewed) / total,
        accepted=accepted,
        percent_accepted=(float(accepted) / reviewed) if reviewed else 0,
        rejected=rejected,
        percent_rejected=(float(rejected) / reviewed) if reviewed else 0,
        number_of_meetings=number_of_meetings,
        talks_per_meeting=talks_per_meeting,
        meetings_left=int(math.ceil(float(remaining) / talks_per_meeting)),
        talks_by_status_json=json.dumps(talks_by_status),
    )
Example #2
0
def index():
    total = len(TalkProposal.objects)
    reviewed = len(TalkProposal.objects(status__ne='unreviewed'))
    remaining = total - reviewed
    accepted = len(TalkProposal.objects(kittendome_result='thunderdome'))
    rejected = len(TalkProposal.objects(kittendome_result='rejected'))
    number_of_meetings = len(Meeting.objects)
    talks_per_meeting = float(reviewed) / number_of_meetings

    groups_total = len(Group.objects)
    groups_reviewed = len(Group.objects(decided=True))
    total_tdome_talks = sum(Group.objects.filter(decided=True).item_frequencies('talks').values())
    tdome_results = {}
    for result in ('accepted', 'damaged', 'rejected'):
        c = len(TalkProposal.objects(thunderdome_result=result))
        tdome_results[result] = {
            'count': c,
            'percent': float(c)/total_tdome_talks
        }

    talks_by_status = TalkProposal.objects.item_frequencies('status')
    talks_by_status.update(TalkProposal.objects.item_frequencies('alternative'))
    talks_by_status.pop(None)
    talks_by_status['rejected'] -= sum(talks_by_status.get(k, 0) for k,v in TalkProposal.TALK_ALTERNATIVES)
    talks_by_status = sorted(talks_by_status.items())

    return flask.render_template('index.html',
        total = total,
        reviewed = reviewed,
        remaining = remaining,
        kittendome_complete = (remaining == 0),
        percent_reviewed = float(reviewed) / total,
        accepted = accepted,
        percent_accepted = (float(accepted) / reviewed) if reviewed else 0,
        rejected = rejected,
        percent_rejected = (float(rejected) / reviewed) if reviewed else 0,
        number_of_meetings = number_of_meetings,
        talks_per_meeting = talks_per_meeting,
        meetings_left = int(math.ceil(float(remaining) / talks_per_meeting)),
        talks_by_status_json = json.dumps(talks_by_status),
        groups_total = groups_total,
        groups_reviewed = groups_reviewed,
        groups_remaining = groups_total - groups_reviewed,
        groups_reviewed_percent = float(groups_reviewed) / groups_total,
        thunderdome_results = tdome_results,
    )
Example #3
0
    def handle_review(self):
        """Print out an agenda for a single kittendome meeting."""

        talks = TalkProposal.objects(status__in=("unreviewed", "hold")).order_by("talk_id")[: self.args.num]
        overflow = TalkProposal.objects(status__in=("unreviewed", "hold")).order_by("talk_id")[
            self.args.num : self.args.num + self.args.overflow
        ]

        print "=== AGENDA ==="
        print
        for t in talks:
            print t.agenda_format
        if overflow:
            print "=== OVERFLOW ==="
            print
            for t in overflow:
                print t.agenda_format
Example #4
0
File: app.py Project: lvh/pc-bot
def index():
    total = len(TalkProposal.objects)
    reviewed = len(TalkProposal.objects(status__ne='unreviewed'))
    remaining = total - reviewed
    accepted = len(TalkProposal.objects(status__in=('thunderdome', 'accepted')))
    rejected = len(TalkProposal.objects(status__in=('rejected', 'posted')))
    number_of_meetings = len(Meeting.objects)
    talks_per_meeting = float(reviewed) / number_of_meetings
    talks_by_status = TalkProposal.objects.item_frequencies('status').items()
    return flask.render_template('index.html',
        total = total,
        reviewed = reviewed,
        remaining = remaining,
        percent_reviewed = float(reviewed) / total,
        accepted = accepted,
        percent_accepted = (float(accepted) / reviewed) if reviewed else 0,
        rejected = rejected,
        percent_rejected = (float(rejected) / reviewed) if reviewed else 0,
        number_of_meetings = number_of_meetings,
        talks_per_meeting = talks_per_meeting,
        meetings_left = int(math.ceil(float(remaining) / talks_per_meeting)),
        talks_by_status_json = json.dumps(talks_by_status),
    )
Example #5
0
p.add_argument('-v', '--verbose', action='store_true', default=False)
args = p.parse_args()
if not pycon_bot.mongo.connect(args.dsn):
    sys.stderr.write("Need to pass --dsn or set env[MONGO_DSN].")
    sys.exit(1)

if args.clear:
    TalkProposal.objects.delete()

for r in csv.DictReader(open(args.csvfile)):
    # We're not using get_or_create so that we can support --dry-run.
    try:
        talk = TalkProposal.objects.get(talk_id=int(r['#']))
        created = False
    except TalkProposal.DoesNotExist:
        talk = TalkProposal(talk_id=int(r['#']), status='unreviewed')
        created = True

    talk.category = r['Category']
    talk.speaker, talk.title = re.split(r'\s{4,}', r['Speaker / Title'], 1)

    talk.site_votes = SiteVotes(plus_1=r['+1'],
                                plus_0=r['+0'],
                                minus_0=r['-0'],
                                minus_1=r['-1'])

    if not args.dry_run:
        talk.save()

    if args.verbose:
        print "%s #%s - %s" % ("Created" if created else "Updated",
Example #6
0
File: load.py Project: PyCon/pc-bot
p.add_argument('--clear', action='store_true', default=False)
p.add_argument('--dry-run', action='store_true', default=False)
p.add_argument('-v', '--verbose', action='store_true', default=False)
args = p.parse_args()
if not pycon_bot.mongo.connect(args.dsn):
    sys.stderr.write("Need to pass --dsn or set env[MONGO_DSN].")
    sys.exit(1)

if args.clear:
    TalkProposal.objects.delete()

for r in csv.DictReader(open(args.csvfile)):
    # We're not using get_or_create so that we can support --dry-run.
    try:
        talk = TalkProposal.objects.get(talk_id=int(r['#']))
        created = False
    except TalkProposal.DoesNotExist:
        talk = TalkProposal(talk_id=int(r['#']), status='unreviewed')
        created = True

    talk.category = r['Category']
    talk.speaker, talk.title = re.split(r'\s{4,}', r['Speaker / Title'], 1)

    talk.site_votes = SiteVotes(plus_1=r['+1'], plus_0=r['+0'], minus_0=r['-0'], minus_1=r['-1'])

    if not args.dry_run:
        talk.save()

    if args.verbose:
        print "%s #%s - %s" % ("Created" if created else "Updated", talk.talk_id, talk.title)
Example #7
0
File: agenda.py Project: lvh/pc-bot
import sys
import argparse
import pycon_bot.mongo
from pycon_bot.models import TalkProposal

p = argparse.ArgumentParser()
p.add_argument('--dsn')
p.add_argument('-n', '--num', type=int, default=10)
p.add_argument('-o', '--overflow', type=int, default=4)
args = p.parse_args()
if not pycon_bot.mongo.connect(args.dsn):
    sys.stderr.write("Need to pass --dsn or set env[MONGO_DSN].")
    sys.exit(1)

talks = TalkProposal.objects(status__in=('unreviewed', 'hold')).order_by('talk_id')[:args.num]
overflow = TalkProposal.objects(status__in=('unreviewed', 'hold')).order_by('talk_id')[args.num:args.num+args.overflow]

def pt(t):
    return "#%s - %s - %s\n%s\n" % (t.talk_id, t.title, t.speaker, t.review_url)

print "=== AGENDA ==="
print
for t in talks:
    print pt(t)
if overflow:
    print "=== OVERFLOW ==="
    print
    for t in overflow:
        print pt(t)
Example #8
0
File: agenda.py Project: lvh/pc-bot
import sys
import argparse
import pycon_bot.mongo
from pycon_bot.models import TalkProposal

p = argparse.ArgumentParser()
p.add_argument('--dsn')
p.add_argument('-n', '--num', type=int, default=10)
p.add_argument('-o', '--overflow', type=int, default=4)
args = p.parse_args()
if not pycon_bot.mongo.connect(args.dsn):
    sys.stderr.write("Need to pass --dsn or set env[MONGO_DSN].")
    sys.exit(1)

talks = TalkProposal.objects(
    status__in=('unreviewed', 'hold')).order_by('talk_id')[:args.num]
overflow = TalkProposal.objects(
    status__in=('unreviewed',
                'hold')).order_by('talk_id')[args.num:args.num + args.overflow]


def pt(t):
    return "#%s - %s - %s\n%s\n" % (t.talk_id, t.title, t.speaker,
                                    t.review_url)


print "=== AGENDA ==="
print
for t in talks:
    print pt(t)
if overflow: