dor-services 8.1.1 → 8.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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