superset 0.3.3 → 0.3.5

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: c06f7ee91293a564daf7b79d25c602d8ed7195795de421e2ae6930889f733758
4
- data.tar.gz: fb2e77fca736ab2fe2581b5cd9155d5c47c3e562f7e50194dbd99a428f29487a
3
+ metadata.gz: b991d014f7094976acde768b112309443a38f741c2b4d2834ecc9575366ad1eb
4
+ data.tar.gz: 5701ba1956f94f51037b78f878cb6bb154c74509d4c86d9b0e2b71c83abc1af8
5
5
  SHA512:
6
- metadata.gz: 7d9bfa94afeedd33f40c2ca5cd872067777cba0965fe24feb3219fa6014c638017aa25312bd7c35f49fdd69027391aeba6ef36ecb1edbca032f2736673de1285
7
- data.tar.gz: eff8b1735469dec69c9bc587e093e90268b9dff773d783079425161f62170706b046197149a9bcbf6f8e3cd07353362b1e59e373ed9c162fbb53119cecf81c7c
6
+ metadata.gz: aaa349b9a890fea6b8a45323d80aca1ed9b57d0a71a39defed7430b72ce2ab92a37671b8f91d745c178d55d3e28d2e14b35fbad01c22c38db517ea13cafa94e9
7
+ data.tar.gz: 305171e61d4c0ecb3d5cd9b4c7e828f57aa3002e2b089996356c41264046095677c012ed6a147e4baad51aa74110e0189002f7967984b12f6fff22b361e40527
@@ -2,12 +2,13 @@ module Superset
2
2
  module Chart
3
3
  class List < Superset::Request
4
4
 
5
- attr_reader :title_contains, :dashboard_id_eq, :dataset_id_eq
5
+ attr_reader :title_contains, :dashboard_id_eq, :dataset_id_eq, :owner_id_eq
6
6
 
7
- def initialize(title_contains: '', dashboard_id_eq: '', dataset_id_eq: '', **kwargs)
7
+ def initialize(title_contains: '', dashboard_id_eq: '', dataset_id_eq: '', owner_id_eq: '', **kwargs)
8
8
  @title_contains = title_contains
9
9
  @dashboard_id_eq = dashboard_id_eq
10
10
  @dataset_id_eq = dataset_id_eq
11
+ @owner_id_eq = owner_id_eq
11
12
  super(**kwargs)
12
13
  end
13
14
 
@@ -41,6 +42,7 @@ module Superset
41
42
  filter_set << "(col:slice_name,opr:ct,value:'#{title_contains}')" if title_contains.present?
42
43
  filter_set << "(col:dashboards,opr:rel_m_m,value:#{dashboard_id_eq})" if dashboard_id_eq.present? # rel many to many
43
44
  filter_set << "(col:datasource_id,opr:eq,value:#{dataset_id_eq})" if dataset_id_eq.present?
45
+ filter_set << "(col:owners,opr:rel_m_m,value:#{owner_id_eq})" if owner_id_eq.present?
44
46
 
45
47
  unless filter_set.empty?
46
48
  "filters:!(" + filter_set.join(',') + "),"
@@ -21,8 +21,8 @@ module Superset
21
21
 
22
22
  dashboard_ids.sort.each do |dashboard_id|
23
23
  logger.info("Dashboard Id: #{dashboard_id.to_s} Attempting CASCADE delete of dashboard, charts, datasets")
24
- delete_datasets(dashboard_id)
25
24
  delete_charts(dashboard_id)
25
+ delete_datasets(dashboard_id)
26
26
  delete_dashboard(dashboard_id)
27
27
  end
28
28
  true
@@ -36,7 +36,7 @@ module Superset
36
36
  end
37
37
 
38
38
  def add_user_to_datasets_ownership
39
- dataset_ids = Superset::Dashboard::Datasets::List.new(dashboard_id: dashboard_id).ids
39
+ dataset_ids = Superset::Dashboard::Datasets::List.new(dashboard_id: dashboard_id, include_filter_datasets: true).ids
40
40
  dataset_ids.each do |dataset_id|
41
41
  current_dataset_owner_ids = Superset::Dataset::Get.new(dataset_id).result['owners'].map{|c| c['id']}
42
42
  next if current_dataset_owner_ids.include?(user_id)
@@ -51,4 +51,4 @@ module Superset
51
51
  end
52
52
  end
53
53
  end
54
- end
54
+ end
@@ -7,15 +7,12 @@ module Superset
7
7
  module Dashboard
8
8
  module Datasets
9
9
  class List < Superset::Request
10
- attr_reader :id, :include_filter_datasets # id - dashboard id
10
+ attr_reader :dashboard_id, :include_filter_datasets, :include_catalog_lookup # id - dashboard id
11
11
 
12
- def self.call(id)
13
- self.new(id).list
14
- end
15
-
16
- def initialize(dashboard_id:, include_filter_datasets: false)
17
- @id = dashboard_id
12
+ def initialize(dashboard_id:, include_filter_datasets: true, include_catalog_lookup: true)
13
+ @dashboard_id = dashboard_id
18
14
  @include_filter_datasets = include_filter_datasets
