ovirt-engine-sdk 4.0.10 → 4.0.11

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a8d7ce4cc9a8dd0463f0edafefa029f17d4958b3
4
- data.tar.gz: 3705cddc5e1a5d9bef44ce7e386fe17eb3a6ae22
3
+ metadata.gz: ef3151a5a4fdf9357755606aa19a21ac6190df9e
4
+ data.tar.gz: e3a3afbb4b946fe05f8fc51147d56d1dea1bb0cd
5
5
  SHA512:
6
- metadata.gz: 984ec5278d20a63cafd010f841b641d983747add12dc97ccdfa4c27cee0405852e5e06bee8c9271061bf0da2a74b75ae8dd11be9cb450c142511c6d9544d4d95
7
- data.tar.gz: d70dc1c8a093cba2127c31ca4f6ae406ec714d22b52b4317b9832c65aaf4c1cc3fa57985f0ec23721444dfebb8f81876662d450e1c4b364dcd2e0307cbf388f0
6
+ metadata.gz: 3195ac3fc190a9ce0aae6a0ccc89ae4a53bcc6fcd9c1fbe8c64b7727d1a5dddda50a16084e3136bafc5089a5296382ec69fd1bd4352072e15eb583afa72df7e1
7
+ data.tar.gz: e3ee355131e9bef66cf67fab83f493155b614ac31083271c41def40fef19d8ffa1b4e4932f5b5ff818796f74cdf720c12048b8cc15552e1b4d734d3516b2196e
data/CHANGES.adoc CHANGED
@@ -2,6 +2,22 @@
2
2
 
3
3
  This document describes the relevant changes between releases of the SDK.
4
4
 
5
+ == 4.0.11 / Mar 2 2017
6
+
7
+ New features:
8
+
9
+ * Add support for custom headers and query parameters.
10
+
11
+ * Ignore unsupported enum values.
12
+
13
+ * Check that URL has been provided.
14
+
15
+ * Send INFO log messages with summaries of requests and responses.
16
+
17
+ Bug fixes:
18
+
19
+ * Fix writing of lists of structs.
20
+
5
21
  == 4.0.10 / Feb 9 2017
6
22
 
7
23
  Bug fixes:
@@ -19,6 +19,7 @@ limitations under the License.
19
19
 
20
20
  #include <ctype.h>
21
21
  #include <curl/curl.h>
22
+ #include <stdarg.h>
22
23
  #include <stdbool.h>
23
24
  #include <stdlib.h>
24
25
  #include <string.h>
@@ -48,6 +49,8 @@ static VALUE PROXY_PASSWORD_SYMBOL;
48
49
  /* Method identifiers: */
49
50
  static ID DEBUG_ID;
50
51
  static ID ENCODE_WWW_FORM_ID;
52
+ static ID INFO_ID;
53
+ static ID INFO_Q_ID;
51
54
  static ID READ_ID;
52
55
  static ID STRING_ID;
53
56
  static ID STRING_IO_ID;
@@ -549,6 +552,22 @@ static void ov_http_client_perform_cancel(void* data) {
549
552
  perform_context->cancel = true;
550
553
  }
551
554
 
