skylab_studio 1.0.8 → 1.0.9

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: 8dcea80a2765d6d89b736dbdaf420595a284c66b1c2319bdb537e6dce55d6c29
4
- data.tar.gz: 26870d180ef19254df91ce67ffeb150564c6a144ccbc8965414c48938f687486
3
+ metadata.gz: 0be4e813eaaeefc166701f414e7312bb0c49adec754429d7c7c3a25b4ed0cd7d
4
+ data.tar.gz: 2f2efb2aea31469afa87fce6a8ab26f1f7417ccded50aa21ae1f5bfcde9ae429
5
5
  SHA512:
6
- metadata.gz: b01781324fb9c33b8720b54d218ed0c60f346069b04ac646e720b641c85316ef140d96821d69f1054c73a997445a0c1cc4adbf56be3c2f3a765e42c7354ea6d4
7
- data.tar.gz: e78732d764037a41fad813879db50e04defe51ac4eb2eadd1c437693f5e8e58489c5795d135f0c4e81a3d3a4c2d17b024d2897e6733603ec5d81d8a8f41cfef6
6
+ metadata.gz: 31a05a41368c85714165aed69ac087c1e9b15299ff0811e68182d37d7b73f0068b6d239d68fb640e98faf4eab19c3713aa23fb345f31abbba2f8226cf5691065
7
+ data.tar.gz: 1ca009f37032c449ece76ca20400b861c2ecc58941c6adaf31447f6422d0e8ac53b77df3e4b5fec59fcd3893dd03ba3a65416ad1b56aff27854e6c658c45d857
@@ -275,9 +275,11 @@ module SkylabStudio
275
275
  photo_data = { "#{model}_id": id, name: "#{photo_name}#{photo_ext}", path: photo_path, 'use_cache_upload': false }
276
276
 
277
277
  if model == 'job'
278
- job_type = get_job(id)['type']
278
+ job = get_job(id)
279
279
 
280
- headers = { 'X-Amz-Tagging' => 'job=photo&api=true' } if job_type == 'regular'
280
+ raise "No job found with id: #{id}" unless job.has_key?('type')
281
+
282
+ headers = { 'X-Amz-Tagging' => 'job=photo&api=true' } if job['type'] == 'regular'
281
283
  end
282
284
 
283
285
  # Ask studio to create the photo record
@@ -303,36 +305,37 @@ module SkylabStudio
303
305
  # PUT request to presigned url with image data
304
306
  headers['Content-MD5'] = b64md5
305
307
 
306
- begin
307
- uri = URI(upload_url)
308
- request = Net::HTTP::Put.new(uri, headers)
309
- request.body = data
310
- upload_photo_resp = Net::HTTP.start(uri.hostname) { |http| http.request(request) }
311
-
312
- unless upload_photo_resp
313
- puts 'First upload attempt failed, retrying...'
314
- retry_count = 0
315
- # Retry upload
316
-
317
- while retry_count < 3
318
- upload_photo_resp = Net::HTTP.start(uri.hostname) { |http| http.request(request) }
319
- if upload_photo_resp
320
- break # Upload was successful, exit the loop
321
- elsif retry_count == 2 # Check if retry count is 2 (0-based indexing)
322
- raise 'Unable to upload to the bucket after retrying.'
323
- else
324
- sleep(1) # Wait for a moment before retrying
325
- retry_count += 1
326
- end
308
+ retries = 0
309
+ while retries < 3
310
+ begin
311
+ uri = URI(upload_url)
312
+ request = Net::HTTP::Put.new(uri, headers)
313
+ request.body = data
314
+
315
+ upload_photo_resp = Net::HTTP.start(uri.hostname) { |http| http.request(request) }
316
+ upload_status_code = upload_photo_resp.code.to_i
317
+
318
+ if upload_status_code >= 400
319
+ raise StandardError.new("HTTP Error: #{upload_photo_resp.code}")
320
+ end
321
+
322
+ # If no error, the upload is successful, exit the loop
323
+ break
324
+ rescue Exception => e
325
+ if retries == 2
326
+ delete_photo(photo_id)
327
+ Sentry.capture_exception(e)
328
+ raise e
329
+ else
330
+ # If we haven't retried 3 times, wait and retry
331
+ puts "Attempt ##{retries + 1} to upload failed, retrying..."
332
+ retries += 1
333
+ sleep(retries + 1)
327
334
  end
328
335
  end
329
- rescue StandardError => e
330
- puts "An exception of type #{e.class} occurred: #{e.message}"
331
- puts 'Deleting created, but unuploaded photo...'
332
- delete_photo({ id: photo_id }) if photo_id
333
336
  end
334
337
 
335
- photo_response_json
338
+ { photo: photo_response_json, upload_response: upload_status_code }
336
339
  end
337
340
 
338
341
  def download_image_async(image_url)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SkylabStudio
4
- VERSION = '1.0.8'
4
+ VERSION = '1.0.9'
5
5
  end
data/lib/skylab_studio.rb CHANGED
@@ -9,7 +9,26 @@ require 'net/https'
9
9
  require 'uri'
10
10
  require 'json'
11
11
 
