dor-services 8.1.1 → 8.2.0

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: ef0bbc594a0540d23d3d7854fe746de6e78bec7a123979e27729e8185658e414
4
- data.tar.gz: 61eefb4bf61d39d06b55008bd7cc15811e9dd403b7c92d40d10ab6f4865bfb71
3
+ metadata.gz: 55aca082954da26152f1a29b2212755d957a1d7fdf1d2dd87ff373555ab4d66e
4
+ data.tar.gz: ca157bb92f8dabe93a9d49e9d862f8cdfcaee9b7d59fe6510cfd8180b67cd19c
5
5
  SHA512:
6
- metadata.gz: 5be82315538ea54e7dec4cfca937ab61e63abb7a1f14623d27be9f4f224d8755f4c1eba52ccb22dad351f1c928d4cf0f3ec66a2a96ffda4a6724650b1b00dd18
7
- data.tar.gz: 5ce6a06eeeafd90849f22a835bb065e8913f2babfaed5b62f669e8d1f5d9e8379c1921b39ac3368b90b3f524e7db9f933ba8f5de8cece9889f22fb369b71484d
6
+ metadata.gz: a4ca1272b55af9e0c828fa678d6a51a669f3614c72b367a51c2bf22ba29dc69ccc1ad44482756c704bca319b3b7decc47a7a44a24ef62457062b38975c472a3c
7
+ data.tar.gz: 609b3cb8a631c40979aea5e37086ed50550fd42d3ea1e3bede01b10942c01942b0fc2db86fcaaf893d7fb8ad9389c93c6be25abbe34acca042527c79ab19e96e
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dor
4
+ # @deprecated
4
5
  class WorkflowDefinitionDs < ActiveFedora::OmDatastream
5
6
  include SolrDocHelper
6
7
 
@@ -10,75 +10,74 @@ module Dor
10
10
  MAX_ERROR_LENGTH = 32_768 - 2 - ERROR_OMISSION.length
11
11
  private_constant :MAX_ERROR_LENGTH
12
12
 
13
- # @param [Dor::WorkflowDocument] document the workflow document to index
14
- def initialize(document:)
15
- @document = document
13
+ # @param [Workflow::Response::Workflow] workflow the workflow document to index
14
+ def initialize(workflow:)
15
+ @workflow = workflow
16
16
  end
17
17
 
18
18
  # @return [Hash] the partial solr document for the workflow document
19
19
  def to_solr
20
20
  WorkflowSolrDocument.new do |solr_doc|
21
- wf_name = document.workflowId.first
22
- solr_doc.name = wf_name
23
- errors = processes.count(&:error?)
24
-
25
- repo = document.repository.first
26
- solr_doc.status = [wf_name, workflow_status, errors, repo].join('|')
21
+ definition = Dor::Config.workflow.client.workflow_template(workflow_name)
22
+ solr_doc.name = workflow_name
23
+ processes_names = definition['processes'].map { |p| p['name'] }
27
24
 
25
+ errors = 0 # The error count is used by the Report class in Argo
26
+ processes = processes_names.map do |process_name|
27
+ workflow.process_for_recent_version(name: process_name)
28
+ end
28
29
  processes.each do |process|
29
- index_process(solr_doc, wf_name, process)
30
+ index_process(solr_doc, process)
31
+ errors += 1 if process.status == 'error'
30
32
  end
33
+ solr_doc.status = [workflow_name, workflow_status(processes), errors, repository].join('|')
31
34
  end
32
35
  end
33
36
 
34
37
  private
35
38
 
36
- attr_reader :document
37
- delegate :processes, to: :document
39
+ attr_reader :workflow
40
+ delegate :workflow_name, :repository, to: :workflow
38
41
 
39
- def index_process(solr_doc, wf_name, process)
40
- return unless process.status.present?
42
+ # @param [Workflow::Response::Process] process
43
+ def index_process(solr_doc, process)
44
+ return unless process.status
41
45
 
42
46
  # add a record of the robot having operated on this item, so we can track robot activity
