zuora_api 1.9.07 → 1.9.08

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eac21d6215f0ab25d7ec77243bdf3a0a1e144cffe89fc36cb2f054be7d429b6d
4
- data.tar.gz: b1664b343cbf0045ecd156325dc4dbd2975dbe85f2972aa03a797c5cccc88cd1
3
+ metadata.gz: a012abdd5eacb3b9743866d78557e5bb97f52067de92a9aec0e46d45252e190c
4
+ data.tar.gz: 005d7186d019c95060f7ec531f0b548382dc6e274e80522d97a79500ee645938
5
5
  SHA512:
6
- metadata.gz: 4d10222b8220ce484cf7a75c36a04697b2defcf88a130c10e3dd22e8c6f040fc1794d0af243b5c9a56fb163e331aadd5a14e7679fc98f88924d0c3bad55981d6
7
- data.tar.gz: fe07226773ef63aa5435592fd5c81c40dde1e7dc64b1551b4e692b0cd1215b373620864e36b0d21c8439dd5c41916f165c0e6fde5ea67ccbf246c5a945b65eec
6
+ metadata.gz: 81d8472647c0b37ceee7fadf82610b28deb9b52b35f84740840de68b65f07ded753114e5e86ab6f936740eedf730a9a42f57bdf0e08b91c8a63b711300fb8c5b
7
+ data.tar.gz: 2aef7becdbfa2b9b4bdf5d598bd5be23f528f1a09181178df233d8ef218f1c801978d1d1c60d20808b07b7e83981d2bb4dbe1c786a5616977713c064f8fade62
@@ -125,6 +125,12 @@ module ZuoraAPI
125
125
  end
126
126
  end
127
127
 
128
+ class ZuoraAPIRequestConcurrentLimit < ZuoraAPIRequestLimit
129
+ end
130
+
131
+ class ZuoraAPIRequestRateLimit < ZuoraAPIRequestLimit
132
+ end
133
+
128
134
  class ZuoraAPIUnkownError < Error
129
135
  attr_reader :code, :response
130
136
  attr_writer :default_message
@@ -7,7 +7,7 @@ module ZuoraAPI
7
7
  class Login
8
8
  ENVIRONMENTS = [TEST = 'Test', SANDBOX = 'Sandbox', PRODUCTION = 'Production', PREFORMANCE = 'Preformance', SERVICES = 'Services', UNKNOWN = 'Unknown', STAGING = 'Staging' ]
9
9
  REGIONS = [EU = 'EU', US = 'US', NA = 'NA' ]
10
- MIN_Endpoints = {'Test': '108.0', 'Sandbox': '108.0', 'Production': '108.0', 'Performance': '108.0', 'Services': '96.0', 'Unknown': '96.0', 'Staging': '108.0'}.freeze
10
+ MIN_Endpoints = {'Test': '107.0', 'Sandbox': '107.0', 'Production': '107.0', 'Performance': '107.0', 'Services': '96.0', 'Unknown': '96.0', 'Staging': '107.0'}.freeze
11
11
  XML_SAVE_OPTIONS = Nokogiri::XML::Node::SaveOptions::AS_XML | Nokogiri::XML::Node::SaveOptions::NO_DECLARATION
12
12
 
13
13
  CONNECTION_EXCEPTIONS = [
@@ -29,6 +29,8 @@ module ZuoraAPI
29
29
  ZUORA_API_ERRORS = [
30
30
  ZuoraAPI::Exceptions::ZuoraAPIError,
31
31
  ZuoraAPI::Exceptions::ZuoraAPIRequestLimit,
32
+ ZuoraAPI::Exceptions::ZuoraAPIRequestConcurrentLimit,
33
+ ZuoraAPI::Exceptions::ZuoraAPIRequestRateLimit,
32
34
  ZuoraAPI::Exceptions::ZuoraAPILockCompetition,
33
35
  ZuoraAPI::Exceptions::ZuoraAPITemporaryError,
34
36
  ZuoraAPI::Exceptions::ZuoraDataIntegrity,
@@ -138,14 +140,13 @@ module ZuoraAPI
138
140
  def reporting_url(path)
139
141
  map = {"US" => {"Sandbox" => "https://zconnectsandbox.zuora.com/api/rest/v1/",
140
142
  "Production" => "https://zconnect.zuora.com/api/rest/v1/",
141
- "Test" => "https://zconnect-services0001.test.zuora.com/api/rest/v1/",
143
+ "Test" => "https://reporting-sbx.zan.0001.sbx.auw2.zuora.com/api/rest/v1/",
142
144
  "Staging" => "https://reporting-stg11.zan.svc.auw2.zuora.com/api/rest/v1/",
143
145
  "Performance" => "https://zconnectpt1.zuora.com/api/rest/v1/",
144
146
  "Services" => "https://reporting-svc08.svc.auw2.zuora.com/api/rest/v1/"},
145
147
  "EU" => {"Sandbox" => "https://zconnect.sandbox.eu.zuora.com/api/rest/v1/",
146
148
  "Production" => "https://zconnect.eu.zuora.com/api/rest/v1/",
147
- "Services"=> "https://reporting-sbx0000.sbx.aec1.zuora.com/api/rest/v1/",
148
- "Test" => "https://zconnect-services0002.test.eu.zuora.com/api/rest/v1/"},
149
+ "Services"=> "https://reporting-sbx0000.sbx.aec1.zuora.com/api/rest/v1/"},
149
150
  "NA" => {"Sandbox" => "https://zconnect.sandbox.na.zuora.com/api/rest/v1/",
150
151
  "Production" => "https://zconnect.na.zuora.com/api/rest/v1/",
151
152
  "Services"=> ""}
@@ -612,10 +613,7 @@ module ZuoraAPI
612
613
  case response.code
613
614
  when 504
614
615
  raise ZuoraAPI::Exceptions::ZuoraAPIReadTimeout.new("Received 504 from 'https://#{rest_domain(endpoint: request_uri)}'", response)
615
- when 429
616
- raise ZuoraAPI::Exceptions::ZuoraAPIRequestLimit.new("The total number of concurrent requests has exceeded the limit allowed by the system. Please resubmit your request later.", response)
617
- when 401
618
-
616
+ when 401, 429
619
617
  else
620
618
  if body.class == Hash
621
619
  case request_path
@@ -632,6 +630,21 @@ module ZuoraAPI
632
630
  when :SOAP
633
631
  error, success, message = get_soap_error_and_message(body)
634
632
 
633
+ if response.code == 429
634
+ if message.to_s.downcase.include?('concurrent')
635
+ raise ZuoraAPI::Exceptions::ZuoraAPIRequestConcurrentLimit.new(
636
+ "The total number of concurrent requests has exceeded the limit allowed by the system. " \
637
+ "Please resubmit your request later.",
638
+ response
639
+ )
640
+ else
641
+ raise ZuoraAPI::Exceptions::ZuoraAPIRequestRateLimit.new(
642
+ "Rate limiting. Please resubmit your request later.",
643
+ response
644
+ )
645
+ end
646
+ end
647
+
635
648
  if body.xpath('//fns:LoginFault', 'fns' =>'http://fault.api.zuora.com/').present?
636
649
  raise ZuoraAPI::Exceptions::ZuoraAPISessionError.new(message, response)
637
650
  end
@@ -724,7 +737,12 @@ module ZuoraAPI
724
737
  codes_array = codes_array.push(body.dig("error", 'code')).compact
725
738
  end
726
739
 
727
- if body['message'] == 'request exceeded limit'
740
+ body_message = body.fetch('message', '').downcase
741
+ if body_message.include?('rate limit exceeded')
742
+ raise ZuoraAPI::Exceptions::ZuoraAPIRequestRateLimit.new("The total number of requests has exceeded the rate limit allowed by the system. Please resubmit your request later.", response)
743
+ end
744
+
745
+ if body_message.include?('request exceeded limit')
728
746
  raise ZuoraAPI::Exceptions::ZuoraAPIRequestLimit.new("The total number of concurrent requests has exceeded the limit allowed by the system. Please resubmit your request later.", response)
729
747
  end
730
748
 
@@ -796,7 +814,7 @@ module ZuoraAPI
796
814
 
797
815
  #Request exceeded limit
798
816
  if codes_array.map{|code| code.to_s.slice(6,7).to_i}.include?(70)
799
- raise ZuoraAPI::Exceptions::ZuoraAPIRequestLimit.new("#{messages_array.join(', ')}", response)
817
+ raise ZuoraAPI::Exceptions::ZuoraAPIRequestConcurrentLimit.new("#{messages_array.join(', ')}", response)
800
818
  end
801
819
 
802
820
  #All Errors catch
@@ -804,6 +822,10 @@ module ZuoraAPI
804
822
  raise ZuoraAPI::Exceptions::ZuoraAPIError.new("#{messages_array.join(', ')}", response)
805
823
  end
806
824
 
825
+ if response.code == 429
826
+ raise ZuoraAPI::Exceptions::ZuoraAPIRequestLimit.new("The total number of concurrent requests has exceeded the limit allowed by the system. Please resubmit your request later.", response)
827
+ end
828
+
807
829
  #Zuora REST Query Errors
808
830
  if body["faultcode"].present?
809
831
  raise_errors_helper(error: body["faultcode"], message: body["faultstring"], response: response)
@@ -939,7 +961,11 @@ module ZuoraAPI
939
961
  when /.*INVALID_SESSION/
940
962
  raise ZuoraAPI::Exceptions::ZuoraAPISessionError.new(message, response, errors, success)
941
963
  when /.*REQUEST_EXCEEDED_LIMIT/
942
- raise ZuoraAPI::Exceptions::ZuoraAPIRequestLimit.new(message, response, errors, success)
964
+ if message.to_s.downcase.include?('concurrent')
965
+ raise ZuoraAPI::Exceptions::ZuoraAPIRequestConcurrentLimit.new(message, response, errors, success)
966
+ else
967
+ raise ZuoraAPI::Exceptions::ZuoraAPIRequestRateLimit.new(message, response, errors, success)
968
+ end
943
969
  when /.*LOCK_COMPETITION/
944
970
  raise ZuoraAPI::Exceptions::ZuoraAPILockCompetition.new(message, response, errors, success)
945
971
  when /.*BATCH_FAIL_ERROR/
@@ -1397,6 +1423,56 @@ module ZuoraAPI
1397
1423
  raise
1398
1424
  end
1399
1425
 
1426
+ def create_data_source_export(query: "", encrypted: false, zip: true, z_track_id: "")
1427
+ begin
1428
+ output_xml, input_xml = self.soap_call(debug: false, timeout_retry: true, zuora_track_id: z_track_id) do |xml|
1429
+ xml['ns1'].create do
1430
+ xml['ns1'].zObjects('xsi:type' => "ns2:Export") do
1431
+ xml['ns2'].Format 'csv'
1432
+ xml['ns2'].Zip zip
1433
+ xml['ns2'].Name 'googman'
1434
+ xml['ns2'].Query query
1435
+ xml['ns2'].Encrypted encrypted
1436
+ end
1437
+ end
1438
+ end
1439
+
1440
+ return output_xml.xpath('//ns1:Id', 'ns1' =>'http://api.zuora.com/').text
1441
+ rescue Exception => ex
1442
+ raise ex.class.new("#{z_track_id} #{ex.message}")
1443
+ end
1444
+ end
1445
+
1446
+ def check_export_status(export_id: "")
1447
+ begin
1448
+ response, full_response = self.rest_call(method: :get,url: self.rest_endpoint("object/export/#{export_id}"))
1449
+
1450
+ return full_response.parsed_response
1451
+ rescue Exception => ex
1452
+ raise ex
1453
+ end
1454
+ end
1455
+
1456
+ def get_export_file(file_id: "", extract: true, zip: true)
1457
+ begin
1458
+ export_file_path = self.get_file(:url => self.rest_endpoint("files/#{file_id}")).path
1459
+
1460
+ if extract && zip
1461
+ require "zip"
1462
+ new_path = export_file_path.partition('.zip').first
1463
+ zipped = Zip::File.open(export_file_path)
1464
+ file_handle = zipped.entries.first
1465
+ file_handle.extract(new_path)
1466
+ File.delete(export_file_path)
1467
+ return new_path
1468
+ else
1469
+ return export_file_path
1470
+ end
1471
+ rescue Exception => ex
1472
+ raise ex
1473
+ end
1474
+ end
1475
+
1400
1476
  def getDataSourceExport(query, extract: true, encrypted: false, zip: true, z_track_id: "")
1401
1477
  tries ||= 3
1402
1478
 
@@ -1,3 +1,3 @@
1
1
  module ZuoraAPI
2
- VERSION = "1.9.07"
2
+ VERSION = "1.9.08"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zuora_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.07
4
+ version: 1.9.08
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zuora Strategic Solutions Group
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-05-21 00:00:00.000000000 Z
11
+ date: 2021-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler