Community Spring Cleaning week is here! Join your fellow Maveryx in digging through your old posts and marking comments on them as solved. Learn more here!

Dev Space

Customize and extend the power of Alteryx with SDKs, APIs, custom tools, and more.
SOLVED

Problem with Python SDK tool which I made:- Tool Installer Error: Unable to find config

amitupadhyay
8 - Asteroid

Hello,

 

I made a simple Python SDK tool using the "Single Input Single Output Python SDK Example Tool" as template. I wish to read 2 string fields from Text Input Tool in my custom tool. I combine both the fields together and encode them using Python base64 encoder. (PS: Yes, we can do this using Alteryx Designer itself, but this just a trial tool which I made to get an idea of Alteryx's Python SDK capabilities).

 

I have the following file hierarchy:

Root folder name: KeySecretEncoder

Root folder contains: KeySecretEncoder (Folder) and Config.xml (general config file)

Further inside KeySecretEncoder (Folder): KeySecretEncoder_Engine.py (SDK Python code), KeySecretEncoder_Gui.html (Config GUI interface - 2 drop downs to select the fields from Text Input Tool), KeySecretEncoder_Icon.png (Tool icon image file), KeySecretEncoderConfig.xml (config file)

 

I have attached the .yxi (zip file containing the above mentioned files).

 

Upon dragging this .yxi file onto the Designer Canvas, I get "Tool Installer Error: Unable to find configuration file." I do have the configuration file and it is correct to the best of my knowledge. Can someone help me in this regard?

 

My Python task replica in Jupyter:

 

import pandas as pd
import hashlib
import hmac
import base64

# sample input to be obtained from the Text Input Tool
keysec = pd.DataFrame(data = {
    'Key':['sdfgfcxc', 'czsdxghff', 'zxnvbmoui'], 
    'Secret':['?45$dfd*632sd!', '&%$@#df56?89', '$@!cxxd556%?']})
print(keysec)

# function to convert string to bytes - utf-8
def conv2bytes(val):
    return bytes(val, 'utf-8')

keysec = keysec.applymap(conv2bytes)
print(keysec)

# function to combine the key and secret and encode them in base64 encoding format
def comb64enc(key, secret):
    return base64.b64encode(hmac.new(key, secret, hashlib.sha256).digest())

keysec['Signature'] = keysec.apply(lambda row: comb64enc(row.Key, row.Secret), axis=1)
print(keysec)

 

2 REPLIES 2
tlarsen7572
11 - Bolide
11 - Bolide

Get rid of the root folder. The YXI's root should contain the Config.xml file and the folder containing your plugin. See the attached ZIP file for the proper structure, which installs correctly on my machine.

amitupadhyay
8 - Asteroid

Thank you.