csr_data_inventory 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f9ff97cb355f70a1598d06969ac5fea7aab3e691d67b770eb3eebeba8a32fb2f
4
+ data.tar.gz: fade09a5ae0526452fb1d5b7a60fe3d76795b184b56529ea95c05056bdbe57dc
5
+ SHA512:
6
+ metadata.gz: 2568aae3ef8facb79484ca7b02f6271fd96db9915d5e36a80f68781124b9fc1cbad6effeecef03cfadb3cce1a6a8f3cc1e88a2df3213e738b23973f2bdfab873
7
+ data.tar.gz: 144289409d88c0d26eeed2fc7a013ce9189cef3436a1782ba93f550aeb342ca83cabfb7e3c7b127be4bbb2fc4172bd14e1e9588fdd68e6cb4fdbc8b321e8531e
@@ -0,0 +1,41 @@
1
+ require_relative './download_request.rb'
2
+ class CSRDataInventory
3
+ def self.download
4
+ puts "Please enter your token:"
5
+ token = gets.strip
6
+ download_url = "https://datascience.uth.edu/databases/download_file_list?"
7
+ params_part = URI.encode_www_form([["token",token]])
8
+ download_url = download_url + params_part
9
+ download_folder = download_folder = ::File.join(Dir.pwd, "#{token}_file_list.txt")
10
+ download_request = DownloadRequest.new(download_url, download_folder)
11
+ download_request.get
12
+ if download_request.error.to_s == ""
13
+ puts " File list downloaded"
14
+ File.readlines("#{Dir.pwd}/#{token}_file_list.txt").each do |line|
15
+ path_tokens = line.strip.split
16
+
17
+ path = path_tokens[0]
18
+ file_size = path_tokens[1]
19
+
20
+ puts "Downloading file: #{path}"
21
+ download_url = "https://datascience.uth.edu/databases/download_file?"
22
+ params_part = URI.encode_www_form([["token",token], ["path", path]])
23
+ download_url = download_url + params_part
24
+ download_folder = ::File.join(Dir.pwd, path[14..-1])
25
+ if File.exists?(download_folder) and (File.size(download_folder).to_s == file_size)
26
+ puts "File exists"
27
+ next
28
+ end
29
+ download_request = DownloadRequest.new(download_url, download_folder)
30
+ download_request.get
31
+ if download_request.error.to_s == ""
32
+ puts "Successful"
33
+ else
34
+ puts "Failed: #{download_request.error.to_s}"
35
+ end
36
+ end
37
+ else
38
+ puts " #{download_request.error.to_s}"
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "openssl"
4
+ require "net/http"
5
+ require "uri"
6
+ require 'fileutils'
7
+ # Downloads a file to a specified folder.
8
+ class DownloadRequest
9
+ class << self
10
+ def get(*args)
11
+ new(*args).get
12
+ end
13
+ end
14
+
15
+ attr_reader :url, :error, :file_size
16
+
17
+ def initialize(url, download_folder)
18
+ @url = URI.parse(url)
19
+ puts @url.path
20
+ @http = Net::HTTP.new(@url.host, @url.port)
21
+ if @url.scheme == "https"
22
+ @http.use_ssl = true
23
+ @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
24
+ end
25
+ @download_folder = download_folder
26
+ @file_size = 0
27
+ end
28
+
29
+ # Writes file segments to disk immediately instead of storing in memory
30
+ def get
31
+ return unless @error.nil?
32
+
33
+ dirname = File.dirname(@download_folder)
34
+ unless File.directory?(dirname)
35
+ FileUtils.mkdir_p(dirname)
36
+ end
37
+
38
+ local_file = ::File.open(@download_folder, "wb")
39
+ partial = true
40
+ @http.request_get(@url) do |response|
41
+ case response.code
42
+ when "200"
43
+ response.read_body do |segment|
44
+ local_file.write(segment)
45
+ end
46
+ @file_size = ::File.size(@download_folder)
47
+ partial = false
48
+ when "302"
49
+ @error = "Token Not Authorized to Access Specified File"
50
+ else
51
+ @error = "#{response.code} #{response.class.name}"
52
+ end
53
+ end
54
+ rescue => e # Net::ReadTimeout, SocketError
55
+ @error = "(#{e.class}) #{e.message}"
56
+ ensure
57
+ local_file.close if local_file
58
+ ::File.delete(@download_folder) if partial && ::File.exist?(@download_folder)
59
+ end
60
+ end
61
+
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: csr_data_inventory
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Shiqiang Tao
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-06-25 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A gem to download CSR Data in a scalable way.
14
+ email: shiqiang.tao@uth.tmc.edu
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/csr_data_inventory.rb
20
+ - lib/download_request.rb
21
+ homepage: https://rubygems.org/gems/csr_data_inventory
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubygems_version: 3.0.8
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: Download CSR Data
44
+ test_files: []