{"flow":{"id":24,"summary":"See account data over the last 3 days as a pie chart","versions":[84,85,86,122,161],"created_by":"rubenfiszel","created_at":"2022-08-09T16:11:39.442Z","votes":0,"approved":true,"apps":["showcase","slack","postgresql"],"value":{"modules":[{"id":"a","value":{"path":"g/sales/query_sales_data","type":"rawscript","content":"import pandas as pd\nimport psycopg2\n\ndef main(pg_con: dict):\n\n    conn = psycopg2.connect(**pg_con)\n    cur = conn.cursor()\n    cur.execute(\"\"\"\n      SELECT company, count(id) \n      FROM action \n      WHERE to_timestamp(timestamp) < current_date - interval '3 days'\n      GROUP BY company;\"\"\"\n    )\n    if cur.description:\n        res = cur.fetchall()\n    else:\n        res = None\n    conn.commit()\n    cur.close()\n    conn.close()\n    return res\n","language":"python3"},"summary":"Query PG data","input_transforms":{"pg_con":{"type":"static","value":"$res:g/all/demodb"}}},{"id":"b","value":{"path":"u/bot/table_to_pie","type":"rawscript","content":"\n\nimport matplotlib.pyplot as plt\nimport base64\nfrom datetime import date\n\n\n\ndef main(rows: list, title: str = \"\"):\n    file_output = \"output.png\"\n\n    fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect=\"equal\"))\n\n    # Get labels and data from list\n    labels = [x[0] for x in rows]\n    data = [x[1] for x in rows]\n\n    # Create donut chart\n    plt.pie(\n        data,\n        labels=labels,\n        autopct=\"%.0f%%\",\n        wedgeprops={\"linewidth\": 5, \"edgecolor\": \"white\"},\n    )\n    my_circle = plt.Circle((0, 0), 0.38, color=\"white\")\n    p = plt.gcf()\n    p.gca().add_artist(my_circle)\n    ax.set_title(title)\n\n    # Create png\n    plt.savefig(file_output)\n\n    with open(file_output, \"rb\") as image_file:\n        encoded_string = base64.b64encode(image_file.read()).decode(\"ascii\")\n\n    return {\"png\": encoded_string}\n","language":"python3"},"summary":"table to pie plot","input_transforms":{"rows":{"expr":"previous_result","type":"javascript"},"title":{"type":"static","value":"sales on 3 last days"}}},{"id":"c","value":{"path":"u/bot/send_slack_image","type":"rawscript","content":"import os\nfrom slack_sdk.web.client import WebClient\nfrom datetime import date, datetime\n\n\ndef main(\n    slack_resource: dict,\n    img_data: bytes,\n    channel: str = None,\n    user: str = None,\n):\n    slack_client = WebClient(token=slack_resource[\"token\"])\n\n    if channel == \"\":\n        channel = None\n    if user == \"\":\n        user = None\n\n    if channel is None and user is None or (channel is not None and user is not None):\n        raise Exception(\"one and only one of channel or user need to be set\")\n\n    if user is not None:\n        channel = \"@{}\".format(user)\n\n    tmp_image = \"image.png\"\n    with open(tmp_image, \"wb\") as fh:\n        fh.write(img_data)\n    slack_client.files_upload(\n        file=tmp_image, initial_comment=\"Weekly report\", channels=channel\n    )\n    \n    now = datetime.now()\n    current_time = now.strftime(\"%H:%M\")\n    today = date.today()\n    print(\"Sent to slack successfully on\", today, current_time)\n    \n    \n","language":"python3"},"summary":"send a slack image","input_transforms":{"user":{"type":"static","value":null},"channel":{"type":"static","value":"demo"},"img_data":{"expr":"previous_result.png","type":"javascript"},"slack_resource":{"expr":"flow_input.slack_resource","type":"javascript"}}}]},"schema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["pg_con","slack_resource"],"properties":{"pg_con":{"type":"object","format":"resource-postgresql","default":null,"description":""},"slack_resource":{"type":"object","format":"resource-slack","description":""}}},"description":"","recording":null,"vcreated_at":"2023-04-19T13:33:16.496Z","vcreated_by":"adam186","comments":[]}}