# Python execution context API

# get_activity()

product activity getter. returns daily and weekly product activity

Example:

{
  "24hr": {"views": 93, "conversions": 11, "revenue": 562.45},
  "7d": {"views": 93, "conversions": 11, "revenue": 562.45}
}

# get_attrs()

product attribute getter. returns product attributes array (list)

# set_attr(name, value)

product attribute setter. sets product attribute by name and value. can only be called before or after pricing.

# Args:

  • name (string) - attribute name
  • value (string) - attribute value

# del_attr(name)

product attribute remover. removes product attribute by name. can only be called before or after pricing.

# Args:

  • name (string) - attribute name

# get_cost()

product cost getter. returns priced product cost (float)

# get_inventory()

priced product inventory getter. returns product inventory level (int)

# get_channel()

price channel name getter. returns current channel name (string)

# get_client_channels()

Client channels list getter, applicable to omni-channel systems. (list[str])

# get_ql_recommendation()

Quicklizard recommended price getter. returns price recommendation generated by QL pricing engine, which can be used in custom cost functions (float)

# get_recommendation()

recommended price getter. returns price recommendation generated by custom function (float)

# get_result()

code execution result getter. returns a dict with all fields related to recommendation, cost and conditions (dict)

Example: {'price': 12.32,'explanation': 'my custom code','uid': '1dee3155eccdeead','cost': 9.34, 'execute_rule': False}

# get_shelf_price()

product shelf price getter. returns product shelf price (float)

# get_variables()

execution context variables getter. returns dictionary with execution context variables as set in pricing rule

# get_vat()

priced product VAT getter. returns product VAT (float)

# get_config()

product config getter. returns product config list or empty list if undefined (list)

Example: [{"field": "size", "value": "medium"}]

# get_competitor_prices()

product competitor prices getter. returns competitor prices array (list)

# get_rule_condition_flag()

rule conditions flag getter. returns boolean flag that indicates whether rule should be executed or not

# get_parameters()

global pricing parameters getter. returns dictionary of key / value pairs that are defined in QL's UI, under Settings -> Global Pricing Parameters.

# get_created_at()

product creation date getter. returns product creation date as string

# get_rule_position()

rule position getter. returns product pricing rule position as string

# get_group_id()

group_id getter. returns product group id as string

# get_group_name()

group name getter. returns product group name as string

# get_label()

product label getter. returns product label as string

# get_product_id()

product id getter. returns the raw product id as string

# get_pricing_explanation():

pricing explanation getter. returns product pricing explanation as string. available only in post-pricing functions.

# get_last_strategy_name():

last strategy name getter. returns the strategy name from the last pricing as string.

# get_last_strategy_id():

last strategy id getter. returns the strategy id from the last pricing as string.

# kv_get(key, scope=None)

get value from K/V store and return it, or None if an error occurred

# Args:

  • key (string) - key to get value from
  • scope (string) - optional global scope value was saved on

# kv_del(key, scope=None)

delete value from K/V store by key

# Args:

  • key (string) - key delete from store
  • scope (string) - optional global scope value was saved on

# kv_set(key, val, ttl, scope=None)

set value in K/V store

# Args:

  • key (string) - unique key to store value
  • value (string) - value to store under key in K/V store
  • ttl (int) - value time-to-leave in seconds. Defaults to 172800 (2 day)
  • scope (string) - optional global scope to save value on

Please Note

Maximum TTL is 7 days. Values greater than 7 days will be decreases to match that limit

Scope Override

K/V values are scoped to client key. You can override this scope by passing a unique string to the scope argument, which will allow you to share values between client keys. Override scopes are global - If you override the default scope, you should make sure your scope value is unique and cannot be reproduced by other users.

# kv_incr(key, ttl, scope=None)

increment counter identified by key by 1

# Args:

  • key (string) - key of the counter to increment
  • ttl (int) - value time-to-leave in seconds. Defaults to 172800 (2 day)
  • scope (string) - optional global scope to save value on

Please Note

Maximum TTL is 7 days. Values greater than 7 days will be decreases to match that limit

# kv_decr(key, ttl, scope=None)

decrease counter identified by key by 1

# Args:

  • key (string) - key of the counter to decrease
  • ttl (int) - value time-to-leave in seconds. Defaults to 172800 (2 day)
  • scope (string) - optional global scope to save value on

Please Note

Maximum TTL is 7 days. Values greater than 7 days will be decreases to match that limit

# set_cost(cost)

cost setter. used to set cost after rule logic was executed

# Args:

  • cost (float) - calculated cost to set

# set_explanation(string)

recommended price explanation setter. used to set recommendation explanation text

# Args:

  • str (string) - recommended price explanation to set

# set_recommendation(recommendation)

recommended price setter. used to set recommended price after rule logic was executed

# Args:

  • recommendation (float) - recommended price to set

# set_rule_condition_flag(flag)

rule conditions flag setter. sets a boolean flag that indicates whether rule should be executed or not

# Args:

  • flag (bool) - rule conditions flag

