You can interact with the discussions on each DSS object through the API.

Obtaining the discussions#

The first step is always to retrieve a DSSObjectDiscussions object corresponding to the DSS object your manipulating. Generally, it’s through a method called get_object_discussions

# Get the discussions of a dataset
discussions = dataset.get_object_discussions()

# Get the discussion of a wiki article
discussions = wiki.get_article("my article").get_object_discussions()

# Get the discussions of a project
discussions = project.get_object_discussions()

# ...

List the discussions of an object#

for discussion in discussions.list_discussions():
        # Discussion is a DSSDiscussion object
        print("Discussion with id: %s" % discussion.discussion_id)

Reading the messages of a discussion#

for message in discussion.get_replies():
        print("Message by author %s" % message.get_author())
        print("Message posted on %s" % message.get_timestamp())
        print("Message content: %s" % message.get_text())

Adding a new message to a discussion#

discussion.add_reply("hello world\n# This is Markdown")

Creating a new discussion#

new_discussion = discussions.create_discussion("Topic", "Hello, this is the message")

Detailed examples#

This section contains more advanced examples on discussions.

Export discussions from a Project#

You can programmatically retrieve all discussion messages from various “commentable” items in a Project.

import dataiku

def get_discussions_from_object(object_handle):
    """Return all discussion messages from a commentable object.
    disc_data = []
    discussions = object_handle.get_object_discussions()
    for disc in discussions.list_discussions():
        disc_content = {}
        disc_content["topic"] = disc.get_metadata()["topic"]
        msg_list = []
        for msg in disc.get_replies():
            msg_content = {}
            msg_content["author"] = msg.get_author()
            msg_content["ts"] = msg.get_timestamp()
            msg_content["text"] = msg.get_text()
        disc_content["messages"] = msg_list
    return disc_data

def export_project_discussions(project):
    """Return all discussion data for a given Project.

    proj_disc = {}
    dispatch = {
        "datasets": {
            "f_list": project.list_datasets, 
            "f_get": project.get_dataset
        "recipes": {
            "f_list": project.list_recipes,
            "f_get": project.get_recipe
        "scenarios": {
            "f_list": project.list_scenarios,
            "f_get": project.get_scenario
        "managed_folders": {
            "f_list": project.list_managed_folders,
            "f_get": project.get_managed_folder
    for obj_type, funcs in dispatch.items():
        obj_disc = []
        for item in funcs["f_list"]():
            disc = {}
            disc["name"] = item["name"]
            obj_handle = funcs["f_get"](item["name"])
            disc["discussions"] = get_discussions_from_object(obj_handle)
        proj_disc[obj_type] = obj_disc
    # Special case: project discussions
    proj_disc["project"] = get_discussions_from_object(project)
    # Special case: wiki
    wiki_disc = []
    articles = project.get_wiki().list_articles()
    for art in articles:
        art_disc = {}
        art_disc["article_id"] = art.article_id
        art_disc["discussions"] = get_discussions_from_object(art)
    proj_disc["wiki"] = wiki_disc
    return proj_disc

client = dataiku.api_client()
project = client.get_default_project()
discussions = export_project_discussions(project)

Reference documentation#


A handle to manage discussions on a DSS object.


A handle to interact with a discussion.


A read-only handle to access a discussion reply.