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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 97631e0f44964ce0b4d23675e5a023ff203456d7881fea9a2f425441ac4ede8c
4
- data.tar.gz: 86c3f858e9c34ec5bebd67659f803a60d2303037ddb9f7ffd9e2eb3af13624eb
3
+ metadata.gz: 5a12ddf71e1ea1afad2cd5f4c7b059539cbc23da4a3e19834ad63bd6e62863ea
4
+ data.tar.gz: 4960812cbfdcd0459afb47ff934177a289d5d0726e95e19c7d9f230b235fcbf6
5
5
  SHA512:
6
- metadata.gz: c07b1a99e33190aa95e9cc4f4131a2cf9a7f875d2143b806e9e01fe0e1af1866dbd8785aea00f2d46765237431822d5814ff563c13cc9d4bc86ded7173b68798
7
- data.tar.gz: dc17f34a6ba983869a2e2e48ee90de87a8c2f1f55982e40fa1f323e6e83e6e71cf119b32fdb2a2a0c658d89adb4933b5d89649eef1435e50b0233d2e95254c70
6
+ metadata.gz: b3ca5f092ba2f179e77fdb16fa3f984886d59c4ba10b5d3744038d15c56f5fdf59e37962c9a1fb543b9babcf84eea425a916869431354a480eae99493526f1e1
7
+ data.tar.gz: 02044abfa2f718990f7584405b8ea5a4d6a2314c2aa00ea6465f7ad2da24c863d8294601f526b9fee8914d5f5f5656355be4c168472dc05fa68ca3080427fa74
@@ -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"
@@ -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
@@ -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
@@ -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
@@ -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 > 300 # 30 seconds
26
- status = @tenant.get("/groups/#{@id}/imports/#{import_id}")
27
- success = (status[:importState] == "Succeeded")
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.1.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-01-27 00:00:00.000000000 Z
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.0.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