tableau_server_client 0.0.10 → 0.0.12

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: 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