PDP

The PDP class is an example of how domolibrary uses composition. PDP is a feature of Datasets; however to segment classes, PDP was written as a separate class. In a future sprint the naming of this class may be modified for clarity.

PDP Policy Parameter


source

PDP_Parameter

 PDP_Parameter (column_name:str, column_values_ls:list,
                operator:str='EQUALS', ignore_case:bool=True,
                type:str='COLUMN')

source

PDP_Parameter.generate_body_from_parameter

 PDP_Parameter.generate_body_from_parameter ()

source

PDP_Parameter.generate_parameter_simple

 PDP_Parameter.generate_parameter_simple (obj)
param = PDP_Parameter(column_name="instance", column_values_ls=[os.environ['DOMO_INSTANCE']])

PDP_Parameter.generate_body_from_parameter(param)
{'type': 'COLUMN',
 'name': 'instance',
 'values': ['domo-community'],
 'operator': 'EQUALS',
 'ignoreCase': True}

PDP Policy


source

PDP_Policy

 PDP_Policy (dataset_id:str, filter_group_id:str, name:str,
             parameters_ls:list[dict], user_ls:list[str],
             group_ls:list[str], virtual_user_ls:list[str])
# #| export
# @patch_to(PDP_Policy)
# def add_parameter(self: PDP_Policy, parameter_obj):
#     self.parameters.concat(parameter_obj)

Dataset PDP Policies


source

Dataset_PDP_Policies

 Dataset_PDP_Policies (dataset)

Initialize self. See help(type(self)) for accurate signature.

Get PDP Policies from dataset

sample implementation of get_policies

token_auth = dmda.DomoTokenAuth(
    domo_instance=os.environ['DOMO_INSTANCE'],
    domo_access_token=os.environ["DOMO_ACCESS_TOKEN"],
)
# instantiate dataset class
dataset = dmd.DomoDataset(auth=token_auth, id=os.environ["DOJO_DATASET_ID"])
# instantiate dataset_pdp_policies
dataset_pdp_policies = Dataset_PDP_Policies(dataset=dataset)
# get policies
await dataset_pdp_policies.get_policies(return_raw=False)


