zuora_api 1.10.1 → 1.10.2
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/lib/zuora_api/exceptions.rb +6 -0
- data/lib/zuora_api/login.rb +88 -8
- data/lib/zuora_api/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8cf78cb3b1e25a9394f07c8557a23b8822d4f5cf48839bfad5e6f8e2ab3ad1e7
|
4
|
+
data.tar.gz: 76d6cd10a87cbae7dc3a5898192c9cc1c8683c374ae0008b116bef46ecc79cda
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e53ec1c8acb9ba3d7ce1247f5516162d85095567421082b025fd04117a4cdc463854ec136dc09f3283b09af493a1d68b17cda7c29f0d18d48faabfef949dea5
|
7
|
+
data.tar.gz: 0be11b3df708385da409848b1c953be59cd3efe4c8b658d55dd06e781a9c347df58cd809f32edb88063be4ea6ea11fada13396177ddb08233534afffd3458463
|
data/lib/zuora_api/exceptions.rb
CHANGED
@@ -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
|
data/lib/zuora_api/login.rb
CHANGED
@@ -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': '
|
10
|
+
MIN_Endpoints = {'Test': '114.0', 'Sandbox': '114.0', 'Production': '114.0', 'Performance': '114.0', 'Services': '96.0', 'Unknown': '96.0', 'Staging': '114.0'}.freeze
|
11
11
|
XML_SAVE_OPTIONS = Nokogiri::XML::Node::SaveOptions::AS_XML | Nokogiri::XML::Node::SaveOptions::NO_DECLARATION
|
12
12
|
USER_AGENT = "Zuora#{ENV['Z_APPLICATION_NAME']&.capitalize}/#{ENV['Z_APPLICATION_VERSION']&.delete('v')}"
|
13
13
|
|
@@ -30,6 +30,8 @@ module ZuoraAPI
|
|
30
30
|
ZUORA_API_ERRORS = [
|
31
31
|
ZuoraAPI::Exceptions::ZuoraAPIError,
|
32
32
|
ZuoraAPI::Exceptions::ZuoraAPIRequestLimit,
|
33
|
+
ZuoraAPI::Exceptions::ZuoraAPIRequestConcurrentLimit,
|
34
|
+
ZuoraAPI::Exceptions::ZuoraAPIRequestRateLimit,
|
33
35
|
ZuoraAPI::Exceptions::ZuoraAPILockCompetition,
|
34
36
|
ZuoraAPI::Exceptions::ZuoraAPITemporaryError,
|
35
37
|
ZuoraAPI::Exceptions::ZuoraDataIntegrity,
|
@@ -457,6 +459,7 @@ module ZuoraAPI
|
|
457
459
|
headers.merge!({ 'Content-Type' => "text/xml; charset=utf-8", 'Accept' => 'text/xml'})
|
458
460
|
headers['Zuora-Track-Id'] = zuora_track_id if zuora_track_id.present?
|
459
461
|
headers['X-Amzn-Trace-Id'] = zuora_track_id if zuora_track_id.present?
|
462
|
+
|
460
463
|
headers["User-Agent"] = USER_AGENT
|
461
464
|
|
462
465
|
request = HTTParty::Request.new(
|
@@ -617,10 +620,7 @@ module ZuoraAPI
|
|
617
620
|
case response.code
|
618
621
|
when 504
|
619
622
|
raise ZuoraAPI::Exceptions::ZuoraAPIReadTimeout.new("Received 504 from 'https://#{rest_domain(endpoint: request_uri)}'", response)
|
620
|
-
when 429
|
621
|
-
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)
|
622
|
-
when 401
|
623
|
-
|
623
|
+
when 401, 429
|
624
624
|
else
|
625
625
|
if body.class == Hash
|
626
626
|
case request_path
|
@@ -637,6 +637,21 @@ module ZuoraAPI
|
|
637
637
|
when :SOAP
|
638
638
|
error, success, message = get_soap_error_and_message(body)
|
639
639
|
|
640
|
+
if response.code == 429
|
641
|
+
if message.to_s.downcase.include?('concurrent')
|
642
|
+
raise ZuoraAPI::Exceptions::ZuoraAPIRequestConcurrentLimit.new(
|
643
|
+
"The total number of concurrent requests has exceeded the limit allowed by the system. " \
|
644
|
+
"Please resubmit your request later.",
|
645
|
+
response
|
646
|
+
)
|
647
|
+
else
|
648
|
+
raise ZuoraAPI::Exceptions::ZuoraAPIRequestRateLimit.new(
|
649
|
+
"Rate limiting. Please resubmit your request later.",
|
650
|
+
response
|
651
|
+
)
|
652
|
+
end
|
653
|
+
end
|
654
|
+
|
640
655
|
if body.xpath('//fns:LoginFault', 'fns' =>'http://fault.api.zuora.com/').present?
|
641
656
|
raise ZuoraAPI::Exceptions::ZuoraAPISessionError.new(message, response)
|
642
657
|
end
|
@@ -729,7 +744,12 @@ module ZuoraAPI
|
|
729
744
|
codes_array = codes_array.push(body.dig("error", 'code')).compact
|
730
745
|
end
|
731
746
|
|
732
|
-
|
747
|
+
body_message = body.fetch('message', '').downcase
|
748
|
+
if body_message.include?('rate limit exceeded')
|
749
|
+
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)
|
750
|
+
end
|
751
|
+
|
752
|
+
if body_message.include?('request exceeded limit')
|
733
753
|
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)
|
734
754
|
end
|
735
755
|
|
@@ -801,7 +821,7 @@ module ZuoraAPI
|
|
801
821
|
|
802
822
|
#Request exceeded limit
|
803
823
|
if codes_array.map{|code| code.to_s.slice(6,7).to_i}.include?(70)
|
804
|
-
raise ZuoraAPI::Exceptions::
|
824
|
+
raise ZuoraAPI::Exceptions::ZuoraAPIRequestConcurrentLimit.new("#{messages_array.join(', ')}", response)
|
805
825
|
end
|
806
826
|
|
807
827
|
#All Errors catch
|
@@ -809,6 +829,10 @@ module ZuoraAPI
|
|
809
829
|
raise ZuoraAPI::Exceptions::ZuoraAPIError.new("#{messages_array.join(', ')}", response)
|
810
830
|
end
|
811
831
|
|
832
|
+
if response.code == 429
|
833
|
+
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)
|
834
|
+
end
|
835
|
+
|
812
836
|
#Zuora REST Query Errors
|
813
837
|
if body["faultcode"].present?
|
814
838
|
raise_errors_helper(error: body["faultcode"], message: body["faultstring"], response: response)
|
@@ -944,7 +968,11 @@ module ZuoraAPI
|
|
944
968
|
when /.*INVALID_SESSION/
|
945
969
|
raise ZuoraAPI::Exceptions::ZuoraAPISessionError.new(message, response, errors, success)
|
946
970
|
when /.*REQUEST_EXCEEDED_LIMIT/
|
947
|
-
|
971
|
+
if message.to_s.downcase.include?('concurrent')
|
972
|
+
raise ZuoraAPI::Exceptions::ZuoraAPIRequestConcurrentLimit.new(message, response, errors, success)
|
973
|
+
else
|
974
|
+
raise ZuoraAPI::Exceptions::ZuoraAPIRequestRateLimit.new(message, response, errors, success)
|
975
|
+
end
|
948
976
|
when /.*LOCK_COMPETITION/
|
949
977
|
raise ZuoraAPI::Exceptions::ZuoraAPILockCompetition.new(message, response, errors, success)
|
950
978
|
when /.*BATCH_FAIL_ERROR/
|
@@ -1151,6 +1179,7 @@ module ZuoraAPI
|
|
1151
1179
|
end
|
1152
1180
|
headers['Zuora-Track-Id'] = zuora_track_id if zuora_track_id.present?
|
1153
1181
|
headers['X-Amzn-Trace-Id'] = zuora_track_id if zuora_track_id.present?
|
1182
|
+
|
1154
1183
|
headers['User-Agent'] = USER_AGENT
|
1155
1184
|
|
1156
1185
|
modified_headers = {'Content-Type' => "application/json; charset=utf-8"}.merge(authentication_headers).merge(headers)
|
@@ -1319,6 +1348,7 @@ module ZuoraAPI
|
|
1319
1348
|
|
1320
1349
|
headers['Zuora-Track-Id'] = zuora_track_id if zuora_track_id.present?
|
1321
1350
|
headers['X-Amzn-Trace-Id'] = zuora_track_id if zuora_track_id.present?
|
1351
|
+
|
1322
1352
|
headers["User-Agent"] = USER_AGENT
|
1323
1353
|
|
1324
1354
|
response_save = nil
|
@@ -1434,6 +1464,56 @@ module ZuoraAPI
|
|
1434
1464
|
raise
|
1435
1465
|
end
|
1436
1466
|
|
1467
|
+
def create_data_source_export(query: "", encrypted: false, zip: true, z_track_id: "")
|
1468
|
+
begin
|
1469
|
+
output_xml, input_xml = self.soap_call(debug: false, timeout_retry: true, zuora_track_id: z_track_id) do |xml|
|
1470
|
+
xml['ns1'].create do
|
1471
|
+
xml['ns1'].zObjects('xsi:type' => "ns2:Export") do
|
1472
|
+
xml['ns2'].Format 'csv'
|
1473
|
+
xml['ns2'].Zip zip
|
1474
|
+
xml['ns2'].Name 'googman'
|
1475
|
+
xml['ns2'].Query query
|
1476
|
+
xml['ns2'].Encrypted encrypted
|
1477
|
+
end
|
1478
|
+
end
|
1479
|
+
end
|
1480
|
+
|
1481
|
+
return output_xml.xpath('//ns1:Id', 'ns1' =>'http://api.zuora.com/').text
|
1482
|
+
rescue Exception => ex
|
1483
|
+
raise ex.class.new("#{z_track_id} #{ex.message}")
|
1484
|
+
end
|
1485
|
+
end
|
1486
|
+
|
1487
|
+
def check_export_status(export_id: "")
|
1488
|
+
begin
|
1489
|
+
response, full_response = self.rest_call(method: :get,url: self.rest_endpoint("object/export/#{export_id}"))
|
1490
|
+
|
1491
|
+
return full_response.parsed_response
|
1492
|
+
rescue Exception => ex
|
1493
|
+
raise ex
|
1494
|
+
end
|
1495
|
+
end
|
1496
|
+
|
1497
|
+
def get_export_file(file_id: "", extract: true, zip: true)
|
1498
|
+
begin
|
1499
|
+
export_file_path = self.get_file(:url => self.rest_endpoint("files/#{file_id}")).path
|
1500
|
+
|
1501
|
+
if extract && zip
|
1502
|
+
require "zip"
|
1503
|
+
new_path = export_file_path.partition('.zip').first
|
1504
|
+
zipped = Zip::File.open(export_file_path)
|
1505
|
+
file_handle = zipped.entries.first
|
1506
|
+
file_handle.extract(new_path)
|
1507
|
+
File.delete(export_file_path)
|
1508
|
+
return new_path
|
1509
|
+
else
|
1510
|
+
return export_file_path
|
1511
|
+
end
|
1512
|
+
rescue Exception => ex
|
1513
|
+
raise ex
|
1514
|
+
end
|
1515
|
+
end
|
1516
|
+
|
1437
1517
|
def getDataSourceExport(query, extract: true, encrypted: false, zip: true, z_track_id: "")
|
1438
1518
|
tries ||= 3
|
1439
1519
|
|
data/lib/zuora_api/version.rb
CHANGED
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.10.
|
4
|
+
version: 1.10.2
|
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:
|
11
|
+
date: 2022-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|