zuora_api 1.7.65i → 1.7.65

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: 2d3a5ce233d3d4b441e52a9d4342db32d616d2bcd23e650ad0e5c09208b5904e
4
- data.tar.gz: 5c1acb4964d32582cb84a05b0b120bde86d3d572fbeb663dff5ad2a58e228448
3
+ metadata.gz: 2f825e33478662937ab98762bab71f5d10b55acedc5f14f51022f4e9a66bfb0e
4
+ data.tar.gz: 8a0edd6a1c0a7b11353b1057e14eb8d40cb47e85f3b7faac832532b1253e5ce5
5
5
  SHA512:
6
- metadata.gz: 45f208500da4b73e03a91fd9381fb5408f2007d62f698b97c74a46c5e71616e5b312fd0beaf00a19b977aab868850b83c03e4f8910fa1f2292666e13204e8598
7
- data.tar.gz: '06791a0a95a2031edb03efa889d35f7721f129d3e8318565e7b6a86fef6a2539b361f1ca1fe27e8470b7a43e5d6d29c463de1b0710451f539353b51e599b5903'
6
+ metadata.gz: c7846e3e6df13eee656df3d122d98bf1f5694c83751836bd93810d6e3ec6ca6f88ba69b80d67cb04c9f30f4f94d2338c576eacd6d4401be0e27f9c2721f51fce
7
+ data.tar.gz: '0543405827032e0d71cf4f9462d565fb94ffb8ccdd76df9e59ccf2fd099ba8f608ff3ec057f1aa2b5577bb4448c583971e550cf69c1285b47736edc1ad3b9b1f'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- zuora_api (1.7.65i)
4
+ zuora_api (1.7.65)
5
5
  httparty
6
6
  nokogiri
7
7
  railties (>= 4.1.0, < 6)
@@ -10,20 +10,20 @@ PATH
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- actionpack (5.2.4.3)
14
- actionview (= 5.2.4.3)
15
- activesupport (= 5.2.4.3)
13
+ actionpack (5.2.4.2)
14
+ actionview (= 5.2.4.2)
15
+ activesupport (= 5.2.4.2)
16
16
  rack (~> 2.0, >= 2.0.8)
17
17
  rack-test (>= 0.6.3)
18
18
  rails-dom-testing (~> 2.0)
19
19
  rails-html-sanitizer (~> 1.0, >= 1.0.2)
20
- actionview (5.2.4.3)
21
- activesupport (= 5.2.4.3)
20
+ actionview (5.2.4.2)
21
+ activesupport (= 5.2.4.2)
22
22
  builder (~> 3.1)
23
23
  erubi (~> 1.4)
24
24
  rails-dom-testing (~> 2.0)
25
25
  rails-html-sanitizer (~> 1.0, >= 1.0.3)
26
- activesupport (5.2.4.3)
26
+ activesupport (5.2.4.2)
27
27
  concurrent-ruby (~> 1.0, >= 1.0.2)
28
28
  i18n (>= 0.7, < 2)
29
29
  minitest (~> 5.1)
@@ -51,9 +51,9 @@ GEM
51
51
  method_source (1.0.0)
52
52
  mime-types (3.3.1)
53
53
  mime-types-data (~> 3.2015)
54
- mime-types-data (3.2020.0512)
54
+ mime-types-data (3.2019.1009)
55
55
  mini_portile2 (2.4.0)
56
- minitest (5.14.1)
56
+ minitest (5.14.0)
57
57
  multi_xml (0.6.0)
58
58
  nokogiri (1.10.9)
59
59
  mini_portile2 (~> 2.4.0)
@@ -66,9 +66,9 @@ GEM
66
66
  nokogiri (>= 1.6)
67
67
  rails-html-sanitizer (1.3.0)
68
68
  loofah (~> 2.3)
69
- railties (5.2.4.3)
70
- actionpack (= 5.2.4.3)
71
- activesupport (= 5.2.4.3)
69
+ railties (5.2.4.2)
70
+ actionpack (= 5.2.4.2)
71
+ activesupport (= 5.2.4.2)
72
72
  method_source
73
73
  rake (>= 0.8.7)
74
74
  thor (>= 0.19.0, < 2.0)
@@ -225,14 +225,13 @@ module ZuoraAPI
225
225
  end
226
226
 
227
227
  class ZuoraAPIReadTimeout < Net::ReadTimeout
228
- attr_reader :code, :response, :request
228
+ attr_reader :code, :response
229
229
  attr_writer :default_message
230
230
 
231
- def initialize(message = nil, response = nil, request = nil, errors = [], successes = [], *args)
231
+ def initialize(message = nil,response=nil, errors = [], successes = [], *args)
232
232
  @code = response.class.to_s == "HTTParty::Response" ? response.code : nil
233
233
  @message = message
234
234
  @response = response
