tableau_server_client 0.0.10 → 0.0.12

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: ca3fe6a2aff070d8bbc67bdc771ab4d168fa765a500dbcc8dd3787b9b204f096
4
- data.tar.gz: 793536c50f60edf8830647fba4d18f165aeee90cf5b3ceb1bb7cd563d950b2bf
3
+ metadata.gz: 734741cd0b6670c84e0a939d810883395e6bf07aa013553f66249ec48838d07a
4
+ data.tar.gz: '0275874925061bdc41d42ee3c24e4d59dcae5e4a1763fecb233d072c0306087d'
5
5
  SHA512:
6
- metadata.gz: 668fd26c2c076e960c3d003f42ccb5ef0985b98337859e4457573fa3b64c91f145019c11362b1e59c197195b9c1cd4ac193b020aad6795718ab09e092e4c9ec6
7
- data.tar.gz: 21a2575491df82eef1c046e902175002d2a47d0b94b6b3843c0437d35e0016312baa780deb8555b1403e9e6184b20427b4d190b9868b9a2be773ef65d3c3969d
6
+ metadata.gz: 2d61bb79088e3b5c7f2f320bf01befbd91c20284df3709318befae7220b7b2d19204245d7ac4244b32bc5b30215b43da09ffc20b723cabb2da6753c12c849f49
7
+ data.tar.gz: d4abcb481f157a035d7989eb3b3fd7ba8239412d64e1efcb715da8e9699a8528a60d847a17deb6bda14f9bbff67412737224ede8e5920de9d53ab52c1e4accd2
@@ -21,7 +21,7 @@ module TableauServerClient
21
21
  @site_name = site_name
22
22
  @api_version = api_version
23
23
  @token_lifetime = token_lifetime
24
- @logger
24
+ @logger = logger
25
25
  end
26
26
 
27
27
  attr_reader :site_name, :username, :api_version, :token_lifetime, :logger
@@ -46,7 +46,14 @@ module TableauServerClient
46
46
  resource_location.klass.from_response(self, resource_location.path, xml)
47
47
  end
48
48
 
49
- def create(resource)
49
+ def create(resource, path: nil, request: nil)
50
+ path = path || resource.path
51
+ request = request || resource.to_request
52
+ response = session.post do |req|
53
+ req.url request_url(path).to_s
54
+ req.body = request
55
+ end
56
+ Nokogiri::XML(response.body).xpath("//xmlns:tsResponse").children.first
50
57
  end
51
58
 
52
59
  def download(resource_location)
@@ -124,8 +131,7 @@ module TableauServerClient
124
131
  def faraday
125
132
  @faraday ||= Faraday.new(request: {params_encoder: EmptyEncoder.new}, headers: {'Content-Type' => 'application/xml'}) do |f|
126
133
  f.response :raise_error
127
- #TODO Cannot set log level (always print debug log)
128
- #f.response :logger, logger
134
+ f.response :logger, logger
129
135
  f.adapter Faraday.default_adapter
130
136
  end
131
137
  end
@@ -0,0 +1,55 @@
1
+ require 'tableau_server_client/resources/resource'
2
+ require 'tableau_server_client/resources/connection'
3
+ require 'tableau_server_client/resources/job'
4
+
5
+ module TableauServerClient
6
+ module Resources
7
+
8
+ class ExtractRefresh < Resource
9
+
10
+ attr_reader :id, :priority, :consecutive_failed_count, :type
11
+
12
+ def self.from_response(client, path, xml)
13
+ attrs = extract_attributes(xml)
14
+ attrs['schedule_id'] = xml.xpath("xmlns:schedule/@id").first.value
15
+ attrs['workbook_id'] = xml.xpath("xmlns:workbook/@id").first&.value
16
+ attrs['datasource_id'] = xml.xpath("xmlns:datasource/@id").first&.value
17
+ new(client, path, attrs)
18
+ end
19
+
20
+ def self.from_collection_response(client, path, xml)
21
+ xml.xpath("//xmlns:tasks/xmlns:task/xmlns:extractRefresh").each do |s|
22
+ id = s.xpath("@id").first.value
23
+ yield from_response(client, "#{path}/#{id}", s)
24
+ end
25
+ end
26
+
27
+ def self.plural_resource_name
28
+ "extractRefreshes"
29
+ end
30
+
31
+ def schedule_id
32
+ @schedule_id
33
+ end
34
+
35
+ def workbook_id
36
+ @workbook_id
37
+ end
38
+
39
+ def datasource_id
40
+ @datasource_id
41
+ end
42
+
43
+ def schedule
44
+ @client.get_collection(Resources::Schedule.location(nil)).first {|s| s.id == schedule_id }
45
+ end
46
+
47
+ def run_now
48
+ resp = @client.create(self, path: "#{path}/runNow", request: build_request {})
49
+ job_id = resp.xpath("//xmlns:job/@id").first.value
50
+ Job.from_response(@client, Job.location(site_path, id = job_id).path, resp)
51
+ end
52
+
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,17 @@
1
+ require 'tableau_server_client/resources/resource'
2
+
3
+ module TableauServerClient
4
+ module Resources
5
+
6
+ class Job < Resource
7
+
8
+ attr_reader :id, :mode, :type
9
+
10
+ def self.from_response(client, path, xml)
11
+ attrs = extract_attributes(xml)
12
+ new(client, path, attrs)
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -21,11 +21,15 @@ module TableauServerClient
21
21
  end
22
22
 
23
23
  def self.resource_name
24
- self.name.split("::").last.downcase
24
+ self.name.split("::").last.sub(/./){ $&.downcase }
25
+ end
26
+
27
+ def self.plural_resource_name
28
+ "#{self.resource_name}s"
25
29
  end
26
30
 
27
31
  def self.location(prefix, id=nil, filter: [])
28
- path = [prefix, "#{resource_name}s", id].compact.join("/")
32
+ path = [prefix, plural_resource_name, id].compact.join("/")
29
33
  Location.new(self, path, filter.empty? ? {} : {filter: filter.join(',')})
30
34
  end
31
35
 
@@ -14,11 +14,19 @@ module TableauServerClient
14
14
 
15
15
  def self.from_collection_response(client, path, xml)
16
16
  xml.xpath("//xmlns:schedules/xmlns:schedule").each do |s|
17
- id = s.xpath("//xmlns:schedule/@id")[0].value
18
- yield from_response(client, path, s)
17
+ id = s.xpath("@id").first.value
18
+ yield from_response(client, "#{path}/#{id}", s)
19
19
  end
20
20
  end
21
21
 
22
+ def tasks(site)
23
+ site.extract_refreshes.select {|t| t.schedule_id == id }
24
+ end
25
+
26
+ def run_now(site)
27
+ tasks(site).map {|t| t.run_now }
28
+ end
29
+
22
30
  end
23
31
  end
24
32
  end
@@ -3,6 +3,7 @@ require 'tableau_server_client/resources/datasource'
3
3
  require 'tableau_server_client/resources/workbook'
4
4
  require 'tableau_server_client/resources/user'
5
5
  require 'tableau_server_client/resources/subscription'
6
+ require 'tableau_server_client/resources/extract_refresh'
6
7
 
7
8
  module TableauServerClient
8
9
  module Resources
@@ -63,6 +64,10 @@ module TableauServerClient
63
64
  subscriptions.find {|s| s.id = id }
64
65
  end
65
66
 
67
+ def extract_refreshes
68
+ @client.get_collection ExtractRefresh.location("#{path}/tasks")
69
+ end
70
+
66
71
  end
67
72
  end
68
73
  end
@@ -7,9 +7,10 @@ module TableauServerClient
7
7
  class Server
8
8
 
9
9
  def initialize(server_url, username, password,
10
- site_name: "default", api_version: "2.8", token_lifetime: 240)
10
+ site_name: "default", api_version: "3.1", token_lifetime: 240,
11
+ log_level: :info)
11
12
  @logger = ::Logger.new(STDOUT)
12
- @logger.level = ::Logger::INFO
13
+ @logger.level = ::Logger.const_get(log_level.upcase.to_sym)
13
14
  @client = Client.new(server_url, username, password, site_name, api_version, token_lifetime, @logger)
14
15
  end
15
16
 
@@ -1,3 +1,3 @@
1
1
  module TableauServerClient
2
- VERSION = "0.0.10"
2
+ VERSION = "0.0.12"
3
3
  end
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency "rspec", "~> 3.0"
27
27
  spec.add_development_dependency "byebug"
28
28
 
29
- spec.add_dependency 'faraday', '>= 0.14.0'
29
+ spec.add_dependency 'faraday', '>= 0.15.3'
30
30
  spec.add_dependency 'nokogiri', '>= 1.8.2'
31
31
  spec.add_dependency 'pry', '>= 0.11.3'
32
32
  spec.add_dependency 'rubyzip', '>= 1.2.1'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tableau_server_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - shimpeko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-24 00:00:00.000000000 Z
11
+ date: 2018-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 0.14.0
75
+ version: 0.15.3
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 0.14.0
82
+ version: 0.15.3
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: nokogiri
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -142,6 +142,8 @@ files:
142
142
  - lib/tableau_server_client/request_url.rb
143
143
  - lib/tableau_server_client/resources/connection.rb
144
144
  - lib/tableau_server_client/resources/datasource.rb
145
+ - lib/tableau_server_client/resources/extract_refresh.rb
146
+ - lib/tableau_server_client/resources/job.rb
145
147
  - lib/tableau_server_client/resources/project.rb
146
148
  - lib/tableau_server_client/resources/resource.rb
147
149
  - lib/tableau_server_client/resources/schedule.rb
@@ -173,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
173
175
  version: '0'
174
176
  requirements: []
175
177
  rubyforge_project:
176
- rubygems_version: 2.7.6
178
+ rubygems_version: 2.7.7
177
179
  signing_key:
178
180
  specification_version: 4
179
181
  summary: Tableau Server REST API Client