{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "64ff359a-04a6-4aee-916a-93cc29cf7f68",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import json\n",
    "import pandas as pd\n",
    "import configparser"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "2c0062da-8c94-453c-8ea9-e80415f466fb",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "import boto3\n",
    "from botocore.exceptions import ClientError"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "27bbb658-6e2b-4e01-be5a-28f5bd2fada5",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Create a ConfigParser object\n",
    "config = configparser.ConfigParser()\n",
    "\n",
    "# Read the INI file\n",
    "config.read('.secrets_auth.ini')\n",
    "section_name = \"AWS auth\"\n",
    "\n",
    "aws_access_key_id = config.get(section_name, \"ACCESS_KEY\")\n",
    "aws_secret_access_key = config.get(section_name, \"SECRET_KEY\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "4be911dc-e7e1-40fb-a1d7-140b62822fdd",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Use this code snippet in your app.\n",
    "# If you need more information about configurations\n",
    "# or implementing the sample code, visit the AWS docs:\n",
    "# https://aws.amazon.com/developer/language/python/\n",
    "\n",
    "import boto3\n",
    "from botocore.exceptions import ClientError\n",
    "\n",
    "\n",
    "def get_secret():\n",
    "\n",
    "    secret_name = \"demo/alberto-rivas\"\n",
    "    region_name = \"us-west-2\"\n",
    "\n",
    "    # Create a Secrets Manager client\n",
    "    session = boto3.session.Session(\n",
    "        aws_access_key_id=aws_access_key_id,\n",
    "        aws_secret_access_key=aws_secret_access_key\n",
    "    )\n",
    "    client = session.client(\n",
    "        service_name='secretsmanager',\n",
    "        region_name=region_name\n",
    "    )\n",
    "\n",
    "    try:\n",
    "        get_secret_value_response = client.get_secret_value(\n",
    "            SecretId=secret_name\n",
    "        )\n",
    "        return json.loads(get_secret_value_response['SecretString'])\n",
    "        \n",
    "    except ClientError as e:\n",
    "        # For a list of exceptions thrown, see\n",
    "        # https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html\n",
    "        raise e\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "8037768d-bb32-4da3-bd7b-faf02da4ca1a",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_dataframe(workbook_id, worksheet_id):\n",
    "    workbench_url = f\"https://develop.seeq.dev/workbook/{workbook_id}/worksheet/{worksheet_id}\"\n",
    "    df = spy.pull(workbench_url)\n",
    "    return df\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "38b73b1c-5328-4dc6-9a5a-419d19a69702",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "def process_get_items_request(passed_args):\n",
    "    if not \"workbook_id\" in passed_args:\n",
    "        return pd.DataFrame({\"Error code\": [\"422\"], \"Error message\": [\"workbook_id parameter missing\"]})\n",
    "    if not \"worksheet_id\" in passed_args:\n",
    "        return pd.DataFrame({\"Error code\": [\"422\"], \"Error message\": [\"worksheet_id parameter missing\"]})\n",
    "    \n",
    "    workbook_id = passed_args['workbook_id']\n",
    "    worksheet_id = passed_args['worksheet_id']\n",
    "    return  get_dataframe(workbook_id, worksheet_id)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "c58d4761-1ba9-4ad6-9e9d-7f7a26e894d9",
   "metadata": {},
   "outputs": [],
   "source": [
    "def upload_data(passed_args):\n",
    "    if not 'file_name' in passed_args:\n",
    "        return \"Server error 422, file_name parameter missing\"\n",
    "\n",
    "    process_get_items_request(passed_args)\n",
    "    file_name = passed_args['file_name']\n",
    "    df = process_get_items_request(REQUEST['args'])\n",
    "\n",
    "    try:\n",
    "        secrets = get_secret()\n",
    "        response = df.to_csv(\n",
    "            f\"s3://{secrets['AWS_S3_BUCKET']}/{file_name}\",\n",
    "            index=True,\n",
    "            storage_options={\n",
    "                \"key\": secrets['AWS_ACCESS_KEY_ID'],\n",
    "                \"secret\": secrets['AWS_SECRET_ACCESS_KEY'],\n",
    "            },\n",
    "        )\n",
    "        return \"Success: Data has been uploaded\"\n",
    "    except Exception as e:\n",
    "        return str(e)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "3b937220-c9e6-4c0a-a15b-0214920e3975",
   "metadata": {},
   "outputs": [],
   "source": [
    "def download_data(passed_args):\n",
    "    if not 'file_name' in passed_args:\n",
    "        return pd.DataFrame({\"Error code\": [\"422\"], \"Error message\": [\"file_name parameter missing\"]}).to_json(orient=\"index\")\n",
    "\n",
    "    file_name = passed_args['file_name']\n",
    "\n",
    "\n",
    "    try:\n",
    "        secrets = get_secret()\n",
    "        df = pd.read_csv(f\"s3://{secrets['AWS_S3_BUCKET']}/{file_name}\",\n",
    "                         index_col=0,\n",
    "                         storage_options={\n",
    "                             \"key\": secrets['AWS_ACCESS_KEY_ID'],\n",
    "                             \"secret\": secrets['AWS_SECRET_ACCESS_KEY']\n",
    "                         }\n",
    "                        )\n",
    "        return df.to_json(orient=\"index\")\n",
    "    except Exception as e:\n",
    "        return pd.DataFrame({\"Error\": [str(e)], \"Error message\": [f\"unable to download data from s3://{secrets['AWS_S3_BUCKET']}/{file_name}\"]}).to_json(orient='index')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "2ed546c7-4262-4264-b564-2b42b5511f48",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# GET /worksheet/items\n",
    "\n",
    "process_get_items_request(REQUEST['args']).to_json(orient=\"index\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "afe36528-273f-4aa3-84ac-36ee2b062349",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# GET /upload\n",
    "upload_data(REQUEST['args'])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "21025820-fd81-45c6-bf92-093bfafaac68",
   "metadata": {},
   "outputs": [],
   "source": [
    "# GET /download\n",
    "download_data(REQUEST['args'])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "78999bb4-722b-407e-9763-eb87f2ede268",
   "metadata": {},
   "outputs": [],
   "source": [
    "# GET /hello\n",
    "\"hello from Data Lab\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ce8977c9-2b93-4871-aff5-c890dae368b2",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.11",
   "language": "python",
   "name": "python311"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
