caseblocks_bucket_extractor 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,55 +11,56 @@ opts = Slop.parse do
11
11
 
12
12
  on 'casetype=', 'Case Type Name'
13
13
  on 'bucket=', 'Bucket Slug'
14
- on 'username=', 'Username'
15
- on 'password=', 'Password'
14
+ on 'url=', 'url to download from (default https://login.caseblocks.com)'
15
+ on 'token=', 'Authentication token for caseblocks api'
16
+ on 'relation_type=', 'Relation name to download, ie the name of the 1 to many (default domain)'
17
+ on 'path=', 'Path to safe file in'
18
+ on 'timeout=', "minutes to wait for download to complete (default 180)"
16
19
  on 'f', 'forcequotes', 'Force quotation marks'
17
- on 'l', 'local', "Download from localhost"
18
20
  end
19
21
 
20
- if opts[:casetype] && opts[:bucket]
22
+ if opts[:casetype] && opts[:bucket] && opts[:path] && opts[:token]
21
23
 
22
24
  # Bucket Downloader
23
25
  puts " == Bucket Downloader == "
24
26
 
25
27
  bucket_name = opts[:bucket]
26
28
  case_type = opts[:casetype]
29
+ retry_limit = (opts[:timeout] || 180).to_i
30
+ relation_type = opts[:relation_type] || "domain"
31
+ url = opts[:url] || "https://login.caseblocks.com"
27
32
 
28
- puts "Downloading bucket: #{bucket_name}"
33
+ puts "Downloading bucket: #{bucket_name} from #{case_type}"
29
34
 
30
- #Create instance of CaseblocksBucketExtractor passing URL, email and password with optional download_options i.e. {:retry_limit => 5,:time_between_retries => 5}
31
35
  puts "Creating Bucket Extractor... "
32
- if opts[:local]
33
- puts "http://localhost:3001"
34
- bucket_extractor = CaseblocksBucketExtractor.new("http://localhost:3000", opts[:username], opts[:password], {:retry_limit => 12,:time_between_retries => 10})
35
- else
36
- bucket_extractor = CaseblocksBucketExtractor.new("https://login.caseblocks.com", opts[:username], opts[:password], {:retry_limit => 5,:time_between_retries => 5})
37
- end
38
-
39
- #Setup file options array. :name -> will find extracted CSV file containing value, :path -> local file path to save file to
36
+ bucket_extractor = CaseblocksBucketExtractor.new(url, opts[:token], {:retry_limit => retry_limit,:time_between_retries => 60})
40
37
 
41
- file_path = File.expand_path("..", __FILE__) + "/"+ DateTime.now.strftime("%y-%m-%d-%M-%H") + "_" + bucket_name + ".csv"
38
+ file_path = opts[:path] + "/"+ DateTime.now.strftime("%y-%m-%d-%M-%H") + "_" + bucket_name + ".csv"
42
39
 
43
- file_options = [{:path => file_path, :name => "domain.csv"}]
40
+ file_options = [{:path => file_path, :name => "#{relation_type}.csv"}]
44
41
 
45
42
  puts "Downloading to #{file_path}"
46
43
 
47
44
  #Begin download specifying Case Type Name, bucket slug and the file options defined above
48
- bucket_extractor.download(case_type, bucket_name, file_options)
45
+ begin
46
+ bucket_extractor.download(case_type, bucket_name, file_options)
49
47
 
50
- if opts[:forcequotes]
51
- puts "Forcing fields to have quotes"
48
+ if opts[:forcequotes]
49
+ puts "Forcing fields to have quotes"
52
50
 
53
- CSV.open("#{file_path[0..-5]}.tmp", "w+", :force_quotes => true) do |tmp_csv|
54
- puts "file_path: #{file_path}"
55
- CSV.open(file_path, "r").each do |row|
56
- tmp_csv << row
51
+ CSV.open("#{file_path[0..-5]}.tmp", "w+", :force_quotes => true) do |tmp_csv|
52
+ puts "file_path: #{file_path}"
53
+ CSV.open(file_path, "r").each do |row|
54
+ tmp_csv << row
55
+ end
57
56
  end
57
+ FileUtils.mv("#{file_path[0..-5]}.tmp", file_path)
58
58
  end
59
- FileUtils.mv("#{file_path[0..-5]}.tmp", file_path)
59
+
60
+ puts "End Bucket Downloader"
61
+ rescue => e
62
+ puts "Download has not completed successully: #{e.message}"
60
63
  end
61
-
62
- puts "End Bucket Downloader"
63
64
  else
64
65
  puts opts
65
66
  end
@@ -12,18 +12,12 @@ class CaseblocksBucketExtractor
12
12
  headers "Accept" => "application/json"
13
13
  headers "Content-Type" => "application/json"
14
14
 
15
- def initialize(url, email, password, download_options={:retry_limit => 60,:time_between_retries => 60})
15
+ def initialize(url, auth_token, download_options={:retry_limit => 60,:time_between_retries => 60})
16
16
  self.class.base_uri url
17
17
 
18
- result = self.class.post("/tokens", :body => {email: email, password: password}.to_json)
19
-
20
- if result["message"]
21
- puts "unable to generate token"
22
- raise
23
- else
24
- @auth_token = result["token"] if result
25
- self.class.default_params("auth_token" => @auth_token)
26
- end
18
+ puts url
19
+ @auth_token = auth_token
20
+ self.class.default_params("auth_token" => @auth_token)
27
21
 
28
22
  @retry_limit = download_options[:retry_limit]
29
23
  @time_between_retries = download_options[:time_between_retries]
@@ -32,14 +26,15 @@ class CaseblocksBucketExtractor
32
26
  def download(case_type_name, bucket_slug, file_options)
33
27
  response = self.class.get("/case_blocks/#{URI::encode(case_type_name)}/buckets/#{bucket_slug}/schedule_download_job")
34
28
  job_url = get_job_url(response.body)
35
- return if job_url.nil?
29
+
30
+ raise response.headers["status"] unless response.headers["status"].start_with?("200")
36
31
 
37
32
  result = start_polling(job_url)
38
33
 
39
34
  if !result.nil? && result["job"]["status"] == "complete"
40
35
  create_files(file_options,result)
41
36
  else
42
- puts "!!!!! Job - #{job_url} did not complete. !!!!!!"
37
+ raise "!!!!! Job - #{job_url} did not complete. !!!!!!"
43
38
  end
44
39
  end
45
40
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caseblocks_bucket_extractor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: