Merge branch 'master' into staging

This commit is contained in:
Will Freeman
2025-11-21 09:17:01 -07:00
2 changed files with 7 additions and 9 deletions

View File

@@ -5,13 +5,12 @@ from typing import Any
import boto3 import boto3
import os import os
import time import time
import numpy as np import math
import requests import requests
from typing import Tuple
import re import re
from concurrent.futures import ThreadPoolExecutor from concurrent.futures import ThreadPoolExecutor
def terraform_rate_expression_to_minutes(rate_expression: str) -> Tuple[int, int]: def terraform_rate_expression_to_minutes(rate_expression: str) -> int:
match = re.match(r"rate\((\d+)\s*(day|hour|minute)s?\)", rate_expression) match = re.match(r"rate\((\d+)\s*(day|hour|minute)s?\)", rate_expression)
if not match: if not match:
raise ValueError(f"Invalid rate expression: {rate_expression}") raise ValueError(f"Invalid rate expression: {rate_expression}")
@@ -26,7 +25,7 @@ def terraform_rate_expression_to_minutes(rate_expression: str) -> Tuple[int, int
return value return value
else: else:
raise ValueError(f"Unsupported time unit: {unit}") raise ValueError(f"Unsupported time unit: {unit}")
UPDATE_RATE_MINS = terraform_rate_expression_to_minutes(os.getenv("UPDATE_RATE_MINS", "rate(60 minutes)")) UPDATE_RATE_MINS = terraform_rate_expression_to_minutes(os.getenv("UPDATE_RATE_MINS", "rate(60 minutes)"))
GRACE_PERIOD_MINS = int(2) # XXX: set expiration a few minutes after in case put object takes a while GRACE_PERIOD_MINS = int(2) # XXX: set expiration a few minutes after in case put object takes a while
TILE_SIZE_DEGREES = int(20) TILE_SIZE_DEGREES = int(20)
@@ -54,13 +53,13 @@ def get_all_nodes():
response.raise_for_status() response.raise_for_status()
return response.json()["elements"] return response.json()["elements"]
def segment_regions(nodes: Any, tile_size_degrees: int) -> dict[Any]: def segment_regions(nodes: Any, tile_size_degrees: int) -> dict[str, list[Any]]:
print("Segmenting regions...") print("Segmenting regions...")
tile_dict = defaultdict(list) tile_dict = defaultdict(list)
for node in nodes: for node in nodes:
lat, lon = node["lat"], node["lon"] lat, lon = node["lat"], node["lon"]
tile_lat = int(np.floor(lat / tile_size_degrees)) * tile_size_degrees tile_lat = math.floor(lat / tile_size_degrees) * tile_size_degrees
tile_lon = int(np.floor(lon / tile_size_degrees)) * tile_size_degrees tile_lon = math.floor(lon / tile_size_degrees) * tile_size_degrees
bare_node = { bare_node = {
"id": node["id"], "id": node["id"],
"lat": lat, "lat": lat,
@@ -108,7 +107,7 @@ def lambda_handler(event, context):
key = f"regions/{lat}/{lon}.json" key = f"regions/{lat}/{lon}.json"
body = json.dumps(elements) body = json.dumps(elements)
futures.append(executor.submit(upload_json_to_s3, bucket_new, key, body)) futures.append(executor.submit(upload_json_to_s3, bucket_new, key, body))
# add index file # add index file
futures.append(executor.submit(upload_json_to_s3, bucket_new, "regions/index.json", json.dumps(tile_index))) futures.append(executor.submit(upload_json_to_s3, bucket_new, "regions/index.json", json.dumps(tile_index)))

View File

@@ -1,3 +1,2 @@
boto3 boto3
requests requests
numpy