235
- @request = request
236
235
  @default_message = "Authentication type is not supported by this Login"
237
236
  end
238
237
 
@@ -474,16 +474,12 @@ module ZuoraAPI
474
474
  headers = { 'Content-Type' => "text/xml; charset=utf-8", 'Accept' => 'text/xml'}
475
475
  headers['Zuora-Track-Id'] = zuora_track_id if zuora_track_id.present?
476
476
 
477
- request = HTTParty::Request.new(
478
- Net::HTTP::Post,
477
+ response = HTTParty.post(
479
478
  self.url,
480
- body: xml.doc.to_xml(:save_with => XML_SAVE_OPTIONS).strip,
481
- headers: headers,
482
- timeout: timeout,
479
+ :body => xml.doc.to_xml(:save_with => XML_SAVE_OPTIONS).strip,
480
+ :headers => headers,
481
+ :timeout => timeout
483
482
  )
484
-
485
- response = request.perform
486
-
487
483
  output_xml = Nokogiri::XML(response.body)
488
484
  Rails.logger.debug("Response SOAP XML: #{output_xml.to_xml(:save_with => XML_SAVE_OPTIONS).strip}") if debug
489
485
 
@@ -530,26 +526,34 @@ module ZuoraAPI
530
526
  sleep(timeout_sleep_interval)
531
527
  retry
532
528
  rescue *CONNECTION_READ_EXCEPTIONS => ex
533
- if !tries.zero?
534
- tries -= 1
535
-
536
- if ex.is_a?(Errno::ECONNRESET) && ex.message.include?('SSL_connect')
537
- retry
538
- elsif timeout_retry
539
- sleep(timeout_sleep_interval)
540
- retry
529
+ if tries.zero?
530
+ if output_exception_messages
531
+ if Rails.logger.class.to_s == "Ougai::Logger"
532
+ Rails.logger.error("SOAP Call - Timed out will retry after #{timeout_sleep_interval} seconds", ex)
533
+ else
534
+ Rails.logger.error("SOAP Call - #{ex.class} Timed out will retry after #{timeout_sleep_interval} seconds")
535
+ end
541
536
  end
537
+ raise ex
542
538
  end
543
539
 
544
- if output_exception_messages
545
- if Rails.logger.class.to_s == "Ougai::Logger"
546
- Rails.logger.error("SOAP Call - Timed out will retry after #{timeout_sleep_interval} seconds", ex)
547
- else
548
- Rails.logger.error("SOAP Call - #{ex.class} Timed out will retry after #{timeout_sleep_interval} seconds")
540
+ tries -= 1
541
+
542
+ if ex.is_a?(Errno::ECONNRESET) && ex.message.include?('SSL_connect')
543
+ retry
544
+ elsif timeout_retry
545
+ sleep(timeout_sleep_interval)
546
+ retry
547
+ else
548
+ if output_exception_messages
549
+ if Rails.logger.class.to_s == "Ougai::Logger"
550
+ Rails.logger.error("SOAP Call - Timed out will retry after #{timeout_sleep_interval} seconds", ex)
551
+ else
552
+ Rails.logger.error("SOAP Call - #{ex.class} Timed out will retry after #{timeout_sleep_interval} seconds")
553
+ end
549
554
  end
555
+ raise ex
550
556
  end
551
- raise ZuoraAPI::Exceptions::ZuoraAPIReadTimeout.new("Received read timeout from #{url}", nil, request) if ex.instance_of?(Net::ReadTimeout)
552
- raise ex
553
557
  rescue => ex
554
558
  raise ex
555
559
  else
@@ -557,33 +561,24 @@ module ZuoraAPI
557
561
  end
558
562
 
559
563
  def raise_errors(type: :SOAP, body: nil, response: nil)
560
- request_uri, request_path, match_string = "", "", ""
561
- if response.class.to_s == "HTTP::Message"
562
- request_uri = response.http_header.request_uri.to_s
563
- request_path = response.http_header.request_uri.path
564
- match_string = "#{response.http_header.request_method}::#{response.code}::#{request_uri}"
565
- else
566
- request = response.request
567
- request_uri = response.request.uri
568
- request_path = request.path.path
569
- match_string = "#{request.http_method.to_s.split("Net::HTTP::").last.upcase}::#{response.code}::#{request_path}"
570
- end
564
+ request = response.request
565
+ match_string = "#{request.http_method.to_s.split("Net::HTTP::").last.upcase}::#{response.code}::#{request.path.path}"
571
566
 
572
567
  if [502,503].include?(response.code)
573
- raise ZuoraAPI::Exceptions::ZuoraAPIConnectionTimeout.new("Received #{response.code} from #{request_uri}", response)
568
+ raise ZuoraAPI::Exceptions::ZuoraAPIConnectionTimeout.new("Received #{response.code} from #{response.request.uri}", response)
574
569
  end
575
570
 
576
571
  # Check failure response code
577
572
  case response.code
578
573
  when 504
579
- raise ZuoraAPI::Exceptions::ZuoraAPIReadTimeout.new("Received 504 from #{request_uri}", response)
574
+ raise ZuoraAPI::Exceptions::ZuoraAPIReadTimeout.new("Received 504 from #{response.request.uri}", response)
580
575
  when 429
581
576
  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)