# print(dataset.id)
# for res in res.response:
#     print(res['resources'])
warning this token has not been validated by who_am_i, run get_auth_token first
[PDP_Policy(dataset_id='04c1574e-c8be-4721-9846-c6ffa491144b', filter_group_id=797, name='All Rows', parameters_ls=None, user_ls=None, group_ls=None, virtual_user_ls=['vu:0ed4455a-35df-4049-8d6d-80341083b2f4', 'vu:566d15dc-9600-48af-b5ad-89cd0ea00cb7', 'vu:a8841f70-909a-438e-9853-49783846bf22', 'vu:ed6853bb-d8c7-4777-be41-0af475fde7ba', 'vu:20e30033-edb3-44f0-a121-5ccf5f8161bc']),
 PDP_Policy(dataset_id='04c1574e-c8be-4721-9846-c6ffa491144b', filter_group_id=1149, name='Test Update Policy Name', parameters_ls=[DictDot(name='objectID', value='000003007', values=['000003007'], type='COLUMN', operator='EQUALS', not=False, ignoreCase=True)], user_ls=[DomoUser(id='308783524', display_name='test1', email_address='test1@test.com', role_id=1563101750, department=None, title=None, avatar_key=None, phone_number=None, web_landing_page=None, web_mobile_landing_page=None, employee_id=None, employee_number=None, hire_date=None, reports_to=None, publisher_domain=None, subscriber_domain=None, virtual_user_id=None, custom_attributes={}, role=DomoRole(id=1563101750, name='dl_department_admin', description='deployed via domo_library script - updated 2024-03-23', is_system_role=0, is_default_role=None, grant_ls=[], membership_ls=[]))], group_ls=None, virtual_user_ls=['fc:e3ce6205-6717-42b4-ba1c-16b5e40eca98']),
 PDP_Policy(dataset_id='04c1574e-c8be-4721-9846-c6ffa491144b', filter_group_id=1224, name='t2', parameters_ls=[DictDot(name='Title', value='AWS Cost and Usage Dashboard', values=['AWS Cost and Usage Dashboard'], type='COLUMN', operator='EQUALS', not=False, ignoreCase=False)], user_ls=[DomoUser(id='663516735', display_name='test 3', email_address='test33@test.com', role_id=810756122, department=None, title=None, avatar_key=None, phone_number=None, web_landing_page=None, web_mobile_landing_page=None, employee_id=None, employee_number=None, hire_date=None, reports_to=None, publisher_domain=None, subscriber_domain=None, virtual_user_id=None, custom_attributes={}, role=DomoRole(id=810756122, name='super_admin', description='last updated - 2024-03-23', is_system_role=0, is_default_role=None, grant_ls=[], membership_ls=[])), DomoUser(id='1681443709', display_name='test 3 - updated 2024-03-23', email_address='test3@test.com', role_id=810756122, department=None, title=None, avatar_key=None, phone_number=None, web_landing_page=None, web_mobile_landing_page=None, employee_id=None, employee_number=None, hire_date=None, reports_to=None, publisher_domain=None, subscriber_domain=None, virtual_user_id=None, custom_attributes={}, role=DomoRole(id=810756122, name='super_admin', description='last updated - 2024-03-23', is_system_role=0, is_default_role=None, grant_ls=[], membership_ls=[]))], group_ls=[DomoGroup(id=1513712315, name='Test Group', type='closed', description='updated via API on 2024-01-02', custom_attributes={})], virtual_user_ls=None),
 PDP_Policy(dataset_id='04c1574e-c8be-4721-9846-c6ffa491144b', filter_group_id=1225, name='t3s', parameters_ls=[DictDot(name='Title', value='Accessing Goals Data', values=['Accessing Goals Data'], type='COLUMN', operator='EQUALS', not=False, ignoreCase=False)], user_ls=[DomoUser(id='987822803', display_name='test_pdp2@sony.com - via dl 2023-05-05', email_address='test_pdp2@sony.com', role_id=2097317660, department=None, title=None, avatar_key=None, phone_number=None, web_landing_page=None, web_mobile_landing_page=None, employee_id=None, employee_number=None, hire_date=None, reports_to=None, publisher_domain=None, subscriber_domain=None, virtual_user_id=None, custom_attributes={}, role=DomoRole(id=2097317660, name='Community_Default_Priviliged', description='Full access except for editing users and settings owners', is_system_role=0, is_default_role=None, grant_ls=[], membership_ls=[])), DomoUser(id='838842812', display_name='test_pdp3@sony.com - via dl 2023-05-05', email_address='test_pdp3@sony.com', role_id=2097317660, department=None, title=None, avatar_key=None, phone_number=None, web_landing_page=None, web_mobile_landing_page=None, employee_id=None, employee_number=None, hire_date=None, reports_to=None, publisher_domain=None, subscriber_domain=None, virtual_user_id=None, custom_attributes={}, role=DomoRole(id=2097317660, name='Community_Default_Priviliged', description='Full access except for editing users and settings owners', is_system_role=0, is_default_role=None, grant_ls=[], membership_ls=[])), DomoUser(id='1186995515', display_name='test_pdp1@sony.com - via dl 2023-05-05', email_address='test_pdp1@sony.com', role_id=2097317660, department=None, title=None, avatar_key=None, phone_number=None, web_landing_page=None, web_mobile_landing_page=None, employee_id=None, employee_number=None, hire_date=None, reports_to=None, publisher_domain=None, subscriber_domain=None, virtual_user_id=None, custom_attributes={}, role=DomoRole(id=2097317660, name='Community_Default_Priviliged', description='Full access except for editing users and settings owners', is_system_role=0, is_default_role=None, grant_ls=[], membership_ls=[]))], group_ls=None, virtual_user_ls=None),
 PDP_Policy(dataset_id='04c1574e-c8be-4721-9846-c6ffa491144b', filter_group_id=1226, name='sds', parameters_ls=[DictDot(name='Title', value='Adding Scale Markers to Your Charts', values=['Adding Scale Markers to Your Charts'], type='COLUMN', operator='EQUALS', not=False, ignoreCase=False)], user_ls=[DomoUser(id='838842812', display_name='test_pdp3@sony.com - via dl 2023-05-05', email_address='test_pdp3@sony.com', role_id=2097317660, department=None, title=None, avatar_key=None, phone_number=None, web_landing_page=None, web_mobile_landing_page=None, employee_id=None, employee_number=None, hire_date=None, reports_to=None, publisher_domain=None, subscriber_domain=None, virtual_user_id=None, custom_attributes={}, role=DomoRole(id=2097317660, name='Community_Default_Priviliged', description='Full access except for editing users and settings owners', is_system_role=0, is_default_role=None, grant_ls=[], membership_ls=[]))], group_ls=None, virtual_user_ls=None)]

sample implementation of generate_body_from_policy

