Class: Dratools::AccessionResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/dratools/accession_resolver.rb

Overview

accession を受け取り、DDBJ 上の実ファイル候補へ解決する調停役。

Constant Summary collapse

FILE_TYPE_SRA =
DdbjRecordFields::FILE_TYPE_SRA
FILE_TYPE_FASTQ =
DdbjRecordFields::FILE_TYPE_FASTQ
FILE_TYPE_ALL =
DdbjRecordFields::FILE_TYPE_ALL

Instance Method Summary collapse

Constructor Details

#initialize(client: DdbjResourceClient.new, resource_type_classifier: AccessionResourceTypeClassifier.new, run_record_collector: nil, download_candidate_builder: DownloadCandidateBuilder.new) ⇒ AccessionResolver

Returns a new instance of AccessionResolver.



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/dratools/accession_resolver.rb', line 18

def initialize(
  client: DdbjResourceClient.new,
  resource_type_classifier: AccessionResourceTypeClassifier.new,
  run_record_collector: nil,
  download_candidate_builder: DownloadCandidateBuilder.new
)
  @client = client
  @resource_type_classifier = resource_type_classifier
  @run_record_collector = run_record_collector || RunRecordCollector.new(client: client)
  @download_candidate_builder = download_candidate_builder
end

Instance Method Details

#fetch_record_for(accession) ⇒ Object



70
71
72
73
# File 'lib/dratools/accession_resolver.rb', line 70

def fetch_record_for(accession)
  resource_type = resource_type_for(accession)
  @client.fetch_resource_record(resource_type, accession)
end

#resolve_downloads(accession, file_type: FILE_TYPE_SRA) ⇒ Object



30
31
32
33
34
# File 'lib/dratools/accession_resolver.rb', line 30

def resolve_downloads(accession, file_type: FILE_TYPE_SRA)
  accession = accession.to_s.upcase
  ddbj_record = fetch_record_for(accession)
  resolve_downloads_from_record(accession, ddbj_record, file_type: file_type)
end

#resolve_downloads_from_record(accession, ddbj_record, file_type: FILE_TYPE_SRA) ⇒ Object



36
37
38
39
40
41
42
43
44
# File 'lib/dratools/accession_resolver.rb', line 36

def resolve_downloads_from_record(accession, ddbj_record, file_type: FILE_TYPE_SRA)
  tree = resolve_tree_from_record(accession, ddbj_record, file_type: file_type, tolerant: false)
  downloads = tree.downloads
  if downloads.empty?
    raise NotFoundError, "download URL not found: #{accession.to_s.upcase} (type=#{file_type})"
  end

  downloads
end

#resolve_tree(accession, file_type: FILE_TYPE_SRA, tolerant: true, direct_run_fetch_limit: nil) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/dratools/accession_resolver.rb', line 46

def resolve_tree(accession, file_type: FILE_TYPE_SRA, tolerant: true,
                 direct_run_fetch_limit: nil)
  accession = accession.to_s.upcase
  ddbj_record = fetch_record_for(accession)
  resolve_tree_from_record(
    accession,
    ddbj_record,
    file_type: file_type,
    tolerant: tolerant,
    direct_run_fetch_limit: direct_run_fetch_limit
  )
end

#resolve_tree_from_record(_accession, ddbj_record, file_type: FILE_TYPE_SRA, tolerant: true, direct_run_fetch_limit: nil) ⇒ Object



59
60
61
62
63
64
65
66
67
68
# File 'lib/dratools/accession_resolver.rb', line 59

def resolve_tree_from_record(_accession, ddbj_record, file_type: FILE_TYPE_SRA, tolerant: true,
                             direct_run_fetch_limit: nil)
  tree = @run_record_collector.explore(
    ddbj_record,
    tolerant: tolerant,
    direct_run_fetch_limit: direct_run_fetch_limit
  )
  attach_downloads(tree, file_type: file_type)
  tree
end

#resource_type_for(accession) ⇒ Object



75
76
77
# File 'lib/dratools/accession_resolver.rb', line 75

def resource_type_for(accession)
  @resource_type_classifier.resource_type_for(accession)
end