power-bi 1.0.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
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