Skip to content

Commit be9d19e

Browse files
committed
Revert "Allow sending set of provider-specific CSV files #420 (#430)"
This reverts commit 0d4b281, reversing changes made to c384912.
1 parent 0d4b281 commit be9d19e

File tree

15 files changed

+105
-167
lines changed

15 files changed

+105
-167
lines changed

app/jobs/file_upload_job.rb

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
class FileUploadJob < ApplicationJob
22
# Consider removing concurrency limits due to SolidQueue blocking issues
33
# or use a more specific key to avoid blocking all jobs for a language
4-
limits_concurrency to: 3, key: ->(*args) { "hard-limit" }
4+
limits_concurrency to: 3, key: ->(_language_id, content_id, _content_type) { "hard-limit" }
55

66
retry_on AzureFileShares::Errors::ApiError, wait: :exponentially_longer, attempts: 3
77
retry_on Timeout::Error, wait: :exponentially_longer, attempts: 2
@@ -12,34 +12,34 @@ class FileUploadJob < ApplicationJob
1212
Rails.logger.error "Suggestion: Check provider names for invalid characters if Azure API errors"
1313
end
1414

15-
def perform(language_id, file_id, provider_id = nil, share = ENV["AZURE_STORAGE_SHARE_NAME"])
15+
def perform(language_id, content_id, content_type, share = ENV["AZURE_STORAGE_SHARE_NAME"])
1616
@language = Language.find(language_id)
17-
@share = share
18-
@file_id = file_id.to_sym
1917
@processor = LanguageContentProcessor.new(language)
18+
@share = share
2019

21-
send_provider_content(provider_id) if provider_id.present?
22-
send_language_content if provider_id.blank?
20+
send_provider_content(content_id) if content_type == "provider"
21+
send_language_content(content_id.to_sym) if content_type == "file"
2322
end
2423

2524
private
2625

27-
attr_reader :language, :file_id, :share, :processor
26+
attr_reader :language, :processor, :share
2827

2928
def send_provider_content(provider_id)
3029
provider = language.providers.find(provider_id)
31-
file = processor.provider_files[file_id]
32-
return unless provider && file
33-
34-
FileWorker.new(
35-
share:,
36-
name: file.name[provider],
37-
path: file.path,
38-
file: file.content[provider],
39-
).send
30+
return unless provider
31+
32+
processor.provider_files.each do |file|
33+
FileWorker.new(
34+
share:,
35+
name: file.name[provider],
36+
path: file.path,
37+
file: file.content[provider],
38+
).send
39+
end
4040
end
4141

42-
def send_language_content
42+
def send_language_content(file_id)
4343
file = processor.language_files[file_id]
4444
return unless file
4545

app/services/csv_generator/base.rb

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
11
class CsvGenerator::Base
2-
def initialize(source, **args)
3-
@source = source
4-
@args = args
5-
end
6-
72
def perform
83
CSV.generate(row_sep: "\n") do |csv|
94
csv << headers
@@ -12,18 +7,4 @@ def perform
127
end
138
end
149
end
15-
16-
private
17-
18-
attr_reader :source, :args
19-
20-
def topics_collection
21-
return source.topics if provider?
22-
23-
source.topics
24-
end
25-
26-
def language = language? ? source : args.fetch(:language)
27-
def language? = source.is_a?(Language)
28-
def provider? = source.is_a?(Provider)
2910
end

app/services/csv_generator/files.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
class CsvGenerator::Files < CsvGenerator::Base
2+
def initialize(language, **args)
3+
@language = language
4+
@args = args
5+
end
6+
27
private
38

9+
attr_reader :language, :args
10+
411
def headers
512
%w[FileID TopicID FileName FileType FileSize]
613
end
714

