power-bi 1.0.0 → 1.4.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: 418399b191274cab7954c37fa24d36f17cb2f802eff6654957e9b927fce9b9ee
4
- data.tar.gz: 6f1681d24c0ad6b7a986753ccb53966a46a438b334cab39404e8584769daae0f
3
+ metadata.gz: 7d2c83c53427a7a2604d4c9f012c307e6b6b2cc083b84e809a7e0a407aa1b31b
4
+ data.tar.gz: 4b32aeb05f4b0f2c871b01f6551b355a206c5efcbc424aa97c8b5c8468ab3b5a
5
5
  SHA512:
6
- metadata.gz: 1bfedc133434941eeb869dc909e322b85d21059311d1089963c48a0acd4b86d6e1d2ef05b5f2e6cd646b3eea16a5937c4aef6c46aef063afe887fcb7c2c2cb4d
7
- data.tar.gz: 136a28bcfb43052f5aca2717200a4abcb3a3f81b1bcca272ff5ac79b9dad5bedb9f395446a37f00c971ed89d5edeb72e694a4c3ae685040911ec6eb1280c3cf6
6
+ metadata.gz: 39a25dbff366b7ee4bf71a6b3ebe7d4674295c0d9787926d3afa157819ba0f2b2af929c5fda042e2b8dab31368a16881bbbf5fc3a9d455b939057d0f01a4a72d
7
+ data.tar.gz: 4c2b804f4e83641f54a7738e80421c50b15194ace184d3c2ff80be53a2da02889bdb13fb628f46d5b362bde4da9a4b7c8c4a6f06806372668a86ae18243b956a
data/README.md CHANGED
@@ -27,6 +27,10 @@ pbi = PowerBI::Tenant.new(->{token = get_token(client, token) ; token.token})
27
27
  * Rebind report to another dataset: `report.rebind(dataset)`
28
28
  * Export report to file: `report.export_to_file(filenam, format: 'PDF')`
29
29
 
30
+ ## Pages
31
+
32
+ * List pages in a report: `report.pages`
33
+
30
34
  ## Datasets
31
35
 
32
36
  * List datasets in a workspace: `workspace.datasets`
@@ -45,6 +49,7 @@ pbi = PowerBI::Tenant.new(->{token = get_token(client, token) ; token.token})
45
49
  * List datasources in a gateway: `gateway.gateway_datasources`
46
50
  * Update credentials of a gateway datasource: `gateway_datasource.update_credentials(new_credentials)`
47
51
  * Create a new gateway datasource: `gateway.gateway_datasource.create(name, credentials, db_server, db_name)`
52
+ * Delete a new gateway datasource: `gateway_datasource.delete`
48
53
 
49
54
  # Note about gateway credentials
50
55
 
data/lib/power-bi.rb CHANGED
@@ -20,3 +20,4 @@ require_relative "power-bi/parameter"
20
20
  require_relative "power-bi/refresh"
21
21
  require_relative "power-bi/gateway"
22
22
  require_relative "power-bi/gateway_datasource"
23
+ require_relative "power-bi/page"
@@ -47,6 +47,7 @@ module PowerBI
47
47
 
48
48
  def delete
49
49
  @tenant.delete("/groups/#{workspace.id}/datasets/#{id}")
50
+ @workspace.datasets.reload
50
51
  true
51
52
  end
52
53
 
@@ -30,6 +30,12 @@ module PowerBI
30
30
  true
31
31
  end
32
32
 
33
+ def delete
34
+ @tenant.delete("/gateways/#{gateway.id}/datasources/#{id}")
35
+ @gateway.gateway_datasources.reload
36
+ true
37
+ end
38
+
33
39
  end
34
40
 
35
41
  class GatewayDatasourceArray < Array
@@ -0,0 +1,30 @@
1
+ module PowerBI
2
+ class Page
3
+ attr_reader :display_name, :name, :order, :report
4
+
5
+ def initialize(tenant, data)
6
+ @name = data[:Name]
7
+ @display_name = data[:displayName]
8
+ @order = data[:order]
9
+ @report = data[:report]
10
+ @tenant = tenant
11
+ end
12
+ end
13
+
14
+ class PageArray < Array
15
+
16
+ def initialize(tenant, report)
17
+ super(tenant)
18
+ @report = report
19
+ end
20
+
21
+ def self.get_class
22
+ Page
23
+ end
24
+
25
+ def get_data
26
+ data = @tenant.get("/groups/#{@report.workspace.id}/reports/#{@report.id}/pages")[:value]
27
+ data.each { |d| d[:report] = @report }
28
+ end
29
+ end
30
+ end
@@ -1,6 +1,6 @@
1
1
  module PowerBI
2
2
  class Report
3
- attr_reader :name, :id, :report_type, :web_url, :embed_url, :is_from_pbix, :is_owned_by_me, :dataset_id, :workspace
3
+ attr_reader :name, :id, :report_type, :web_url, :embed_url, :is_from_pbix, :is_owned_by_me, :dataset_id, :workspace, :pages
4
4
 
5
5
  class ExportToFileError < PowerBI::Error ; end
6
6
 
@@ -15,6 +15,7 @@ module PowerBI
15
15
  @dataset_id = data[:datasetId]
16
16
  @workspace = data[:workspace]
17
17
  @tenant = tenant