try:
    token_auth = dmda.DomoTokenAuth(
        domo_instance=os.environ['DOMO_INSTANCE'],
        domo_access_token=os.environ["DOMO_ACCESS_TOKEN"],
    )

    # instantiate dataset class
    dataset = dmd.DomoDataset(auth=token_auth, id=os.environ["DOJO_DATASET_ID"])

    # instantiate dataset_pdp_policies
    dataset_pdp_policies = Dataset_PDP_Policies(dataset=dataset)
    # get policies
    await dataset_pdp_policies.get_policies(return_raw=False)

    selected_policy = dataset_pdp_policies.policies[0]

    print(selected_policy)

    # selected_policy.generate_body_from_policy()

except Exception as e:
    print(e)
warning this token has not been validated by who_am_i, run get_auth_token first
PDP_Policy(dataset_id='04c1574e-c8be-4721-9846-c6ffa491144b', filter_group_id=797, name='All Rows', parameters_ls=None, user_ls=None, group_ls=None, virtual_user_ls=['vu:a8841f70-909a-438e-9853-49783846bf22', 'vu:0ed4455a-35df-4049-8d6d-80341083b2f4', 'vu:566d15dc-9600-48af-b5ad-89cd0ea00cb7', 'vu:ed6853bb-d8c7-4777-be41-0af475fde7ba', 'vu:20e30033-edb3-44f0-a121-5ccf5f8161bc'])

sample implementation of upsert_policy

token_auth = dmda.DomoTokenAuth(
    domo_instance=os.environ['DOMO_INSTANCE'],
    domo_access_token=os.environ["DOMO_ACCESS_TOKEN"],
)

# instantiate dataset class
dataset = dmd.DomoDataset(auth=token_auth, id=os.environ["DOJO_DATASET_ID"])

# instantiate dataset_pdp_policies
dataset_pdp_policies = Dataset_PDP_Policies(dataset=dataset)

# Updating existing policy
new_param = {
    "type": "COLUMN",
    "name": "Country",
    "values": ["Japan", "United States"],
    "operator": "EQUALS",
    "ignoreCase": True,
}

try:
    await dataset_pdp_policies.get_policies(return_raw=False)

    selected_policy = dataset_pdp_policies.policies[0]

    body = selected_policy.generate_body_from_policy()

    body["parameters"].append(new_param)

    await PDP_Policy.upsert_policy(
        auth=token_auth,
        dataset_id=dataset.id,
        policy_definition=body,
        debug_api=False,
        debug_prn=True,
    )

except Exception as e:
    print(e)
warning this token has not been validated by who_am_i, run get_auth_token first
generate_body_from_policy: no parameters
# upsert_policy, no policy exists so creates new policy

# instantiate dataset class
try:
    dataset = dmd.DomoDataset(auth=token_auth, id=os.environ["DOJO_DATASET_ID"])

    param = {
        "type": "COLUMN",
        "name": "Country",
        "values": ["Philippines"],
        "operator": "EQUALS",
        "ignoreCase": True,
    }

    print(param["name"])
    new_pdp_policy = PDP_Policy(
        dataset_id=dataset.id,
        filter_group_id=None,
        name="New PDP Policy",
        parameters_ls=[util_dd.DictDot(param)],
        user_ls=["612085674"],
        group_ls=["1259653287"],
        virtual_user_ls=[],
    )
    body = new_pdp_policy.generate_body_from_policy()
    print(
        (
            await PDP_Policy.upsert_policy(
                auth=dataset.auth, dataset_id=dataset.id, policy_definition=body
            )
        )
    )

except Exception as e:
    print(e)
Country
Creating policy...
ResponseGetData(status=400, response='Bad Request', is_success=False, parent_class=None)

Search PDP Policies by name and ID


source

Dataset_PDP_Policies.search_pdp_policies

 Dataset_PDP_Policies.search_pdp_policies
                                           (auth:domolibrary.client.DomoAu
                                           th.DomoAuth, search:str,
                                           dataset_id:str=None,
                                           search_method:str='id',
                                           is_exact_match:bool=True,
                                           return_raw:bool=False,
                                           debug_api:bool=False,
                                           session:httpx.AsyncClient=None)

source

SearchPDP_NotFound

 SearchPDP_NotFound (domo_instance, dataset_id, message='not found',
                     function_name='search_pdp')

base exception

sample implementation of search_pdp_policies

dataset_id = os.environ["DOJO_DATASET_ID"]

# authenticate into instance
token_auth = dmda.DomoTokenAuth(
    domo_instance=os.environ['DOMO_INSTANCE'],
    domo_access_token=os.environ["DOMO_ACCESS_TOKEN"],
)

# instance of dataset class
dataset = dmd.DomoDataset(auth=token_auth, id=dataset_id)

