metabase_cli 0.1.1 → 0.1.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 +4 -4
- data/.rubocop.yml +11 -1
- data/Gemfile +1 -1
- data/Gemfile.lock +2 -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 +47 -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 +48 -0
- data/lib/metabase_cli/version.rb +1 -1
- data/metabase_cli.gemspec +7 -6
- metadata +25 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a84b2623462c165877e5da4c5877e3a231981e7e39529ae51cfead263e33698c
|
4
|
+
data.tar.gz: ab393a03ac56b42bc15ca714f2b1f8142fb47d71485acf920d6ffebfdc426fdb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a704de64028b39619bc2847ab1f6d4480e6375de80730d799d8a6cb0b00375fe8938bf124c9833645e68ff04b4018fcc187b76c149a98766c4b838e3b08db881
|
7
|
+
data.tar.gz: 2ec6001d23fc062e590ca082de6ba2f9f01f4e8a1b16b909e5f7b52945892239e40af98ead36f44654b3fddfa6d7dec788aad259a02bdfcc0f8e86aec26bf9a5
|
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,44 @@ 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
|
+
end
|
53
|
+
|
54
|
+
desc "create_group", "Create a group"
|
55
|
+
|
56
|
+
def create_group
|
57
|
+
name = ask("Group name: ")
|
58
|
+
|
59
|
+
MetabaseCli::GroupService.new(
|
60
|
+
name: name
|
61
|
+
).create_group
|
62
|
+
end
|
63
|
+
|
64
|
+
desc "create_grouped_user", "Create a user and a group"
|
65
|
+
|
66
|
+
def create_grouped_user
|
67
|
+
group_id = create_group
|
68
|
+
create_user(group_id)
|
69
|
+
end
|
70
|
+
|
71
|
+
desc "create", "Create database, user and a group"
|
72
|
+
def create
|
73
|
+
create_database
|
74
|
+
create_grouped_user
|
75
|
+
end
|
33
76
|
end
|
34
77
|
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,48 @@
|
|
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
|
+
private
|
28
|
+
|
29
|
+
def user_params
|
30
|
+
{
|
31
|
+
"first_name": @first_name,
|
32
|
+
"last_name": @last_name,
|
33
|
+
"email": @email,
|
34
|
+
"password": SecureRandom.alphanumeric(32),
|
35
|
+
"group_ids": group_wanted_ids,
|
36
|
+
"login_attributes": nil,
|
37
|
+
"locale": "fr"
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
def group_wanted_ids
|
42
|
+
return [1] if @group_wanted.nil?
|
43
|
+
return [1] if @group_wanted == "1"
|
44
|
+
|
45
|
+
[1, @group_wanted.to_i]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/metabase_cli/version.rb
CHANGED
data/metabase_cli.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.summary = "Cli for Metabase API"
|
12
12
|
spec.homepage = "https://github.com/armandfardeau/metabase_cli"
|
13
13
|
spec.license = "MIT"
|
14
|
-
spec.required_ruby_version = ">= 2.
|
14
|
+
spec.required_ruby_version = ">= 2.7.5"
|
15
15
|
|
16
16
|
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
17
17
|
|
@@ -30,14 +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
|
33
|
+
spec.add_dependency "eventmachine"
|
34
|
+
spec.add_dependency "hash-deep-merge"
|
35
|
+
spec.add_dependency "metabase"
|
36
|
+
spec.add_dependency "thor"
|
36
37
|
|
37
|
-
spec.add_development_dependency "
|
38
|
+
spec.add_development_dependency "byebug"
|
38
39
|
spec.add_development_dependency "rake"
|
40
|
+
spec.add_development_dependency "rspec"
|
39
41
|
spec.add_development_dependency "rubocop"
|
40
|
-
spec.add_development_dependency "byebug"
|
41
42
|
|
42
43
|
# Uncomment to register a new dependency of your gem
|
43
44
|
# spec.add_dependency "example-gem", "~> 1.0"
|
metadata
CHANGED
@@ -1,17 +1,31 @@
|
|
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.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Armand Fardeau
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
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
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: hash-deep-merge
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - ">="
|
@@ -39,7 +53,7 @@ dependencies:
|
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
56
|
+
name: thor
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - ">="
|
@@ -53,7 +67,7 @@ dependencies:
|
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: byebug
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - ">="
|
@@ -81,7 +95,7 @@ dependencies:
|
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: rspec
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - ">="
|
@@ -95,7 +109,7 @@ dependencies:
|
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
112
|
+
name: rubocop
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
115
|
- - ">="
|
@@ -129,8 +143,11 @@ files:
|
|
129
143
|
- bin/setup
|
130
144
|
- exe/metabase_cli
|
131
145
|
- lib/metabase_cli.rb
|
146
|
+
- lib/metabase_cli/api.rb
|
132
147
|
- lib/metabase_cli/cli.rb
|
133
148
|
- lib/metabase_cli/database_service.rb
|
149
|
+
- lib/metabase_cli/group_service.rb
|
150
|
+
- lib/metabase_cli/user_service.rb
|
134
151
|
- lib/metabase_cli/version.rb
|
135
152
|
- metabase_cli.gemspec
|
136
153
|
homepage: https://github.com/armandfardeau/metabase_cli
|
@@ -149,7 +166,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
149
166
|
requirements:
|
150
167
|
- - ">="
|
151
168
|
- !ruby/object:Gem::Version
|
152
|
-
version: 2.
|
169
|
+
version: 2.7.5
|
153
170
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
171
|
requirements:
|
155
172
|
- - ">="
|