582
577
  when 401
583
578
 
584
579
  else
585
580
  if body.class == Hash
586
- case request_path
581
+ case response.request.path.path
587
582
  when /^\/v1\/connections$/
588
583
  response_headers = response.headers.to_h
589
584
  raise ZuoraAPI::Exceptions::ZuoraAPIInternalServerError.new("Missing cookies for authentication call", response) if response_headers['set-cookie'].blank?
@@ -607,7 +602,7 @@ module ZuoraAPI
607
602
  reason = body.xpath('//ns2:StatusReason', 'ns2' => 'http://object.api.zuora.com/').text
608
603
  if reason.present?
609
604
  message = body.xpath('//ns2:StatusReason', 'ns2' => 'http://object.api.zuora.com/').text
610
- error = message.match(/^[\w\d]{16}\: (Unexpected error.|No HTTP Response|Socket Timeout|There is an internal error, please try again later)/).present? ? 'UNEXPECTED_ERROR' : 'FATAL_ERROR'
605
+ error = message.match(/^[\w\d]{16}\: (Unexpected error.|No HTTP Response)/).present? ? 'UNEXPECTED_ERROR' : 'FATAL_ERROR'
611
606
  else
612
607
  error = 'FATAL_ERROR'
613
608
  message = 'Export failed due to unknown reason. Consult api logs.'
@@ -629,10 +624,23 @@ module ZuoraAPI
629
624
  end
630
625
  end
631
626
 
632
- self.errors_via_content_type(response: response, type: :xml)
633
-
627
+ if (response.code == 400 && response.headers.fetch('content-type', []).include?('text/html'))
628
+ raise ZuoraAPI::Exceptions::ZuoraAPIInternalServerError.new(response.body, response)
629
+ elsif response.code == 500
630
+ if response.headers.fetch('content-type', []).include?('application/json')
631
+ begin
632
+ output_json = JSON.parse(response.body)
633
+ self.raise_errors(type: :JSON, body: output_json, response: response)
634
+ rescue JSON::ParserError => ex
635
+ raise ZuoraAPI::Exceptions::ZuoraAPIInternalServerError.new(response.body, response)
636
+ end
637
+ else
638
+ raise ZuoraAPI::Exceptions::ZuoraAPIInternalServerError.new(response.body, response)
639
+ end
640
+ end
641
+
634
642
  when :JSON
635
- case request_path
643
+ case request.path.path
636
644
  when /^\/query\/jobs.*/ #DataQuery Paths
637
645
  return if body.class != Hash
638
646
  case match_string
@@ -652,7 +660,7 @@ module ZuoraAPI
652
660
  if reporting_message&.include?("com.zuora.rest.RestUsageException: The user does not have permissions for this API.")
653
661
  raise ZuoraAPI::Exceptions::ZuoraAPIError.new(reporting_message, response)
654
662
  elsif reporting_message&.include?("500 Internal Server Error")
655
- raise ZuoraAPI::Exceptions::ZuoraAPIInternalServerError.new("Internal Server Error. The Reporting API is down. Contact Support.", response)
663
+ raise ZuoraAPI::Exceptions::ZuoraAPIInternalServerError.new("Internal Server Error. The Reporting API is down. Contact Support.")
656
664
  end
657
665
  case match_string
658
666
  when /^GET::400::\/api\/rest\/v1\/reports\/(reportlabels\/)?([a-zA-Z0-9\-_]+)\/report-details$/ # Get report, capture of the id is present if needed in future error responses.
@@ -718,6 +726,7 @@ module ZuoraAPI
718
726
  if codes_array.map{|code| code.to_s.slice(6,7).to_i}.include?(50)
719
727
  raise ZuoraAPI::Exceptions::ZuoraAPILockCompetition.new("#{messages_array.join(', ')}", response)
720
728
  end
729
+
721
730
  #Internal Server Error
722
731
  if codes_array.map{|code| code.to_s.slice(6,7).to_i}.include?(60)
723
732
  if messages_array.uniq.size == 1
@@ -728,11 +737,6 @@ module ZuoraAPI
728
737
  raise ZuoraAPI::Exceptions::ZuoraAPIInternalServerError.new("#{messages_array.join(', ')}", response)
729
738
  end
730
739
 
731
- #Retryiable Service Error
732
- if codes_array.map{|code| code.to_s.slice(6,7).to_i}.include?(61)
733
- raise ZuoraAPI::Exceptions::ZuoraAPITemporaryError.new("#{messages_array.join(', ')}", response)
734
- end
735
-
736
740
  #Request exceeded limit
737
741
  if codes_array.map{|code| code.to_s.slice(6,7).to_i}.include?(70)
738
742
  raise ZuoraAPI::Exceptions::ZuoraAPIRequestLimit.new("#{messages_array.join(', ')}", response)
@@ -785,56 +789,26 @@ module ZuoraAPI
785
789
  end
786
790
  end
787
791
 
788
- if body.class == Hash && body['message'].present?
789
- raise ZuoraAPI::Exceptions::ZuoraAPIInternalServerError.new(body['message'], response) if response.code == 500
790
- raise ZuoraAPI::Exceptions::ZuoraAPIError.new(body['message'], response) if ![200,201].include?(response.code)
791
- end
792
-
793
- self.errors_via_content_type(response: response, type: :json)
794
-
795
792
  #All other errors
796
- raise ZuoraAPI::Exceptions::ZuoraAPIError.new(response.body, response) if ![200,201].include?(response.code)
797
- end
798
- end
799
-
800
- def errors_via_content_type(response: nil, type: :xml)
801
- response_content_types = response.headers.transform_keys(&:downcase).fetch('content-type', []).first || ""
802
-
803
- if response_content_types.include?('application/json') && type != :json
804
- output_json = JSON.parse(response.body)
805
- self.raise_errors(type: :JSON, body: output_json, response: response)
806
-
807
- elsif (response_content_types.include?('application/xml') || response_content_types.include?('text/xml')) and type != :xml
808
- output_xml = Nokogiri::XML(response.body)
809
- self.raise_errors(type: :SOAP, body: output_xml, response: response)
810
-
811
- elsif response_content_types.include?('text/html')
812
- raise ZuoraAPI::Exceptions::ZuoraAPIInternalServerError.new("Akamai Error", response) if response.headers.fetch('server', '') == 'AkamaiGHost'
813
-
814
- parse_body = Nokogiri::HTML(response.body)
815
- error_title = parse_body.xpath('//h2').text
816
- error_title = parse_body.xpath('//h1').text if error_title.blank?
817
- error_message = parse_body.xpath('//p').text
818
-
819
- error_message = error_title if error_message.blank?
820
-
821
- if error_title.present?
822
- case error_title
823
- when /Service Unavailable/
824
- raise ZuoraAPI::Exceptions::ZuoraAPIConnectionTimeout.new(error_message, response)
825
- when /Client sent a bad request./, /Bad Request/, /403 Forbidden/
826
- raise ZuoraAPI::Exceptions::ZuoraAPIInternalServerError.new(error_message, response)
827
- else
828
- raise ZuoraAPI::Exceptions::ZuoraAPIInternalServerError.new(error_message, response)
793
+ if response.code == 500
794
+ if body.class == Hash && body['message'].present?
795
+ raise ZuoraAPI::Exceptions::ZuoraAPIInternalServerError.new(body['message'], response)
796
+ else
797
+ raise ZuoraAPI::Exceptions::ZuoraAPIInternalServerError.new(response.body, response)
798
+ end
799
+ elsif ![200,201].include?(response.code)
800
+ if body['message'].present?
801
+ raise ZuoraAPI::Exceptions::ZuoraAPIError.new(body['message'], response)
802
+ else
803
+ if 403 == response.code && response.body.include?("Forbidden")
804
+ raise ZuoraAPI::Exceptions::ZuoraAPIInternalServerError.new(response.body, response)
805
+ else
806
+ raise ZuoraAPI::Exceptions::ZuoraAPIError.new(response.body, response)
807
+ end
829
808
  end
830
809
  end
831
-
832
- raise ZuoraAPI::Exceptions::ZuoraAPIInternalServerError.new("Http response body is missing", response) if response.body.blank?
833
810
  end
834
-
835
- raise ZuoraAPI::Exceptions::ZuoraAPIInternalServerError.new(response.body, response) if response.code == 500
836
811
  end
837
-
838
812
 
839
813
  def get_soap_error_and_message(body)
840
814
  error = body.xpath('//fns:FaultCode', 'fns' =>'http://fault.api.zuora.com/').text
@@ -898,9 +872,9 @@ module ZuoraAPI
898
872
  when /.*UNEXPECTED_ERROR/
899
873
  raise ZuoraAPI::Exceptions::ZuoraUnexpectedError.new(message, response, errors, success)
900
874
  when /.*soapenv:Server.*/
901
- if /^Invalid value.*for type.*|^Id is invalid|^date string can not be less than 19 charactors$/.match(message).present?
875
+ if /^Invalid value.*for type.*|^Id is invalid/.match(message).present?
902
876
  raise ZuoraAPI::Exceptions::ZuoraAPIError.new(message, response, errors, success)
903
- elsif /^Invalid white space character \(.*\) in text to output$|^Invalid null character in text to output$/.match(message).present?
877
+ elsif /^Invalid white space character \(.*\) in text to output$/.match(message).present?
904
878
  raise ZuoraAPI::Exceptions::ZuoraAPIUnkownError.new(message, response, errors, success)
905
879
  end
906
880
  raise ZuoraAPI::Exceptions::ZuoraAPIInternalServerError.new(message, response, errors, success)
@@ -1051,7 +1025,7 @@ module ZuoraAPI
1051
1025
  modified_headers = {'Content-Type' => "application/json; charset=utf-8"}.merge(authentication_headers).merge(headers)
1052
1026
 
1053
1027
  begin
1054
- request = HTTParty::Request.new(
1028
+ response = HTTParty::Request.new(
1055
1029
  "Net::HTTP::#{method.to_s.capitalize}".constantize,
1056
1030
  url,
1057
1031
  body: body,
@@ -1059,9 +1033,7 @@ module ZuoraAPI
1059
1033
  timeout: timeout,
1060
1034
  multipart: multipart,
1061
1035
  stream_body: stream_body
1062
- )
1063
-
1064
- response = request.perform(&block)
1036
+ ).perform(&block)
1065
1037
 
1066
1038
  Rails.logger.debug("Response Code: #{response.code}") if debug
1067
1039
  begin
@@ -1128,25 +1100,34 @@ module ZuoraAPI
1128
1100
  sleep(timeout_sleep_interval)
1129
1101
  retry
1130
1102
  rescue *CONNECTION_READ_EXCEPTIONS => ex
1131
- if !tries.zero?
1132
- tries -= 1
1133
- if ex.is_a?(Errno::ECONNRESET) && ex.message.include?('SSL_connect')
1134
- retry
1135
- elsif timeout_retry
1136
- sleep(timeout_sleep_interval)
1137
- retry
1103
+ if tries.zero?
1104
+ if output_exception_messages
1105
+ if Rails.logger.class.to_s == "Ougai::Logger"
1106
+ Rails.logger.error("Rest Call - Timed out will retry after #{timeout_sleep_interval} seconds", ex)
1107
+ else
1108
+ Rails.logger.error("Rest Call - #{ex.class} Timed out will retry after #{timeout_sleep_interval} seconds")
1109
+ end
1138
1110
  end
1111
+ raise ex
1139
1112
  end
1140
-
1141
- if output_exception_messages
1142
- if Rails.logger.class.to_s == "Ougai::Logger"
1143
- Rails.logger.error("Rest Call - Timed out will retry after #{timeout_sleep_interval} seconds", ex)
1144
- else
1145
- Rails.logger.error("Rest Call - #{ex.class} Timed out will retry after #{timeout_sleep_interval} seconds")
1113
+
1114
+ tries -= 1
1115
+
1116
+ if ex.is_a?(Errno::ECONNRESET) && ex.message.include?('SSL_connect')
1117
+ retry
1118
+ elsif timeout_retry
1119
+ sleep(timeout_sleep_interval)
1120
+ retry
1121
+ else
1122
+ if output_exception_messages
1123
+ if Rails.logger.class.to_s == "Ougai::Logger"
1124
+ Rails.logger.error("Rest Call - Timed out will retry after #{timeout_sleep_interval} seconds", ex)
1125
+ else
1126
+ Rails.logger.error("Rest Call - #{ex.class} Timed out will retry after #{timeout_sleep_interval} seconds")
1127
+ end
1146
1128
  end
1129
+ raise ex
1147
1130
  end
1148
- raise ZuoraAPI::Exceptions::ZuoraAPIReadTimeout.new("Received read timeout from #{url}", nil, request) if ex.instance_of?(Net::ReadTimeout)
1149
- raise ex
1150
1131
  rescue => ex
1151
1132
  raise ex
1152
1133
  else
@@ -1202,8 +1183,6 @@ module ZuoraAPI
1202
1183
  def get_file(url: nil, headers: {}, z_session: true, tempfile: true, output_file_name: nil, zuora_track_id: nil, add_timestamp: true, file_path: defined?(Rails.root.join('tmp')) ? Rails.root.join('tmp') : Pathname.new(Dir.pwd), timeout_retries: 3, timeout: 120, session_type: :basic, **execute_params)
1203
1184
  raise "file_path must be of class Pathname" if file_path.class != Pathname
1204
1185
 
1205
- retry_count ||= timeout_retries
1206
-
1207
1186
  #Make sure directory exists
1208
1187
  require 'fileutils'
1209
1188
  FileUtils.mkdir_p(file_path) unless File.exists?(file_path)
