Skip to content
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

Valkyrize batch editing #6148

Merged
merged 10 commits into from
Aug 22, 2023
Merged

Valkyrize batch editing #6148

merged 10 commits into from
Aug 22, 2023

Conversation

no-reply
Copy link
Contributor

@no-reply no-reply commented Aug 10, 2023

The PR is to support batch editing while valkyrie is enabled. This can be tested under dassie (w/o valkyrie) and koppie.

@samvera/hyrax-code-reviewers

cjcolvar and others added 6 commits August 21, 2023 09:52
Hydra works has this, and it will be nice to provide it to Wings users handling
Valkyrie native models cast back to AF.
i don't know why these older tests run into LDP errors during setup after the
rewrite in 361b113, but we don't want to use these factories in setup anyway.

since the issue occurs before any production code is executed, it's safe to just
refactor to setup using the Valkyrie based factories. we'll want to complete
this refactor throughout this file anyway.
* Fix transaction error undefined method `<' for nil:NilClass

* Fix transaction error implicit conversion of Symbol into Integer.

* Refactor to fix lint error with the Metrics/AbcSize cop.
@no-reply no-reply marked this pull request as ready for review August 21, 2023 19:11
Copy link
Contributor

@tpendragon tpendragon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This does appear to work, and closes #4913.

I don't work in Hyrax much (once every..couple years?) so some of my comments probably come from just not knowing the code base really well. If so please just say so and I'll happily approve.

spec/support/features/batch_edit_actions.rb Show resolved Hide resolved

# Clean up form fields
# @param form Hyrax::Froms::ResourceBatchEditForm
def cleanup_form_fields(form)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: Can we get a comment about why this is necessary? Why doesn't the form handle this somewhere? Does this mean the form's not useful outside of this controller?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i'm also curious about this.
it does seem like the form should handle these transformations.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure what is the best way to handle it. The another way that we can try is to merge the submitted params to the resource attributes in form.validate(params). Please advice.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action item: Fix this, I can take a look at it

@@ -10,7 +10,7 @@ class VisibilityPropagator
# @return [#propagate]
def self.for(source:)
case source
when Hyrax::WorkBehavior # ActiveFedora
when ActiveFedora::Base # ActiveFedora
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Question: I missed it, where did this change?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reason is that the monograph https://github.com/samvera/hyrax/blob/main/.dassie/app/models/monograph.rb model won't include Hyrax::WorkBehavior, which will cause tests related to visibility changes failed for fileset visibility propagating.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, the generated model doesn't include WorkBehavior. it seems like the weird thing here is that the VisibilityCopyJob is casting the valkyrie resource back to an AF::Base, even when use_valkyrie is true(?)

i think in the ideal case, both of the following would be true:

  • VisibilityCopyJob should support works generated by Wings; being generous about the type check as proposed here seems good.
  • the use_valkyrie code path here would leverage valkyrie objects throughout.

i think it would be worth checking up about the second point as part of this work.

@@ -97,15 +116,15 @@ def destroy_batch
end

def form_class
Forms::BatchEditForm
Hyrax.config.use_valkyrie? ? Forms::ResourceBatchEditForm : Forms::BatchEditForm
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nitpick: How's Hyrax feel about ternaries over explicit branches? We use an if/else above, should we use one here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if it's not being flagged by rubocop, i think we don't block on style.

on the other hand, i'm wondering if we could just drop all the old handling? if the valkyrie code path is working, do we need the opt-in?


# Returns a list of parameters we accept from the form
# rubocop:disable Metrics/MethodLength
def self.build_permitted_params
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Question: I just don't know much about hyrax forms anymore - if there's form objects with a restricted subset of fields, why do they also need to define their permitted params? Where's this get used - do all the form objects have these or is it something special about bulk edit?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tpendragon you probably know more about this form setup than most of us. these are valkyrie ChangeSets.

i have the same question about why this is needed, and where it's used other than the tests below.

# override this method if you need to initialize more complex RDF assertions (b-nodes)
# @return [Hash<String, Array>] the list of unique values per field
def initialize_combined_fields
# For each of the files in the batch, set the attributes to be the concatenation of all the attributes
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe a little comment about why I'd want it to do this?

end
end

def terms
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why is it okay to hard code these values? shouldn't they be derived from configuration?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action item: See if we can use the model configurable fields. Pull @no-reply in if we get stuck with this.

include Hyrax::FormFields(:basic_metadata)

self.required_fields = []
self.model_class = Hyrax.primary_work_type
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does this form only support the primary work type?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No. It'll work for any models, even with a batch that mixes with different objects types. The model_class here is only served for retrieving a consistent param_key for different object types.

Copy link
Contributor

@tpendragon tpendragon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're going to merge this because it works and we're going to do an RC, and this feature hasn't worked really well in the past. We'll write a ticket for the adjustments we might want to do here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
notes-valkyrie Release Notes: Valkyrie specific
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants