Skip to content

Commit

Permalink
Merge pull request #317 from Police-Data-Accessibility-Project/mc_v1_…
Browse files Browse the repository at this point in the history
…agency_search_cache

⚡️ feat(middleware): Add functionality to cache homepage search results
  • Loading branch information
maxachis committed Jun 15, 2024
2 parents 95c610d + ec08327 commit 46abf7a
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 0 deletions.
3 changes: 3 additions & 0 deletions app.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from flask import Flask
from flask_restful import Api
from flask_cors import CORS

from resources.HomepageSearchCache import HomepageSearchCache
from resources.User import User
from resources.Login import Login
from resources.RefreshSession import RefreshSession
Expand Down Expand Up @@ -48,6 +50,7 @@ def create_app() -> Flask:
(DataSourceById, "/data-sources-by-id/<data_source_id>"),
(Agencies, "/agencies/<page>"),
(SearchTokens, "/search-tokens"),
(HomepageSearchCache, "/homepage-search-cache"),
]

for resource, endpoint in resources:
Expand Down
50 changes: 50 additions & 0 deletions middleware/homepage_search_cache.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import psycopg2
from flask import Response, make_response

SQL_GET_AGENCIES_WITHOUT_HOMEPAGE_URLS = """
SELECT
SUBMITTED_NAME,
JURISDICTION_TYPE,
STATE_ISO,
MUNICIPALITY,
COUNTY_NAME,
AIRTABLE_UID,
COUNT_DATA_SOURCES,
ZIP_CODE,
NO_WEB_PRESENCE -- Relevant
FROM
PUBLIC.AGENCIES
WHERE
approved = true
AND homepage_url is null
AND NOT EXISTS (
SELECT 1 FROM PUBLIC.AGENCY_URL_SEARCH_CACHE
WHERE PUBLIC.AGENCIES.AIRTABLE_UID = PUBLIC.AGENCY_URL_SEARCH_CACHE.agency_airtable_uid
)
ORDER BY COUNT_DATA_SOURCES DESC
LIMIT 100 -- Limiting to 100 in acknowledgment of the search engine quota
"""

SQL_UPDATE_CACHE = """
INSERT INTO public.agency_url_search_cache
(agency_airtable_uid, search_result)
VALUES (%s, %s)
"""


def get_agencies_without_homepage_urls(cursor: psycopg2.extensions.cursor) -> Response:
cursor.execute(SQL_GET_AGENCIES_WITHOUT_HOMEPAGE_URLS)
results = cursor.fetchall()
output = []
for result in results:
dict_result = dict(zip([i[0] for i in cursor.description], result))
output.append(dict_result)
return make_response(output, 200)


def update_search_cache(
cursor: psycopg2.extensions.cursor, agency_uid: str, search_results: list[str]
) -> Response:
for result in search_results:
cursor.execute(SQL_UPDATE_CACHE, (agency_uid, result))
return make_response("Search Cache Updated", 200)
33 changes: 33 additions & 0 deletions resources/HomepageSearchCache.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from flask import request

from middleware.homepage_search_cache import (
get_agencies_without_homepage_urls,
update_search_cache,
)
from middleware.security import api_required
from resources.PsycopgResource import PsycopgResource


class HomepageSearchCache(PsycopgResource):

@api_required
def get(self):
"""
Retrieve 100 agencies without homepage urls
:return:
"""
with self.psycopg2_connection.cursor() as cursor:
return get_agencies_without_homepage_urls(cursor)

@api_required
def post(self):
"""
Update search cache
:return:
"""
with self.psycopg2_connection.cursor() as cursor:
return update_search_cache(
cursor=cursor,
agency_uid=request.json["agency_uid"],
search_results=request.json["search_results"],
)

0 comments on commit 46abf7a

Please sign in to comment.