power-bi 0.1.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/power-bi.rb +2 -0
- data/lib/power-bi/dataset.rb +11 -1
- data/lib/power-bi/refresh.rb +32 -0
- data/lib/power-bi/report.rb +17 -0
- data/lib/power-bi/tenant.rb +15 -0
- data/lib/power-bi/workspace.rb +27 -4
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a12ddf71e1ea1afad2cd5f4c7b059539cbc23da4a3e19834ad63bd6e62863ea
|
4
|
+
data.tar.gz: 4960812cbfdcd0459afb47ff934177a289d5d0726e95e19c7d9f230b235fcbf6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3ca5f092ba2f179e77fdb16fa3f984886d59c4ba10b5d3744038d15c56f5fdf59e37962c9a1fb543b9babcf84eea425a916869431354a480eae99493526f1e1
|
7
|
+
data.tar.gz: 02044abfa2f718990f7584405b8ea5a4d6a2314c2aa00ea6465f7ad2da24c863d8294601f526b9fee8914d5f5f5656355be4c168472dc05fa68ca3080427fa74
|
data/lib/power-bi.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'pry' # TODO remove in final product
|
2
2
|
require 'faraday'
|
3
3
|
require 'json'
|
4
|
+
require 'date'
|
4
5
|
|
5
6
|
module PowerBI
|
6
7
|
BASE_URL = 'https://api.powerbi.com/v1.0/myorg'
|
@@ -16,3 +17,4 @@ require_relative "power-bi/report"
|
|
16
17
|
require_relative "power-bi/dataset"
|
17
18
|
require_relative "power-bi/datasource"
|
18
19
|
require_relative "power-bi/parameter"
|
20
|
+
require_relative "power-bi/refresh"
|
data/lib/power-bi/dataset.rb
CHANGED
@@ -2,7 +2,7 @@ module PowerBI
|
|
2
2
|
class Dataset
|
3
3
|
attr_reader :id, :name, :add_rows_API_enabled, :configured_by, :is_refreshable, :is_effective_identity_required,
|
4
4
|
:is_effective_identity_roles_required, :is_on_prem_gateway_required, :target_storage_mode, :workspace, :datasources,
|
5
|
-
:parameters
|
5
|
+
:parameters, :refresh_history
|
6
6
|
|
7
7
|
def initialize(tenant, data)
|
8
8
|
@id = data[:id]
|
@@ -18,6 +18,7 @@ module PowerBI
|
|
18
18
|
@tenant = tenant
|
19
19
|
@datasources = DatasourceArray.new(@tenant, self)
|
20
20
|
@parameters = ParameterArray.new(@tenant, self)
|
21
|
+
@refresh_history = RefreshArray.new(@tenant, self)
|
21
22
|
end
|
22
23
|
|
23
24
|
def update_parameter(name, value)
|
@@ -30,6 +31,9 @@ module PowerBI
|
|
30
31
|
true
|
31
32
|
end
|
32
33
|
|
34
|
+
def last_refresh
|
35
|
+
@refresh_history.first
|
36
|
+
end
|
33
37
|
|
34
38
|
def refresh
|
35
39
|
@tenant.post("/groups/#{workspace.id}/datasets/#{id}/refreshes") do |req|
|
@@ -37,6 +41,12 @@ module PowerBI
|
|
37
41
|
notifyOption: "NoNotification"
|
38
42
|
}.to_json
|
39
43
|
end
|
44
|
+
@refresh_history.reload
|
45
|
+
true
|
46
|
+
end
|
47
|
+
|
48
|
+
def delete
|
49
|
+
@tenant.delete("/groups/#{workspace.id}/datasets/#{id}")
|
40
50
|
true
|
41
51
|
end
|
42
52
|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module PowerBI
|
2
|
+
class Refresh
|
3
|
+
attr_reader :refresh_type, :start_time, :end_time, :service_exception_json, :status, :request_id
|
4
|
+
|
5
|
+
def initialize(tenant, data)
|
6
|
+
@id = data[:id]
|
7
|
+
@refresh_type = data[:refreshType]
|
8
|
+
@start_time = DateTime.iso8601(data[:startTime])
|
9
|
+
@end_time = DateTime.iso8601(data[:endTime]) if data[:endTime]
|
10
|
+
@service_exception_json = data[:serviceExceptionJson]
|
11
|
+
@status = data[:status]
|
12
|
+
@request_id = data[:requestId]
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
class RefreshArray < Array
|
18
|
+
|
19
|
+
def initialize(tenant, dataset)
|
20
|
+
super(tenant)
|
21
|
+
@dataset = dataset
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.get_class
|
25
|
+
Refresh
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_data
|
29
|
+
@tenant.get("/groups/#{@dataset.workspace.id}/datasets/#{@dataset.id}/refreshes", {'$top': '3'})[:value]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/power-bi/report.rb
CHANGED
@@ -27,6 +27,23 @@ module PowerBI
|
|
27
27
|
Report.new(@tenant, data)
|
28
28
|
end
|
29
29
|
|
30
|
+
def rebind(target_dataset)
|
31
|
+
@tenant.post("/groups/#{workspace.id}/reports/#{id}/Rebind") do |req|
|
32
|
+
req.body = {
|
33
|
+
datasetId: target_dataset.id
|
34
|
+
}.to_json
|
35
|
+
end
|
36
|
+
true
|
37
|
+
end
|
38
|
+
|
39
|
+
def export_to_file(format: 'PDF')
|
40
|
+
@tenant.post("/groups/#{workspace.id}/reports/#{id}/ExportTo") do |req|
|
41
|
+
req.body = {
|
42
|
+
format: format
|
43
|
+
}.to_json
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
30
47
|
end
|
31
48
|
|
32
49
|
class ReportArray < Array
|
data/lib/power-bi/tenant.rb
CHANGED
@@ -38,6 +38,21 @@ module PowerBI
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
def delete(url, params = {})
|
42
|
+
response = Faraday.delete(PowerBI::BASE_URL + url) do |req|
|
43
|
+
req.params = params
|
44
|
+
req.headers['Accept'] = 'application/json'
|
45
|
+
req.headers['authorization'] = "Bearer #{token}"
|
46
|
+
yield req if block_given?
|
47
|
+
end
|
48
|
+
unless [200, 202].include? response.status
|
49
|
+
raise APIError.new("Error calling Power BI API (status #{response.status}): #{response.body}")
|
50
|
+
end
|
51
|
+
unless response.body.empty?
|
52
|
+
JSON.parse(response.body, symbolize_names: true)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
41
56
|
def post_file(url, file, params = {})
|
42
57
|
conn = Faraday.new do |f|
|
43
58
|
f.request :multipart
|
data/lib/power-bi/workspace.rb
CHANGED
@@ -14,23 +14,46 @@ module PowerBI
|
|
14
14
|
@datasets = DatasetArray.new(@tenant, self)
|
15
15
|
end
|
16
16
|
|
17
|
-
def upload_pbix(file, dataset_name)
|
17
|
+
def upload_pbix(file, dataset_name, timeout: 30)
|
18
18
|
data = @tenant.post_file("/groups/#{@id}/imports", file, {datasetDisplayName: dataset_name})
|
19
19
|
import_id = data[:id]
|
20
20
|
success = false
|
21
21
|
iterations = 0
|
22
|
+
status_history = ''
|
23
|
+
old_status = ''
|
22
24
|
while !success
|
23
25
|
sleep 0.1
|
24
26
|
iterations += 1
|
25
|
-
raise UploadError if iterations >
|
26
|
-
|
27
|
-
success = (
|
27
|
+
raise UploadError.new("Upload did not succeed after #{timeout} seconds. Status history:#{status_history}") if iterations > (10 * timeout)
|
28
|
+
new_status = @tenant.get("/groups/#{@id}/imports/#{import_id}")[:importState].to_s
|
29
|
+
success = (new_status == "Succeeded")
|
30
|
+
if new_status != old_status
|
31
|
+
status_history += "\nStatus change after #{iterations/10.0}s: '#{old_status}' --> '#{new_status}'"
|
32
|
+
old_status = new_status
|
33
|
+
end
|
28
34
|
end
|
29
35
|
@reports.reload
|
30
36
|
@datasets.reload
|
31
37
|
true
|
32
38
|
end
|
33
39
|
|
40
|
+
def delete
|
41
|
+
@tenant.delete("/groups/#{@id}")
|
42
|
+
@tenant.workspaces.reload
|
43
|
+
true
|
44
|
+
end
|
45
|
+
|
46
|
+
# TODO LATER: the 'Viewer' acces right is currently not settable throught the API. Fix that later
|
47
|
+
def add_user(email_address, access_right = 'Member')
|
48
|
+
@tenant.post("/groups/#{id}/users") do |req|
|
49
|
+
req.body = {
|
50
|
+
emailAddress: email_address,
|
51
|
+
groupUserAccessRight: access_right
|
52
|
+
}.to_json
|
53
|
+
end
|
54
|
+
true
|
55
|
+
end
|
56
|
+
|
34
57
|
end
|
35
58
|
|
36
59
|
class WorkspaceArray < Array
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: power-bi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lode Cools
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -51,6 +51,7 @@ files:
|
|
51
51
|
- lib/power-bi/dataset.rb
|
52
52
|
- lib/power-bi/datasource.rb
|
53
53
|
- lib/power-bi/parameter.rb
|
54
|
+
- lib/power-bi/refresh.rb
|
54
55
|
- lib/power-bi/report.rb
|
55
56
|
- lib/power-bi/tenant.rb
|
56
57
|
- lib/power-bi/workspace.rb
|
@@ -73,7 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
74
|
- !ruby/object:Gem::Version
|
74
75
|
version: '0'
|
75
76
|
requirements: []
|
76
|
-
rubygems_version: 3.
|
77
|
+
rubygems_version: 3.1.4
|
77
78
|
signing_key:
|
78
79
|
specification_version: 4
|
79
80
|
summary: Ruby wrapper for the Power BI API
|