15
+ @include_catalog_lookup = include_catalog_lookup
19
16
  end
20
17
 
21
18
  def perform
@@ -23,82 +20,92 @@ module Superset
23
20
  self
24
21
  end
25
22
 
23
+ def datasets_details
24
+ @datasets_details ||= begin
25
+ datasets_list = chart_datasets + Array(additional_filter_datasets)
26
+ datasets_list = include_catalog_details(datasets_list) if include_catalog_lookup
27
+ datasets_list.compact
28
+ end
29
+ end
30
+
26
31
  def databases
27
32
  @databases ||= datasets_details.map {|d| d[:database] }.uniq
28
33
  end
29
34
 
30
- def schemas
31
- @schemas ||= begin
32
- all_dashboard_schemas = datasets_details.map {|d| d[:schema] }.uniq
33
-
34
- # For the current superset setup we will assume a dashboard datasets will point to EXACTLY one schema, their own.
35
- # if not .. we need to know about it. Potentially we could override this check if others do not consider it a problem.
36
- if all_dashboard_schemas.count > 1
37
- Rollbar.error("SUPERSET DASHBOARD ERROR: Dashboard id #{id} has multiple dataset schema linked: #{all_dashboard_schemas.to_s}") if defined?(Rollbar)
38
- end
39
- all_dashboard_schemas
40
- end
35
+ def catalogs
36
+ datasets_details.map {|d| d[:catalog] }.compact.uniq
41
37
  end
42
38
 
43
- def datasets_details
44
- chart_datasets = result.map do |details|
45
- details.slice('id', 'datasource_name', 'schema', 'sql').merge('database' => details['database'].slice('id', 'name', 'backend')).with_indifferent_access
46
- end
47
- return chart_datasets unless include_filter_datasets
48
- chart_dataset_ids = chart_datasets.map{|d| d['id'] }
49
- filter_dataset_ids_not_used_in_charts = filter_dataset_ids - chart_dataset_ids
50
- return chart_datasets if filter_dataset_ids_not_used_in_charts.empty?
51
- # returning chart and filter datasets
52
- chart_datasets + filter_datasets(filter_dataset_ids_not_used_in_charts)
39
+ def schemas
40
+ datasets_details.map {|d| d[:schema] }.compact.uniq
53
41
  end
54
42
 
55
43
  def rows
56
44
  datasets_details.map do |d|
57
- [
58
- d[:id],
59
- d[:datasource_name],
60
- d[:database][:id],
61
- d[:database][:name],
62
- d[:database][:backend],
63
- d[:schema],
64
- d[:filter_only]
65
- ]
45
+ row = [d[:id], d[:datasource_name], d[:database][:backend], d[:database][:id], d[:database][:name]]
46
+ row << d[:catalog] if include_catalog_lookup
47
+ row + [d[:schema], d[:filter_only]]
66
48
  end
67
49
  end
68
50
 
69
51
  private
70
52
 
53
+ def include_catalog_details(datasets_list)
54
+ datasets_list.each {|d| d[:catalog] = Superset::Dataset::Get.new(d[:id].to_i).result['catalog'] }
55
+ end
56
+
57
+ # list of chart dataset details used in the dashboard
58
+ def chart_datasets
59
+ result.map do |details|
60
+ details.slice('id', 'datasource_name', 'schema', 'sql').merge('database' => details['database'].slice('id', 'name', 'backend')).with_indifferent_access
61
+ end
62
+ end
63
+
64
+ # list of any additional filter dataset details on the dashboard that are not used in charts
65
+ def additional_filter_datasets
66
+ return unless include_filter_datasets
67
+
68
+ chart_dataset_ids = chart_datasets.map{|d| d['id'] }
69
+ filter_dataset_ids_not_used_in_charts = filter_dataset_ids - chart_dataset_ids
70
+ retrieve_filter_datasets(filter_dataset_ids_not_used_in_charts)
71
+ end
72
+
71
73
  def filter_dataset_ids
72
74
  @filter_dataset_ids ||= dashboard.filter_configuration.map { |c| c['targets'] }.flatten.compact.map { |c| c['datasetId'] }.flatten.compact.uniq
73
75
  end
74
76
 
75
- def filter_datasets(filter_dataset_ids_not_used_in_charts)
77
+ def retrieve_filter_datasets(filter_dataset_ids_not_used_in_charts)
76
78
  filter_dataset_ids_not_used_in_charts.map do |filter_dataset_id|
77
79
  filter_dataset = Superset::Dataset::Get.new(filter_dataset_id).result
