diff --git a/.gitignore b/.gitignore index 44140a994..c5d14e877 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ # Script produced interim data src/icp/pollinator/src/pollinator/reclass/*.json src/icp/pollinator/src/pollinator/reclass/*.csv +src/icp/apps/beekeepers/exports/* # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/src/icp/apps/beekeepers/tasks.py b/src/icp/apps/beekeepers/tasks.py index 6973a0d5f..eb6328da4 100644 --- a/src/icp/apps/beekeepers/tasks.py +++ b/src/icp/apps/beekeepers/tasks.py @@ -5,6 +5,14 @@ import boto3 import rasterio from pyproj import Proj +import psycopg2 + + +PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) +HOST = os.environ.get('ICP_DB_HOST') +DB_USER = os.environ.get('ICP_DB_USER') +DB_PW = os.environ.get('ICP_DB_PASSWORD') +DB_NAME = os.environ.get('ICP_DB_NAME') def sample_at_point(geom, raster_path): @@ -85,3 +93,47 @@ def __enter__(self): def __exit__(self, *args): """Context manager close""" self.remove_env_vars() + + +def export_survey_tables(): + """Export all types of beekeepers surveys to CSVs.""" + + db_options = "dbname={} user={} host={} password={}".format( + DB_NAME, DB_USER, HOST, DB_PW + ) + connection = psycopg2.connect(db_options) + cur = connection.cursor() + + tables = dict( + novembersurvey=None, + aprilsurvey=None, + monthlysurvey=None, + usersurvey=""" + SELECT auth_user.username AS username, auth_user.email AS email, + beekeepers_usersurvey.* + FROM beekeepers_usersurvey + INNER JOIN auth_user ON beekeepers_usersurvey.user_id=auth_user.id + """, + survey=""" + SELECT beekeepers_survey.*, beekeepers_apiary.lat AS lat, + beekeepers_apiary.lng AS lng + FROM beekeepers_survey + INNER JOIN beekeepers_apiary + ON beekeepers_survey.apiary_id=beekeepers_apiary.id + """, + ) + # collect output CSVs to dedicated folder + dir = os.path.join(PROJECT_ROOT, 'exports') + if not os.path.exists(dir): + os.mkdir(dir) + + for table, query in tables.iteritems(): + if query is None: + query = "SELECT * FROM beekeepers_{}".format(table) + output_query = "COPY ({0}) TO STDOUT WITH CSV HEADER".format(query) + + filename = "{}/{}.csv".format(dir, table) + with open(filename, 'w') as f: + cur.copy_expert(output_query, f) + + connection.close()