Пример #1
0
    def combine_polls(cls, polls, at_time=None):
        from adhocracy.lib.democracy import Decision
        from vote import Vote
        if at_time is None:
            at_time = datetime.utcnow()
        voters = {Vote.YES: Set(),
                  Vote.NO: Set(),
                  Vote.ABSTAIN: Set()}

        for poll in polls:
            for decision in Decision.for_poll(poll, at_time=at_time):
                if not decision.is_decided():
                    continue
                result = decision.result
                if result is not None:
                    voters_ = voters.get(result)
                    voters_.add(decision.user)

        # Do the math. We count only non-contradictory votes.
        yes = voters[Vote.YES]
        no = voters[Vote.NO]
        abstain = voters[Vote.ABSTAIN]
        return Tally(None,
                     len(yes - no - abstain),
                     len(no - yes - abstain),
                     len(abstain - yes - no))
Пример #2
0
    def combine_polls(cls, polls, at_time=None):
        from adhocracy.lib.democracy import Decision
        from vote import Vote
        if at_time is None:
            at_time = datetime.utcnow()
        result_voters = {}
        undecided = []

        for poll in polls:
            for decision in Decision.for_poll(poll, at_time=at_time):
                if not decision.is_decided():
                    continue
                for option in [Vote.YES, Vote.NO, Vote.ABSTAIN]:
                    voters = result_voters.get(option, [])
                    if option == result and decision.user not in voters:
                        voters = voters.append(decision.user)
                    if option != result and decision.user in voters:
                        undecided.append(decision.user)
                    result_voters[option] = voters

        for option in [Vote.YES, Vote.NO, Vote.ABSTAIN]:
            users = result_voters.get(option, [])
            for user in undecided:
                if user in users:
                    users = users.remove(user)
            result_voters[option] = users

        return Tally(None,
                     len(result_voters.get(Vote.YES, [])),
                     len(result_voters.get(Vote.NO, [])),
                     len(result_voters.get(Vote.ABSTAIN, [])))
Пример #3
0
 def create_from_poll(cls, poll, at_time=None):
     from adhocracy.lib.democracy import Decision
     from vote import Vote
     if at_time is None:
         at_time = datetime.utcnow()
     results = {}
     for decision in Decision.for_poll(poll, at_time=at_time):
         if not decision.is_decided():
             continue
         results[decision.result] = results.get(decision.result, 0) + 1
     tally = Tally(poll, results.get(Vote.YES, 0), results.get(Vote.NO, 0),
                   results.get(Vote.ABSTAIN, 0))
     tally.create_time = at_time
     meta.Session.add(tally)
     meta.Session.flush()
     return tally
Пример #4
0
def make_from_poll(tally_cls, poll, at_time=None, user_filter=None):
    from adhocracy.lib.democracy import Decision
    from adhocracy.model import Vote
    if at_time is None:
        at_time = datetime.utcnow()
    results = {}
    decisions = Decision.for_poll(poll,
                                  at_time=at_time,
                                  user_filter=user_filter)
    for decision in decisions:
        if not decision.is_decided():
            continue
        results[decision.result] = results.get(decision.result, 0) + 1
    tally = tally_cls(poll, results.get(Vote.YES, 0), results.get(Vote.NO, 0),
                      results.get(Vote.ABSTAIN, 0))
    tally.create_time = at_time
    return tally
Пример #5
0
def make_from_poll(tally_cls, poll, at_time=None, user_filter=None):
    from adhocracy.lib.democracy import Decision
    from adhocracy.model import Vote
    if at_time is None:
        at_time = datetime.utcnow()
    results = {}
    decisions = Decision.for_poll(poll, at_time=at_time,
                                  user_filter=user_filter)
    for decision in decisions:
        if not decision.is_decided():
            continue
        results[decision.result] = results.get(decision.result, 0) + 1
    tally = tally_cls(poll,
                      results.get(Vote.YES, 0),
                      results.get(Vote.NO, 0),
                      results.get(Vote.ABSTAIN, 0))
    tally.create_time = at_time
    return tally
Пример #6
0
 def create_from_poll(cls, poll, at_time=None):
     from adhocracy.lib.democracy import Decision
     from vote import Vote
     if at_time is None:
         at_time = datetime.utcnow()
     results = {}
     for decision in Decision.for_poll(poll, at_time=at_time):
         if not decision.is_decided():
             continue
         results[decision.result] = results.get(decision.result, 0) + 1
     tally = Tally(poll,
                   results.get(Vote.YES, 0),
                   results.get(Vote.NO, 0),
                   results.get(Vote.ABSTAIN, 0))
     tally.create_time = at_time
     meta.Session.add(tally)
     meta.Session.flush()
     return tally
Пример #7
0
    def combine_polls(cls, polls, at_time=None):
        from adhocracy.lib.democracy import Decision
        from vote import Vote
        if at_time is None:
            at_time = datetime.utcnow()
        voters = {Vote.YES: Set(), Vote.NO: Set(), Vote.ABSTAIN: Set()}

        for poll in polls:
            for decision in Decision.for_poll(poll, at_time=at_time):
                if not decision.is_decided():
                    continue
                result = decision.result
                if result is not None:
                    voters_ = voters.get(result)
                    voters_.add(decision.user)

        # Do the math. We count only non-contradictory votes.
        yes = voters[Vote.YES]
        no = voters[Vote.NO]
        abstain = voters[Vote.ABSTAIN]
        return Tally(None, len(yes - no - abstain), len(no - yes - abstain),
                     len(abstain - yes - no))