78
- database_info = {
79
- 'id' => filter_dataset['database']['id'],
80
- 'name' => filter_dataset['database']['database_name'],
81
- 'backend' => filter_dataset['database']['backend']
82
- }
83
- filter_dataset.slice('id', 'datasource_name', 'schema', 'sql').merge('database' => database_info, 'filter_only': true).with_indifferent_access
80
+ { id: filter_dataset_id,
81
+ datasource_name: filter_dataset['datasource_name'],
82
+ schema: filter_dataset['schema'],
83
+ sql: filter_dataset['sql'],
84
+ database: {
85
+ 'id' => filter_dataset['database']['id'],
86
+ 'name' => filter_dataset['database']['database_name'],
87
+ 'backend' => filter_dataset['database']['backend'] },
88
+ filter_only: true }.with_indifferent_access
84
89
  end
85
90
  end
86
91
 
87
92
  def route
88
- "dashboard/#{id}/datasets"
93
+ "dashboard/#{dashboard_id}/datasets"
89
94
  end
90
95
 
91
96
  def list_attributes
92
- ['id', 'datasource_name', 'database_id', 'database_name', 'database_backend', 'schema', 'filter_only'].map(&:to_sym)
97
+ base = %w[id datasource_name database_backend database_id database_name]
98
+ base << 'catalog' if include_catalog_lookup
99
+ (base + %w[schema filter_only]).map(&:to_sym)
93
100
  end
94
101
 
95
102
  # when displaying a list of datasets, show dashboard title as well
96
103
  def title
97
- @title ||= [id, dashboard.title].join(' ')
104
+ @title ||= [dashboard_id, dashboard.title].join(' ')
98
105
  end
99
106
 
100
107
  def dashboard
101
- @dashboard ||= Superset::Dashboard::Get.new(id)
108
+ @dashboard ||= Superset::Dashboard::Get.new(dashboard_id)
102
109
  end
103
110
  end
104
111
  end
@@ -7,14 +7,15 @@ module Superset
7
7
  class List < Superset::Request
8
8
  attr_reader :title_contains, :title_equals,
9
9
  :tags_contain, :tags_equal,
10
- :ids_not_in, :include_filter_dataset_schemas
10
+ :ids_not_in, :owner_id_eq, :include_filter_dataset_schemas
11
11
 
12
- def initialize(title_contains: '', title_equals: '', tags_contain: [], tags_equal: [], ids_not_in: [], include_filter_dataset_schemas: false, **kwargs)
12
+ def initialize(title_contains: '', title_equals: '', tags_contain: [], tags_equal: [], ids_not_in: [], owner_id_eq: '', include_filter_dataset_schemas: false, **kwargs)
13
13
  @title_contains = title_contains
14
14
  @title_equals = title_equals
15
15
  @tags_contain = tags_contain
16
16
  @tags_equal = tags_equal
17
17
  @ids_not_in = ids_not_in
18
+ @owner_id_eq = owner_id_eq
18
19
  @include_filter_dataset_schemas = include_filter_dataset_schemas
19
20
  super(**kwargs)
20
21
  end
@@ -86,6 +87,7 @@ module Superset
86
87
  filter_set << tags_contain_filters if tags_contain.present?
87
88
  filter_set << tags_equal_filters if tags_equal.present?
88
89
  filter_set << ids_not_in_filters if ids_not_in.present?
90
+ filter_set << "(col:owners,opr:rel_m_m,value:#{owner_id_eq})" if owner_id_eq.present?
89
91
 
90
92
  unless filter_set.empty?
91
93
  "filters:!(" + filter_set.join(',') + "),"
@@ -1,13 +1,14 @@
1
1
  module Superset
2
2
  module Dataset
3
3
  class List < Superset::Request
4
- attr_reader :title_contains, :title_equals, :schema_equals, :database_id_eq
4
+ attr_reader :title_contains, :title_equals, :schema_equals, :database_id_eq, :owner_id_eq
5
5
 
6
- def initialize(title_contains: '', title_equals: '', schema_equals: '', database_id_eq: '', **kwargs)
6
+ def initialize(title_contains: '', title_equals: '', schema_equals: '', database_id_eq: '', owner_id_eq: '', **kwargs)
7
7
  @title_contains = title_contains
8
8
  @title_equals = title_equals
9
9
  @schema_equals = schema_equals
10
10
  @database_id_eq = database_id_eq
11
+ @owner_id_eq = owner_id_eq
11
12
  super(**kwargs)
12
13
  end
13
14
 
@@ -28,6 +29,8 @@ module Superset
28
29
  filters << "(col:table_name,opr:eq,value:'#{title_equals}')" if title_equals.present?
29
30
  filters << "(col:schema,opr:eq,value:'#{schema_equals}')" if schema_equals.present?
30
31
  filters << "(col:database,opr:rel_o_m,value:#{database_id_eq})" if database_id_eq.present? # rel one to many
32
+ filters << "(col:owners,opr:rel_m_m,value:#{owner_id_eq})" if owner_id_eq.present?
33
+
31
34
  unless filters.empty?
32
35
  "filters:!(" + filters.join(',') + "),"
33
36
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Superset
4
- VERSION = "0.3.3"
4
+ VERSION = "0.3.5"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: superset
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - jbat