43
- solr_doc.add_process_time(wf_name, process.name, Time.parse(process.date_time)) if process_has_time?(process)
47
+ solr_doc.add_process_time(workflow_name, process.name, Time.parse(process.datetime)) if process_has_time?(process)
44
48
 
45
- index_error_message(solr_doc, wf_name, process)
49
+ index_error_message(solr_doc, process)
46
50
 
47
51
  # workflow name, process status then process name
48
- solr_doc.add_wsp("#{wf_name}:#{process.status}", "#{wf_name}:#{process.status}:#{process.name}")
52
+ solr_doc.add_wsp("#{workflow_name}:#{process.status}", "#{workflow_name}:#{process.status}:#{process.name}")
49
53
 
50
54
  # workflow name, process name then process status
51
- solr_doc.add_wps("#{wf_name}:#{process.name}", "#{wf_name}:#{process.name}:#{process.status}")
55
+ solr_doc.add_wps("#{workflow_name}:#{process.name}", "#{workflow_name}:#{process.name}:#{process.status}")
52
56
 
53
57
  # process status, workflowname then process name
54
- solr_doc.add_swp(process.status.to_s, "#{process.status}:#{wf_name}", "#{process.status}:#{wf_name}:#{process.name}")
55
- return if process.state == process.status
56
-
57
- solr_doc.add_wsp("#{wf_name}:#{process.state}:#{process.name}")
58
- solr_doc.add_wps("#{wf_name}:#{process.name}:#{process.state}")
59
- solr_doc.add_swp(process.state.to_s, "#{process.state}:#{wf_name}", "#{process.state}:#{wf_name}:#{process.name}")
58
+ solr_doc.add_swp(process.status.to_s, "#{process.status}:#{workflow_name}", "#{process.status}:#{workflow_name}:#{process.name}")
60
59
  end
61
60
 
62
61
  def process_has_time?(process)
63
- !process.date_time.blank? && process.status && (process.status == 'completed' || process.status == 'error')
62
+ process.datetime && process.status && (process.status == 'completed' || process.status == 'error')
64
63
  end
65
64
 
66
- def workflow_status
65
+ def workflow_status(processes)
67
66
  return 'empty' if processes.empty?
68
67
 
69
68
  workflow_should_show_completed?(processes) ? 'completed' : 'active'
70
69
  end
71
70
 
72
71
  def workflow_should_show_completed?(processes)
73
- processes.all? { |p| ['skipped', 'completed', '', nil].include?(p.status) }
72
+ processes.all? { |p| %w[skipped completed].include?(p.status) }
74
73
  end
75
74
 
76
75
  # index the error message without the druid so we hopefully get some overlap
77
76
  # truncate to avoid org.apache.lucene.util.BytesRefHash$MaxBytesLengthExceededException
78
- def index_error_message(solr_doc, wf_name, process)
77
+ def index_error_message(solr_doc, process)
79
78
  return unless process.error_message
80
79
 
81
- solr_doc.error = "#{wf_name}:#{process.name}:#{process.error_message}".truncate(MAX_ERROR_LENGTH, omission: ERROR_OMISSION)
80
+ solr_doc.error = "#{workflow_name}:#{process.name}:#{process.error_message}".truncate(MAX_ERROR_LENGTH, omission: ERROR_OMISSION)
82
81
  end
83
82
  end
84
83
  end
@@ -12,7 +12,7 @@ module Dor
12
12
  def to_solr
13
13
  WorkflowSolrDocument.new do |combined_doc|
14
14
  workflows.each do |wf|
15
- doc = WorkflowIndexer.new(document: wf).to_solr
15
+ doc = WorkflowIndexer.new(workflow: wf).to_solr
16
16
  combined_doc.merge!(doc)
17
17
  end
18
18
  end.to_h
@@ -20,15 +20,15 @@ module Dor
20
20
 
21
21
  private
22
22
 
23
- # @return [Array<Dor::WorkflowDocument>]
23
+ # @return [Array<Workflow::Response::Workflow>]
24
24
  def workflows