555
+ static void ov_http_client_log_info(VALUE log, const char* format, ...) {
556
+ VALUE enabled;
557
+ VALUE message;
558
+ va_list args;
559
+
560
+ if (!NIL_P(log)) {
561
+ enabled = rb_funcall(log, INFO_Q_ID, 0);
562
+ if (RTEST(enabled)) {
563
+ va_start(args, format);
564
+ message = rb_vsprintf(format, args);
565
+ rb_funcall(log, INFO_ID, 1, message);
566
+ va_end(args);
567
+ }
568
+ }
569
+ }
570
+
552
571
  static VALUE ov_http_client_send(VALUE self, VALUE request, VALUE response) {
553
572
  VALUE header;
554
573
  VALUE url;
@@ -626,6 +645,14 @@ static VALUE ov_http_client_send(VALUE self, VALUE request, VALUE response) {
626
645
  }
627
646
  curl_easy_setopt(object->curl, CURLOPT_HTTPHEADER, headers);
628
647
 
648
+ /* Send a summary of the request to the log: */
649
+ ov_http_client_log_info(
650
+ object->log,
651
+ "Sending '%"PRIsVALUE"' request to URL '%"PRIsVALUE"'.",
652
+ request_object->method,
653
+ url
654
+ );
655
+
629
656
  /* Performing the request is a potentially lengthy and blocking operation, so we need to make sure that it runs
630
657
  without the global interpreter lock acquired as much as possible: */
631
658
  perform_context.object = object;
@@ -674,6 +701,13 @@ static VALUE ov_http_client_send(VALUE self, VALUE request, VALUE response) {
674
701
  /* Get the response body: */
675
702
  response_object->body = rb_funcall(perform_context.out, STRING_ID, 0);
676
703
 
704
+ /* Send a summary of the response to the log: */
705
+ ov_http_client_log_info(
706
+ object->log,
707
+ "Received response code '%"PRIsVALUE"'.",
708
+ response_object->code
709
+ );
710
+
677
711
  return Qnil;
678
712
  }
679
713
 
@@ -712,6 +746,8 @@ void ov_http_client_define(void) {
712
746
  /* Define the method identifiers: */
713
747
  DEBUG_ID = rb_intern("debug");
714
748
  ENCODE_WWW_FORM_ID = rb_intern("encode_www_form");
749
+ INFO_ID = rb_intern("info");
750
+ INFO_Q_ID = rb_intern("info?");
715
751
  READ_ID = rb_intern("read");
716
752
  STRING_ID = rb_intern("string");
717
753
  STRING_IO_ID = rb_intern("StringIO");
@@ -90,6 +90,11 @@ module OvirtSDK4
90
90
  #
91
91
  # @option opts [String] :proxy_password The password of the user to authenticate to the proxy server.
92
92
  #
93
+ # @option opts [Hash] :headers Custom HTTP headers to send with all requests. The keys of the hash can be
94
+ # strings of symbols, and they will be used as the names of the headers. The values of the hash will be used
95
+ # as the names of the headers. If the same header is provided here and in the `headers` parameter of a specific
96
+ # method call, then the `headers` parameter of the specific method call will have precendence.
97
+ #
93
98
  def initialize(opts = {})
94
99
  # Get the values of the parameters and assign default values:
95
100
  @url = opts[:url]
@@ -107,6 +112,10 @@ module OvirtSDK4
107
112
  @proxy_url = opts[:proxy_url]
108
113
  @proxy_username = opts[:proxy_username]
109
114
  @proxy_password = opts[:proxy_password]
115
+ @headers = opts[:headers]
116
+
117
+ # Check that the URL has been provided:
118
+ raise ArgumentError, "The 'url' option is mandatory" unless @url
110
119
 
111
120
  # Create a temporary file to store the CA certificates, and populate it with the contents of the 'ca_file' and
112
121
  # 'ca_certs' options. The file will be removed when the connection is closed.
@@ -186,6 +195,9 @@ module OvirtSDK4
186
195
  request.headers['All-Content'] = all_content unless all_content.nil?
187
196
  end
188
197
 
198
+ # Add the global headers, but without replacing the values that may already exist:
199
+ request.headers.merge!(@headers) { |_name, local, _global| local } if @headers
200
+
189
201
  # Set the authentication token:
190
202
  @token ||= create_access_token
191
203
  request.token = @token
@@ -266,6 +278,9 @@ module OvirtSDK4
266
278
  body: URI.encode_www_form(parameters)
267
279
  )
268
280
 
281
+ # Add the global headers:
282
+ request.headers.merge!(@headers) if @headers
283
+
269
284
  # Create an empty response:
270
285
  response = HttpResponse.new
271
286
 
@@ -189,6 +189,46 @@ module OvirtSDK4
189
189
  reader.read_elements.map { |text| Reader.parse_date(text) }
190
190
  end
191
191
 
192
+ #
193
+ # Converts the given text to an enum.
194
+ #
195
+ # @param enum_type [module]
196
+ # @param text [String]
197
+ # @return [String]
198
+ #
199
+ def self.parse_enum(enum_type, text)
200
+ return nil unless text
201
+ begin
202
+ text if enum_type.constants.map(&:downcase).include?(text.to_sym)
203
+ rescue
204
+ nil
205
+ end
206
+ end
207
+
208
+ #
209
+ # Reads a enum value, assuming that the cursor is positioned at the
210
+ # start element that contains the value.
211
+ #
212
+ # @param enum_type [module]
213
+ # @param reader [XmlReader]
214
+ # @return [Array<String>]
215
+ #
216
+ def self.read_enum(enum_type, reader)
217
+ Reader.parse_enum(enum_type, reader.read_element)
218
+ end
219
+
220
+ #
221
+ # Reads a list of enum values, assuming that the cursor is positioned
222
+ # at the start element of the element that contains the first value.
223
+ #
224
+ # @param enum_type [module]
225
+ # @param reader [XmlReader]
226
+ # @return [Array<String>]
227
+ #
228
+ def self.read_enums(enum_type, reader)
229
+ reader.read_elements.map { |text| Reader.parse_enum(enum_type, text) }
230
+ end
231
+
192
232
  #
193
233
  # This hash stores for each known tag a reference to the method that read the object corresponding for that tag. For
194
234
  # example, for the `vm` tag it will contain a reference to the `VmReader.read_one` method, and for the `vms` tag