A Python Package to preprocess voting precinct and district geodata and make it easy to query. Currently restricted to WA state.
Project description
precinct-mapper
A Python Package to preprocess precinct and district geodata and make it easy to query.
To run in DEVELOPMENT
- make sure you have Jupyter and ipykernel installed
- create a conda environment (-f flag specifies file):
conda env create -f env.yaml
. This will create a conda environment called 'precinct_env' - activate that environment:
conda activate precinct_env
To run in PRODUCTION
- create a virtual environment
python -m venv venv
- then activate it
source venv/bin/activate
- pip install precinct_mapper
pip install git+https://github.com/clear-vote/precinct-mapper.git
- Save it all to requirements.txt
pip freeze > requirements.txt
in the virtual environment - issue the following commands...
from precinct_mapper.mapper import load_state
state_obj = load_state()
json = state_obj.lookup_lat_lon(-122.3328, 47.6061)
print(json['county'].name)
SSH Config (so you can modify AWS code locally)
Insert the following ssh code
- Ask for the key (keep it somewhere safe)
- Add the following SSH info to your config
Host flask-app-ec2 HostName ec2-35-88-126-46.us-west-2.compute.amazonaws.com User ubuntu IdentityFile
(we are moving away from this) Restarting for production on AWS EC2 instance
- Restart and enable the flaskapp:
sudo systemctl restart flaskapp && sudo systemctl enable flaskapp
- Check the localhost
curl -v http://localhost:8000
- Check the IP
curl http://35.88.126.46/?longitude=0&latitude=0
... Always append http:// before any IP! - (optional) If you ever change the public IP, make sure to update it in the flaskapp configuration at /etc/nginx/sites-available/flaskapp
- (optional) reload the configurations and restart nginx. You can also modify gunicorn /etc/systemd/system/flaskapp.service
Lambda
- Run the following cp lambda_function.py my-deployment-package/ cp -r venv/lib/python3.x/site-packages/* my-deployment-package/
- Push to GH
- Download zip from GH
- Deploy via AWS Lambda
TODO
Amazon RDS (Relational Database Service): To host your MySQL database. Amazon S3: To store static assets or backup data if needed. AWS IAM (Identity and Access Management): To manage access and permissions securely.
Add this route and test with different coordinates:
from flask import Flask, request, jsonify
from your_module import state_obj # Import your state_obj from the appropriate module
app = Flask(__name__)
@app.route('/lookup', methods=['GET'])
def lookup_lat_lon():
# Get coordinates from query parameters
coordinate_1 = request.args.get('coordinate_1')
coordinate_2 = request.args.get('coordinate_2')
if not coordinate_1 or not coordinate_2:
return jsonify({'error': 'Missing coordinates'}), 400
try:
# Run the command with the provided coordinates
result = state_obj.lookup_lat_lon(coordinate_1, coordinate_2)
return jsonify(result)
except Exception as e:
return jsonify({'error': str(e)}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file precinct_mapper-0.2.1.tar.gz
.
File metadata
- Download URL: precinct_mapper-0.2.1.tar.gz
- Upload date:
- Size: 14.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b768956596cde119558a683529fdc812a19d681c7b35cee0be7191e62483d7aa |
|
MD5 | 5a5f6da95ca6a593aa2067a0f7dce7ea |
|
BLAKE2b-256 | 1e7510ec0d6b58fd16c288af0e817dd0db4076e6d672859b32ae5dfe75fb8353 |
File details
Details for the file precinct_mapper-0.2.1-py3-none-any.whl
.
File metadata
- Download URL: precinct_mapper-0.2.1-py3-none-any.whl
- Upload date:
- Size: 16.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f3c0af95036cf47c56c2a4113a0780e48c2d7a44a674a241478d91b4f45091b8 |
|
MD5 | 22ed8f58992c07e214fac243c5e26398 |
|
BLAKE2b-256 | 2173ff81d09318fd84925beeb734e96142fbc884ca693fe03b441803006aa8f1 |