athens 0.3.5 → 0.4.1
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/.gitignore +2 -1
- data/CHANGELOG.md +48 -0
- data/Gemfile.lock +14 -11
- data/README.md +15 -0
- data/Vagrantfile +4 -6
- data/athens.gemspec +2 -0
- data/bin/setup +1 -0
- data/lib/athens/configuration.rb +3 -1
- data/lib/athens/connection.rb +1 -3
- data/lib/athens/query.rb +3 -1
- data/lib/athens/version.rb +1 -1
- data/lib/athens.rb +1 -0
- metadata +31 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4bed77ded41e5ac8bcff35169ac9fec6ffe6f2b9732aefe05c8e1fb034a0afc5
|
4
|
+
data.tar.gz: 1b0c5f99c343e0179a81a92b115725542704bff8a1f50884a41b48d7fd557be3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 598d9114124c9f842ae708b11922762a3061711a674c29827f8e7c9fc37b0a2095bc510bc1ab5525e8e0131d6ac85447e518ef9e8a4a788f7a1ddb2a3e455b97
|
7
|
+
data.tar.gz: 993e073ab06cbbf688d86cbb9f6de10dd587a6bc548c5cb4d53d00af30106ffc89a221e2374a53872490b7b4095a160e0fe11ea18f2de9fb018ae42981043622
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,51 @@
|
|
1
|
+
## 0.4.1 / 2022-06-16
|
2
|
+
|
3
|
+
* Specifying minimum version of `aws-sdk-core` gem for `jmespath` security issue
|
4
|
+
|
5
|
+
## 0.4.0 / 2021-12-03
|
6
|
+
|
7
|
+
* Added automatic parsing of JSON columns (thanks [darkside](https://github.com/darkside))
|
8
|
+
|
9
|
+
#### Potentially breaking change
|
10
|
+
|
11
|
+
If you were previously querying JSON type data and parsing it from a string in your own code, you'll want to remove that before upgrading.
|
12
|
+
|
13
|
+
For example, with previous versions you could do this (even though it would generate a warning):
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
> query = conn.execute("SELECT JSON_PARSE('{\"a\": 1, \"b\": 2}');")
|
17
|
+
> query.wait
|
18
|
+
> JSON.parse(query.to_a(header_row: false).first[0])
|
19
|
+
WARNING: Unsupported type: json, defaulting to string
|
20
|
+
=> {"a"=>1, "b"=>2}
|
21
|
+
```
|
22
|
+
|
23
|
+
After upgrading, that same code will give you an error:
|
24
|
+
```ruby
|
25
|
+
> JSON.parse(query.to_a(header_row: false).first[0])
|
26
|
+
Traceback (most recent call last):
|
27
|
+
5: from bin/console:14:in `<main>'
|
28
|
+
4: from (irb):12:in `<main>'
|
29
|
+
3: from /home/vagrant/.rvm/rubies/ruby-3.0.0/lib/ruby/3.0.0/json/common.rb:216:in `parse'
|
30
|
+
2: from /home/vagrant/.rvm/rubies/ruby-3.0.0/lib/ruby/3.0.0/json/common.rb:216:in `new'
|
31
|
+
1: from /home/vagrant/.rvm/rubies/ruby-3.0.0/lib/ruby/3.0.0/json/common.rb:216:in `initialize'
|
32
|
+
TypeError (no implicit conversion of Hash into String)
|
33
|
+
```
|
34
|
+
|
35
|
+
Instead just remove your json parsing since Athens handles it now:
|
36
|
+
```ruby
|
37
|
+
> query = conn.execute("SELECT JSON_PARSE('{\"a\": 1, \"b\": 2}');")
|
38
|
+
> query.wait
|
39
|
+
> query.to_a(header_row: false).first[0]
|
40
|
+
=> {:a=>1, :b=>2}
|
41
|
+
```
|
42
|
+
|
43
|
+
|
44
|
+
## 0.3.6 / 2021-11-16
|
45
|
+
|
46
|
+
* Addition of :result_encryption as a configuration option to change encryption options for query results (https://github.com/getletterpress/athens/issues/12)
|
47
|
+
* Bumped development gem versions to latest releases
|
48
|
+
|
1
49
|
## 0.3.5 / 2021-05-19
|
2
50
|
|
3
51
|
* Addition of :aws_profile as a configuration option for credentials (thanks [oisin](https://github.com/oisin))
|
data/Gemfile.lock
CHANGED
@@ -1,26 +1,29 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
athens (0.
|
4
|
+
athens (0.4.0)
|
5
5
|
aws-sdk-athena (~> 1)
|
6
|
+
aws-sdk-core (~> 3.131.1)
|
7
|
+
multi_json (~> 1.0)
|
6
8
|
|
7
9
|
GEM
|
8
10
|
remote: https://rubygems.org/
|
9
11
|
specs:
|
10
|
-
aws-eventstream (1.
|
11
|
-
aws-partitions (1.
|
12
|
-
aws-sdk-athena (1.
|
13
|
-
aws-sdk-core (~> 3, >= 3.
|
12
|
+
aws-eventstream (1.2.0)
|
13
|
+
aws-partitions (1.599.0)
|
14
|
+
aws-sdk-athena (1.53.0)
|
15
|
+
aws-sdk-core (~> 3, >= 3.127.0)
|
14
16
|
aws-sigv4 (~> 1.1)
|
15
|
-
aws-sdk-core (3.
|
17
|
+
aws-sdk-core (3.131.1)
|
16
18
|
aws-eventstream (~> 1, >= 1.0.2)
|
17
|
-
aws-partitions (~> 1, >= 1.
|
19
|
+
aws-partitions (~> 1, >= 1.525.0)
|
18
20
|
aws-sigv4 (~> 1.1)
|
19
|
-
jmespath (~> 1.
|
20
|
-
aws-sigv4 (1.
|
21
|
+
jmespath (~> 1, >= 1.6.1)
|
22
|
+
aws-sigv4 (1.5.0)
|
21
23
|
aws-eventstream (~> 1, >= 1.0.2)
|
22
|
-
jmespath (1.
|
23
|
-
|
24
|
+
jmespath (1.6.1)
|
25
|
+
multi_json (1.15.0)
|
26
|
+
rake (13.0.6)
|
24
27
|
rexml (3.2.5)
|
25
28
|
|
26
29
|
PLATFORMS
|
data/README.md
CHANGED
@@ -92,6 +92,7 @@ Athens.configure do |config|
|
|
92
92
|
config.aws_profile = 'myprofile' # Optional
|
93
93
|
config.aws_region = 'us-east-1' # Optional
|
94
94
|
config.wait_polling_period = 0.25 # Optional - What period should we poll for the complete query?
|
95
|
+
config.result_encryption = nil # Optional, see below
|
95
96
|
end
|
96
97
|
```
|
97
98
|
|
@@ -105,6 +106,14 @@ conn = Athens::Connection.new(aws_client_override: {})
|
|
105
106
|
|
106
107
|
Take a look at the [AWS Athena SDK](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/Athena/Client.html#initialize-instance_method) for a list of all the available options.
|
107
108
|
|
109
|
+
The `result_encryption` option controls how the Athens results will be encrypted at the `output_location`. By default it's set to use the Amazon SSE encryption if you don't set it at all:
|
110
|
+
|
111
|
+
```ruby
|
112
|
+
{ encryption_option: "SSE_S3" }
|
113
|
+
```
|
114
|
+
|
115
|
+
If you set it to `nil`, it'll default to the bucket encryption settings. You can also use a customer kms key, see https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/Athena/Types/EncryptionConfiguration.html for the correct format.
|
116
|
+
|
108
117
|
### Advanced Usage
|
109
118
|
|
110
119
|
Providing a database name to the connection is optional, if you omit the name you'll have to specify it in your query:
|
@@ -161,6 +170,12 @@ After checking out the repo, run `bin/setup` to install dependencies. You can al
|
|
161
170
|
|
162
171
|
If you want you can use Vagrant instead, there's already a `Vagrantfile` so a simple `vagrant up` should get you setup.
|
163
172
|
|
173
|
+
If you want to use Docker, grab a ruby image and boot into the console. Then install git and bash and you can run the `bin/setup` script from there:
|
174
|
+
|
175
|
+
```
|
176
|
+
docker run --rm -it -v $(pwd):/app -w /app ruby:2.7-alpine /bin/sh -c 'apk add bash git;/bin/bash'
|
177
|
+
```
|
178
|
+
|
164
179
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
165
180
|
|
166
181
|
## Contributing
|
data/Vagrantfile
CHANGED
@@ -4,13 +4,11 @@
|
|
4
4
|
# Provisioning script
|
5
5
|
$script = <<SCRIPT
|
6
6
|
echo "*** Updating packages"
|
7
|
-
|
8
|
-
sudo DEBIAN_FRONTEND=noninteractive apt-get
|
9
|
-
sudo DEBIAN_FRONTEND=noninteractive aptitude update
|
10
|
-
sudo DEBIAN_FRONTEND=noninteractive aptitude -y safe-upgrade
|
7
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update
|
8
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade
|
11
9
|
|
12
10
|
echo "*** Installing new packages"
|
13
|
-
sudo DEBIAN_FRONTEND=noninteractive
|
11
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y curl git-core vim
|
14
12
|
|
15
13
|
if rvm -v 2>/dev/null; then
|
16
14
|
echo "*** rvm already installed, skipping"
|
@@ -30,7 +28,7 @@ SCRIPT
|
|
30
28
|
|
31
29
|
|
32
30
|
Vagrant.configure('2') do |config|
|
33
|
-
config.vm.box = "ubuntu/
|
31
|
+
config.vm.box = "ubuntu/focal64"
|
34
32
|
config.vm.hostname = 'athens-dev'
|
35
33
|
|
36
34
|
# Provision the machine with the shell script above
|
data/athens.gemspec
CHANGED
@@ -34,7 +34,9 @@ Gem::Specification.new do |spec|
|
|
34
34
|
|
35
35
|
spec.required_ruby_version = '>= 2.4'
|
36
36
|
|
37
|
+
spec.add_dependency "aws-sdk-core", "~> 3.131.1"
|
37
38
|
spec.add_dependency "aws-sdk-athena", "~> 1"
|
39
|
+
spec.add_dependency 'multi_json', '~> 1.0'
|
38
40
|
|
39
41
|
spec.add_development_dependency "bundler", ">= 1.17"
|
40
42
|
spec.add_development_dependency "rake", "~> 13.0"
|
data/bin/setup
CHANGED
data/lib/athens/configuration.rb
CHANGED
@@ -5,7 +5,8 @@ module Athens
|
|
5
5
|
:aws_region,
|
6
6
|
:output_location,
|
7
7
|
:wait_polling_period,
|
8
|
-
:aws_profile
|
8
|
+
:aws_profile,
|
9
|
+
:result_encryption
|
9
10
|
|
10
11
|
def initialize
|
11
12
|
@aws_access_key = nil
|
@@ -14,6 +15,7 @@ module Athens
|
|
14
15
|
@output_location = nil
|
15
16
|
@wait_polling_period = 0.25
|
16
17
|
@aws_profile = nil
|
18
|
+
@result_encryption = { encryption_option: "SSE_S3" }
|
17
19
|
end
|
18
20
|
end
|
19
21
|
end
|
data/lib/athens/connection.rb
CHANGED
@@ -48,9 +48,7 @@ module Athens
|
|
48
48
|
def result_config
|
49
49
|
Aws::Athena::Types::ResultConfiguration.new(
|
50
50
|
output_location: Athens.configuration.output_location,
|
51
|
-
encryption_configuration:
|
52
|
-
encryption_option: "SSE_S3"
|
53
|
-
}
|
51
|
+
encryption_configuration: Athens.configuration.result_encryption
|
54
52
|
)
|
55
53
|
end
|
56
54
|
|
data/lib/athens/query.rb
CHANGED
@@ -141,7 +141,7 @@ module Athens
|
|
141
141
|
metadata.column_info.each_with_index do |col, index|
|
142
142
|
data = row.data[index].var_char_value
|
143
143
|
nullable = ["UNKNOWN", "NULLABLE"].include?(col.nullable)
|
144
|
-
|
144
|
+
|
145
145
|
if nullable && data.nil?
|
146
146
|
mapped << data
|
147
147
|
elsif !nullable && data.nil?
|
@@ -166,6 +166,8 @@ module Athens
|
|
166
166
|
mapped << Date.parse(data)
|
167
167
|
when 'boolean'
|
168
168
|
mapped << (data == "true")
|
169
|
+
when 'json'
|
170
|
+
mapped << MultiJson.load(data, symbolize_keys: true)
|
169
171
|
else
|
170
172
|
puts "WARNING: Unsupported type: #{col.type}, defaulting to string"
|
171
173
|
mapped << data
|
data/lib/athens/version.rb
CHANGED
data/lib/athens.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: athens
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Schulte
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: aws-sdk-core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.131.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.131.1
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: aws-sdk-athena
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -24,6 +38,20 @@ dependencies:
|
|
24
38
|
- - "~>"
|
25
39
|
- !ruby/object:Gem::Version
|
26
40
|
version: '1'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: multi_json
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.0'
|
27
55
|
- !ruby/object:Gem::Dependency
|
28
56
|
name: bundler
|
29
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -113,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
113
141
|
- !ruby/object:Gem::Version
|
114
142
|
version: '0'
|
115
143
|
requirements: []
|
116
|
-
rubygems_version: 3.
|
144
|
+
rubygems_version: 3.1.6
|
117
145
|
signing_key:
|
118
146
|
specification_version: 4
|
119
147
|
summary: Run simple SQL queries in AWS Athena
|