25
- # TODO: this could use the models in dor-workflow-service: https://github.com/sul-dlss/dor-workflow-client/pull/101
26
- nodeset = Nokogiri::XML(all_workflows_xml).xpath('/workflows/workflow')
27
- nodeset.map { |wf_node| Workflow::Document.new wf_node.to_xml }
25
+ all_workflows.workflows
28
26
  end
29
27
 
30
- def all_workflows_xml
31
- @all_workflows_xml ||= Dor::Config.workflow.client.all_workflows_xml resource.pid
28
+ # TODO: remove Dor::Workflow::Document
29
+ # @return [Workflow::Response::Workflows]
30
+ def all_workflows
31
+ @all_workflows ||= Dor::Config.workflow.client.workflow_routes.all_workflows pid: resource.pid
32
32
  end
33
33
  end
34
34
  end
@@ -3,6 +3,7 @@
3
3
  require 'dor/datastreams/workflow_definition_ds'
4
4
 
5
5
  module Dor
6
+ # @deprecated
6
7
  class WorkflowObject < Dor::Abstract
7
8
  has_object_type 'workflow'
8
9
  has_metadata name: 'workflowDefinition', type: Dor::WorkflowDefinitionDs, label: 'Workflow Definition'
@@ -7,13 +7,14 @@ module Dor
7
7
  # having version is preferred as without it, a call to
8
8
  # fedora will be made to retrieve it.
9
9
  def initialize(pid, version: nil)
10
+ Deprecation.warn(self, 'Dor::StateService is deprecated and will be removed in dor-services 9')
10
11
  @pid = pid
11
12
  @version = version || fetch_version
12
13
  end
13
14
 
14
15
  def allows_modification?
15
16
  !client.lifecycle('dor', pid, 'submitted') ||
16
- client.active_lifecycle('dor', pid, 'opened') ||
17
+ client.active_lifecycle('dor', pid, 'opened', version: version) ||
17
18
  client.workflow_status('dor', pid, 'accessionWF', 'sdr-ingest-transfer') == 'hold'
18
19
  end
19
20
 
data/lib/dor/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dor
4
- VERSION = '8.1.1'
4
+ VERSION = '8.2.0'
5
5
  end
@@ -23,6 +23,7 @@ module Dor
23
23
  @@definitions = {}
24
24
 
25
25
  def initialize(node)
26
+ Deprecation.warn(self, 'Dor::Workflow::Document is deprecated and will be removed from dor-services version 9')
26
27
  self.ng_xml = Nokogiri::XML(node)
27
28
  end
28
29
 
@@ -9,6 +9,7 @@ module Dor
9
9
  # @param workflow [String] the name of the workflow, e.g. 'assemblyWF'
10
10
  # @param attrs [Nokogiri::XML::Node, Hash]
11
11
  def initialize(repo, workflow, attrs)
12
+ Deprecation.warn(self, 'Dor::Workflow::Process is deprecated and will be removed from dor-services version 9')
12
13
  @workflow = workflow
13
14
  @repo = repo
14
15
  if attrs.is_a? Nokogiri::XML::Node
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dor-services
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.1.1
4
+ version: 8.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Klein
@@ -20,7 +20,7 @@ authors:
20
20
  autorequire:
21
21
  bindir: bin
22
22
  cert_chain: []
23
- date: 2019-09-20 00:00:00.000000000 Z
23
+ date: 2019-12-20 00:00:00.000000000 Z
24
24
  dependencies:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: active-fedora
@@ -240,14 +240,14 @@ dependencies:
240
240
  requirements:
241
241
  - - "~>"
242
242
  - !ruby/object:Gem::Version
243
- version: '3.8'
243
+ version: '3.9'
244
244
  type: :runtime
245
245
  prerelease: false
246
246
  version_requirements: !ruby/object:Gem::Requirement
247
247
  requirements:
248
248
  - - "~>"
249
249
  - !ruby/object:Gem::Version
250
- version: '3.8'
250
+ version: '3.9'
251
251
  - !ruby/object:Gem::Dependency
252
252
  name: druid-tools
253
253
  requirement: !ruby/object:Gem::Requirement