lib/fog/azurerm/requests/storage/get_blob.rb in fog-azure-rm-0.1.1 vs lib/fog/azurerm/requests/storage/get_blob.rb in fog-azure-rm-0.1.2
- old
+ new
@@ -1,163 +1,163 @@
-module Fog
- module Storage
- class AzureRM
- # This class provides the actual implemention for service calls.
- class Real
- BLOCK_SIZE = 32 * 1024 * 1024 # 32 MB
-
- def get_blob_with_block_given(container_name, blob_name, options, &_block)
- options[:request_id] = SecureRandom.uuid
- msg = "get_blob_with_block_given: blob #{blob_name} in the container #{container_name}. options: #{options}"
- Fog::Logger.debug msg
-
- begin
- blob = @blob_client.get_blob_properties(container_name, blob_name, options)
- rescue Azure::Core::Http::HTTPError => ex
- raise 'NotFound' if ex.message.include?('(404)')
- raise_azure_exception(ex, msg)
- end
-
- content_length = blob.properties[:content_length]
- if content_length.zero?
- Proc.new.call('', 0, 0)
- return [blob, '']
- end
-
- start_range = 0
- end_range = content_length - 1
- start_range = options[:start_range] if options[:start_range]
- end_range = options[:end_range] if options[:end_range]
- raise ArgumentError.new(':end_range MUST be greater than :start_range') if start_range > end_range
-
- if start_range == end_range
- Proc.new.call('', 0, 0)
- return [blob, '']
- end
-
- buffer_size = BLOCK_SIZE
- buffer_size = options[:block_size] if options[:block_size]
- buffer_start_range = start_range
- total_bytes = end_range - start_range + 1
- params = options.dup
-
- while buffer_start_range < end_range
- buffer_end_range = [end_range, buffer_start_range + buffer_size - 1].min
- params[:start_range] = buffer_start_range
- params[:end_range] = buffer_end_range
- params[:request_id] = SecureRandom.uuid
-
- begin
- msg = "get_blob_with_block_given: blob #{blob_name} in the container #{container_name}. options: #{params}"
- Fog::Logger.debug msg
- _, content = @blob_client.get_blob(container_name, blob_name, params)
- rescue Azure::Core::Http::HTTPError => ex
- raise 'NotFound' if ex.message.include?('(404)')
- raise_azure_exception(ex, msg)
- end
-
- Proc.new.call(content, end_range - buffer_end_range, total_bytes)
- buffer_start_range += buffer_size
- end
- # No need to return content when block is given.
- [blob, '']
- end
-
- def get_blob(container_name, blob_name, options = {}, &block)
- if block_given?
- get_blob_with_block_given(container_name, blob_name, options, &block)
- else
- options[:request_id] = SecureRandom.uuid
- msg = "get_blob blob #{blob_name} in the container #{container_name}. options: #{options}"
- Fog::Logger.debug msg
-
- begin
- blob, content = @blob_client.get_blob(container_name, blob_name, options)
- Fog::Logger.debug "Get blob #{blob_name} successfully."
- [blob, content]
- rescue Azure::Core::Http::HTTPError => ex
- raise 'NotFound' if ex.message.include?('(404)')
- raise_azure_exception(ex, msg)
- end
- end
- end
- end
-
- # This class provides the mock implementation for unit tests.
- class Mock
- def get_blob(_container_name, _blob_name, _options = {}, &_block)
- Fog::Logger.debug 'get_blob successfully.'
- unless block_given?
- return [
- {
- 'name' => 'test_blob',
- 'metadata' => {},
- 'properties' => {
- 'last_modified' => 'Mon, 04 Jul 2016 09:30:31 GMT',
- 'etag' => '0x8D3A3EDD7C2B777',
- 'lease_status' => 'unlocked',
- 'lease_state' => 'available',
- 'lease_duration' => nil,
- 'content_length' => 4_194_304,
- 'content_type' => 'application/octet-stream',
- 'content_encoding' => nil,
- 'content_language' => nil,
- 'content_disposition' => nil,
- 'content_md5' => 'tXAohIyxuu/t94Lp/ujeRw==',
- 'cache_control' => nil,
- 'sequence_number' => 0,
- 'blob_type' => 'PageBlob',
- 'copy_id' => '095adc3b-e277-4c3d-97e0-0abca881f60c',
- 'copy_status' => 'success',
- 'copy_source' => 'https://testaccount.blob.core.windows.net/testblob/4m?snapshot=2016-02-04T08%3A35%3A50.3157696Z',
- 'copy_progress' => '4194304/4194304',
- 'copy_completion_time' => 'Thu, 04 Feb 2016 08:35:52 GMT',
- 'copy_status_description' => nil,
- 'accept_ranges' => 0
- }
- },
- 'content'
- ]
- end
- data = StringIO.new('content')
- remaining = total_bytes = data.length
- while remaining > 0
- chunk = data.read([remaining, 2].min)
- Proc.new.call(chunk, remaining, total_bytes)
- remaining -= 2
- end
-
- [
- {
- 'name' => 'test_blob',
- 'metadata' => {},
- 'properties' => {
- 'last_modified' => 'Mon, 04 Jul 2016 09:30:31 GMT',
- 'etag' => '0x8D3A3EDD7C2B777',
- 'lease_status' => 'unlocked',
- 'lease_state' => 'available',
- 'lease_duration' => nil,
- 'content_length' => 4_194_304,
- 'content_type' => 'application/octet-stream',
- 'content_encoding' => nil,
- 'content_language' => nil,
- 'content_disposition' => nil,
- 'content_md5' => 'tXAohIyxuu/t94Lp/ujeRw==',
- 'cache_control' => nil,
- 'sequence_number' => 0,
- 'blob_type' => 'PageBlob',
- 'copy_id' => '095adc3b-e277-4c3d-97e0-0abca881f60c',
- 'copy_status' => 'success',
- 'copy_source' => 'https://testaccount.blob.core.windows.net/testblob/4m?snapshot=2016-02-04T08%3A35%3A50.3157696Z',
- 'copy_progress' => '4194304/4194304',
- 'copy_completion_time' => 'Thu, 04 Feb 2016 08:35:52 GMT',
- 'copy_status_description' => nil,
- 'accept_ranges' => 0
- }
- },
- ''
- ]
- end
- end
- end
- end
-end
+module Fog
+ module Storage
+ class AzureRM
+ # This class provides the actual implemention for service calls.
+ class Real
+ BLOCK_SIZE = 32 * 1024 * 1024 # 32 MB
+
+ def get_blob_with_block_given(container_name, blob_name, options, &_block)
+ options[:request_id] = SecureRandom.uuid
+ msg = "get_blob_with_block_given: blob #{blob_name} in the container #{container_name}. options: #{options}"
+ Fog::Logger.debug msg
+
+ begin
+ blob = @blob_client.get_blob_properties(container_name, blob_name, options)
+ rescue Azure::Core::Http::HTTPError => ex
+ raise 'NotFound' if ex.message.include?('(404)')
+ raise_azure_exception(ex, msg)
+ end
+
+ content_length = blob.properties[:content_length]
+ if content_length.zero?
+ Proc.new.call('', 0, 0)
+ return [blob, '']
+ end
+
+ start_range = 0
+ end_range = content_length - 1
+ start_range = options[:start_range] if options[:start_range]
+ end_range = options[:end_range] if options[:end_range]
+ raise ArgumentError.new(':end_range MUST be greater than :start_range') if start_range > end_range
+
+ if start_range == end_range
+ Proc.new.call('', 0, 0)
+ return [blob, '']
+ end
+
+ buffer_size = BLOCK_SIZE
+ buffer_size = options[:block_size] if options[:block_size]
+ buffer_start_range = start_range
+ total_bytes = end_range - start_range + 1
+ params = options.dup
+
+ while buffer_start_range < end_range
+ buffer_end_range = [end_range, buffer_start_range + buffer_size - 1].min
+ params[:start_range] = buffer_start_range
+ params[:end_range] = buffer_end_range
+ params[:request_id] = SecureRandom.uuid
+
+ begin
+ msg = "get_blob_with_block_given: blob #{blob_name} in the container #{container_name}. options: #{params}"
+ Fog::Logger.debug msg
+ _, content = @blob_client.get_blob(container_name, blob_name, params)
+ rescue Azure::Core::Http::HTTPError => ex
+ raise 'NotFound' if ex.message.include?('(404)')
+ raise_azure_exception(ex, msg)
+ end
+
+ Proc.new.call(content, end_range - buffer_end_range, total_bytes)
+ buffer_start_range += buffer_size
+ end
+ # No need to return content when block is given.
+ [blob, '']
+ end
+
+ def get_blob(container_name, blob_name, options = {}, &block)
+ if block_given?
+ get_blob_with_block_given(container_name, blob_name, options, &block)
+ else
+ options[:request_id] = SecureRandom.uuid
+ msg = "get_blob blob #{blob_name} in the container #{container_name}. options: #{options}"
+ Fog::Logger.debug msg
+
+ begin
+ blob, content = @blob_client.get_blob(container_name, blob_name, options)
+ Fog::Logger.debug "Get blob #{blob_name} successfully."
+ [blob, content]
+ rescue Azure::Core::Http::HTTPError => ex
+ raise 'NotFound' if ex.message.include?('(404)')
+ raise_azure_exception(ex, msg)
+ end
+ end
+ end
+ end
+
+ # This class provides the mock implementation for unit tests.
+ class Mock
+ def get_blob(_container_name, _blob_name, _options = {}, &_block)
+ Fog::Logger.debug 'get_blob successfully.'
+ unless block_given?
+ return [
+ {
+ 'name' => 'test_blob',
+ 'metadata' => {},
+ 'properties' => {
+ 'last_modified' => 'Mon, 04 Jul 2016 09:30:31 GMT',
+ 'etag' => '0x8D3A3EDD7C2B777',
+ 'lease_status' => 'unlocked',
+ 'lease_state' => 'available',
+ 'lease_duration' => nil,
+ 'content_length' => 4_194_304,
+ 'content_type' => 'application/octet-stream',
+ 'content_encoding' => nil,
+ 'content_language' => nil,
+ 'content_disposition' => nil,
+ 'content_md5' => 'tXAohIyxuu/t94Lp/ujeRw==',
+ 'cache_control' => nil,
+ 'sequence_number' => 0,
+ 'blob_type' => 'PageBlob',
+ 'copy_id' => '095adc3b-e277-4c3d-97e0-0abca881f60c',
+ 'copy_status' => 'success',
+ 'copy_source' => 'https://testaccount.blob.core.windows.net/testblob/4m?snapshot=2016-02-04T08%3A35%3A50.3157696Z',
+ 'copy_progress' => '4194304/4194304',
+ 'copy_completion_time' => 'Thu, 04 Feb 2016 08:35:52 GMT',
+ 'copy_status_description' => nil,
+ 'accept_ranges' => 0
+ }
+ },
+ 'content'
+ ]
+ end
+ data = StringIO.new('content')
+ remaining = total_bytes = data.length
+ while remaining > 0
+ chunk = data.read([remaining, 2].min)
+ Proc.new.call(chunk, remaining, total_bytes)
+ remaining -= 2
+ end
+
+ [
+ {
+ 'name' => 'test_blob',
+ 'metadata' => {},
+ 'properties' => {
+ 'last_modified' => 'Mon, 04 Jul 2016 09:30:31 GMT',
+ 'etag' => '0x8D3A3EDD7C2B777',
+ 'lease_status' => 'unlocked',
+ 'lease_state' => 'available',
+ 'lease_duration' => nil,
+ 'content_length' => 4_194_304,
+ 'content_type' => 'application/octet-stream',
+ 'content_encoding' => nil,
+ 'content_language' => nil,
+ 'content_disposition' => nil,
+ 'content_md5' => 'tXAohIyxuu/t94Lp/ujeRw==',
+ 'cache_control' => nil,
+ 'sequence_number' => 0,
+ 'blob_type' => 'PageBlob',
+ 'copy_id' => '095adc3b-e277-4c3d-97e0-0abca881f60c',
+ 'copy_status' => 'success',
+ 'copy_source' => 'https://testaccount.blob.core.windows.net/testblob/4m?snapshot=2016-02-04T08%3A35%3A50.3157696Z',
+ 'copy_progress' => '4194304/4194304',
+ 'copy_completion_time' => 'Thu, 04 Feb 2016 08:35:52 GMT',
+ 'copy_status_description' => nil,
+ 'accept_ranges' => 0
+ }
+ },
+ ''
+ ]
+ end
+ end
+ end
+ end
+end