Skip to main content

precinct-mapper

A Python Package to preprocess precinct and district geodata and make it easy to query.

To run in DEVELOPMENT

  1. make sure you have Jupyter and ipykernel installed
  2. create a conda environment (-f flag specifies file): conda env create -f env.yaml. This will create a conda environment called 'precinct_env'
  3. activate that environment: conda activate precinct_env

To run in PRODUCTION

  1. create a virtual environment python -m venv venv
  2. then activate it source venv/bin/activate
  3. pip install precinct_mapper pip install git+https://github.com/clear-vote/precinct-mapper.git
  4. Save it all to requirements.txt pip freeze > requirements.txt in the virtual environment
  5. 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

  1. Ask for the key (keep it somewhere safe)
  2. 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

  1. Restart and enable the flaskapp: sudo systemctl restart flaskapp && sudo systemctl enable flaskapp
  2. Check the localhost curl -v http://localhost:8000
  3. Check the IP curl http://35.88.126.46/?longitude=0&latitude=0... Always append http:// before any IP!
  4. (optional) If you ever change the public IP, make sure to update it in the flaskapp configuration at /etc/nginx/sites-available/flaskapp
  5. (optional) reload the configurations and restart nginx. You can also modify gunicorn /etc/systemd/system/flaskapp.service

Lambda

  1. Run the following cp lambda_function.py my-deployment-package/ cp -r venv/lib/python3.x/site-packages/* my-deployment-package/
  2. Push to GH
  3. Download zip from GH
  4. 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)

Metadata

Release files for precinct-mapper 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for precinct-mapper 0.2.1
File Size Uploaded
precinct_mapper-0.2.1.tar.gz 14.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for precinct-mapper 0.2.1
File Interpreter ABI Platform
precinct_mapper-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 30.5 kB

Release files / precinct_mapper-0.2.1.tar.gz

Download URL precinct_mapper-0.2.1.tar.gz
Size 14.4 kB
Tags Source
SHA-256 checksum
How to use checksums
b768956596cde119558a683529fdc812a19d681c7b35cee0be7191e62483d7aa
BLAKE2b-256 checksum
How to use checksums
1e7510ec0d6b58fd16c288af0e817dd0db4076e6d672859b32ae5dfe75fb8353
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / precinct_mapper-0.2.1-py3-none-any.whl

Download URL precinct_mapper-0.2.1-py3-none-any.whl
Size 16.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f3c0af95036cf47c56c2a4113a0780e48c2d7a44a674a241478d91b4f45091b8
BLAKE2b-256 checksum
How to use checksums
2173ff81d09318fd84925beeb734e96142fbc884ca693fe03b441803006aa8f1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page