12
+ # sentry
13
+ require 'stackprof'
14
+ require 'sentry-ruby'
15
+
12
16
  require_relative 'skylab_studio/request'
13
17
  require_relative 'skylab_studio/client'
14
18
  require_relative 'skylab_studio/config'
15
19
  require_relative 'skylab_studio/version' unless defined?(Skylab::VERSION)
20
+
21
+ Sentry.init do |config|
22
+ config.dsn = 'https://b2c54fe447391bac2134b1a679050139@o1409269.ingest.us.sentry.io/4507891689717760'
23
+
24
+ # get breadcrumbs from logs
25
+ config.breadcrumbs_logger = [:sentry_logger, :http_logger]
26
+
27
+ # enable tracing
28
+ # we recommend adjusting this value in production
29
+ config.traces_sample_rate = 1.0
30
+
31
+ # enable profiling
32
+ # this is relative to traces_sample_rate
33
+ config.profiles_sample_rate = 1.0
34
+ end
@@ -135,13 +135,13 @@ RSpec.describe SkylabStudio::Client do
135
135
  describe '#upload_job_photo' do
136
136
  before do
137
137
  stub_request(:post, 'https://studio.skylabtech.ai/api/public/v1/photos')
138
- .to_return(status: 200, body: { id: 1, photo: {} }.to_json, headers: {})
138
+ .to_return(status: 200, body: { id: 1 }.to_json, headers: {})
139
139
 
140
140
  stub_request(:get, 'https://studio.skylabtech.ai/api/public/v1/photos/upload_url')
141
141
  .to_return(status: 200, body: { url: 'http://test.test/' }.to_json, headers: {})
142
142
 
143
143
  stub_request(:get, 'https://studio.skylabtech.ai/api/public/v1/jobs/1')
144
- .to_return(status: 200, body: {}.to_json, headers: {})
144
+ .to_return(status: 200, body: { type: 'regular' }.to_json, headers: {})
145
145
 
146
146
  stub_request(:delete, 'https://studio.skylabtech.ai/api/public/v1/photos/1')
147
147
  .to_return(status: 200, body: { id: 1 }.to_json, headers: {})
@@ -156,7 +156,7 @@ RSpec.describe SkylabStudio::Client do
156
156
  photo_path = "#{File.expand_path('../../', File.dirname(__FILE__))}/test-portrait-1.JPG"
157
157
  id = 1
158
158
 
159
- expected_response = { id: id, photo: {} }.to_json
159
+ expected_response = { photo: { id: id }, upload_response: 200 }.to_json
160
160
 
161
161
  expect(subject.upload_job_photo(photo_path, id).to_json).to eq(expected_response)
162
162
  end
@@ -165,7 +165,7 @@ RSpec.describe SkylabStudio::Client do
165
165
  describe '#upload_profile_photo' do
166
166
  before do
167
167
  stub_request(:post, 'https://studio.skylabtech.ai/api/public/v1/photos')
168
- .to_return(status: 200, body: { id: 1, photo: {} }.to_json, headers: {})
168
+ .to_return(status: 200, body: { id: 1 }.to_json, headers: {})
169
169
 
170
170
  stub_request(:get, 'https://studio.skylabtech.ai/api/public/v1/photos/upload_url')
171
171
  .to_return(status: 200, body: { url: 'http://test.test/' }.to_json, headers: {})
@@ -187,7 +187,7 @@ RSpec.describe SkylabStudio::Client do
187
187
  photo_path = "#{File.expand_path('../../', File.dirname(__FILE__))}/test-portrait-1.JPG"
188
188
  id = 1
189
189
 
190
- expected_response = { id: id, photo: {} }.to_json
190
+ expected_response = { photo: { id: id }, upload_response: 200 }.to_json
191
191
 
192
192
  expect(subject.upload_profile_photo(photo_path, 1).to_json).to eq(expected_response)
193
193
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skylab_studio
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
4
+ version: 1.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Lam
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-08 00:00:00.000000000 Z
11
+ date: 2024-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -60,7 +60,7 @@ homepage: https://github.com/skylab-tech/studio_client_ruby
60
60
  licenses:
61
61
  - Apache-2.0
62
62
  metadata: {}
63
- post_install_message:
63
+ post_install_message:
64
64
  rdoc_options: []
65
65
  require_paths:
66
66
  - lib
@@ -75,13 +75,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
75
  - !ruby/object:Gem::Version
76
76
  version: '0'
77
77
  requirements: []
78
- rubygems_version: 3.1.6
79
- signing_key:
78
+ rubygems_version: 3.4.10
79
+ signing_key:
80
80
  specification_version: 4
81
81
  summary: A HTTP client for accessing studio.skylabtech.ai services.
82
82
  test_files:
83
- - spec/spec_helper.rb
84
- - spec/lib/skylab_studio/request_spec.rb
85
83
  - spec/lib/skylab_studio/client_spec.rb
86
84
  - spec/lib/skylab_studio/config_spec.rb
85
+ - spec/lib/skylab_studio/request_spec.rb
87
86
  - spec/lib/skylab_studio/version_spec.rb
87
+ - spec/spec_helper.rb