# send_to_pricing(product_ids)

accepts a list of product ids that should be sent to pricing (in the current channel) after your custom code finished running. can only be called after pricing

# Args:

  • product_ids (list[str]) - a list of product ids to send to pricing

# send_to_pricing_by_channel(product_id, channel)

accepts a product id and channel that should be sent to pricing after your custom code finished running. can only be called after pricing. (applicable to omni-channel systems)

# Args:

  • product_id (str) - product id to send to pricing
  • channel (str) - product channel

# log(msg)

append log message to logs array. use while writing code, to print and display log messages

# Args:

  • msg (string) - message to log

# add_widget(uid, channel, kind, title, position, data, ttl)

add widget to be rendered by QL UI on dimension page identified by uid.

For table widgets, pass an array of arrays, where the first array contains column names, and each subsequent array contains a row of data. For example:

[
  ['name', 'value'],
  ['name A', 'value A'],
  ['name B', 'value B']
]

For more flexibility, you can include links in the table data using the following structure. For example:

[
  ['name', 'value'],
  ['name A', {'text': 'All Products', 'linkTo': '/products'}],
  ['Product page', {'text': 'Next product', 'linkTo': 'gordrvt8mkab2e0fhi2sjgocglqmebah'}],
  [{'text': 'text text'}, {'text': 'External link', 'linkTo': 'https://www.quicklizard.com'}]
]

This structure allows you to seamlessly integrate both internal and external links into the table data.

  • The text property is the text that will be displayed in the table.
  • The linkTo property can be either a relative path (e.g., /products) for internal links or an absolute URL (e.g., https://www.quicklizard.com) for external links.
  • If using linkTo as an internal link, refer to the Vue Router documentation (opens new window) for details on what you can pass to it.

Please Note

If you are using linkTo as an internal link and provide a relative path, make sure to include a leading slash (/) in the path. Otherwise, the linkTo will be a product ID.

Product page link example:

{'text': 'Product', 'linkTo': 'gordrvt8mkab2e0fhi2sjgocglqmebah'}

or with a leading slash:

{'text': 'Product', 'linkTo': '/products/gordrvt8mkab2e0fhi2sjgocglqmebah'}

Other internal link examples:

{'text': 'Dashboard', 'linkTo': '/dashboards/performance'}
{'text': 'Products', 'linkTo': '/products'}

For chart:line widgets pass an array of x / y points, where x contains a single value, and y contains one or more named series (Y axis series names should be consistent across all rows). For example:

[
  {x: 'Sunday', y: {'Views': 4, 'Sales': 2}},
  {x: 'Monday', y: {'Views': 11, 'Sales': 3}}
]

For chart:composite widgets pass a dict with two fields:

  • data - an array of x / y points, where x contains a single value, and y contains one or more named series (Y axis series names should be consistent across all rows).
  • types - a dict with information about the chart type for each series. Supported types are: 'line', 'bar', 'area'

For example:

{
  data: [
    {x: 'Sunday', y: {'Views': 4, 'Sales': 2}},
    {x: 'Monday', y: {'Views': 11, 'Sales': 3}}
  ],
  types: {
    'Views': 'line',
    'Sales': 'bar'
  }
}

# Args:

  • uid (string) - widget target entity identifier. can be one of product UID, group ID
  • channel (string) - widget target price channel. 'all' / current channel name
  • kind (string) - widget kind. can be one of 'table', 'chart:line', 'chart:composite'
  • title (string) - widget title as it should be displayed in UI
  • position (int) - widget display position. position serves as an ID for the widget - writing different data to the same position overrides old data
  • data (list/dict) - widget data
  • ttl (int) - widget data TTL in seconds

# del_widget(uid, channel, position):

delete widget for entity identified by uid in position position and channel channel.

# Args:

  • uid (string) - widget target entity identifier. can be one of product UID, group ID
  • channel (string) - widget target price channel. 'all' / current channel name
  • position (int) - widget display position. position serves as an ID for the widget

# get_widget(uid, channel, position):

get widget for entity identified by uid in position position and channel channel.

# Args:

  • uid (string) - widget target entity identifier. can be one of product UID, group ID
  • channel (string) - widget target price channel. 'all' / current channel name
  • position (int) - widget display position. position serves as an ID for the widget

# get_widgets(uid, channel):

list all widgets entity identified by uid in channel channel.

# Args:

  • uid (string) - widget target entity identifier. can be one of product UID, group ID
  • channel (string) - widget target price channel. 'all' / current channel name

# send_message(recipient, subject, message):

Send message to recipient by email

# Args:

  • recipient (string) - message recipient email address
  • subject (string) - message subject
  • message (str) - message body

# set_strategy_id(strategy_id):

pricing strategy id setter. used to override the strategy defined in the group. can only be called before pricing

# Args:

  • strategy_id (string) - strategy id to set

# get_strategy_id():

pricing strategy id getter. returns the strategy id that was set by 'set_strategy_id' as string. can only be called before pricing