-
Notifications
You must be signed in to change notification settings - Fork 9
Handle 429 and prevent 301 in gp_downloadmetadata
#406
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 4 commits
b8c44c4
80af526
31daea9
0af9cfa
60106a5
eafb2ed
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -16,12 +16,7 @@ def initialize(target_folder, target_files) | |||||
def download(target_locale, glotpress_url, is_source) | ||||||
uri = URI(glotpress_url) | ||||||
response = Net::HTTP.get_response(uri) | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Just a thought, not related to this PR: it might be good to use faraday which has features like following redirects and retry with an interval (which could be a replacement for handling 429 error?). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah... I don't know about faraday or other Ruby networking clients, but given the number of network requests we do with this toolkit, having a feature-rich way to do requests would be handy. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. iinm Farady is also the network client that fastlane itself uses, so it should already be part of our ruby dependencies anyway. This is one of those items part of a long list of little things I'd love to improve / refactor to clean up the release-toolkit in many areas and modernize it… but never got the bandwidth to 😅 |
||||||
response = Net::HTTP.get_response(URI.parse(response.header['location'])) if response.code == '301' | ||||||
|
||||||
@alternates.clear | ||||||
loc_data = JSON.parse(response.body) rescue loc_data = nil | ||||||
parse_data(target_locale, loc_data, is_source) | ||||||
reparse_alternates(target_locale, loc_data, is_source) unless @alternates.length == 0 | ||||||
handle_glotpress_download(response: response, locale: target_locale, is_source: is_source) | ||||||
end | ||||||
|
||||||
# Parse JSON data and update the local files | ||||||
|
@@ -100,6 +95,33 @@ def delete_existing_metadata(target_locale) | |||||
def get_target_file_path(locale, file_name) | ||||||
"#{@target_folder}/#{locale}/#{file_name}" | ||||||
end | ||||||
|
||||||
private | ||||||
|
||||||
def handle_glotpress_download(response:, locale:, is_source:) | ||||||
case response.code | ||||||
when '200' | ||||||
# All good, parse the result | ||||||
UI.success("Successfully downloaded `#{locale}`.") | ||||||
@alternates.clear | ||||||
loc_data = JSON.parse(response.body) rescue loc_data = nil | ||||||
parse_data(locale, loc_data, is_source) | ||||||
reparse_alternates(target_locale, loc_data, is_source) unless @alternates.length == 0 | ||||||
when '301' | ||||||
# Follow the redirect | ||||||
UI.message("Received 301 for `#{locale}`. Following redirect...") | ||||||
download(locale, response.header['location'], is_source) | ||||||
when '429' | ||||||
# We got rate-limited, offer to try again | ||||||
if UI.confirm("Retry downloading `#{locale}` after receiving 429 from the API?") | ||||||
download(locale, response.uri, is_source) | ||||||
else | ||||||
UI.error("Abandoning `#{locale}` download as requested.") | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I decided to make this
I can see how
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Given the error message is pretty clear and it's in reaction of us explicitly replying |
||||||
end | ||||||
else | ||||||
UI.error("Received unexpected #{response.code} from request to URI #{response.uri}.") | ||||||
mokagio marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
end | ||||||
end | ||||||
end | ||||||
end | ||||||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Converted the
puts
toUI.message
for more consistent logs.