pysteve/lib/plugins/yna.py (35 lines of code) (raw):

# # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # """ Simple YNA voting plugin """ from lib import constants def tallyYNA(votes, issue): """ Simple YNA tallying :param votes: The JSON object from $issueid.json.votes :return: y,n,a as numbers """ y = n = a = 0 for vote in votes.values(): if vote == 'y': y += 1 elif vote == 'n': n += 1 elif vote == 'a': a += 1 else: raise Exception("Invalid vote found!") return { 'votes': len(votes), 'yes': y, 'no': n, 'abstain': a }, """ Yes: %4u No: %4u Abstain: %4u """ % (y,n,a) def validateYNA(vote, issue): "Tries to validate a vote, returns why if not valid, None otherwise" letters = ['y','n','a'] if len(vote) != 1 or not vote in letters: return "Invalid vote. Accepted votes are: %s" % ", ".join(letters) return None constants.appendVote ( { 'key': "yna", 'description': "YNA (Yes/No/Abstain) vote", 'category': 'yna', 'validate_func': validateYNA, 'vote_func': None, 'tally_func': tallyYNA }, )