@@ -1221,6 +1200,7 @@ module ZuoraAPI
1221
1200
  headers['Zuora-Track-Id'] = zuora_track_id if zuora_track_id.present?
1222
1201
 
1223
1202
  response_save = nil
1203
+ retry_count ||= timeout_retries
1224
1204
  http.request_get(uri.request_uri, headers) do |response|
1225
1205
  response_save = response
1226
1206
  status_code = response.code if response
@@ -1328,122 +1308,75 @@ module ZuoraAPI
1328
1308
  end
1329
1309
  end
1330
1310
 
1331
- def getDataSourceExport(query, extract: true, encrypted: false, zip: true, z_track_id: "")
1332
- begin
1333
- tries ||= 3
1334
- request = Nokogiri::XML::Builder.new do |xml|
1335
- xml['SOAP-ENV'].Envelope('xmlns:SOAP-ENV' => "http://schemas.xmlsoap.org/soap/envelope/", 'xmlns:ns2' => "http://object.api.zuora.com/", 'xmlns:xsi' => "http://www.w3.org/2001/XMLSchema-instance", 'xmlns:ns1' => "http://api.zuora.com/") do
1336
- xml['SOAP-ENV'].Header do
1337
- xml['ns1'].SessionHeader do
1338
- xml['ns1'].session self.get_session(prefix: false, auth_type: :basic, zuora_track_id: z_track_id)
1339
- end
1311
+ def getDataSourceExport(query, extract: true, encrypted: false, zip: true)
1312
+ request = Nokogiri::XML::Builder.new do |xml|
1313
+ xml['SOAP-ENV'].Envelope('xmlns:SOAP-ENV' => "http://schemas.xmlsoap.org/soap/envelope/", 'xmlns:ns2' => "http://object.api.zuora.com/", 'xmlns:xsi' => "http://www.w3.org/2001/XMLSchema-instance", 'xmlns:ns1' => "http://api.zuora.com/") do
1314
+ xml['SOAP-ENV'].Header do
1315
+ xml['ns1'].SessionHeader do
1316
+ xml['ns1'].session self.get_session(prefix: false, auth_type: :basic)
1340
1317
  end
1341
- xml['SOAP-ENV'].Body do
1342
- xml['ns1'].create do
1343
- xml['ns1'].zObjects('xsi:type' => "ns2:Export") do
1344
- xml['ns2'].Format 'csv'
1345
- xml['ns2'].Zip zip
1346
- xml['ns2'].Name 'googman'
1347
- xml['ns2'].Query query
1348
- xml['ns2'].Encrypted encrypted
1349
- end
1318
+ end
1319
+ xml['SOAP-ENV'].Body do
1320
+ xml['ns1'].create do
1321
+ xml['ns1'].zObjects('xsi:type' => "ns2:Export") do
1322
+ xml['ns2'].Format 'csv'
1323
+ xml['ns2'].Zip zip
1324
+ xml['ns2'].Name 'googman'
1325
+ xml['ns2'].Query query
1326
+ xml['ns2'].Encrypted encrypted
1350
1327
  end
1351
1328
  end
1352
1329
  end
1353
1330
  end
1331
+ end
1354
1332
 
1355
- response_query = HTTParty.post(self.url, body: request.to_xml(:save_with => XML_SAVE_OPTIONS).strip, headers: {'Content-Type' => "application/json; charset=utf-8", "Z-Track-Id" => z_track_id}, :timeout => 120)
1356
-
1357
- output_xml = Nokogiri::XML(response_query.body)
1358
- raise_errors(type: :SOAP, body: output_xml, response: response_query) if output_xml.xpath('//ns1:Success', 'ns1' =>'http://api.zuora.com/').text != "true"
1333
+ response_query = HTTParty.post(self.url, body: request.to_xml(:save_with => XML_SAVE_OPTIONS).strip, headers: {'Content-Type' => "application/json; charset=utf-8"}, :timeout => 120)
1359
1334
 
1360
- # raise "Export Creation Unsuccessful : #{response_query.code}: #{response_query.parsed_response}" if output_xml.xpath('//ns1:Success', 'ns1' =>'http://api.zuora.com/').text != "true"
1361
-
1362
- id = output_xml.xpath('//ns1:Id', 'ns1' =>'http://api.zuora.com/').text
1335
+ output_xml = Nokogiri::XML(response_query.body)
1336
+ raise 'Export Creation Unsuccessful : ' + output_xml.xpath('//ns1:Message', 'ns1' =>'http://api.zuora.com/').text if output_xml.xpath('//ns1:Success', 'ns1' =>'http://api.zuora.com/').text != "true"
1337
+ id = output_xml.xpath('//ns1:Id', 'ns1' =>'http://api.zuora.com/').text
1363
1338
 
