How to run Python scripts in Tines using the Tines Toolkit

Tines now supports running Python scripts in your stories. This guide enables you to integrate Python code into your workflows without needing an external API endpoint.

The event data, input and output of your script, is stored in a separate tenant managed by Tines. We recommend not passing sensitive data through the event and testing your script thoroughly before integrating it into your workflows.

Important Note: The Tines Toolkit is a Cloud based service entirely separate from your tenant. To use it, you must be able to send HTTP Requests out to https://toolkit.tines.com

Getting started with Python scripts 

To start running scripts:

  1. Go into templates and search for the 'Execute Python Script' group action template

  2. Pull this onto your storyboard

  3. Populate the necessary script parameters

The template action expects two objects: input and script. The input object is the first object which contains key-value fields that will send to your code as parameters. The script object is the second object which contains the code to execute.

Try it out:

Copy and paste the below into your storyboard to see a simple example.

{"standardLibVersion":"32","actionRuntimeVersion":"4","agents":[{"disabled":false,"name":"Execute Python Script","description":"Runs a Python script, passing in input from received events.","options":"{\"input\":{\"message\":\"<<generate_data.message>>\"},\"script\":\"import re\\n\\ndef main(input):\\n    message = input['message']\\n    # Remove credit card numbers\\n    message = re.sub(r\\\"\\\\b(?:\\\\d[ -]*?){13,16}\\\\b\\\", \\\"[CREDIT CARD]\\\", message)\\n    \\n    # Remove social security numbers\\n    message = re.sub(r\\\"\\\\b\\\\d{3}-?\\\\d{2}-?\\\\d{4}\\\\b\\\", \\\"[SSN]\\\", message)\\n    \\n    # Remove email addresses\\n    message = re.sub(r\\\"\\\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,}\\\\b\\\", \\\"[EMAIL]\\\", message)\\n    \\n    return message\"}","position":{"x":1560,"y":1785},"type":"group","group":{"name":"","description":null,"actions":[{"type":"httpRequest","name":"Execute script using Toolkit","description":"This is an API endpoint that expects a POST request with a JSON object in the following format:\n\n{\n  \"input\": {\n    \"key\": \"value\"\n  },\n  \"script\": \"def main(input):\n                      your python script\"\n}\n\n\nThe input object contains key value fields, these will be send to your python code as parameters.\n\nThe script field in the input object is expected to contain a string that represents a Python script, which defines a function called main with a single parameter called input. The input parameter is expected to be a dictionary object.\n\nWhen the endpoint receives a valid POST request, it executes the provided Python script with the given input and returns a JSON object with the returning value.","disabled":false,"options":"{\"url\":\"https://toolkit.tines.com/api/public/execute-code\",\"content_type\":\"application_json\",\"method\":\"post\",\"payload\":{\"input\":\"=input.input\",\"script\":\"<<input.script>>\",\"requirements\":\"<<input.requirements>>\"},\"timeout\":\"60\",\"log_error_on_status\":[\"400-499\",\"500-503\",\"505-599\"]}","position":{"x":750,"y":-765},"timeSavedUnit":"minutes","timeSavedValue":0,"monitorAllEvents":false,"monitorFailures":false,"monitorNoEventsEmitted":null},{"type":"groupInput","name":"Input","description":null,"disabled":false,"options":"{\"options\":[{\"name\":\"Input\",\"type\":\"OBJECT\",\"description\":\"The input data which will be passed into your script.\"},{\"name\":\"Script\",\"type\":\"TEXT\",\"description\":\"The source code of your script. The logic of the script should be in a function called 'main'.\"},{\"name\":\"Requirements\",\"type\":\"TEXT\",\"required\":false,\"description\":\"Dependencies required to run the Python script in the same format of a requirements.txt file. Can be removed if the script doesn't require any dependencies.\"}]}","position":{"x":750,"y":-915},"timeSavedUnit":"minutes","timeSavedValue":0,"monitorAllEvents":false,"monitorFailures":false,"monitorNoEventsEmitted":null},{"type":"groupOutput","name":"Output","description":null,"disabled":false,"options":"{\"payload\":{\"output\":\"=IF(LOCAL.execute_result, LOCAL.execute_result, check_for_result.body.output)\",\"logs\":\"<<IF(LOCAL.execute_logs, LOCAL.execute_logs, check_for_result.body.logs)>>\"},\"local\":{\"execute_result\":\"=execute_script_using_toolkit.body.output\",\"execute_logs\":\"=execute_script_using_toolkit.body.logs\"}}","position":{"x":750,"y":-525},"timeSavedUnit":"minutes","timeSavedValue":0,"monitorAllEvents":false,"monitorFailures":false,"monitorNoEventsEmitted":null},{"type":"trigger","name":"Ran Successfully","description":null,"disabled":false,"options":"{\"rules\":[{\"type\":\"field==value\",\"value\":\"200\",\"path\":\"<< execute_script_using_toolkit.status>>\"}]}","position":{"x":750,"y":-645},"timeSavedUnit":"minutes","timeSavedValue":0,"monitorAllEvents":false,"monitorFailures":false,"monitorNoEventsEmitted":null},{"type":"groupOutput","name":"Error Output","description":null,"disabled":false,"options":"{\"payload\":{\"error\":\"=IF(execute_script_using_toolkit.body.error = NULL, check_for_result.body.error, execute_script_using_toolkit.body.error)\"}}","position":{"x":1260,"y":-255},"timeSavedUnit":"minutes","timeSavedValue":0,"monitorAllEvents":false,"monitorFailures":false,"monitorNoEventsEmitted":null},{"type":"trigger","name":"Error","description":null,"disabled":false,"options":"{\"rules\":[{\"type\":\"formula\",\"value\":\"<<NULL>>\",\"path\":\"=execute_script_using_toolkit.body.error != NULL || check_for_result.body.error != NULL\"}]}","position":{"x":1260,"y":-375},"timeSavedUnit":"minutes","timeSavedValue":0,"monitorAllEvents":false,"monitorFailures":false,"monitorNoEventsEmitted":null},{"type":"trigger","name":"Timed Out","description":null,"disabled":false,"options":"{\"rules\":[{\"type\":\"field==value\",\"value\":\"504\",\"path\":\"<<execute_script_using_toolkit.status>>\"}]}","position":{"x":1005,"y":-525},"timeSavedUnit":"minutes","timeSavedValue":0,"monitorAllEvents":false,"monitorFailures":false,"monitorNoEventsEmitted":null},{"type":"eventTransformation","name":"Wait 10 Seconds","description":null,"disabled":false,"options":"{\"mode\":\"delay\",\"seconds\":\"10\"}","position":{"x":1005,"y":-255},"timeSavedUnit":"minutes","timeSavedValue":0,"monitorAllEvents":false,"monitorFailures":false,"monitorNoEventsEmitted":null},{"type":"eventTransformation","name":"Only try 5 times","description":null,"disabled":false,"options":"{\"mode\":\"deduplicate\",\"path\":\"<<META.story_run.id>>\",\"tolerance\":\"5\",\"period\":\"600\"}","position":{"x":1005,"y":-375},"timeSavedUnit":"minutes","timeSavedValue":0,"monitorAllEvents":false,"monitorFailures":false,"monitorNoEventsEmitted":null},{"type":"trigger","name":"Response found","description":null,"disabled":false,"options":"{\"rules\":[{\"type\":\"field==value\",\"value\":\"200\",\"path\":\"<<check_for_result.status>>\"}]}","position":{"x":1005,"y":15},"timeSavedUnit":"minutes","timeSavedValue":0,"monitorAllEvents":false,"monitorFailures":false,"monitorNoEventsEmitted":null},{"type":"httpRequest","name":"Check for Result","description":null,"disabled":false,"options":"{\"url\":\"<<execute_script_using_toolkit.body.response_url>>\",\"content_type\":\"application_json\",\"method\":\"get\"}","position":{"x":1005,"y":-105},"timeSavedUnit":"minutes","timeSavedValue":0,"monitorAllEvents":false,"monitorFailures":false,"monitorNoEventsEmitted":null}],"links":[{"sourceIdentifier":1,"receiverIdentifier":0},{"sourceIdentifier":3,"receiverIdentifier":2},{"sourceIdentifier":6,"receiverIdentifier":8},{"sourceIdentifier":8,"receiverIdentifier":7},{"sourceIdentifier":7,"receiverIdentifier":10},{"sourceIdentifier":10,"receiverIdentifier":9},{"sourceIdentifier":9,"receiverIdentifier":2},{"sourceIdentifier":0,"receiverIdentifier":3},{"sourceIdentifier":3,"receiverIdentifier":6,"secondary":true},{"sourceIdentifier":6,"receiverIdentifier":5,"secondary":true},{"sourceIdentifier":5,"receiverIdentifier":4},{"sourceIdentifier":9,"receiverIdentifier":5,"secondary":true},{"sourceIdentifier":5,"receiverIdentifier":8,"secondary":true}],"annotations":[]},"timeSavedUnit":"minutes","timeSavedValue":0,"monitorAllEvents":false,"monitorFailures":false,"monitorNoEventsEmitted":null,"recordType":null,"recordWriters":[],"form":null,"cardIconName":null,"cardIconImageContents":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxv\nbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8v\nd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB2ZXJzaW9uPSIxLjAi\nCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBp\nbmtzY2FwZTp2ZXJzaW9uPSIxLjIuMSAoOWM2ZDQxZTQxMCwgMjAyMi0wNy0x\nNCkiCiAgIHNvZGlwb2RpOmRvY25hbWU9InB5dGhvbi1sb2dvLW9ubHkuc3Zn\nIgogICB3aWR0aD0iOTIuMDcwMjM2cHQiCiAgIGhlaWdodD0iMTAxLjAwMTA4\ncHQiCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0icHl0aG9uLWxvZ28t\nb25seS5wbmciCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIyMzIuNDQiCiAg\nIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIyMzIuNDQiCiAgIHhtbG5zOmlua3Nj\nYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3Nj\nYXBlIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJj\nZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOnhsaW5r\nPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICB4bWxucz0iaHR0\ncDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDov\nL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3\ndy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6\nY2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6\nZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICA8bWV0\nYWRhdGEKICAgICBpZD0ibWV0YWRhdGEzNzEiPgogICAgPHJkZjpSREY+CiAg\nICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8\nZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8\nZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwu\nb3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29y\naz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxzb2RpcG9kaTpu\nYW1lZHZpZXcKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIyMDgwIgog\nICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTk3NiIKICAgICBpbmtzY2Fw\nZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIw\nLjAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwLjAiCiAgICAgZ3JpZHRvbGVy\nYW5jZT0iMTAuMCIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwLjAiCiAgICAg\nYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2\nIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBpZD0iYmFzZSIKICAg\nICBpbmtzY2FwZTp6b29tPSIyLjE0NjE2NDIiCiAgICAgaW5rc2NhcGU6Y3g9\nIjkxLjU1ODY5OCIKICAgICBpbmtzY2FwZTpjeT0iNDcuOTkyNiIKICAgICBp\nbmtzY2FwZTp3aW5kb3cteD0iMTA5MiIKICAgICBpbmtzY2FwZTp3aW5kb3ct\neT0iNzIiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnMiIKICAg\nICB3aWR0aD0iMjEwbW0iCiAgICAgaGVpZ2h0PSI0MG1tIgogICAgIHVuaXRz\nPSJtbSIKICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iMiIKICAgICBp\nbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSIwIgogICAgIGlua3NjYXBlOmRl\nc2tjb2xvcj0iI2QxZDFkMSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0\ncz0icHQiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndp\nbmRvdy1tYXhpbWl6ZWQ9IjAiIC8+CiAgPGRlZnMKICAgICBpZD0iZGVmczQi\nPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGll\nbnQyNzk1Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29s\nb3I6I2I4YjhiODtzdG9wLW9wYWNpdHk6MC40OTgwMzkyMjsiCiAgICAgICAg\nIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AyNzk3IiAvPgogICAgICA8\nc3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojN2Y3ZjdmO3N0b3At\nb3BhY2l0eTowOyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0i\nc3RvcDI3OTkiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVh\nckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyNzg3Ij4KICAg\nICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzdmN2Y3Zjtz\ndG9wLW9wYWNpdHk6MC41OyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAg\nICBpZD0ic3RvcDI3ODkiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxl\nPSJzdG9wLWNvbG9yOiM3ZjdmN2Y7c3RvcC1vcGFjaXR5OjA7IgogICAgICAg\nICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMjc5MSIgLz4KICAgIDwv\nbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlk\nPSJsaW5lYXJHcmFkaWVudDM2NzYiPgogICAgICA8c3RvcAogICAgICAgICBz\ndHlsZT0ic3RvcC1jb2xvcjojYjJiMmIyO3N0b3Atb3BhY2l0eTowLjU7Igog\nICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMzY3OCIgLz4K\nICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IzYjNi\nMztzdG9wLW9wYWNpdHk6MDsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAg\nICAgaWQ9InN0b3AzNjgwIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAg\nIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzIz\nNiI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNm\nNGY0ZjQ7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAg\nICAgICAgaWQ9InN0b3AzMjQ0IiAvPgogICAgICA8c3RvcAogICAgICAgICBz\ndHlsZT0ic3RvcC1jb2xvcjp3aGl0ZTtzdG9wLW9wYWNpdHk6MSIKICAgICAg\nICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDMyNDAiIC8+CiAgICA8\nL2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBp\nZD0ibGluZWFyR3JhZGllbnQ0NjcxIj4KICAgICAgPHN0b3AKICAgICAgICAg\nc3R5bGU9InN0b3AtY29sb3I6I2ZmZDQzYjtzdG9wLW9wYWNpdHk6MTsiCiAg\nICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A0NjczIiAvPgog\nICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZlODcz\nO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAg\nIGlkPSJzdG9wNDY3NSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8\nbGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ2ODki\nPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNWE5\nZmQ0O3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAg\nICAgICBpZD0ic3RvcDQ2OTEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0\neWxlPSJzdG9wLWNvbG9yOiMzMDY5OTg7c3RvcC1vcGFjaXR5OjE7IgogICAg\nICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNDY5MyIgLz4KICAg\nIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAg\nIHgxPSIyMjQuMjM5OTYiCiAgICAgICB5MT0iMTQ0Ljc1NzE3IgogICAgICAg\neDI9Ii02NS4zMDg1MDIiCiAgICAgICB5Mj0iMTQ0Ljc1NzE3IgogICAgICAg\naWQ9ImxpbmVhckdyYWRpZW50Mjk4NyIKICAgICAgIHhsaW5rOmhyZWY9IiNs\naW5lYXJHcmFkaWVudDQ2NzEiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2Vy\nU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xh\ndGUoMTAwLjI3MDIsOTkuNjExMTYpIiAvPgogICAgPGxpbmVhckdyYWRpZW50\nCiAgICAgICB4MT0iMTcyLjk0MjA4IgogICAgICAgeTE9Ijc3LjQ3NTk4MyIK\nICAgICAgIHgyPSIyNi42NzAyOTgiCiAgICAgICB5Mj0iNzYuMzEzMTMzIgog\nICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mjk5MCIKICAgICAgIHhsaW5rOmhy\nZWY9IiNsaW5lYXJHcmFkaWVudDQ2ODkiCiAgICAgICBncmFkaWVudFVuaXRz\nPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0\ncmFuc2xhdGUoMTAwLjI3MDIsOTkuNjExMTYpIiAvPgogICAgPGxpbmVhckdy\nYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAg\nICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0Njg5IgogICAgICAgaWQ9\nImxpbmVhckdyYWRpZW50MjU4NyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVz\nZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5z\nbGF0ZSgxMDAuMjcwMiw5OS42MTExNikiCiAgICAgICB4MT0iMTcyLjk0MjA4\nIgogICAgICAgeTE9Ijc3LjQ3NTk4MyIKICAgICAgIHgyPSIyNi42NzAyOTgi\nCiAgICAgICB5Mj0iNzYuMzEzMTMzIiAvPgogICAgPGxpbmVhckdyYWRpZW50\nCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGlu\nazpocmVmPSIjbGluZWFyR3JhZGllbnQ0NjcxIgogICAgICAgaWQ9ImxpbmVh\nckdyYWRpZW50MjU4OSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFj\nZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgx\nMDAuMjcwMiw5OS42MTExNikiCiAgICAgICB4MT0iMjI0LjIzOTk2IgogICAg\nICAgeTE9IjE0NC43NTcxNyIKICAgICAgIHgyPSItNjUuMzA4NTAyIgogICAg\nICAgeTI9IjE0NC43NTcxNyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAg\nICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJl\nZj0iI2xpbmVhckdyYWRpZW50NDY4OSIKICAgICAgIGlkPSJsaW5lYXJHcmFk\naWVudDIyNDgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVz\nZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAwLjI3\nMDIsOTkuNjExMTYpIgogICAgICAgeDE9IjE3Mi45NDIwOCIKICAgICAgIHkx\nPSI3Ny40NzU5ODMiCiAgICAgICB4Mj0iMjYuNjcwMjk4IgogICAgICAgeTI9\nIjc2LjMxMzEzMyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5r\nc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xp\nbmVhckdyYWRpZW50NDY3MSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDIy\nNTAiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAg\nICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAwLjI3MDIsOTku\nNjExMTYpIgogICAgICAgeDE9IjIyNC4yMzk5NiIKICAgICAgIHkxPSIxNDQu\nNzU3MTciCiAgICAgICB4Mj0iLTY1LjMwODUwMiIKICAgICAgIHkyPSIxNDQu\nNzU3MTciIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBl\nOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJH\ncmFkaWVudDQ2NzEiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyMjU1Igog\nICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBn\ncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNTYyNTQxLDAsMCwwLjU2Nzk3\nMiwtMTEuNTk3NCwtNy42MDk1NCkiCiAgICAgICB4MT0iMjI0LjIzOTk2Igog\nICAgICAgeTE9IjE0NC43NTcxNyIKICAgICAgIHgyPSItNjUuMzA4NTAyIgog\nICAgICAgeTI9IjE0NC43NTcxNyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAog\nICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6\naHJlZj0iI2xpbmVhckdyYWRpZW50NDY4OSIKICAgICAgIGlkPSJsaW5lYXJH\ncmFkaWVudDIyNTgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VP\nblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC41NjI1\nNDEsMCwwLDAuNTY3OTcyLC0xMS41OTc0LC03LjYwOTU0KSIKICAgICAgIHgx\nPSIxNzIuOTQyMDgiCiAgICAgICB5MT0iNzYuMTc2MjI0IgogICAgICAgeDI9\nIjI2LjY3MDI5OCIKICAgICAgIHkyPSI3Ni4zMTMxMzMiIC8+CiAgICA8cmFk\naWFsR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIK\nICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDI3OTUiCiAgICAg\nICBpZD0icmFkaWFsR3JhZGllbnQyODAxIgogICAgICAgY3g9IjYxLjUxODg4\nMyIKICAgICAgIGN5PSIxMzIuMjg1NzUiCiAgICAgICBmeD0iNjEuNTE4ODgz\nIgogICAgICAgZnk9IjEzMi4yODU3NSIKICAgICAgIHI9IjI5LjAzNjkxMyIK\nICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMC4xNzc5\nNjYsMCwxMDguNzQzNCkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3Bh\nY2VPblVzZSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2Nh\ncGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVh\nckdyYWRpZW50NDY3MSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDE0NzUi\nCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAg\nIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC41NjI1NDEsMCwwLDAuNTY3\nOTcyLC0xNC45OTExMiwtMTEuNzAyMzcxKSIKICAgICAgIHgxPSIxNTAuOTYx\nMTEiCiAgICAgICB5MT0iMTkyLjM1MTc2IgogICAgICAgeDI9IjExMi4wMzE0\nNCIKICAgICAgIHkyPSIxMzcuMjcyOTkiIC8+CiAgICA8bGluZWFyR3JhZGll\nbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhs\naW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ2ODkiCiAgICAgICBpZD0ibGlu\nZWFyR3JhZGllbnQxNDc4IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNw\nYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAu\nNTYyNTQxLDAsMCwwLjU2Nzk3MiwtMTQuOTkxMTIsLTExLjcwMjM3MSkiCiAg\nICAgICB4MT0iMjYuNjQ4OTM3IgogICAgICAgeTE9IjIwLjYwMzc4MSIKICAg\nICAgIHgyPSIxMzUuNjY1MjUiCiAgICAgICB5Mj0iMTE0LjM5NzY3IiAvPgog\nICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJh\nbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyNzk1\nIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MTQ4MCIKICAgICAgIGdyYWRp\nZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFu\nc2Zvcm09Im1hdHJpeCgxLjc0OTA1NjVlLTgsLTAuMjM5OTQ2OTYsMS4wNTQ2\nNjgsMy43OTE1NDU3ZS03LC04My43MDA4LDE0Mi40NjIwMSkiCiAgICAgICBj\neD0iNjEuNTE4ODgzIgogICAgICAgY3k9IjEzMi4yODU3NSIKICAgICAgIGZ4\nPSI2MS41MTg4ODMiCiAgICAgICBmeT0iMTMyLjI4NTc1IgogICAgICAgcj0i\nMjkuMDM2OTEzIiAvPgogIDwvZGVmcz4KICA8cGF0aAogICAgIHN0eWxlPSJm\naWxsOnVybCgjbGluZWFyR3JhZGllbnQxNDc4KTtmaWxsLW9wYWNpdHk6MSIK\nICAgICBkPSJNIDU0LjkxODc4NSw5LjE5MjczODllLTQgQyA1MC4zMzUxMzIs\nMC4wMjIyMTcyNyA0NS45NTc4NDYsMC40MTMxMzY5NyA0Mi4xMDYyODUsMS4w\nOTQ2NjkzIDMwLjc2MDA2OSwzLjA5OTE3MzEgMjguNzAwMDM2LDcuMjk0Nzcx\nNCAyOC43MDAwMzUsMTUuMDMyMTY5IHYgMTAuMjE4NzUgaCAyNi44MTI1IHYg\nMy40MDYyNSBoIC0yNi44MTI1IC0xMC4wNjI1IGMgLTcuNzkyNDU5LDAgLTE0\nLjYxNTc1ODgsNC42ODM3MTcgLTE2Ljc0OTk5OTgsMTMuNTkzNzUgLTIuNDYx\nODE5OTgsMTAuMjEyOTY2IC0yLjU3MTAxNTA4LDE2LjU4NjAyMyAwLDI3LjI1\nIDEuOTA1OTI4Myw3LjkzNzg1MiA2LjQ1NzU0MzIsMTMuNTkzNzQ4IDE0LjI0\nOTk5OTgsMTMuNTkzNzUgaCA5LjIxODc1IHYgLTEyLjI1IGMgMCwtOC44NDk5\nMDIgNy42NTcxNDQsLTE2LjY1NjI0OCAxNi43NSwtMTYuNjU2MjUgaCAyNi43\nODEyNSBjIDcuNDU0OTUxLDAgMTMuNDA2MjUzLC02LjEzODE2NCAxMy40MDYy\nNSwtMTMuNjI1IHYgLTI1LjUzMTI1IGMgMCwtNy4yNjYzMzg2IC02LjEyOTk4\nLC0xMi43MjQ3NzcxIC0xMy40MDYyNSwtMTMuOTM3NDk5NyBDIDY0LjI4MTU0\nOCwwLjMyNzk0Mzk3IDU5LjUwMjQzOCwtMC4wMjAzNzkwMyA1NC45MTg3ODUs\nOS4xOTI3Mzg5ZS00IFogbSAtMTQuNSw4LjIxODc1MDEyNjExIGMgMi43Njk1\nNDcsMCA1LjAzMTI1LDIuMjk4NjQ1NiA1LjAzMTI1LDUuMTI0OTk5NiAtMmUt\nNiwyLjgxNjMzNiAtMi4yNjE3MDMsNS4wOTM3NSAtNS4wMzEyNSw1LjA5Mzc1\nIC0yLjc3OTQ3NiwtMWUtNiAtNS4wMzEyNSwtMi4yNzc0MTUgLTUuMDMxMjUs\nLTUuMDkzNzUgLTEwZS03LC0yLjgyNjM1MyAyLjI1MTc3NCwtNS4xMjQ5OTk2\nIDUuMDMxMjUsLTUuMTI0OTk5NiB6IgogICAgIGlkPSJwYXRoMTk0OCIgLz4K\nICA8cGF0aAogICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQx\nNDc1KTtmaWxsLW9wYWNpdHk6MSIKICAgICBkPSJtIDg1LjYzNzUzNSwyOC42\nNTcxNjkgdiAxMS45MDYyNSBjIDAsOS4yMzA3NTUgLTcuODI1ODk1LDE2Ljk5\nOTk5OSAtMTYuNzUsMTcgaCAtMjYuNzgxMjUgYyAtNy4zMzU4MzMsMCAtMTMu\nNDA2MjQ5LDYuMjc4NDgzIC0xMy40MDYyNSwxMy42MjUgdiAyNS41MzEyNDcg\nYyAwLDcuMjY2MzQ0IDYuMzE4NTg4LDExLjU0MDMyNCAxMy40MDYyNSwxMy42\nMjUwMDQgOC40ODczMzEsMi40OTU2MSAxNi42MjYyMzcsMi45NDY2MyAyNi43\nODEyNSwwIDYuNzUwMTU1LC0xLjk1NDM5IDEzLjQwNjI1MywtNS44ODc2MSAx\nMy40MDYyNSwtMTMuNjI1MDA0IFYgODYuNTAwOTE5IGggLTI2Ljc4MTI1IHYg\nLTMuNDA2MjUgaCAyNi43ODEyNSAxMy40MDYyNTQgYyA3Ljc5MjQ2MSwwIDEw\nLjY5NjI1MSwtNS40MzU0MDggMTMuNDA2MjQxLC0xMy41OTM3NSAyLjc5OTMz\nLC04LjM5ODg4NiAyLjY4MDIyLC0xNi40NzU3NzYgMCwtMjcuMjUgLTEuOTI1\nNzgsLTcuNzU3NDQxIC01LjYwMzg3LC0xMy41OTM3NSAtMTMuNDA2MjQxLC0x\nMy41OTM3NSB6IG0gLTE1LjA2MjUsNjQuNjU2MjUgYyAyLjc3OTQ3OCwzZS02\nIDUuMDMxMjUsMi4yNzc0MTcgNS4wMzEyNSw1LjA5Mzc0NyAtMmUtNiwyLjgy\nNjM1NCAtMi4yNTE3NzUsNS4xMjUwMDQgLTUuMDMxMjUsNS4xMjUwMDQgLTIu\nNzY5NTUsMCAtNS4wMzEyNSwtMi4yOTg2NSAtNS4wMzEyNSwtNS4xMjUwMDQg\nMmUtNiwtMi44MTYzMyAyLjI2MTY5NywtNS4wOTM3NDcgNS4wMzEyNSwtNS4w\nOTM3NDcgeiIKICAgICBpZD0icGF0aDE5NTAiIC8+CiAgPGVsbGlwc2UKICAg\nICBzdHlsZT0ib3BhY2l0eTowLjQ0MzgyO2ZpbGw6dXJsKCNyYWRpYWxHcmFk\naWVudDE0ODApO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0\ncm9rZTpub25lO3N0cm9rZS13aWR0aDoxNS40MTc0O3N0cm9rZS1taXRlcmxp\nbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEi\nCiAgICAgaWQ9InBhdGgxODk0IgogICAgIGN4PSI1NS44MTY3NjEiCiAgICAg\nY3k9IjEyNy43MDA3OSIKICAgICByeD0iMzUuOTMwOTc3IgogICAgIHJ5PSI2\nLjk2NzMxMTkiIC8+Cjwvc3ZnPgo=\n","cardIconImageFilename":"Python-logo-notext.svg","createdFromTemplateGuid":null,"createdFromTemplateVersion":null,"originStoryIdentifier":"cloud:d521f765a49c72507257a2620612ee96:7c746bd2b6e1c267b1fcba09aefe9d86"},{"disabled":false,"name":"generate data","description":null,"options":"{\"mode\":\"message_only\",\"loop\":false,\"payload\":{\"message\":\"Please do not share your credit card number (1234-5678-9012-3456) or your social security number (123-45-6789). You can contact us at example@example.com.\"}}","position":{"x":1560,"y":1695},"type":"eventTransformation","timeSavedUnit":"minutes","timeSavedValue":0,"monitorAllEvents":false,"monitorFailures":false,"monitorNoEventsEmitted":null,"recordType":null,"recordWriters":[],"form":null,"cardIconName":null,"createdFromTemplateGuid":null,"createdFromTemplateVersion":null,"originStoryIdentifier":"cloud:9a1b89cf9149a49b190c4b34e90866a0:ee398ae9f7dd021c860cbb54d85e0cd9"},{"disabled":false,"name":"result","description":null,"options":"{\"mode\":\"message_only\",\"loop\":false,\"payload\":{\"output\":\"=execute_python_script.output\"}}","position":{"x":1560,"y":1875},"type":"eventTransformation","timeSavedUnit":"minutes","timeSavedValue":0,"monitorAllEvents":false,"monitorFailures":false,"monitorNoEventsEmitted":null,"recordType":null,"recordWriters":[],"form":null,"cardIconName":null,"createdFromTemplateGuid":null,"createdFromTemplateVersion":null,"originStoryIdentifier":"cloud:9a1b89cf9149a49b190c4b34e90866a0:ee398ae9f7dd021c860cbb54d85e0cd9"}],"links":[{"sourceIdentifier":1,"receiverIdentifier":0},{"sourceIdentifier":0,"receiverIdentifier":2}],"diagramNotes":[]}

Let's dig into a practical example 

The Python script below takes in a dictionary object with a message key and replaces any credit card numbers, social security numbers, and email addresses in the message with placeholders.

import re

def main(input):
    message = input['message']
    # Remove credit card numbers
    message = re.sub(r"\\b(?:\\d[ -]*?){13,16}\\b", "[CREDIT CARD]", message)
    
    # Remove social security numbers
    message = re.sub(r"\\b\\d{3}-?\\d{2}-?\\d{4}\\b", "[SSN]", message)
    
    # Remove email addresses
    message = re.sub(r"\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}\\b", "[EMAIL]", message)
    
    return message

Running the script 

To run this script using the template action, populate the script field with the given script and input field with an object that has a message key. The value for message should be the text you want to process.

After running the script, the processed text will be returned with any credit card numbers, social security numbers, and email addresses replaced with placeholders.

Limitations and considerations 

There are four limitations to keep in mind.

  1. Rate limiting. For script runs originating from your Tines tenant, the rate limit is 10 per minute. For anonymous requests, the limit is set to 5 per hour.

  2. Timeout. The feature employs a 10-second timeout window.

  3. Programming languages. This feature is limited to Python scripts. It does not run other programming languages.

Before deploying code, confirm it meets the the following:

  • [ ] Executes within 10-seconds

  • [ ] Accounts for rate limiting

  • [ ] Written in Python

Running scripts with dependencies 

In addition to the 'Execute Python Script' template, there is an 'Execute Python Script With Dependencies' group template. This template accepts one additional input, Requirements. The Requirements input accepts a list of Python dependencies that are needed to execute your script. This input should follow the same formatting as a requirements.txt file, a common convention in Python dependency management.

This is a great way for highly technical users to run scripts in Tines.

Was this helpful?