metabase_cli 0.1.3 → 0.1.4
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 +4 -4
- data/.rubocop.yml +11 -1
- data/Gemfile +1 -1
- data/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/exe/metabase_cli +2 -2
- data/lib/metabase_cli/api.rb +25 -0
- data/lib/metabase_cli/cli.rb +48 -4
- data/lib/metabase_cli/database_service.rb +11 -23
- data/lib/metabase_cli/group_service.rb +27 -0
- data/lib/metabase_cli/user_service.rb +55 -0
- data/lib/metabase_cli/version.rb +1 -1
- data/metabase_cli.gemspec +6 -6
- metadata +11 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 80a4352e6f206732eac4e08a4399e2a0768630e1986d5b435fc69e0c3d2315bc
|
4
|
+
data.tar.gz: 4ed0ab35134b0ad2db430611c41a60e5232a1e56925a6b3af520024ea5805ad2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa086b2c5d209cdbce6ac181376a605eda12b92ee99b2eb6c97a77522ad8a324e07e130f33fb9f64b423e772194e35f019823194625ba69fef691bf9fbf84076
|
7
|
+
data.tar.gz: 298902c9d7b5c7bdaee76c7a838f508d3f5e9960a6fa402f1e30266c04fde05df0a9b749f01593ea994edd9314056c4fbe6a24c8bcb906a4a2f669b6e11c4165
|
data/.rubocop.yml
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
AllCops:
|
2
|
-
|
2
|
+
SuggestExtensions: false
|
3
|
+
TargetRubyVersion: 2.7.5
|
3
4
|
|
4
5
|
Style/StringLiterals:
|
5
6
|
Enabled: true
|
@@ -11,3 +12,12 @@ Style/StringLiteralsInInterpolation:
|
|
11
12
|
|
12
13
|
Layout/LineLength:
|
13
14
|
Max: 120
|
15
|
+
|
16
|
+
Metrics/MethodLength:
|
17
|
+
Max: 20
|
18
|
+
|
19
|
+
Metrics/ParameterLists:
|
20
|
+
Max: 10
|
21
|
+
|
22
|
+
Style/Documentation:
|
23
|
+
Enabled: false
|
data/Gemfile
CHANGED
@@ -5,4 +5,4 @@ source "https://rubygems.org"
|
|
5
5
|
# Specify your gem's dependencies in metabase_api.gemspec
|
6
6
|
gemspec
|
7
7
|
|
8
|
-
gem
|
8
|
+
gem "eventmachine", git: "git://github.com/eventmachine/eventmachine.git", branch: "master"
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
data/exe/metabase_cli
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "metabase"
|
4
|
+
require "hash_deep_merge"
|
5
|
+
|
6
|
+
module MetabaseCli
|
7
|
+
module Api
|
8
|
+
def self.client
|
9
|
+
raise "Missing url" unless ENV["METABASE_URL"]
|
10
|
+
raise "Missing username" unless ENV["METABASE_USERNAME"]
|
11
|
+
raise "Missing password" unless ENV["METABASE_PASSWORD"]
|
12
|
+
|
13
|
+
@client ||= Metabase::Client.new(
|
14
|
+
url: ENV.fetch("METABASE_URL", nil),
|
15
|
+
username: ENV.fetch("METABASE_USERNAME", nil),
|
16
|
+
password: ENV.fetch("METABASE_PASSWORD", nil)
|
17
|
+
).tap(&:login)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.permissions_graph
|
21
|
+
# Due to Faraday we need to use a trick to get the string key as symbol
|
22
|
+
@permissions_graph ||= JSON.parse(JSON.dump(client.get("/api/permissions/graph")), symbolize_names: true)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/metabase_cli/cli.rb
CHANGED
@@ -1,17 +1,21 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "thor"
|
2
4
|
require "metabase_cli/database_service"
|
5
|
+
require "metabase_cli/user_service"
|
6
|
+
require "metabase_cli/group_service"
|
3
7
|
|
4
8
|
module MetabaseCli
|
5
9
|
class CLI < Thor
|
6
|
-
desc
|
10
|
+
desc "version", "Prints the version"
|
7
11
|
|
8
12
|
def version
|
9
13
|
puts "MetabaseApi version #{MetabaseCli::VERSION}"
|
10
14
|
end
|
11
15
|
|
12
|
-
desc
|
16
|
+
desc "create_database", "Create a database"
|
13
17
|
|
14
|
-
def
|
18
|
+
def create_database
|
15
19
|
client_name = ask("Client name: ")
|
16
20
|
dbname = ask("Database name: ")
|
17
21
|
engine = ask("Database engine: ", default: "postgres")
|
@@ -30,5 +34,45 @@ module MetabaseCli
|
|
30
34
|
password: password
|
31
35
|
).create_database.set_default_permissions
|
32
36
|
end
|
37
|
+
|
38
|
+
desc "create_user", "Create a user"
|
39
|
+
|
40
|
+
def create_user(group_id = nil)
|
41
|
+
first_name = ask("First name: ")
|
42
|
+
last_name = ask("Last name: ")
|
43
|
+
email = ask("Email: ")
|
44
|
+
group_wanted = ask("Group wanted: ", default: (group_id || "1"))
|
45
|
+
|
46
|
+
MetabaseCli::UserService.new(
|
47
|
+
first_name: first_name,
|
48
|
+
last_name: last_name,
|
49
|
+
email: email,
|
50
|
+
group_wanted: group_wanted
|
51
|
+
).create_user
|
52
|
+
.invite_again
|
53
|
+
end
|
54
|
+
|
55
|
+
desc "create_group", "Create a group"
|
56
|
+
|
57
|
+
def create_group
|
58
|
+
name = ask("Group name: ")
|
59
|
+
|
60
|
+
MetabaseCli::GroupService.new(
|
61
|
+
name: name
|
62
|
+
).create_group
|
63
|
+
end
|
64
|
+
|
65
|
+
desc "create_grouped_user", "Create a user and a group"
|
66
|
+
|
67
|
+
def create_grouped_user
|
68
|
+
group_id = create_group
|
69
|
+
create_user(group_id)
|
70
|
+
end
|
71
|
+
|
72
|
+
desc "create", "Create database, user and a group"
|
73
|
+
def create
|
74
|
+
create_database
|
75
|
+
create_grouped_user
|
76
|
+
end
|
33
77
|
end
|
34
78
|
end
|
@@ -1,8 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "metabase"
|
2
4
|
require "hash_deep_merge"
|
5
|
+
require_relative "api"
|
3
6
|
|
4
7
|
module MetabaseCli
|
5
8
|
class DatabaseService
|
9
|
+
include MetabaseCli::Api
|
10
|
+
|
6
11
|
def initialize(client_name:, dbname:, engine:, host:, port:, dbusername:, password:)
|
7
12
|
@client_name = client_name
|
8
13
|
@dbname = dbname
|
@@ -15,7 +20,7 @@ module MetabaseCli
|
|
15
20
|
end
|
16
21
|
|
17
22
|
def create_database
|
18
|
-
response =
|
23
|
+
response = MetabaseCli::Api.client.post("/api/database", database_params)
|
19
24
|
@database_id = response.fetch("id")
|
20
25
|
puts "Successfully created database with id: #{@database_id}"
|
21
26
|
|
@@ -23,9 +28,9 @@ module MetabaseCli
|
|
23
28
|
end
|
24
29
|
|
25
30
|
def set_default_permissions
|
26
|
-
response =
|
31
|
+
response = MetabaseCli::Api.client.put("/api/permissions/graph", default_permissions)
|
27
32
|
|
28
|
-
puts "Successfully set default permissions" if permissions_graph[:
|
33
|
+
puts "Successfully set default permissions" if permissions_graph[:revision] != response["revision"]
|
29
34
|
end
|
30
35
|
|
31
36
|
private
|
@@ -45,12 +50,12 @@ module MetabaseCli
|
|
45
50
|
end
|
46
51
|
|
47
52
|
def default_permissions
|
48
|
-
permissions_graph.dup.deep_merge(
|
53
|
+
MetabaseCli::Api.permissions_graph.dup.deep_merge(
|
49
54
|
{
|
50
55
|
"groups":
|
51
56
|
{
|
52
57
|
"1": {
|
53
|
-
"#{@database_id
|
58
|
+
"#{@database_id}": {
|
54
59
|
"native": "none",
|
55
60
|
"schemas": "none"
|
56
61
|
}
|
@@ -59,22 +64,5 @@ module MetabaseCli
|
|
59
64
|
}
|
60
65
|
)
|
61
66
|
end
|
62
|
-
|
63
|
-
def permissions_graph
|
64
|
-
# Due to Faraday we need to use a trick to get the string key as symbol
|
65
|
-
@permissions_graph ||= JSON.parse(JSON.dump(metabase_client.get("/api/permissions/graph")), symbolize_names: true)
|
66
|
-
end
|
67
|
-
|
68
|
-
def metabase_client
|
69
|
-
raise "Missing url" unless ENV["METABASE_URL"]
|
70
|
-
raise "Missing username" unless ENV["METABASE_USERNAME"]
|
71
|
-
raise "Missing password" unless ENV["METABASE_PASSWORD"]
|
72
|
-
|
73
|
-
@metabase_client ||= Metabase::Client.new(
|
74
|
-
url: ENV.fetch("METABASE_URL", nil),
|
75
|
-
username: ENV.fetch("METABASE_USERNAME", nil),
|
76
|
-
password: ENV.fetch("METABASE_PASSWORD", nil)
|
77
|
-
).tap { |client| client.login }
|
78
|
-
end
|
79
67
|
end
|
80
|
-
end
|
68
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "metabase"
|
4
|
+
require "hash_deep_merge"
|
5
|
+
require_relative "api"
|
6
|
+
|
7
|
+
module MetabaseCli
|
8
|
+
class GroupService
|
9
|
+
include MetabaseCli::Api
|
10
|
+
|
11
|
+
def initialize(name:)
|
12
|
+
@name = name
|
13
|
+
@group_id = nil
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_group
|
17
|
+
response = MetabaseCli::Api.client.post("/api/permissions/group", {
|
18
|
+
"name": @name
|
19
|
+
})
|
20
|
+
|
21
|
+
@group_id = response["id"]
|
22
|
+
puts "Group created with id: #{@group_id}"
|
23
|
+
|
24
|
+
@group_id
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "metabase"
|
4
|
+
require "hash_deep_merge"
|
5
|
+
require "securerandom"
|
6
|
+
require_relative "api"
|
7
|
+
|
8
|
+
module MetabaseCli
|
9
|
+
class UserService
|
10
|
+
def initialize(last_name:, first_name:, email:, group_wanted:)
|
11
|
+
@last_name = last_name
|
12
|
+
@first_name = first_name
|
13
|
+
@email = email
|
14
|
+
@group_wanted = group_wanted
|
15
|
+
@user_id = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def create_user
|
19
|
+
response = MetabaseCli::Api.client.post("/api/user", user_params)
|
20
|
+
@user_id = response.fetch("id")
|
21
|
+
|
22
|
+
puts "Successfully created user with id: #{@user_id}"
|
23
|
+
|
24
|
+
self
|
25
|
+
end
|
26
|
+
|
27
|
+
def invite_again
|
28
|
+
MetabaseCli::Api.client.post("/api/user/#{@user_id}/send_invite")
|
29
|
+
puts "Successfully invited user with id: #{@user_id}"
|
30
|
+
|
31
|
+
self
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def user_params
|
37
|
+
{
|
38
|
+
"first_name": @first_name,
|
39
|
+
"last_name": @last_name,
|
40
|
+
"email": @email,
|
41
|
+
"password": SecureRandom.alphanumeric(32),
|
42
|
+
"group_ids": group_wanted_ids,
|
43
|
+
"login_attributes": nil,
|
44
|
+
"locale": "fr"
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
def group_wanted_ids
|
49
|
+
return [1] if @group_wanted.nil?
|
50
|
+
return [1] if @group_wanted == "1"
|
51
|
+
|
52
|
+
[1, @group_wanted.to_i]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/metabase_cli/version.rb
CHANGED
data/metabase_cli.gemspec
CHANGED
@@ -30,15 +30,15 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
31
31
|
spec.require_paths = ["lib"]
|
32
32
|
|
33
|
-
spec.add_dependency
|
34
|
-
spec.add_dependency
|
35
|
-
spec.add_dependency
|
36
|
-
spec.add_dependency
|
33
|
+
spec.add_dependency "eventmachine"
|
34
|
+
spec.add_dependency "hash-deep-merge"
|
35
|
+
spec.add_dependency "metabase"
|
36
|
+
spec.add_dependency "thor"
|
37
37
|
|
38
|
-
spec.add_development_dependency "
|
38
|
+
spec.add_development_dependency "byebug"
|
39
39
|
spec.add_development_dependency "rake"
|
40
|
+
spec.add_development_dependency "rspec"
|
40
41
|
spec.add_development_dependency "rubocop"
|
41
|
-
spec.add_development_dependency "byebug"
|
42
42
|
|
43
43
|
# Uncomment to register a new dependency of your gem
|
44
44
|
# spec.add_dependency "example-gem", "~> 1.0"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metabase_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Armand Fardeau
|
@@ -11,7 +11,7 @@ cert_chain: []
|
|
11
11
|
date: 2022-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: eventmachine
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: hash-deep-merge
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: metabase
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: thor
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: byebug
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -95,7 +95,7 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: rspec
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: rubocop
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
@@ -143,8 +143,11 @@ files:
|
|
143
143
|
- bin/setup
|
144
144
|
- exe/metabase_cli
|
145
145
|
- lib/metabase_cli.rb
|
146
|
+
- lib/metabase_cli/api.rb
|
146
147
|
- lib/metabase_cli/cli.rb
|
147
148
|
- lib/metabase_cli/database_service.rb
|
149
|
+
- lib/metabase_cli/group_service.rb
|
150
|
+
- lib/metabase_cli/user_service.rb
|
148
151
|
- lib/metabase_cli/version.rb
|
149
152
|
- metabase_cli.gemspec
|
150
153
|
homepage: https://github.com/armandfardeau/metabase_cli
|