1364
- confirmRequest = Nokogiri::XML::Builder.new do |xml|
1365
- xml['SOAP-ENV'].Envelope('xmlns:SOAP-ENV' => "http://schemas.xmlsoap.org/soap/envelope/", 'xmlns:ns2' => "http://object.api.zuora.com/", 'xmlns:xsi' => "http://www.w3.org/2001/XMLSchema-instance", 'xmlns:ns1' => "http://api.zuora.com/") do
1366
- xml['SOAP-ENV'].Header do
1367
- xml['ns1'].SessionHeader do
1368
- xml['ns1'].session self.get_session(prefix: false, auth_type: :basic, zuora_track_id: z_track_id)
1369
- end
1339
+ confirmRequest = Nokogiri::XML::Builder.new do |xml|
1340
+ xml['SOAP-ENV'].Envelope('xmlns:SOAP-ENV' => "http://schemas.xmlsoap.org/soap/envelope/", 'xmlns:ns2' => "http://object.api.zuora.com/", 'xmlns:xsi' => "http://www.w3.org/2001/XMLSchema-instance", 'xmlns:ns1' => "http://api.zuora.com/") do
1341
+ xml['SOAP-ENV'].Header do
1342
+ xml['ns1'].SessionHeader do
1343
+ xml['ns1'].session self.get_session(prefix: false, auth_type: :basic)
1370
1344
  end
1371
- xml['SOAP-ENV'].Body do
1372
- xml['ns1'].query do
1373
- xml['ns1'].queryString "SELECT Id, CreatedById, CreatedDate, Encrypted, FileId, Format, Name, Query, Size, Status, StatusReason, UpdatedById, UpdatedDate, Zip From Export where Id = '#{id}'"
1374
- end
1345
+ end
1346
+ xml['SOAP-ENV'].Body do
1347
+ xml['ns1'].query do
1348
+ xml['ns1'].queryString "SELECT Id, CreatedById, CreatedDate, Encrypted, FileId, Format, Name, Query, Size, Status, StatusReason, UpdatedById, UpdatedDate, Zip From Export where Id = '#{id}'"
1375
1349
  end
1376
1350
  end
1377
1351
  end
1378
- result = 'Waiting'
1379
-
1380
- while result != "Completed"
1381
- sleep 3
1382
- response_query = HTTParty.post(self.url, body: confirmRequest.to_xml(:save_with => XML_SAVE_OPTIONS).strip, headers: {'Content-Type' => "application/json; charset=utf-8", "Z-Track-Id" => z_track_id}, :timeout => 120)
1383
-
1384
- output_xml = Nokogiri::XML(response_query.body)
1385
- result = output_xml.xpath('//ns2:Status', 'ns2' =>'http://object.api.zuora.com/').text
1386
- status_code = response_query.code if response_query
1387
-
1388
- raise_errors(type: :SOAP, body: output_xml, response: response_query) if result.blank? || result == "Failed"
1389
- # raise "Export Creation Unsuccessful : #{response_query.code}: #{response_query.parsed_response}" if result.blank? || result == "Failed"
1390
- end
1391
-
1392
- file_id = output_xml.xpath('//ns2:FileId', 'ns2' =>'http://object.api.zuora.com/').text
1393
- export_file = get_file(:url => self.fileURL(file_id))
1394
- export_file_path = export_file.path
1395
- Rails.logger.debug("=====> Export path #{export_file.path}")
1396
-
1397
- if extract && zip
1398
- require "zip"
1399
- new_path = export_file_path.partition('.zip').first
1400
- zipped = Zip::File.open(export_file_path)
1401
- file_handle = zipped.entries.first
1402
- file_handle.extract(new_path)
1403
- File.delete(export_file_path)
1404
- return new_path
1405
- else
1406
- return export_file_path
1407
- end
1408
- rescue ZuoraAPI::Exceptions::ZuoraAPISessionError => ex
1409
- if !(tries -= 1).zero?
1410
- Rails.logger.info("Export call failed - Trace ID: #{z_track_id}")
1411
- self.new_session
1412
- retry
1413
- else
1414
- raise ex
1415
- end
1416
-
1417
- rescue ZuoraAPI::Exceptions::ZuoraUnexpectedError => ex
1418
- if !(tries -= 1).zero?
1419
- Rails.logger.info("Trace ID: #{z_track_id} UnexpectedError, will retry after 10 seconds")
1420
- sleep 10
1421
- retry
1422
- else
1423
- raise ex
1424
- end
1425
-
1426
- rescue *ZUORA_API_ERRORS => ex
1427
- raise ex
1352
+ end
1353
+ result = 'Waiting'
1428
1354
 
