How can I make a script in python to reload an app in qlik cloud

At this moment I'm trying to reload a Qlik app through a python script, but I had a few problems, I'm gonna explain the things I already tested, but if someone knows how can I solve that, I will appreciate it a lot

const fs = require('fs');
const uid = require('uid-safe');
const jwt = require('jsonwebtoken');
const https = require('https')

const payload = {
  jti: uid.sync(32), // 32 bytes random string
  sub: '(id of my user that appears in assignment users)',
  subType: 'user',
  name: '(Name of my user)',
  email: '(email of my user)',
  email_verified: true,
};

const privateKey = fs.readFileSync("path/certificate.pem");

// I don't know the meaning of that 'kid and issuer have to match with the IDP config' 
// audience has to be qlik.API/jwt-login-session
const signingOptions = {
  keyid: I put = 'my-custom-jwt',
  algorithm: I put = 'RS256',
  issuer: '(hostname)',
  audience: I put = 'qlik.api/login/jwt-session',
};

const myToken = jwt.sign(payload, privateKey, signingOptions);

const qlikUrl = "(hostname)"

const data = JSON.stringify({"appId": "(appId)", "partial": true})
const options = {
  hostname: qlikUrl,
  port: 443,
  path: '/api/v1/reloads',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer '+ myToken
  }
}

https.request(options)
req.write(data)

qrs = qsAPI.QRS(proxy='hostname', user=('yor_domain', 'username', 'password'))

I say that because if I go to the python IDE, this show which parameters I have to put, and these are different, now I have to put this:

qrs = qsAPI.QRS(proxy='hostname', user=('userDirectory', 'userId', 'password'))

But still have an opportunity, because I can connect to Qlik through python if I find where I can download the certificate authentication of a user, but I don't know where is it in qlik cloud.

Can someone help me, please

Upvotes: 1

Views: 1084

Answers (2)

I finally have the solution of that as Stefan Stoichev said before publishing this post, the qsApi seems to be a python library for Qlik Sense Enterprise on Windows, and the correct library for the Qlik Cloud is qsaas, but I'm going to explain every step because I don't want that any person of this world suffer this.

First of all, you have to create an API KEY, in Qlik Cloud, IMPORTANT, you have to save the api_key code that appears in a green text box when you created successfully your API KEY, save this as your dear friend because you will need this code in the future

Subsequently, you have to create a new python code as this:

from qsaas.qsaas import Tenant
import JSON

api_key = <API_KEY>

q = Tenant(api_key=api_key, tenant=<hostname>,
           tenant_id=<tenant_id>)

q.post('reloads', json.dumps({'appId': 'dbf3e4ce-c6b3-4190-876c-c443a8691fa6'})))

Don't worry my dear friend if you don't know where is it, the 'hostname' and the 'tenant_id' are in qlik cloud, here is a little tutorial for you:

  • First login to your qlik
  • Then click on your profile photo
  • Click in about, and there you have these two data information

Upvotes: 1

Stefan Stoychev
Stefan Stoychev

Reputation: 5012

I havent tried with Python (only with JS/TS) but the approach should be the same.

Couple of things:

  • imo instead of web token you can try with API Key (for a start). Managing API keys -> Generating an API key from the hub.
  • the second point is that qsAPI seems to be for Qlik Sense Enterprise on Windows and not for SaaS.
  • the only Python lib dedicated for Qlik SaaS (that im aware of) is qsaas. Havent used it myself ... just found it on GH
  • and a bit of a warning regarding the partial: true. Please make sure that you really have to use partial reload. Partial reloads have a specific use case and be careful when using them ... just saying :)

Upvotes: 3

Related Questions