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:
Go into templates and search for the 'Execute Python Script' group action template
Pull this onto your storyboard
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.
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.
Timeout. The feature employs a 10-second timeout window.
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.