Skip to content

Commit a641cab

Browse files
brandontysonmossyunruiwatts
authored andcommitted
updated examples (#10)
Examples moved into separate files, main file renamed to `run_examples.py`
1 parent 17b8693 commit a641cab

File tree

7 files changed

+320
-320
lines changed

7 files changed

+320
-320
lines changed

examples/__init__.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
#from .datasets import datasets_examples
2-
#from .groups import groups_examples
3-
#from .pages import pages_examples
4-
#from .streams import streams_examples
5-
from .users import users_examples
1+
from .dataset import datasets
2+
from .group import groups
3+
#from .page import pages
4+
from .stream import streams
5+
from .user import users

examples/dataset.py

+122
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
from pydomo.datasets import DataSetRequest, Schema, Column, ColumnType, Policy
2+
from pydomo.datasets import PolicyFilter, FilterOperator, PolicyType, Sorting
3+
4+
5+
def datasets(domo):
6+
'''DataSets are useful for data sources that only require
7+
occasional replacement. See the docs at
8+
https://developer.domo.com/docs/data-apis/data
9+
'''
10+
domo.logger.info("\n**** Domo API - DataSet Examples ****\n")
11+
datasets = domo.datasets
12+
13+
# Define a DataSet Schema
14+
dsr = DataSetRequest()
15+
dsr.name = 'Leonhard Euler Party'
16+
dsr.description = 'Mathematician Guest List'
17+
dsr.schema = Schema([Column(ColumnType.STRING, 'Friend')])
18+
19+
# Create a DataSet with the given Schema
20+
dataset = datasets.create(dsr)
21+
domo.logger.info("Created DataSet " + dataset['id'])
22+
23+
# Get a DataSets's metadata
24+
retrieved_dataset = datasets.get(dataset['id'])
25+
domo.logger.info("Retrieved DataSet " + retrieved_dataset['id'])
26+
27+
# List DataSets
28+
dataset_list = list(datasets.list(sort=Sorting.NAME))
29+
domo.logger.info("Retrieved a list containing {} DataSet(s)".format(
30+
len(dataset_list)))
31+
32+
# Update a DataSets's metadata
33+
update = DataSetRequest()
34+
update.name = 'Leonhard Euler Party - Update'
35+
update.description = 'Mathematician Guest List - Update'
36+
update.schema = Schema([Column(ColumnType.STRING, 'Friend'),
37+
Column(ColumnType.STRING, 'Attending')])
38+
updated_dataset = datasets.update(dataset['id'], update)
39+
domo.logger.info("Updated DataSet {}: {}".format(updated_dataset['id'],
40+
updated_dataset['name']))
41+
42+
# Import Data from a string
43+
csv_upload = '"Pythagoras","FALSE"\n"Alan Turing","TRUE"\n' \
44+
'"George Boole","TRUE"'
45+
datasets.data_import(dataset['id'], csv_upload)
46+
domo.logger.info("Uploaded data to DataSet " + dataset['id'])
47+
48+
# Export Data to a string
49+
include_csv_header = True
50+
csv_download = datasets.data_export(dataset['id'], include_csv_header)
51+
domo.logger.info("Downloaded data from DataSet {}:\n{}".format(
52+
dataset['id'], csv_download))
53+
54+
# Export Data to a file (also returns a readable/writable file object)
55+
csv_file_path = './math.csv'
56+
include_csv_header = True
57+
csv_file = datasets.data_export_to_file(dataset['id'], csv_file_path,
58+
include_csv_header)
59+
csv_file.close()
60+
domo.logger.info("Downloaded data as a file from DataSet {}".format(
61+
dataset['id']))
62+
63+
# Import Data from a file
64+
csv_file_path = './math.csv'
65+
datasets.data_import_from_file(dataset['id'], csv_file_path)
66+
domo.logger.info("Uploaded data from a file to DataSet {}".format(
67+
dataset['id']))
68+
69+
# Personalized Data Policies (PDPs)
70+
71+
# Build a Policy Filter (hide sensitive columns/values from users)
72+
pdp_filter = PolicyFilter()
73+
pdp_filter.column = 'Attending' # The DataSet column to filter on
74+
pdp_filter.operator = FilterOperator.EQUALS
75+
pdp_filter.values = ['TRUE'] # The DataSet row value to filter on
76+
77+
# Build the Personalized Data Policy (PDP)
78+
pdp_request = Policy()
79+
pdp_request.name = 'Only show friends attending the party'
80+
# A single PDP can contain multiple filters
81+
pdp_request.filters = [pdp_filter]
82+
pdp_request.type = PolicyType.USER
83+
# The affected user ids (restricted access by filter)
84+
pdp_request.users = [998, 999]
85+
# The affected group ids (restricted access by filter)
86+
pdp_request.groups = [99, 100]
87+
88+
# Create the PDP
89+
pdp = datasets.create_pdp(dataset['id'], pdp_request)
90+
domo.logger.info("Created a Personalized Data Policy (PDP): "
91+
"{}, id: {}".format(pdp['name'], pdp['id']))
92+
93+
# Get a Personalized Data Policy (PDP)
94+
pdp = datasets.get_pdp(dataset['id'], pdp['id'])
95+
domo.logger.info("Retrieved a Personalized Data Policy (PDP):"
96+
" {}, id: {}".format(pdp['name'], pdp['id']))
97+
98+
# List Personalized Data Policies (PDP)
99+
pdp_list = datasets.list_pdps(dataset['id'])
100+
domo.logger.info("Retrieved a list containing {} PDP(s) for DataSet {}"
101+
.format(len(pdp_list), dataset['id']))
102+
103+
# Update a Personalized Data Policy (PDP)
104+
# Negate the previous filter (logical NOT). Note that in this case you
105+
# must treat the object as a dictionary - `pdp_filter.not` is invalid
106+
# syntax.
107+
pdp_filter['not'] = True
108+
pdp_request.name = 'Only show friends not attending the party'
109+
# A single PDP can contain multiple filters
110+
pdp_request.filters = [pdp_filter]
111+
pdp = datasets.update_pdp(dataset['id'], pdp['id'], pdp_request)
112+
domo.logger.info("Updated a Personalized Data Policy (PDP): {}, id: {}"
113+
.format(pdp['name'], pdp['id']))
114+
115+
# Delete a Personalized Data Policy (PDP)
116+
datasets.delete_pdp(dataset['id'], pdp['id'])
117+
domo.logger.info("Deleted a Personalized Data Policy (PDP): {}, id: {}"
118+
.format(pdp['name'], pdp['id']))
119+
120+
# Delete a DataSet
121+
datasets.delete(dataset['id'])
122+
domo.logger.info("Deleted DataSet {}".format(dataset['id']))

examples/group.py

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
from random import randint
2+
from pydomo.groups import CreateGroupRequest
3+
4+
5+
def groups(domo):
6+
'''Group Docs:
7+
https://developer.domo.com/docs/domo-apis/group-apis
8+
'''
9+
domo.logger.info("\n**** Domo API - Group Examples ****\n")
10+
groups = domo.groups
11+
12+
# Build a Group
13+
group_request = CreateGroupRequest()
14+
group_request.name = 'Groupy Group {}'.format(randint(0, 10000))
15+
group_request.active = True
16+
group_request.default = False
17+
18+
# Create a Group
19+
group = groups.create(group_request)
20+
domo.logger.info("Created Group '{}'".format(group['name']))
21+
22+
# Get a Group
23+
group = groups.get(group['id'])
24+
domo.logger.info("Retrieved Group '{}'".format(group['name']))
25+
26+
# List Groups
27+
group_list = groups.list(10, 0)
28+
domo.logger.info("Retrieved a list containing {} Group(s)".format(
29+
len(group_list)))
30+
31+
# Update a Group
32+
group_update = CreateGroupRequest()
33+
group_update.name = 'Groupy Group {}'.format(randint(0, 10000))
34+
group_update.active = False
35+
group_update.default = False
36+
group = groups.update(group['id'], group_update)
37+
domo.logger.info("Updated Group '{}'".format(group['name']))
38+
39+
# Add a User to a Group
40+
user_list = domo.users.list(10, 0)
41+
user = user_list[0]
42+
groups.add_user(group['id'], user['id'])
43+
domo.logger.info("Added User {} to Group {}".format(user['id'],
44+
group['id']))
45+
46+
# List Users in a Group
47+
user_list = groups.list_users(group['id'])
48+
domo.logger.info("Retrieved a User list from a Group containing {} User(s)"
49+
.format(len(user_list)))
50+
51+
# Remove a User from a Group
52+
groups.remove_user(group['id'], user['id'])
53+
domo.logger.info("Removed User {} from Group {}".format(user['id'],
54+
group['id']))
55+
56+
# Delete a Group
57+
groups.delete(group['id'])
58+
domo.logger.info("Deleted group '{}'".format(group['name']))

examples/page.py

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
TO DO

examples/stream.py

+106
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
from pydomo.datasets import DataSetRequest, Schema, Column, ColumnType
2+
from pydomo.streams import UpdateMethod, CreateStreamRequest
3+
4+
5+
def streams(domo):
6+
'''Streams are useful for uploading massive data sources in
7+
chunks, in parallel. They are also useful with data sources that
8+
are constantly changing/growing.
9+
Streams Docs: https://developer.domo.com/docs/data-apis/data
10+
'''
11+
domo.logger.info("\n**** Domo API - Stream Examples ****\n")
12+
streams = domo.streams
13+
14+
# Define a DataSet Schema to populate the Stream Request
15+
dsr = DataSetRequest()
16+
dsr.name = 'Leonhard Euler Party'
17+
dsr.description = 'Mathematician Guest List'
18+
dsr.schema = Schema([Column(ColumnType.STRING, 'Friend'),
19+
Column(ColumnType.STRING, 'Attending')])
20+
21+
# Build a Stream Request
22+
stream_request = CreateStreamRequest(dsr, UpdateMethod.APPEND)
23+
24+
# Create a Stream w/DataSet
25+
stream = streams.create(stream_request)
26+
domo.logger.info("Created Stream {} containing the new DataSet {}"
27+
.format(stream['id'], stream['dataSet']['id']))
28+
29+
# Get a Stream's metadata
30+
retrieved_stream = streams.get(stream['id'])
31+
domo.logger.info("Retrieved Stream {} containing DataSet {}".format(
32+
retrieved_stream['id'], retrieved_stream['dataSet']['id']))
33+
34+
# List Streams
35+
limit = 1000
36+
offset = 0
37+
stream_list = streams.list(limit, offset)
38+
domo.logger.info("Retrieved a list containing {} Stream(s)".format(
39+
len(stream_list)))
40+
41+
# Update a Stream's metadata
42+
stream_update = CreateStreamRequest(dsr, UpdateMethod.REPLACE)
43+
updated_stream = streams.update(retrieved_stream['id'], stream_update)
44+
domo.logger.info("Updated Stream {} to update method: {}".format(
45+
updated_stream['id'], updated_stream['updateMethod']))
46+
47+
# Search for Streams
48+
stream_property = 'dataSource.name:' + dsr.name
49+
searched_streams = streams.search(stream_property)
50+
domo.logger.info("Stream search: there are {} Stream(s) with the DataSet "
51+
"title: {}".format(len(searched_streams), dsr.name))
52+
53+
# Create an Execution (Begin an upload process)
54+
execution = streams.create_execution(stream['id'])
55+
domo.logger.info("Created Execution {} for Stream {}".format(
56+
execution['id'], stream['id']))
57+
58+
# Get an Execution
59+
retrieved_execution = streams.get_execution(stream['id'],
60+
execution['id'])
61+
domo.logger.info("Retrieved Execution with id: {}".format(
62+
retrieved_execution['id']))
63+
64+
# List Executions
65+
execution_list = streams.list_executions(stream['id'], limit, offset)
66+
domo.logger.info("Retrieved a list containing {} Execution(s)".format(
67+
len(execution_list)))
68+
69+
# Upload Data: Multiple Parts can be uploaded in parallel
70+
part = 1
71+
csv = '"Pythagoras","FALSE"\n"Alan Turing","TRUE"'
72+
execution = streams.upload_part(stream['id'], execution['id'],
73+
part, csv)
74+
75+
part = 2
76+
csv = '"George Boole","TRUE"'
77+
execution = streams.upload_part(stream['id'], execution['id'],
78+
part, csv)
79+
80+
# Commit the execution (End an upload process)
81+
# Executions/commits are NOT atomic
82+
committed_execution = streams.commit_execution(stream['id'],
83+
execution['id'])
84+
domo.logger.info("Committed Execution {} on Stream {}".format(
85+
committed_execution['id'], stream['id']))
86+
87+
# Abort a specific Execution
88+
execution = streams.create_execution(stream['id'])
89+
aborted_execution = streams.abort_execution(stream['id'],
90+
execution['id'])
91+
domo.logger.info("Aborted Execution {} on Stream {}".format(
92+
aborted_execution['id'], stream['id']))
93+
94+
# Abort any Execution on a given Stream
95+
streams.create_execution(stream['id'])
96+
streams.abort_current_execution(stream['id'])
97+
domo.logger.info("Aborted Executions on Stream {}".format(
98+
stream['id']))
99+
100+
# Delete a Stream
101+
streams.delete(stream['id'])
102+
domo.logger.info("Deleted Stream {}; the associated DataSet must be "
103+
"deleted separately".format(stream['id']))
104+
105+
# Delete the associated DataSet
106+
domo.datasets.delete(stream['dataSet']['id'])

examples/users.py renamed to examples/user.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from pydomo.users import CreateUserRequest
44

55

6-
def users_examples(domo):
6+
def users(domo):
77
'''User Docs: https://developer.domo.com/docs/domo-apis/users
88
'''
99
domo.logger.info("\n**** Domo API - User Examples ****\n")

0 commit comments

Comments
 (0)