815
def scope
9-
topics_collection.active
16+
language.topics.active
1017
.flat_map do |topic|
1118
topic.documents.map do |doc|
1219
[

app/services/csv_generator/tag_details.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
class CsvGenerator::TagDetails < CsvGenerator::Base
2+
def initialize(language, **args)
3+
@language = language
4+
@args = args
5+
end
6+
27
private
38

9+
attr_reader :language, :args
10+
411
def headers
512
%w[TagID Tag]
613
end
714

815
def scope
9-
topics_collection.active.includes(:tags)
16+
language.topics.active.includes(:tags)
1017
.flat_map { |topic| topic.tags_on(language.code.to_sym) }
1118
.uniq
1219
.map do |tag|
Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
class CsvGenerator::TopicAuthors < CsvGenerator::Base
2+
def initialize(language, **args)
3+
@language = language
4+
@args = args
5+
end
6+
27
private
38

9+
attr_reader :language, :args
10+
411
def headers
512
%w[TopicID AuthorID]
613
end
714

815
def scope
9-
topics_collection.active.map { |topic| [ topic.id, 0 ] }
16+
language.topics.active.map { |topic| [ topic.id, 0 ] }
1017
end
1118
end

app/services/csv_generator/topic_tags.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
class CsvGenerator::TopicTags < CsvGenerator::Base
2+
def initialize(language, **args)
3+
@language = language
4+
@args = args
5+
end
6+
27
private
38

9+
attr_reader :language, :args
10+
411
def headers
512
%w[TopicID TagID]
613
end
714

815
def scope
9-
topics_collection.active.includes(:tags)
16+
language.topics.active.includes(:tags)
1017
.flat_map do |topic|
1118
topic.tags_on(language.code.to_sym).map do |tag|
1219
[

app/services/csv_generator/topics.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
class CsvGenerator::Topics < CsvGenerator::Base
2+
def initialize(language, **args)
3+
@language = language
4+
@args = args
5+
end
6+
27
private
38

9+
attr_reader :language, :args
10+
411
def headers
512
%w[TopicID TopicName TopicVolume TopicIssue TopicYear TopicMonth ContentProvider]
613
end
714

815
def scope
9-
topics_collection.active.includes(:provider)
16+
language.topics.active.includes(:provider)
1017
.map do |topic|
1118
[
1219
topic.id,

app/services/language_content_processor.rb

Lines changed: 6 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -12,38 +12,13 @@ def perform
1212
# this is needed to avoid loading all files into memory at once
1313
# Field 'name' is a lambda to allow dynamic naming based on the provider
1414
def provider_files
15-
{
16-
single_provider: FileToUpload.new(
15+
[
16+
FileToUpload.new(
1717
content: ->(provider) { XmlGenerator::SingleProvider.new(provider).perform },
1818
name: ->(provider) { "#{language.file_storage_prefix}#{provider.name.parameterize}.xml" },
1919
path: "#{language.file_storage_prefix}CMES-Pi/assets/XML",
2020
),
21-
files: FileToUpload.new(
22-
content: ->(provider) { CsvGenerator::Files.new(provider).perform },
23-
name: ->(provider) { "#{language.file_storage_prefix}#{provider.name.parameterize}-file.csv" },
24-
path: "#{language.file_storage_prefix}CMES-v2/assets/csv",
25-
),
26-
topics: FileToUpload.new(
27-
content: ->(provider) { CsvGenerator::Topics.new(provider).perform },
28-
name: ->(provider) { "#{language.file_storage_prefix}#{provider.name.parameterize}-topic.csv" },
29-
path: "#{language.file_storage_prefix}CMES-v2/assets/csv",
30-
),
31-
tag_details: FileToUpload.new(
32-
content: ->(provider) { CsvGenerator::TagDetails.new(provider, language:).perform },
33-
name: ->(provider) { "#{language.file_storage_prefix}#{provider.name.parameterize}-tag.csv" },
34-
path: "#{language.file_storage_prefix}CMES-v2/assets/csv",
35-
),
36-
topic_tags: FileToUpload.new(
37-
content: ->(provider) { CsvGenerator::TopicTags.new(provider, language:).perform },
38-
name: ->(provider) { "#{language.file_storage_prefix}#{provider.name.parameterize}-topic-tag.csv" },
39-
path: "#{language.file_storage_prefix}CMES-v2/assets/csv",
40-
),
41-
topic_authors: FileToUpload.new(
42-
content: ->(provider) { CsvGenerator::TopicAuthors.new(provider).perform },
43-
name: ->(provider) { "#{language.file_storage_prefix}#{provider.name.parameterize}-topic-author.csv" },
44-
path: "#{language.file_storage_prefix}CMES-v2/assets/csv",
45-
),
46-
}
21+
]
4722
end
4823

4924
# Field 'content' is a lambda to allow lazy evaluation
@@ -90,7 +65,7 @@ def language_files
9065
name: "#{language.file_storage_prefix}TopicTag.csv",
9166
path: "#{language.file_storage_prefix}CMES-v2/assets/csv",
9267
),
93-
topic_authors: FileToUpload.new(
68+
topic_authors: FileToUpload.new(
9469
content: ->(language) { CsvGenerator::TopicAuthors.new(language).perform },
9570
name: "#{language.file_storage_prefix}TopicAuthor.csv",
9671
path: "#{language.file_storage_prefix}CMES-v2/assets/csv",
@@ -104,13 +79,11 @@ def language_files
10479

10580
def process_language_content!
10681
language_files.keys.each do |file_id|
107-
FileUploadJob.perform_later(language.id, file_id.to_s)
82+
FileUploadJob.perform_later(language.id, file_id.to_s, "file")
10883
end
10984

11085
language.providers.distinct.find_each do |provider|
111-
provider_files.keys.each do |file_id|
112-
FileUploadJob.perform_later(language.id, file_id.to_s, provider.id)
113-
end
86+
FileUploadJob.perform_later(language.id, provider.id, "provider")
11487
end
11588
end
11689
end

spec/jobs/file_upload_job_spec.rb

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
file: file.content[language],
2020
)
2121

22-
described_class.perform_now(language.id, file_id.to_s)
22+
described_class.perform_now(language.id, file_id.to_s, "file")
2323
end
2424
end
2525
end
@@ -30,31 +30,42 @@
3030
before { create(:topic, :tagged, language:, provider:) }
3131

3232
it "processes specific file" do
33-
processor.provider_files.each do |file_id, file|
34-
expect(FileWorker).to receive(:new).with(
35-
share: ENV["AZURE_STORAGE_SHARE_NAME"],
36-
name: file.name[provider],
37-
path: file.path,
38-
file: file.content[provider],
39-
)
33+
expect(FileWorker).to receive(:new).with(
34+
share: ENV["AZURE_STORAGE_SHARE_NAME"],
35+
name: "#{language.file_storage_prefix}test-provider.xml",
36+
path: "#{language.file_storage_prefix}CMES-Pi/assets/XML",
37+
file: XmlGenerator::SingleProvider.new(provider).perform,
38+
)
4039

41-
described_class.perform_now(language.id, file_id.to_s, provider.id)
42-
end
40+
described_class.perform_now(language.id, provider.id, "provider")
4341
end
4442

4543
context "when provider name contains /" do
4644
let(:provider) { create(:provider, name: "Test/Provider") }
4745

4846
it "replaces / with - in the file name" do
49-
processor.provider_files.each do |file_id, file|
47+
expect(FileWorker).to receive(:new).with(
48+
share: ENV["AZURE_STORAGE_SHARE_NAME"],
49+
name: "#{language.file_storage_prefix}test-provider.xml",
50+
path: "#{language.file_storage_prefix}CMES-Pi/assets/XML",
51+
file: XmlGenerator::SingleProvider.new(provider).perform,
52+
)
53+
54+
described_class.perform_now(language.id, provider.id, "provider")
55+
end
56+
57+
context "when provider name contains /" do
58+
let(:provider) { create(:provider, name: "WHO/Guidelines") }
59+
60+
it "replaces / with - in the file name" do
5061
expect(FileWorker).to receive(:new).with(
5162
share: ENV["AZURE_STORAGE_SHARE_NAME"],
52-
name: file.name[provider],
53-
path: file.path,
54-
file: file.content[provider],
63+
name: "#{language.file_storage_prefix}who-guidelines.xml",
64+
path: "#{language.file_storage_prefix}CMES-Pi/assets/XML",
65+
file: XmlGenerator::SingleProvider.new(provider).perform,
5566
)
5667

57-
described_class.perform_now(language.id, file_id.to_s, provider.id)
68+
described_class.perform_now(language.id, provider.id, "provider")
5869
end
5970
end
6071
end

spec/services/csv_generator/files_spec.rb

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
require "rails_helper"
22

33
RSpec.describe CsvGenerator::Files do
4-
subject { described_class.new(source, **args) }
4+
subject { described_class.new(language) }
55

66
let(:language) { create(:language) }
7-
let(:source) { language }
8-
let(:args) { {} }
97
let(:header) { "FileID,TopicID,FileName,FileType,FileSize\n" }
108

119
it "generates empty csv" do
@@ -43,15 +41,6 @@
4341
expect(subject.perform).to eq(data)
4442
end
4543
end
46-
47-
context "when generated for provider" do
48-
let(:source) { topic.provider }
49-
let(:args) { { language: } }
50-
51-
it "generates csv with documents info" do
52-
expect(subject.perform).to eq(data)
53-
end
54-
end
5544
end
5645

5746
context "when topic exists but archived" do

0 commit comments

Comments
 (0)