# instance of pdp_policies for the dataset
dpp = Dataset_PDP_Policies(dataset=dataset)

# pull all policies for that dataset
await dpp.get_policies()

# search policies based on name
try:
    policy = await dpp.search_pdp_policies(
        auth=token_auth,
        dataset_id=dataset.id,
        search="Test 94",
        search_method="name",
        is_exact_match=True,
        debug_api=False,
    )
    print(policy)

except SearchPDP_NotFound as e:
    print(e)
warning this token has not been validated by who_am_i, run get_auth_token first
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[18], line 22
     21 try:
---> 22     policy = await dpp.search_pdp_policies(
     23         auth=token_auth,
     24         dataset_id=dataset.id,
     25         search="Test 94",
     26         search_method="name",
     27         is_exact_match=True,
     28         debug_api=False,
     29     )
     30     print(policy)

AttributeError: 'Dataset_PDP_Policies' object has no attribute 'search_pdp_policies'

During handling of the above exception, another exception occurred:

NameError                                 Traceback (most recent call last)
Cell In[18], line 32
     22     policy = await dpp.search_pdp_policies(
     23         auth=token_auth,
     24         dataset_id=dataset.id,
   (...)
     28         debug_api=False,
     29     )
     30     print(policy)
---> 32 except SearchPDP_NotFound as e:
     33     print(e)

NameError: name 'SearchPDP_NotFound' is not defined

Delete PDP Policy


source

PDP_Policy.delete_policy

 PDP_Policy.delete_policy (auth:domolibrary.client.DomoAuth.DomoAuth,
                           policy_id:str=None, dataset_id:str=None,
                           debug_api:bool=False)

Sample implementation of delete_policy

dataset_id = os.environ["DOJO_DATASET_ID"]

# authenticate into instance
token_auth = dmda.DomoTokenAuth(
    domo_instance=os.environ['DOMO_INSTANCE'],
    domo_access_token=os.environ["DOMO_ACCESS_TOKEN"],
)

# instance of dataset class
dataset = dmd.DomoDataset(auth=token_auth, id=dataset_id)

# instance of pdp_policies for the dataset
dpp = Dataset_PDP_Policies(dataset=dataset)

# search policies based on name
policy = None
try:
    policy = await dpp.search_pdp_policies(
        auth=token_auth,
        dataset_id=dataset.id,
        search="Test Policy Name Employee 123",
        search_method="name",
        is_exact_match=True,
        debug_api=False,
    )
    print(policy)

except SearchPDP_NotFound as e:
    print(e)

# delete the policy based on filtergroup id
try:
    await policy.delete_policy(
        auth=token_auth, debug_api=False
    )  # don't need to include policy or dataset since those are already tied with policy class
except Exception as e:
    print(e)
warning this token has not been validated by who_am_i, run get_auth_token first
🛑  SearchPDP_NotFound 🛑 - function: search_pdp || 04c1574e-c8be-4721-9846-c6ffa491144b || There is no policy named "Test Policy Name Employee 123" on dataset_id 04c1574e-c8be-4721-9846-c6ffa491144b at domo-community
name 'policy' is not defined

Enable/Disable PDP on dataset


source

Dataset_PDP_Policies.toggle_dataset_pdp

 Dataset_PDP_Policies.toggle_dataset_pdp
                                          (auth:domolibrary.client.DomoAut
                                          h.DomoAuth=None,
                                          dataset_id:str=None,
                                          is_enable:bool=True,
                                          debug_api:bool=False,
                                          session:httpx.AsyncClient=None)
Type Default Details
auth DomoAuth None
dataset_id str None
is_enable bool True True will enable pdp, False will disable pdp
debug_api bool False
session AsyncClient None

sample implementation of toggle_dataset_pdp

dataset_id = os.environ["DOJO_DATASET_ID"]

# authenticate into instancedataset_id
token_auth = dmda.DomoTokenAuth(
    domo_instance=os.environ['DOMO_INSTANCE'],
    domo_access_token=os.environ["DOMO_ACCESS_TOKEN"],
)

# instance of dataset class
dataset = dmd.DomoDataset(auth=token_auth, id=dataset_id)

# instance of pdp_policies for the dataset
dpp = Dataset_PDP_Policies(dataset=dataset)

# toggle pdp on dataset
await dpp.toggle_dataset_pdp(
    auth=token_auth, dataset_id=dataset.id, is_enable=False, debug_api=False
)
warning this token has not been validated by who_am_i, run get_auth_token first
ResponseGetData(status=200, response={'enabled': False, 'secured': False, 'external': False, 'enabledColumn': False}, is_success=True, parent_class=None)