18
+ @pages = PageArray.new(@tenant, self)
18
19
  end
19
20
 
20
21
  def clone(target_workspace, new_report_name)
@@ -2,14 +2,31 @@ module PowerBI
2
2
  class Tenant
3
3
  attr_reader :workspaces, :gateways
4
4
 
5
- def initialize(token_generator)
5
+ def initialize(token_generator, retries: 5)
6
6
  @token_generator = token_generator
7
7
  @workspaces = WorkspaceArray.new(self)
8
8
  @gateways = GatewayArray.new(self)
9
+
10
+ ## WHY RETRIES? ##
11
+ # It is noticed that once in a while (~0.1% API calls), the Power BI server returns a 500 (internal server error) withou apparent reason, just retrying works :-)
12
+ ##################
13
+ @retry_options = {
14
+ max: retries,
15
+ exceptions: [Errno::ETIMEDOUT, Timeout::Error, Faraday::TimeoutError, Faraday::RetriableResponse],
16
+ methods: [:get, :post, :patch, :delete],
17
+ retry_statuses: [500], # internal server error
18
+ interval: 0.2,
19
+ interval_randomness: 0,
20
+ backoff_factor: 4,
21
+ retry_block: -> (env, options, retries, exc) { puts "retrying...!! (@ #{Time.now.to_s}), exception: #{exc.to_s} ---- #{exc.message}" },
22
+ }
9
23
  end
10
24
 
11
25
  def get(url, params = {})
12
- response = Faraday.get(PowerBI::BASE_URL + url) do |req|
26
+ conn = Faraday.new do |f|
27
+ f.request :retry, @retry_options
28
+ end
29
+ response = conn.get(PowerBI::BASE_URL + url) do |req|
13
30
  req.params = params
14
31
  req.headers['Accept'] = 'application/json'
15
32
  req.headers['authorization'] = "Bearer #{token}"
@@ -24,7 +41,10 @@ module PowerBI
24
41
  end
25
42
 
26
43
  def get_raw(url, params = {})
27
- response = Faraday.get(PowerBI::BASE_URL + url) do |req|
44
+ conn = Faraday.new do |f|
45
+ f.request :retry, @retry_options
46
+ end
47
+ response = conn.get(PowerBI::BASE_URL + url) do |req|
28
48
  req.params = params
29
49
  req.headers['authorization'] = "Bearer #{token}"
30
50
  yield req if block_given?
@@ -36,7 +56,10 @@ module PowerBI
36
56
  end
37
57
 
38
58
  def post(url, params = {})
39
- response = Faraday.post(PowerBI::BASE_URL + url) do |req|
59
+ conn = Faraday.new do |f|
60
+ f.request :retry, @retry_options
61
+ end
62
+ response = conn.post(PowerBI::BASE_URL + url) do |req|
40
63
  req.params = params
41
64
  req.headers['Accept'] = 'application/json'
42
65
  req.headers['Content-Type'] = 'application/json'
@@ -52,7 +75,10 @@ module PowerBI
52
75
  end
53
76
 
54
77
  def patch(url, params = {})
55
- response = Faraday.patch(PowerBI::BASE_URL + url) do |req|
78
+ conn = Faraday.new do |f|
79
+ f.request :retry, @retry_options
80
+ end
81
+ response = conn.patch(PowerBI::BASE_URL + url) do |req|
56
82
  req.params = params
57
83
  req.headers['Accept'] = 'application/json'
58
84
  req.headers['Content-Type'] = 'application/json'
@@ -68,7 +94,10 @@ module PowerBI
68
94
  end
69
95
 
70
96
  def delete(url, params = {})
71
- response = Faraday.delete(PowerBI::BASE_URL + url) do |req|
97
+ conn = Faraday.new do |f|
98
+ f.request :retry, @retry_options
99
+ end
100
+ response = conn.delete(PowerBI::BASE_URL + url) do |req|
72
101
  req.params = params
73
102
  req.headers['Accept'] = 'application/json'
74
103
  req.headers['authorization'] = "Bearer #{token}"
@@ -85,6 +114,7 @@ module PowerBI
85
114
  def post_file(url, file, params = {})
86
115
  conn = Faraday.new do |f|
87
116
  f.request :multipart
117
+ f.request :retry, @retry_options
88
118
  end
89
119
  response = conn.post(PowerBI::BASE_URL + url) do |req|
90
120
  req.params = params
@@ -92,6 +122,7 @@ module PowerBI
92
122
  req.headers['Content-Type'] = 'multipart/form-data'
93
123
  req.headers['authorization'] = "Bearer #{token}"
94
124
  req.body = {value: Faraday::UploadIO.new(file, 'application/octet-stream')}
125
+ req.options.timeout = 120 # default is 60 seconds Net::ReadTimeout
95
126
  end
96
127
  if response.status != 202
97
128
  raise APIError.new("Error calling Power BI API (status #{response.status}): #{response.body}")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: power-bi
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lode Cools
@@ -52,6 +52,7 @@ files:
52
52
  - lib/power-bi/datasource.rb
53
53
  - lib/power-bi/gateway.rb
54
54
  - lib/power-bi/gateway_datasource.rb
55
+ - lib/power-bi/page.rb
55
56
  - lib/power-bi/parameter.rb
56
57
  - lib/power-bi/refresh.rb
57
58
  - lib/power-bi/report.rb