Skip to main content

Command-line interface for extrapolating test data from a single AP API JSON file.

Project description

APFAKE

screen shot 2018-03-19 at 10 21 06 am

Have you ever thought "I should record the AP API test that's coming in a half hour" only to find out that it actually concluded a half hour AGO? I've done this several times. And if I've done it before, I have to assume others have done it as well.

Taking the FINAL JSON state file of an AP API election test (e.g., what happens if you hit the test URL after a test has run but before it's zeroed out in the moments before a new test or a live election), apfake will generate a file of zeros and then n intermediate states between the zeros and the final file with a smoothly incrementing set of votes.

In short: If you give it the last file of a test, apfake will generate all the missing files for you.

CAVEATS

  • apfake does not call races.
  • apfake votes do not properly match actual election night spikes when ballots are counted.
  • apfake precincts reporting and precincts reporting percentages are probably wrong.
  • apfake does not work on zeros or initialization data. It needs the format &results=ru from the AP API.

USAGE

Installing

apfake is easiest to install straight from PyPi. It requires a Python 3 environment.

pip install apfake

Using

apfake -f 2018-03-20-final.json -n 10 -d /tmp/foo/ -r 2018-03-20

apfake accepts four command-line options, two are required.

  • -f, --final-results-path REQUIRED The path to the final results JSON file.
  • -n, --number REQUIRED The number of files to generate.
  • -r, --racedate OPTIONAL The YYYY-MM-DD racedate of the election. If the file specified in final-results-path has a racedate in the filename, this will be used. Otherwise, apfake will raise a ValueError.
  • -d, --data-directory OPTIONAL A directory or set of directories to write the data to. apfake will create these directories if they do not exist, and will also create a directory named for the racedate to hold the output files. Defaults to /tmp/.

DEBUGGING WITCHERY

This is the shape that apfake expects your JSON to have. If you use the format &results=ru it will probably work. If you use a different format, it might work, though YMMV.

"""
results.keys()
dict_keys(['electionDate', 'timestamp', 'races', 'nextrequest'])

results['races'][0].keys()
dict_keys(['test', 'raceID', 'raceType', 'raceTypeID', 'officeID', 'officeName', 'party', 'seatName', 'reportingUnits'])

result['races][0]['reportingUnits'][0].keys()
dict_keys(['statePostal', 'stateName', 'level', 'lastUpdated', 'precinctsReporting', 'precinctsTotal', 'precinctsReportingPct', 'candidates'])

results['races'][0]['reportingUnits'][0]['candidates'][0].keys()
dict_keys(['first', 'last', 'party', 'incumbent', 'candidateID', 'polID', 'ballotOrder', 'polNum', 'voteCount'])
"""

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

apfake-0.0.3.tar.gz (4.1 kB view details)

Uploaded Source

File details

Details for the file apfake-0.0.3.tar.gz.

File metadata

  • Download URL: apfake-0.0.3.tar.gz
  • Upload date:
  • Size: 4.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for apfake-0.0.3.tar.gz
Algorithm Hash digest
SHA256 5a20f9ec1396f8f2dba3b66291cf9aa7d95f25dd050b3f93bd0a848c5e2bb89f
MD5 5b6d606480c5b17f5ea7c37f5124e8db
BLAKE2b-256 97519f0d9601b6fe60cdc3bfbba128c7f3dd1b77816c20cccdaedcd665e04ae3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page