gooddata 2.1.19-java → 2.2.0-java
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 +5 -5
- data/.gdc-ii-config.yaml +1 -1
- data/.github/workflows/build.yml +66 -0
- data/.github/workflows/pre-merge.yml +72 -0
- data/CHANGELOG.md +38 -0
- data/Dockerfile +21 -14
- data/Dockerfile.jruby +1 -11
- data/README.md +1 -2
- data/SDK_VERSION +1 -1
- data/VERSION +1 -1
- data/ci/mssql/pom.xml +62 -0
- data/ci/mysql/pom.xml +57 -0
- data/ci/redshift/pom.xml +1 -1
- data/docker-compose.lcm.yml +0 -3
- data/gooddata.gemspec +2 -1
- data/k8s/charts/lcm-bricks/Chart.yaml +1 -1
- data/lcm.rake +2 -8
- data/lib/gooddata/bricks/middleware/aws_middleware.rb +35 -9
- data/lib/gooddata/cloud_resources/blobstorage/blobstorage_client.rb +98 -0
- data/lib/gooddata/cloud_resources/mssql/drivers/.gitkeepme +0 -0
- data/lib/gooddata/cloud_resources/mssql/mssql_client.rb +122 -0
- data/lib/gooddata/cloud_resources/mysql/drivers/.gitkeepme +0 -0
- data/lib/gooddata/cloud_resources/mysql/mysql_client.rb +111 -0
- data/lib/gooddata/cloud_resources/postgresql/postgresql_client.rb +0 -1
- data/lib/gooddata/cloud_resources/snowflake/snowflake_client.rb +18 -1
- data/lib/gooddata/helpers/data_helper.rb +9 -4
- data/lib/gooddata/lcm/actions/collect_meta.rb +3 -1
- data/lib/gooddata/lcm/actions/migrate_gdc_date_dimension.rb +3 -2
- data/lib/gooddata/lcm/actions/synchronize_clients.rb +56 -7
- data/lib/gooddata/lcm/actions/synchronize_dataset_mappings.rb +64 -0
- data/lib/gooddata/lcm/actions/synchronize_ldm.rb +19 -8
- data/lib/gooddata/lcm/actions/synchronize_user_filters.rb +12 -9
- data/lib/gooddata/lcm/actions/update_metric_formats.rb +185 -0
- data/lib/gooddata/lcm/data/delete_from_lcm_release.sql.erb +5 -0
- data/lib/gooddata/lcm/helpers/release_table_helper.rb +42 -8
- data/lib/gooddata/lcm/lcm2.rb +5 -0
- data/lib/gooddata/mixins/md_object_query.rb +1 -0
- data/lib/gooddata/models/data_source.rb +5 -1
- data/lib/gooddata/models/dataset_mapping.rb +36 -0
- data/lib/gooddata/models/metadata/label.rb +26 -27
- data/lib/gooddata/models/project.rb +34 -9
- data/lib/gooddata/models/schedule.rb +13 -1
- data/lib/gooddata/models/user_filters/user_filter_builder.rb +58 -53
- data/lib/gooddata/rest/phmap.rb +1 -0
- metadata +44 -18
- data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +0 -37
@@ -203,7 +203,7 @@ module GoodData
|
|
203
203
|
# so it precaches the values and still be able to function for larger ones even
|
204
204
|
# though that would mean tons of requests
|
205
205
|
def self.get_small_labels(labels_cache)
|
206
|
-
labels_cache.values.select { |label| label
|
206
|
+
labels_cache.values.select { |label| label &.values_count &. < 100_000 }
|
207
207
|
end
|
208
208
|
|
209
209
|
# Creates a MAQL expression(s) based on the filter defintion.
|
@@ -421,68 +421,73 @@ module GoodData
|
|
421
421
|
results: create_results + delete_results }
|
422
422
|
end
|
423
423
|
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
'userFilters'
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
424
|
+
if to_create.empty?
|
425
|
+
create_results = []
|
426
|
+
else
|
427
|
+
create_results = to_create.each_slice(100).flat_map do |batch|
|
428
|
+
batch.pmapcat do |related_uri, group|
|
429
|
+
group.each(&:save)
|
430
|
+
res = client.get("/gdc/md/#{project.pid}/userfilters?users=#{related_uri}")
|
431
|
+
items = res['userFilters']['items'].empty? ? [] : res['userFilters']['items'].first['userFilters']
|
432
|
+
|
433
|
+
payload = {
|
434
|
+
'userFilters' => {
|
435
|
+
'items' => [{
|
436
|
+
'user' => related_uri,
|
437
|
+
'userFilters' => items.concat(group.map(&:uri))
|
438
|
+
}]
|
439
|
+
}
|
436
440
|
}
|
437
|
-
|
438
|
-
res = client.post("/gdc/md/#{project.pid}/userfilters", payload)
|
441
|
+
res = client.post("/gdc/md/#{project.pid}/userfilters", payload)
|
439
442
|
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
443
|
+
# turn the errors from hashes into array of hashes
|
444
|
+
update_result = res['userFiltersUpdateResult'].flat_map do |k, v|
|
445
|
+
v.map { |r| { status: k.to_sym, user: r, type: :create } }
|
446
|
+
end
|
444
447
|
|
445
|
-
|
446
|
-
|
448
|
+
update_result.map do |result|
|
449
|
+
result[:status] == :failed ? result.merge(GoodData::Helpers.symbolize_keys(result[:user])) : result
|
450
|
+
end
|
447
451
|
end
|
448
452
|
end
|
453
|
+
project_log_formatter.log_user_filter_results(create_results, to_create)
|
454
|
+
create_errors = create_results.select { |r| r[:status] == :failed }
|
455
|
+
fail "Creating MUFs resulted in errors: #{create_errors}" if create_errors.any?
|
449
456
|
end
|
450
457
|
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
res = client.post("/gdc/md/#{project.pid}/userfilters", payload)
|
473
|
-
results.concat(res['userFiltersUpdateResult']
|
458
|
+
if to_delete.empty?
|
459
|
+
delete_results = []
|
460
|
+
elsif !options[:do_not_touch_filters_that_are_not_mentioned]
|
461
|
+
delete_results = to_delete.each_slice(100).flat_map do |batch|
|
462
|
+
batch.flat_map do |related_uri, group|
|
463
|
+
results = []
|
464
|
+
if related_uri
|
465
|
+
res = client.get("/gdc/md/#{project.pid}/userfilters?users=#{related_uri}")
|
466
|
+
items = res['userFilters']['items'].empty? ? [] : res['userFilters']['items'].first['userFilters']
|
467
|
+
payload = {
|
468
|
+
'userFilters' => {
|
469
|
+
'items' => [
|
470
|
+
{
|
471
|
+
'user' => related_uri,
|
472
|
+
'userFilters' => items - group.map(&:uri)
|
473
|
+
}
|
474
|
+
]
|
475
|
+
}
|
476
|
+
}
|
477
|
+
res = client.post("/gdc/md/#{project.pid}/userfilters", payload)
|
478
|
+
results.concat(res['userFiltersUpdateResult']
|
474
479
|
.flat_map { |k, v| v.map { |r| { status: k.to_sym, user: r, type: :delete } } }
|
475
480
|
.map { |result| result[:status] == :failed ? result.merge(GoodData::Helpers.symbolize_keys(result[:user])) : result })
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
end
|
481
|
-
end
|
481
|
+
end
|
482
|
+
group.peach(&:delete)
|
483
|
+
results
|
484
|
+
end
|
482
485
|
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
+
project_log_formatter.log_user_filter_results(delete_results, to_delete)
|
487
|
+
delete_errors = delete_results.select { |r| r[:status] == :failed } if delete_results
|
488
|
+
fail "Deleting MUFs resulted in errors: #{delete_errors}" if delete_errors&.any?
|
489
|
+
end
|
490
|
+
end
|
486
491
|
|
487
492
|
{ created: to_create, deleted: to_delete, results: create_results + (delete_results || []) }
|
488
493
|
end
|
data/lib/gooddata/rest/phmap.rb
CHANGED
@@ -82,6 +82,7 @@ module GoodData
|
|
82
82
|
|
83
83
|
['/gdc/internal/projects/{id}/objects/setPermissions', %r{/gdc/internal/projects/[^\/]+/objects/setPermissions}],
|
84
84
|
['/gdc/internal/projects/{id}/roles', %r{/gdc/internal/projects/[^\/]+/roles}],
|
85
|
+
['/gdc/dataload/projects/{id}/modelMapping/datasets/bulk/upsert', %r{/gdc/dataload/projects/[^\/]+/modelMapping/datasets/bulk/upsert}],
|
85
86
|
['/gdc/md/{id}/variables/item/{id}', %r{/gdc/md/[^\/]+/variables/item/[\d]+}],
|
86
87
|
['/gdc/md/{id}/validate/task/{id}', %r{/gdc/md/[^\/]+/validate/task/[^\/]+}],
|
87
88
|
['/gdc/md/{id}/using2/{id}/{id}', %r{/gdc/md/[^\/]+/using2/[\d]+/[\d]+}],
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gooddata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Pavel Kolesnikov
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date:
|
17
|
+
date: 2022-02-15 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
requirement: !ruby/object:Gem::Requirement
|
@@ -252,6 +252,34 @@ dependencies:
|
|
252
252
|
- - "<"
|
253
253
|
- !ruby/object:Gem::Version
|
254
254
|
version: 1.4.0
|
255
|
+
- !ruby/object:Gem::Dependency
|
256
|
+
requirement: !ruby/object:Gem::Requirement
|
257
|
+
requirements:
|
258
|
+
- - "~>"
|
259
|
+
- !ruby/object:Gem::Version
|
260
|
+
version: 1.1.0
|
261
|
+
name: azure-storage-blob
|
262
|
+
prerelease: false
|
263
|
+
type: :runtime
|
264
|
+
version_requirements: !ruby/object:Gem::Requirement
|
265
|
+
requirements:
|
266
|
+
- - "~>"
|
267
|
+
- !ruby/object:Gem::Version
|
268
|
+
version: 1.1.0
|
269
|
+
- !ruby/object:Gem::Dependency
|
270
|
+
requirement: !ruby/object:Gem::Requirement
|
271
|
+
requirements:
|
272
|
+
- - "~>"
|
273
|
+
- !ruby/object:Gem::Version
|
274
|
+
version: 1.10.0
|
275
|
+
name: nokogiri
|
276
|
+
prerelease: false
|
277
|
+
type: :runtime
|
278
|
+
version_requirements: !ruby/object:Gem::Requirement
|
279
|
+
requirements:
|
280
|
+
- - "~>"
|
281
|
+
- !ruby/object:Gem::Version
|
282
|
+
version: 1.10.0
|
255
283
|
- !ruby/object:Gem::Dependency
|
256
284
|
requirement: !ruby/object:Gem::Requirement
|
257
285
|
requirements:
|
@@ -418,20 +446,6 @@ dependencies:
|
|
418
446
|
- - ">="
|
419
447
|
- !ruby/object:Gem::Version
|
420
448
|
version: 1.2.1
|
421
|
-
- !ruby/object:Gem::Dependency
|
422
|
-
requirement: !ruby/object:Gem::Requirement
|
423
|
-
requirements:
|
424
|
-
- - "~>"
|
425
|
-
- !ruby/object:Gem::Version
|
426
|
-
version: '0.2'
|
427
|
-
name: salesforce_bulk_query
|
428
|
-
prerelease: false
|
429
|
-
type: :runtime
|
430
|
-
version_requirements: !ruby/object:Gem::Requirement
|
431
|
-
requirements:
|
432
|
-
- - "~>"
|
433
|
-
- !ruby/object:Gem::Version
|
434
|
-
version: '0.2'
|
435
449
|
- !ruby/object:Gem::Dependency
|
436
450
|
requirement: !ruby/object:Gem::Requirement
|
437
451
|
requirements:
|
@@ -514,6 +528,8 @@ files:
|
|
514
528
|
- ".flayignore"
|
515
529
|
- ".gdc-ii-config-chart.yaml"
|
516
530
|
- ".gdc-ii-config.yaml"
|
531
|
+
- ".github/workflows/build.yml"
|
532
|
+
- ".github/workflows/pre-merge.yml"
|
517
533
|
- ".gitignore"
|
518
534
|
- ".pronto.yml"
|
519
535
|
- ".rspec"
|
@@ -553,6 +569,8 @@ files:
|
|
553
569
|
- bin/users.sh
|
554
570
|
- ci.rake
|
555
571
|
- ci/bigquery/pom.xml
|
572
|
+
- ci/mssql/pom.xml
|
573
|
+
- ci/mysql/pom.xml
|
556
574
|
- ci/postgresql/pom.xml
|
557
575
|
- ci/redshift/pom.xml
|
558
576
|
- ci/snowflake/pom.xml
|
@@ -581,7 +599,6 @@ files:
|
|
581
599
|
- lib/gooddata/bricks/middleware/aws_middleware.rb
|
582
600
|
- lib/gooddata/bricks/middleware/base_middleware.rb
|
583
601
|
- lib/gooddata/bricks/middleware/bench_middleware.rb
|
584
|
-
- lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb
|
585
602
|
- lib/gooddata/bricks/middleware/context_logger_decorator.rb
|
586
603
|
- lib/gooddata/bricks/middleware/context_manager.rb
|
587
604
|
- lib/gooddata/bricks/middleware/decode_params_middleware.rb
|
@@ -616,9 +633,14 @@ files:
|
|
616
633
|
- lib/gooddata/client.rb
|
617
634
|
- lib/gooddata/cloud_resources/bigquery/bigquery_client.rb
|
618
635
|
- lib/gooddata/cloud_resources/bigquery/drivers/.gitkeepme
|
636
|
+
- lib/gooddata/cloud_resources/blobstorage/blobstorage_client.rb
|
619
637
|
- lib/gooddata/cloud_resources/cloud_resource_client.rb
|
620
638
|
- lib/gooddata/cloud_resources/cloud_resource_factory.rb
|
621
639
|
- lib/gooddata/cloud_resources/cloud_resources.rb
|
640
|
+
- lib/gooddata/cloud_resources/mssql/drivers/.gitkeepme
|
641
|
+
- lib/gooddata/cloud_resources/mssql/mssql_client.rb
|
642
|
+
- lib/gooddata/cloud_resources/mysql/drivers/.gitkeepme
|
643
|
+
- lib/gooddata/cloud_resources/mysql/mysql_client.rb
|
622
644
|
- lib/gooddata/cloud_resources/postgresql/drivers/.gitkeepme
|
623
645
|
- lib/gooddata/cloud_resources/postgresql/postgresql_client.rb
|
624
646
|
- lib/gooddata/cloud_resources/redshift/drivers/log4j.properties
|
@@ -720,6 +742,7 @@ files:
|
|
720
742
|
- lib/gooddata/lcm/actions/synchronize_cas.rb
|
721
743
|
- lib/gooddata/lcm/actions/synchronize_clients.rb
|
722
744
|
- lib/gooddata/lcm/actions/synchronize_color_palette.rb
|
745
|
+
- lib/gooddata/lcm/actions/synchronize_dataset_mappings.rb
|
723
746
|
- lib/gooddata/lcm/actions/synchronize_etls_in_segment.rb
|
724
747
|
- lib/gooddata/lcm/actions/synchronize_label_types.rb
|
725
748
|
- lib/gooddata/lcm/actions/synchronize_ldm.rb
|
@@ -731,9 +754,11 @@ files:
|
|
731
754
|
- lib/gooddata/lcm/actions/synchronize_user_filters.rb
|
732
755
|
- lib/gooddata/lcm/actions/synchronize_user_groups.rb
|
733
756
|
- lib/gooddata/lcm/actions/synchronize_users.rb
|
757
|
+
- lib/gooddata/lcm/actions/update_metric_formats.rb
|
734
758
|
- lib/gooddata/lcm/actions/update_release_table.rb
|
735
759
|
- lib/gooddata/lcm/brick_logger.rb
|
736
760
|
- lib/gooddata/lcm/data/create_lcm_release.sql.erb
|
761
|
+
- lib/gooddata/lcm/data/delete_from_lcm_release.sql.erb
|
737
762
|
- lib/gooddata/lcm/data/insert_into_lcm_release.sql.erb
|
738
763
|
- lib/gooddata/lcm/data/select_from_lcm_release.sql.erb
|
739
764
|
- lib/gooddata/lcm/data/update_lcm_release.sql.erb
|
@@ -847,6 +872,7 @@ files:
|
|
847
872
|
- lib/gooddata/models/client_synchronization_result_details.rb
|
848
873
|
- lib/gooddata/models/data_product.rb
|
849
874
|
- lib/gooddata/models/data_source.rb
|
875
|
+
- lib/gooddata/models/dataset_mapping.rb
|
850
876
|
- lib/gooddata/models/datawarehouse.rb
|
851
877
|
- lib/gooddata/models/domain.rb
|
852
878
|
- lib/gooddata/models/execution.rb
|
@@ -947,7 +973,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
947
973
|
version: '0'
|
948
974
|
requirements: []
|
949
975
|
rubyforge_project:
|
950
|
-
rubygems_version: 2.6.
|
976
|
+
rubygems_version: 2.6.14.1
|
951
977
|
signing_key:
|
952
978
|
specification_version: 4
|
953
979
|
summary: A convenient Ruby wrapper around the GoodData RESTful API
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
#
|
3
|
-
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
4
|
-
# This source code is licensed under the BSD-style license found in the
|
5
|
-
# LICENSE file in the root directory of this source tree.
|
6
|
-
|
7
|
-
require 'salesforce_bulk_query'
|
8
|
-
|
9
|
-
require_relative 'base_middleware'
|
10
|
-
|
11
|
-
module GoodData
|
12
|
-
module Bricks
|
13
|
-
class BulkSalesforceMiddleware < Bricks::Middleware
|
14
|
-
DEFAULT_VERSION = '29.0'.freeze
|
15
|
-
|
16
|
-
def self.create_client(params)
|
17
|
-
salesforce = nil
|
18
|
-
if params['salesforce_client']
|
19
|
-
|
20
|
-
client = params['salesforce_client']
|
21
|
-
client.authenticate!
|
22
|
-
|
23
|
-
salesforce = SalesforceBulkQuery::Api.new(client, logger: params['GDC_LOGGER'])
|
24
|
-
# SalesforceBulkQuery adds its own Restforce logging so turn it off
|
25
|
-
Restforce.log = false if params['GDC_LOGGER']
|
26
|
-
end
|
27
|
-
params.merge('salesforce_bulk_client' => salesforce)
|
28
|
-
end
|
29
|
-
|
30
|
-
def call(params)
|
31
|
-
params = params.to_hash
|
32
|
-
params = self.class.create_client(params)
|
33
|
-
@app.call(params)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|