pysteve/cli/tally.py (58 lines of code) (raw):

#!/usr/bin/env python # # 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. """ Tallying program for pySTeVe """ import sys, json, os version = 2 if sys.hexversion < 0x03000000: import ConfigParser as configparser else: import configparser version = 3 path = os.path.abspath(os.getcwd() + "/../") # Get parent dir, so we can snag 'lib' from there sys.path.append(path) sys.path.append(os.path.basename(sys.argv[0])) # Fetch config (hack, hack, hack) config = configparser.RawConfigParser() config.read(path + '/steve.cfg') # Some quick paths homedir = config.get("general", "homedir") # Import the goodness from lib import election import argparse parser = argparse.ArgumentParser(description='Command line options.') parser.add_argument('-e', '--election', dest='election', type=str, help='Election to load') parser.add_argument('-i', '--issue', dest='issue', type=str, help='Issue to load') parser.add_argument('-f', '--file', dest='vfile', type=str, help='Monitor file to load. Used by monitors instead of specifying election and issue') parser.add_argument("-v", "--verbose", dest="verbose", action="store_true", help="Enable verbose logging", default=False) args = parser.parse_args() baseData = None issueData = None votes = None if args.election and args.issue: issueData = election.getIssue(args.election, args.issue) baseData = election.getBasedata(args.election) votes = election.getVotes(args.election, args.issue) elif args.vfile: with open(args.vfile, "r") as f: js = json.loads(f.read()) f.close() issueData = js['issue'] baseData = js['base'] votes = js['votes'] else: parser.print_help() if baseData and issueData: if not votes or len(votes) == 0: print("No votes have been cast yet, cannot tally") sys.exit(-1) else: tally, prettyprint = election.tally(votes, issueData) if args.verbose and tally.get('debug'): print("------\nDebug:\n------") for line in tally['debug']: print(line) print("----------") print("Base data:") print("----------") print("Election: %s" % baseData['title']) print("Issue: %s" % issueData['title']) print("Votes cast: %u" % len(votes)) print("\n-----------------\nElection results:\n-----------------") print(prettyprint) else: print("No such election or issue!") sys.exit(-1)