policymap/api/endpoints/process_sponsors.py

55 lines
2.1 KiB
Python
Raw Permalink Normal View History

2025-03-09 18:58:00 -07:00
from flask import Blueprint, jsonify, request
2025-03-06 20:00:45 -08:00
import os
2025-03-09 18:58:00 -07:00
import csv
from neo4j import GraphDatabase
import logging
2025-03-06 20:00:45 -08:00
2025-03-09 18:58:00 -07:00
bp = Blueprint('process_sponsored', __name__)
2025-03-06 20:00:45 -08:00
2025-03-09 18:58:00 -07:00
# Custom logger for the process_sponsored blueprint
process_sponsored_logger = logging.getLogger('ProcessSponsoredLogger')
process_sponsored_logger.setLevel(logging.INFO)
process_sponsored_handler = logging.StreamHandler()
process_sponsored_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
process_sponsored_handler.setFormatter(process_sponsored_formatter)
process_sponsored_logger.addHandler(process_sponsored_handler)
2025-03-06 20:00:45 -08:00
2025-03-09 18:58:00 -07:00
@bp.route('/process_sponsored', methods=['GET'])
def process_sponsored():
csv_file_path = os.getenv("SPONSORED_LEGISLATION_CSV")
2025-03-06 20:00:45 -08:00
2025-03-09 18:58:00 -07:00
if not csv_file_path:
return jsonify({"error": "SPONSORED_LEGISLATION_CSV environment variable is not set"}), 400
2025-03-06 20:00:45 -08:00
2025-03-09 18:58:00 -07:00
try:
with open(csv_file_path, mode='r', newline='', encoding='utf-8') as file:
reader = csv.DictReader(file)
driver = GraphDatabase.driver(os.getenv("NEO4J_URI"), auth=(os.getenv("NEO4J_USER"), os.getenv("NEO4J_PASSWORD")))
session = driver.session()
2025-03-06 20:00:45 -08:00
2025-03-09 18:58:00 -07:00
for row in reader:
properties = {key: value.strip() if isinstance(value, str) else value for key, value in row.items()}
2025-03-06 20:00:45 -08:00
2025-03-09 18:58:00 -07:00
# Log the CSV row
process_sponsored_logger.info(f"Processing row: {properties}")
2025-03-06 20:00:45 -08:00
2025-03-09 18:58:00 -07:00
query = (
"MERGE (l:legislation {"
+ ", ".join(f"{key}: $props.{key}" for key in properties)
+ "})"
)
2025-03-06 20:00:45 -08:00
2025-03-09 18:58:00 -07:00
# Log the MERGE query
process_sponsored_logger.info(f"Executing query: {query}")
2025-03-09 18:58:00 -07:00
session.run(query, props=properties)
2025-03-09 18:58:00 -07:00
session.close()
driver.close()
2025-03-06 20:00:45 -08:00
2025-03-09 18:58:00 -07:00
return jsonify({"message": f"Processed {reader.line_num - 1} sponsored legislations"}), 200
2025-03-06 20:00:45 -08:00
2025-03-09 18:58:00 -07:00
except Exception as e:
process_sponsored_logger.error(f"Error processing sponsored legislation: {e}")
return jsonify({"error": str(e)}), 500