1429
- rescue *(CONNECTION_EXCEPTIONS + CONNECTION_READ_EXCEPTIONS) => ex
1430
- if !(tries -= 1).zero?
1431
- Rails.logger.info("Trace ID: #{z_track_id} Timed out will retry after 5 seconds")
1432
- sleep 5
1433
- retry
1434
- else
1435
- raise ex
1436
- end
1355
+ while result != "Completed"
1356
+ sleep 3
1357
+ response_query = HTTParty.post(self.url, body: confirmRequest.to_xml(:save_with => XML_SAVE_OPTIONS).strip, headers: {'Content-Type' => "application/json; charset=utf-8"}, :timeout => 120)
1437
1358
 
1438
- rescue Errno::ECONNRESET => ex
1439
- if !(tries -= 1).zero? && ex.message.include?('SSL_connect')
1440
- retry
1441
- else
1442
- raise ex
1443
- end
1359
+ output_xml = Nokogiri::XML(response_query.body)
1360
+ result = output_xml.xpath('//ns2:Status', 'ns2' =>'http://object.api.zuora.com/').text
1361
+ status_code = response_query.code if response_query
1362
+ raise "Export Creation Unsuccessful : #{output_xml.xpath('//ns1:Message', 'ns1' =>'http://api.zuora.com/').text}" if result.blank? || result == "Failed"
1363
+ end
1444
1364
 
1445
- rescue ZuoraAPI::Exceptions::BadEntityError => ex
1446
- raise ex
1365
+ file_id = output_xml.xpath('//ns2:FileId', 'ns2' =>'http://object.api.zuora.com/').text
1366
+ export_file = get_file(:url => self.fileURL(file_id))
1367
+ export_file_path = export_file.path
1368
+ Rails.logger.debug("=====> Export path #{export_file.path}")
1369
+
1370
+ if extract && zip
1371
+ require "zip"
1372
+ new_path = export_file_path.partition('.zip').first
1373
+ zipped = Zip::File.open(export_file_path)
1374
+ file_handle = zipped.entries.first
1375
+ file_handle.extract(new_path)
1376
+ File.delete(export_file_path)
1377
+ return new_path
1378
+ else
1379
+ return export_file_path
1447
1380
  end
1448
1381
  end
1449
1382
 
@@ -46,28 +46,34 @@ module ZuoraAPI
46
46
  Rails.logger.debug {"Session Invalid"}
47
47
  self.new_session(auth_type: :bearer)
48
48
  retry
49
+ else
50
+ if errors.include?(ex.class)
51
+ raise ex
52
+ else
53
+ return [output_json, response]
54
+ end
49
55
  end
50
- raise ex if errors.include?(ex.class)
51
- return [output_json, response]
52
-
53
56
  rescue ZuoraAPI::Exceptions::ZuoraAPIError, ZuoraAPI::Exceptions::ZuoraAPIRequestLimit, ZuoraAPI::Exceptions::ZuoraAPILockCompetition => ex
54
- raise ex if errors.include?(ex.class)
55
- return [output_json, response]
56
-
57
+ if errors.include?(ex.class)
58
+ raise ex
59
+ else
60
+ return [output_json, response]
61
+ end
57
62
  rescue *(CONNECTION_EXCEPTIONS + CONNECTION_READ_EXCEPTIONS) => ex
58
63
  if !tries.zero?
59
64
  tries -= 1
60
65
  sleep(self.timeout_sleep)
61
66
  retry
62
- end
63
- if Rails.logger.class.to_s == "Ougai::Logger"
64
- Rails.logger.error("OAuthLogin - Timed out", ex)
65
67
  else
66
- Rails.logger.error("OAuthLogin - #{ex.class} Timed out")
68
+ if Rails.logger.class.to_s == "Ougai::Logger"
69
+ Rails.logger.error("OAuthLogin - Timed out", ex)
70
+ else
71
+ Rails.logger.error("OAuthLogin - #{ex.class} Timed out")
72
+ end
73
+ self.current_error = "Request timed out. Try again"
74
+ self.status = 'Timeout'
75
+ return self.status
67
76
  end
68
- self.current_error = "Request timed out. Try again"
69
- self.status = 'Timeout'
70
- return self.status
71
77
  end
72
78
 
73
79
  def get_bearer_token(zuora_track_id: nil)
@@ -1,3 +1,3 @@
1
1
  module ZuoraAPI
2
- VERSION = "1.7.65i"
2
+ VERSION = "1.7.65"
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.7.65i
4
+ version: 1.7.65
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: 2020-05-28 00:00:00.000000000 Z
11
+ date: 2020-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -182,9 +182,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
182
182
  version: '0'
183
183
  required_rubygems_version: !ruby/object:Gem::Requirement
184
184
  requirements:
185
- - - ">"
185
+ - - ">="
186
186
  - !ruby/object:Gem::Version
187
- version: 1.3.1
187
+ version: '0'
188
188
  requirements: []
189
189
  rubygems_version: 3.0.3
190
190
  signing_key: