From ac3efce6578db064a5ae65984c3ea6b37f8ee504 Mon Sep 17 00:00:00 2001 From: Kirk Wang Date: Thu, 23 Feb 2023 05:18:21 -0800 Subject: [PATCH 01/15] Run generator and add model config to work types --- Gemfile | 4 +- Gemfile.lock | 60 +++++++++++++----- app/assets/javascripts/application.js | 2 + app/assets/stylesheets/iiif_print.scss | 1 + app/controllers/catalog_controller.rb | 17 +++++ app/models/ability.rb | 8 +++ app/models/generic_work.rb | 3 + app/models/iiif_search_builder.rb | 15 +++++ app/models/image.rb | 3 + config/environments/development.rb | 2 +- config/initializers/iiif_print.rb | 22 +++++++ config/routes.rb | 3 + ...print_derivative_attachments.iiif_print.rb | 13 ++++ ..._print_ingest_file_relations.iiif_print.rb | 12 ++++ ..._print_pending_relationships.iiif_print.rb | 12 ++++ db/schema.rb | 28 +++++++- solr/conf/schema.xml | 28 +++++++- solr/conf/solrconfig.xml | 29 +++++++++ solr/lib/solr-tokenizing_suggester-7.x.jar | Bin 0 -> 30175 bytes yarn.lock | 2 +- 20 files changed, 241 insertions(+), 23 deletions(-) create mode 100644 app/assets/stylesheets/iiif_print.scss create mode 100644 app/models/iiif_search_builder.rb create mode 100644 config/initializers/iiif_print.rb create mode 100644 db/migrate/20230222205747_create_iiif_print_derivative_attachments.iiif_print.rb create mode 100644 db/migrate/20230222205748_create_iiif_print_ingest_file_relations.iiif_print.rb create mode 100644 db/migrate/20230222205749_create_iiif_print_pending_relationships.iiif_print.rb create mode 100644 solr/lib/solr-tokenizing_suggester-7.x.jar diff --git a/Gemfile b/Gemfile index e40535739..06da5955d 100644 --- a/Gemfile +++ b/Gemfile @@ -83,12 +83,14 @@ group :development do gem 'spring-watcher-listen', '~> 2.0.0' end -gem 'bulkrax', '~> 3.5.0' +gem 'bulkrax', git: 'https://github.com/samvera-labs/bulkrax.git', branch: 'main' gem 'blacklight', '~> 6.7' gem 'blacklight_oai_provider', '~> 6.1', '>= 6.1.1' gem 'hyrax', '~> 3.5.0' +# gem 'iiif_print', git: 'https://github.com/scientist-softserv/iiif_print.git', branch: 'fix-indexer-bugs' +gem 'iiif_print', path: 'vendor/engines/iiif_print' gem 'bolognese', '>= 1.9.10' gem 'hyrax-doi', git: 'https://github.com/samvera-labs/hyrax-doi.git', branch: 'hyrax_upgrade' diff --git a/Gemfile.lock b/Gemfile.lock index a5c7483ba..9c82cf7bf 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,3 +1,23 @@ +GIT + remote: https://github.com/samvera-labs/bulkrax.git + revision: 96c176ab7f077bc88ad9e6346be74b341609e52e + branch: main + specs: + bulkrax (5.1.0) + bagit (~> 0.4) + coderay + iso8601 (~> 0.9.0) + kaminari + language_list (~> 1.2, >= 1.2.1) + libxml-ruby (~> 3.2.4) + loofah (>= 2.2.3) + oai (>= 0.4, < 2.x) + rack (>= 2.0.6) + rails (>= 5.1.6) + rdf (>= 2.0.2, < 4.0) + rubyzip + simple_form + GIT remote: https://github.com/samvera-labs/hyrax-doi.git revision: 16e459bf9d088610c21f8c0d446c196d66041686 @@ -17,6 +37,17 @@ GIT aws-sdk-sqs (~> 1) rails (>= 4.2) +PATH + remote: vendor/engines/iiif_print + specs: + iiif_print (0.0.1) + blacklight_iiif_search (~> 1.0) + dry-monads (~> 1.4.0) + hyrax (>= 2.5, < 4.0) + nokogiri (>= 1.13.2) + rails (~> 5.0) + rdf-vocab (~> 3.0) + GEM remote: https://rubygems.org/ specs: @@ -126,7 +157,7 @@ GEM babel-transpiler (0.7.0) babel-source (>= 4.0, < 6) execjs (~> 2.0) - bagit (0.4.4) + bagit (0.4.5) docopt (~> 0.5.0) validatable (~> 1.6) bcp47 (0.3.3) @@ -155,6 +186,10 @@ GEM bootstrap-sass (~> 3.0) openseadragon (>= 0.2.0) rails + blacklight_iiif_search (1.0.0) + blacklight (~> 6.0) + iiif-presentation + rails (>= 4.2, < 6) blacklight_oai_provider (6.1.1) blacklight (~> 6.0) oai (~> 1.0) @@ -200,20 +235,6 @@ GEM signet (~> 0.8) typhoeus builder (3.2.4) - bulkrax (3.5.1) - bagit (~> 0.4) - coderay - iso8601 (~> 0.9.0) - kaminari - language_list (~> 1.2, >= 1.2.1) - libxml-ruby (~> 3.1.0) - loofah (>= 2.2.3) - oai (>= 0.4, < 2.x) - rack (>= 2.0.6) - rails (>= 5.1.6) - rdf (>= 2.0.2, < 4.0) - rubyzip - simple_form byebug (11.1.3) cancancan (1.17.0) capybara (3.36.0) @@ -548,6 +569,10 @@ GEM rainbow (>= 2.2.2, < 4.0) terminal-table (>= 1.5.1) ice_nine (0.11.2) + iiif-presentation (1.1.0) + activesupport (>= 3.2.18) + faraday (>= 0.9) + json iiif_manifest (1.3.0) activesupport (>= 4) is_it_working (1.1.0) @@ -627,7 +652,7 @@ GEM rdf-vocab (~> 3.0) legato (0.7.0) multi_json - libxml-ruby (3.1.0) + libxml-ruby (3.2.4) link_header (0.0.8) linkeddata (3.1.6) equivalent-xml (~> 0.6) @@ -1136,7 +1161,7 @@ DEPENDENCIES blacklight_oai_provider (~> 6.1, >= 6.1.1) bolognese (>= 1.9.10) bootstrap-datepicker-rails - bulkrax (~> 3.5.0) + bulkrax! byebug capybara capybara-screenshot (~> 1.0) @@ -1159,6 +1184,7 @@ DEPENDENCIES hyrax-doi! i18n-debug i18n-tasks + iiif_print! is_it_working jbuilder (~> 2.5) jquery-rails diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 7a855b5e4..fe1ce9b26 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -43,6 +43,8 @@ //= require bulkrax/application //= require hyrax +//= require iiif_print + //= require jquery.flot.pie //= require flot_graph //= require statistics_tab_manager diff --git a/app/assets/stylesheets/iiif_print.scss b/app/assets/stylesheets/iiif_print.scss new file mode 100644 index 000000000..183e054a8 --- /dev/null +++ b/app/assets/stylesheets/iiif_print.scss @@ -0,0 +1 @@ +@import 'iiif_print/iiif_print'; diff --git a/app/controllers/catalog_controller.rb b/app/controllers/catalog_controller.rb index b24d21041..6abda01e9 100644 --- a/app/controllers/catalog_controller.rb +++ b/app/controllers/catalog_controller.rb @@ -16,7 +16,24 @@ def self.modified_field 'system_modified_dtsi' end + # CatalogController-scope behavior and configuration for BlacklightIiifSearch + include BlacklightIiifSearch::Controller + configure_blacklight do |config| + + # IiifPrint index fields + config.add_index_field 'all_text_tsimv', highlight: true, helper_method: :render_ocr_snippets + + + # configuration for Blacklight IIIF Content Search + config.iiif_search = { + full_text_field: 'all_text_tsimv', + object_relation_field: 'is_page_of_ssim', + supported_params: %w[q page], + autocomplete_handler: 'iiif_suggest', + suggester_name: 'iiifSuggester' + } + config.view.gallery.partials = %i[index_header index] config.view.masonry.partials = [:index] config.view.slideshow.partials = [:index] diff --git a/app/models/ability.rb b/app/models/ability.rb index a833def47..c433ad198 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -101,4 +101,12 @@ def all_user_and_group_roles def featured_collection_abilities can %i[create destroy update], FeaturedCollection if admin? end + + def can_import_works? + can_create_any_work? + end + + def can_export_works? + can_create_any_work? + end end diff --git a/app/models/generic_work.rb b/app/models/generic_work.rb index 92a1badb2..b8b740217 100644 --- a/app/models/generic_work.rb +++ b/app/models/generic_work.rb @@ -3,6 +3,9 @@ class GenericWork < ActiveFedora::Base include ::Hyrax::WorkBehavior include ::Hyrax::BasicMetadata + include IiifPrint.model_configuration( + pdf_split_child_model: self + ) validates :title, presence: { message: 'Your work must have a title.' } diff --git a/app/models/iiif_search_builder.rb b/app/models/iiif_search_builder.rb new file mode 100644 index 000000000..9e05f16af --- /dev/null +++ b/app/models/iiif_search_builder.rb @@ -0,0 +1,15 @@ +# SearchBuilder for full-text searches with highlighting and snippets +class IiifSearchBuilder < Blacklight::SearchBuilder + include Blacklight::Solr::SearchBuilderBehavior + + self.default_processor_chain += [:ocr_search_params] + + # set params for ocr field searching + def ocr_search_params(solr_parameters = {}) + solr_parameters[:facet] = false + solr_parameters[:hl] = true + solr_parameters[:'hl.fl'] = blacklight_config.iiif_search[:full_text_field] + solr_parameters[:'hl.fragsize'] = 100 + solr_parameters[:'hl.snippets'] = 10 + end +end diff --git a/app/models/image.rb b/app/models/image.rb index bd2aabb1a..e0218ec94 100644 --- a/app/models/image.rb +++ b/app/models/image.rb @@ -4,6 +4,9 @@ # `rails generate hyrax:work Image` class Image < ActiveFedora::Base include ::Hyrax::WorkBehavior + include IiifPrint.model_configuration( + pdf_split_child_model: self + ) property :extent, predicate: ::RDF::Vocab::DC.extent, multiple: true do |index| index.as :stored_searchable diff --git a/config/environments/development.rb b/config/environments/development.rb index c62ee17d0..9bafa102c 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -40,7 +40,7 @@ # Debug mode disables concatenation and preprocessing of assets. # This option may cause significant delays in view rendering with a large # number of complex assets. - config.assets.debug = true + # config.assets.debug = true # Suppress logger output for asset requests. config.assets.quiet = true diff --git a/config/initializers/iiif_print.rb b/config/initializers/iiif_print.rb new file mode 100644 index 000000000..549bedd4a --- /dev/null +++ b/config/initializers/iiif_print.rb @@ -0,0 +1,22 @@ +IiifPrint.config do |config| + # NOTE: WorkTypes and models are used synonymously here. + # Add models to be excluded from search so the user + # would not see them in the search results. + # by default, use the human readable versions like: + # @example + # # config.excluded_model_name_solr_field_values = ['Generic Work', 'Image'] + # + # config.excluded_model_name_solr_field_values = [] + + # Add configurable solr field key for searching, + # default key is: 'human_readable_type_sim' + # if another key is used, make sure to adjust the + # config.excluded_model_name_solr_field_values to match + # @example + # config.excluded_model_name_solr_field_key = 'some_solr_field_key' + + # Configure how the manifest sorts the canvases, by default it sorts by :title, + # but a different model property may be desired such as :date_published + # @example + # config.sort_iiif_manifest_canvases_by = :date_published +end diff --git a/config/routes.rb b/config/routes.rb index 13904aa01..931b6c564 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -3,6 +3,8 @@ require 'sidekiq/web' Rails.application.routes.draw do + + concern :iiif_search, BlacklightIiifSearch::Routes.new concern :oai_provider, BlacklightOaiProvider::Routes.new mount Riiif::Engine => 'images', as: :riiif if Hyrax.config.iiif_image_server? @@ -59,6 +61,7 @@ resources :solr_documents, only: [:show], path: '/catalog', controller: 'catalog' do concerns :exportable + concerns :iiif_search end resources :bookmarks do diff --git a/db/migrate/20230222205747_create_iiif_print_derivative_attachments.iiif_print.rb b/db/migrate/20230222205747_create_iiif_print_derivative_attachments.iiif_print.rb new file mode 100644 index 000000000..1139c9af7 --- /dev/null +++ b/db/migrate/20230222205747_create_iiif_print_derivative_attachments.iiif_print.rb @@ -0,0 +1,13 @@ +# This migration comes from iiif_print (originally 20181214181358) +class CreateIiifPrintDerivativeAttachments < ActiveRecord::Migration[5.0] + def change + create_table :iiif_print_derivative_attachments do |t| + t.string :fileset_id + t.string :path + t.string :destination_name + + t.timestamps + end + add_index :iiif_print_derivative_attachments, :fileset_id + end +end diff --git a/db/migrate/20230222205748_create_iiif_print_ingest_file_relations.iiif_print.rb b/db/migrate/20230222205748_create_iiif_print_ingest_file_relations.iiif_print.rb new file mode 100644 index 000000000..b81b8832e --- /dev/null +++ b/db/migrate/20230222205748_create_iiif_print_ingest_file_relations.iiif_print.rb @@ -0,0 +1,12 @@ +# This migration comes from iiif_print (originally 20190107165909) +class CreateIiifPrintIngestFileRelations < ActiveRecord::Migration[5.0] + def change + create_table :iiif_print_ingest_file_relations do |t| + t.string :file_path + t.string :derivative_path + + t.timestamps + end + add_index :iiif_print_ingest_file_relations, :file_path + end +end diff --git a/db/migrate/20230222205749_create_iiif_print_pending_relationships.iiif_print.rb b/db/migrate/20230222205749_create_iiif_print_pending_relationships.iiif_print.rb new file mode 100644 index 000000000..9a8f29cb9 --- /dev/null +++ b/db/migrate/20230222205749_create_iiif_print_pending_relationships.iiif_print.rb @@ -0,0 +1,12 @@ +# This migration comes from iiif_print (originally 20230109000000) +class CreateIiifPrintPendingRelationships < ActiveRecord::Migration[5.1] + def change + create_table :iiif_print_pending_relationships do |t| + t.string :child_title, null: false + t.string :parent_id, null: false + t.string :child_order, null: false + t.timestamps + end + add_index :iiif_print_pending_relationships, :parent_id + end +end diff --git a/db/schema.rb b/db/schema.rb index 87a401272..4552c5f11 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_11_22_001715) do +ActiveRecord::Schema.define(version: 2023_02_22_205749) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -351,6 +351,32 @@ t.string "humanized_name" end + create_table "iiif_print_derivative_attachments", id: :serial, force: :cascade do |t| + t.string "fileset_id" + t.string "path" + t.string "destination_name" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["fileset_id"], name: "index_iiif_print_derivative_attachments_on_fileset_id" + end + + create_table "iiif_print_ingest_file_relations", id: :serial, force: :cascade do |t| + t.string "file_path" + t.string "derivative_path" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["file_path"], name: "index_iiif_print_ingest_file_relations_on_file_path" + end + + create_table "iiif_print_pending_relationships", force: :cascade do |t| + t.string "child_title", null: false + t.string "parent_id", null: false + t.string "child_order", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["parent_id"], name: "index_iiif_print_pending_relationships_on_parent_id" + end + create_table "job_io_wrappers", id: :serial, force: :cascade do |t| t.integer "user_id" t.integer "uploaded_file_id" diff --git a/solr/conf/schema.xml b/solr/conf/schema.xml index 30af7132b..38e863e08 100644 --- a/solr/conf/schema.xml +++ b/solr/conf/schema.xml @@ -171,7 +171,23 @@ - + + + + + + + + + + + + + + + + + - + + + + + + + + + diff --git a/solr/conf/solrconfig.xml b/solr/conf/solrconfig.xml index 318eaed8d..9280a8f93 100644 --- a/solr/conf/solrconfig.xml +++ b/solr/conf/solrconfig.xml @@ -320,4 +320,33 @@ + + + + + + + iiifSuggester + edu.stanford.dlss.search.suggest.analyzing.TokenizingLookupFactory + DocumentDictionaryFactory + textSuggest + textSuggestTokenizer + is_page_of_s + true + iiif_suggest + + + + + + true + 5 + iiifSuggester + + + iiif_suggest + + + + diff --git a/solr/lib/solr-tokenizing_suggester-7.x.jar b/solr/lib/solr-tokenizing_suggester-7.x.jar new file mode 100644 index 0000000000000000000000000000000000000000..ef0851514b69bde6c2097f6412b48195ed6b4e8c GIT binary patch literal 30175 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 E0Hy$Zr2qf` literal 0 HcmV?d00001 diff --git a/yarn.lock b/yarn.lock index f521d38cf..21de4fefc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1328,7 +1328,7 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -"http-status-codes@github:edsilv/http-status-codes#v0.0.7": +http-status-codes@edsilv/http-status-codes#v0.0.7: version "0.0.7" resolved "https://codeload.github.com/edsilv/http-status-codes/tar.gz/af3a8ab9970b1f291a79b03c7382dc16aebee749" From 7cba4d8460708434b2d4604a734de39c19400dfb Mon Sep 17 00:00:00 2001 From: Kirk Wang Date: Fri, 24 Feb 2023 08:14:42 -0800 Subject: [PATCH 02/15] Update search and bulkrax config --- app/controllers/catalog_controller.rb | 2 +- config/initializers/bulkrax.rb | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/controllers/catalog_controller.rb b/app/controllers/catalog_controller.rb index 6abda01e9..134169c5e 100644 --- a/app/controllers/catalog_controller.rb +++ b/app/controllers/catalog_controller.rb @@ -47,7 +47,7 @@ def self.modified_field config.advanced_search[:query_parser] ||= 'dismax' config.advanced_search[:form_solr_parameters] ||= {} - config.search_builder_class = Hyrax::CatalogSearchBuilder + config.search_builder_class = IiifPrint::CatalogSearchBuilder # Show gallery view config.view.gallery.partials = %i[index_header index] diff --git a/config/initializers/bulkrax.rb b/config/initializers/bulkrax.rb index ee70f8752..35d5f33fe 100644 --- a/config/initializers/bulkrax.rb +++ b/config/initializers/bulkrax.rb @@ -61,4 +61,6 @@ # Properties that should not be used in imports/exports. They are reserved for use by Hyrax. # config.reserved_properties += ['my_field'] end + + Bulkrax::CreateRelationshipsJob.update_child_records_works_file_sets = true end From 9d397ed66c63bd2a718fda88380fc29e5ae8ba29 Mon Sep 17 00:00:00 2001 From: Shana Moore Date: Fri, 24 Feb 2023 15:25:41 -0800 Subject: [PATCH 03/15] replace migration files with those from i98 these migrations are already deployed to staging so we need to match them. installing iiif_print changes their time stamps and breaks staging deploy. --- Gemfile | 6 +- Gemfile.lock | 57 +++++++++---------- ...rint_derivative_attachments.iiif_print.rb} | 0 ...print_ingest_file_relations.iiif_print.rb} | 0 ...print_pending_relationships.iiif_print.rb} | 0 db/schema.rb | 2 +- 6 files changed, 31 insertions(+), 34 deletions(-) rename db/migrate/{20230222205747_create_iiif_print_derivative_attachments.iiif_print.rb => 20221205210847_create_iiif_print_derivative_attachments.iiif_print.rb} (100%) rename db/migrate/{20230222205748_create_iiif_print_ingest_file_relations.iiif_print.rb => 20221205210848_create_iiif_print_ingest_file_relations.iiif_print.rb} (100%) rename db/migrate/{20230222205749_create_iiif_print_pending_relationships.iiif_print.rb => 20230131202855_create_iiif_print_pending_relationships.iiif_print.rb} (100%) diff --git a/Gemfile b/Gemfile index 06da5955d..e5479ad34 100644 --- a/Gemfile +++ b/Gemfile @@ -83,18 +83,18 @@ group :development do gem 'spring-watcher-listen', '~> 2.0.0' end -gem 'bulkrax', git: 'https://github.com/samvera-labs/bulkrax.git', branch: 'main' +gem 'bulkrax', '~> 5.0' gem 'blacklight', '~> 6.7' gem 'blacklight_oai_provider', '~> 6.1', '>= 6.1.1' gem 'hyrax', '~> 3.5.0' -# gem 'iiif_print', git: 'https://github.com/scientist-softserv/iiif_print.git', branch: 'fix-indexer-bugs' -gem 'iiif_print', path: 'vendor/engines/iiif_print' gem 'bolognese', '>= 1.9.10' gem 'hyrax-doi', git: 'https://github.com/samvera-labs/hyrax-doi.git', branch: 'hyrax_upgrade' +gem 'iiif_print', git: 'https://github.com/scientist-softserv/iiif_print.git', branch: 'main' gem 'postrank-uri', '>= 1.0.24' +gem 'redlock', '>= 0.1.2', '< 2.0' # lock redlock per https://github.com/samvera/hyrax/pull/5961 gem 'rsolr', '~> 2.0' gem 'devise' diff --git a/Gemfile.lock b/Gemfile.lock index 9c82cf7bf..9a6ab1dc1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,23 +1,3 @@ -GIT - remote: https://github.com/samvera-labs/bulkrax.git - revision: 96c176ab7f077bc88ad9e6346be74b341609e52e - branch: main - specs: - bulkrax (5.1.0) - bagit (~> 0.4) - coderay - iso8601 (~> 0.9.0) - kaminari - language_list (~> 1.2, >= 1.2.1) - libxml-ruby (~> 3.2.4) - loofah (>= 2.2.3) - oai (>= 0.4, < 2.x) - rack (>= 2.0.6) - rails (>= 5.1.6) - rdf (>= 2.0.2, < 4.0) - rubyzip - simple_form - GIT remote: https://github.com/samvera-labs/hyrax-doi.git revision: 16e459bf9d088610c21f8c0d446c196d66041686 @@ -30,15 +10,9 @@ GIT rails (~> 5.2.4, >= 5.2.4.3) GIT - remote: https://github.com/tawan/active-elastic-job.git - revision: ec51c5d9dedc4a1b47f2db41f26d5fceb251e979 - specs: - active_elastic_job (2.0.1) - aws-sdk-sqs (~> 1) - rails (>= 4.2) - -PATH - remote: vendor/engines/iiif_print + remote: https://github.com/scientist-softserv/iiif_print.git + revision: 7825aba75c6ae32988a8f221826d11bb902c935f + branch: main specs: iiif_print (0.0.1) blacklight_iiif_search (~> 1.0) @@ -48,6 +22,14 @@ PATH rails (~> 5.0) rdf-vocab (~> 3.0) +GIT + remote: https://github.com/tawan/active-elastic-job.git + revision: ec51c5d9dedc4a1b47f2db41f26d5fceb251e979 + specs: + active_elastic_job (2.0.1) + aws-sdk-sqs (~> 1) + rails (>= 4.2) + GEM remote: https://rubygems.org/ specs: @@ -235,6 +217,20 @@ GEM signet (~> 0.8) typhoeus builder (3.2.4) + bulkrax (5.1.0) + bagit (~> 0.4) + coderay + iso8601 (~> 0.9.0) + kaminari + language_list (~> 1.2, >= 1.2.1) + libxml-ruby (~> 3.2.4) + loofah (>= 2.2.3) + oai (>= 0.4, < 2.x) + rack (>= 2.0.6) + rails (>= 5.1.6) + rdf (>= 2.0.2, < 4.0) + rubyzip + simple_form byebug (11.1.3) cancancan (1.17.0) capybara (3.36.0) @@ -1161,7 +1157,7 @@ DEPENDENCIES blacklight_oai_provider (~> 6.1, >= 6.1.1) bolognese (>= 1.9.10) bootstrap-datepicker-rails - bulkrax! + bulkrax (~> 5.0) byebug capybara capybara-screenshot (~> 1.0) @@ -1202,6 +1198,7 @@ DEPENDENCIES rails (~> 5.2.5) rails-controller-testing rdf (~> 3.1.15) + redlock (>= 0.1.2, < 2.0) riiif (~> 1.1) rolify rsolr (~> 2.0) diff --git a/db/migrate/20230222205747_create_iiif_print_derivative_attachments.iiif_print.rb b/db/migrate/20221205210847_create_iiif_print_derivative_attachments.iiif_print.rb similarity index 100% rename from db/migrate/20230222205747_create_iiif_print_derivative_attachments.iiif_print.rb rename to db/migrate/20221205210847_create_iiif_print_derivative_attachments.iiif_print.rb diff --git a/db/migrate/20230222205748_create_iiif_print_ingest_file_relations.iiif_print.rb b/db/migrate/20221205210848_create_iiif_print_ingest_file_relations.iiif_print.rb similarity index 100% rename from db/migrate/20230222205748_create_iiif_print_ingest_file_relations.iiif_print.rb rename to db/migrate/20221205210848_create_iiif_print_ingest_file_relations.iiif_print.rb diff --git a/db/migrate/20230222205749_create_iiif_print_pending_relationships.iiif_print.rb b/db/migrate/20230131202855_create_iiif_print_pending_relationships.iiif_print.rb similarity index 100% rename from db/migrate/20230222205749_create_iiif_print_pending_relationships.iiif_print.rb rename to db/migrate/20230131202855_create_iiif_print_pending_relationships.iiif_print.rb diff --git a/db/schema.rb b/db/schema.rb index 4552c5f11..796b8058e 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2023_02_22_205749) do +ActiveRecord::Schema.define(version: 2023_02_08_001228) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" From 27a708b044a0986c4dcf39711f152dd6fc187eae Mon Sep 17 00:00:00 2001 From: Shana Moore Date: Fri, 24 Feb 2023 15:32:12 -0800 Subject: [PATCH 04/15] rubocop fix --- app/controllers/catalog_controller.rb | 2 -- app/models/iiif_search_builder.rb | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/catalog_controller.rb b/app/controllers/catalog_controller.rb index 134169c5e..72265252c 100644 --- a/app/controllers/catalog_controller.rb +++ b/app/controllers/catalog_controller.rb @@ -20,11 +20,9 @@ def self.modified_field include BlacklightIiifSearch::Controller configure_blacklight do |config| - # IiifPrint index fields config.add_index_field 'all_text_tsimv', highlight: true, helper_method: :render_ocr_snippets - # configuration for Blacklight IIIF Content Search config.iiif_search = { full_text_field: 'all_text_tsimv', diff --git a/app/models/iiif_search_builder.rb b/app/models/iiif_search_builder.rb index 9e05f16af..fcbbb9221 100644 --- a/app/models/iiif_search_builder.rb +++ b/app/models/iiif_search_builder.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # SearchBuilder for full-text searches with highlighting and snippets class IiifSearchBuilder < Blacklight::SearchBuilder include Blacklight::Solr::SearchBuilderBehavior From c954e83d88e3e8da567ed8dd65a84fdb1db2b6aa Mon Sep 17 00:00:00 2001 From: Rob Kaufman Date: Mon, 27 Feb 2023 11:45:20 -0800 Subject: [PATCH 05/15] solr build improvements --- .github/workflows/base.yaml | 5 +++-- .github/workflows/build-test-lint.yaml | 5 +++-- docker-compose.yml | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/base.yaml b/.github/workflows/base.yaml index ddfb8e538..864b77412 100644 --- a/.github/workflows/base.yaml +++ b/.github/workflows/base.yaml @@ -11,8 +11,9 @@ on: jobs: build: - uses: scientist-softserv/actions/.github/workflows/build.yaml@v0.0.6 + uses: scientist-softserv/actions/.github/workflows/build.yaml@v0.0.9 secrets: inherit with: - platforms: "linux/amd64" + platforms: "linux/amd64,linux/arm64" target: hyku-base + image_name: hyku/base diff --git a/.github/workflows/build-test-lint.yaml b/.github/workflows/build-test-lint.yaml index c139d6a76..c47ac18e2 100644 --- a/.github/workflows/build-test-lint.yaml +++ b/.github/workflows/build-test-lint.yaml @@ -17,10 +17,11 @@ on: jobs: build: - uses: scientist-softserv/actions/.github/workflows/build.yaml@v0.0.6 + uses: scientist-softserv/actions/.github/workflows/build.yaml@v0.0.9 secrets: inherit with: - platforms: "linux/amd64" + platforms: "linux/amd64,linux/arm64" target: hyku-web + solr: true worker: true workerTarget: hyku-worker diff --git a/docker-compose.yml b/docker-compose.yml index 4b3b1b3b4..c4367eea0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -56,7 +56,7 @@ services: timeout: "8s" solr: - image: hyku/solr:8 + image: hyku/solr:8v1 build: context: solr dockerfile: Dockerfile From 9e88453f3232908ceba6b5d6c7b4b43eb5c82b78 Mon Sep 17 00:00:00 2001 From: Rob Kaufman Date: Mon, 27 Feb 2023 13:09:27 -0800 Subject: [PATCH 06/15] amd only again --- .github/workflows/base.yaml | 2 +- .github/workflows/build-test-lint.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/base.yaml b/.github/workflows/base.yaml index 864b77412..efa8dd5dd 100644 --- a/.github/workflows/base.yaml +++ b/.github/workflows/base.yaml @@ -14,6 +14,6 @@ jobs: uses: scientist-softserv/actions/.github/workflows/build.yaml@v0.0.9 secrets: inherit with: - platforms: "linux/amd64,linux/arm64" + platforms: "linux/amd64" # "linux/amd64,linux/arm64" target: hyku-base image_name: hyku/base diff --git a/.github/workflows/build-test-lint.yaml b/.github/workflows/build-test-lint.yaml index c47ac18e2..5b6702c22 100644 --- a/.github/workflows/build-test-lint.yaml +++ b/.github/workflows/build-test-lint.yaml @@ -20,7 +20,7 @@ jobs: uses: scientist-softserv/actions/.github/workflows/build.yaml@v0.0.9 secrets: inherit with: - platforms: "linux/amd64,linux/arm64" + platforms: "linux/amd64" # "linux/amd64,linux/arm64" target: hyku-web solr: true worker: true From 22c612e71700b94ee841274c3473d2fc88fd25a2 Mon Sep 17 00:00:00 2001 From: Rob Kaufman Date: Mon, 27 Feb 2023 13:56:03 -0800 Subject: [PATCH 07/15] get the name right --- .github/workflows/base.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/base.yaml b/.github/workflows/base.yaml index efa8dd5dd..76c4eb03d 100644 --- a/.github/workflows/base.yaml +++ b/.github/workflows/base.yaml @@ -16,4 +16,4 @@ jobs: with: platforms: "linux/amd64" # "linux/amd64,linux/arm64" target: hyku-base - image_name: hyku/base + image_name: samvera/hyku/base From 2e183641722d504bd10130101b67323f1fb240e9 Mon Sep 17 00:00:00 2001 From: Rob Kaufman Date: Mon, 27 Feb 2023 14:44:11 -0800 Subject: [PATCH 08/15] more build work --- .github/workflows/base.yaml | 2 +- .github/workflows/build-test-lint.yaml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/base.yaml b/.github/workflows/base.yaml index 76c4eb03d..c4302c890 100644 --- a/.github/workflows/base.yaml +++ b/.github/workflows/base.yaml @@ -11,7 +11,7 @@ on: jobs: build: - uses: scientist-softserv/actions/.github/workflows/build.yaml@v0.0.9 + uses: scientist-softserv/actions/.github/workflows/build.yaml@v0.0.11 secrets: inherit with: platforms: "linux/amd64" # "linux/amd64,linux/arm64" diff --git a/.github/workflows/build-test-lint.yaml b/.github/workflows/build-test-lint.yaml index 5b6702c22..00fb42ec0 100644 --- a/.github/workflows/build-test-lint.yaml +++ b/.github/workflows/build-test-lint.yaml @@ -17,11 +17,12 @@ on: jobs: build: - uses: scientist-softserv/actions/.github/workflows/build.yaml@v0.0.9 + uses: scientist-softserv/actions/.github/workflows/build.yaml@v0.0.11 secrets: inherit with: platforms: "linux/amd64" # "linux/amd64,linux/arm64" target: hyku-web solr: true + solrTarget: "" worker: true workerTarget: hyku-worker From 92d7091d0da4223d0cc8d923eabd09e99066d8fb Mon Sep 17 00:00:00 2001 From: Rob Kaufman Date: Mon, 27 Feb 2023 16:11:02 -0800 Subject: [PATCH 09/15] spin the wheel again --- .github/workflows/base.yaml | 2 +- .github/workflows/build-test-lint.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/base.yaml b/.github/workflows/base.yaml index c4302c890..5f88de10d 100644 --- a/.github/workflows/base.yaml +++ b/.github/workflows/base.yaml @@ -11,7 +11,7 @@ on: jobs: build: - uses: scientist-softserv/actions/.github/workflows/build.yaml@v0.0.11 + uses: scientist-softserv/actions/.github/workflows/build.yaml@v0.0.12 secrets: inherit with: platforms: "linux/amd64" # "linux/amd64,linux/arm64" diff --git a/.github/workflows/build-test-lint.yaml b/.github/workflows/build-test-lint.yaml index 00fb42ec0..426ea408f 100644 --- a/.github/workflows/build-test-lint.yaml +++ b/.github/workflows/build-test-lint.yaml @@ -17,12 +17,12 @@ on: jobs: build: - uses: scientist-softserv/actions/.github/workflows/build.yaml@v0.0.11 + uses: scientist-softserv/actions/.github/workflows/build.yaml@v0.0.12 secrets: inherit with: platforms: "linux/amd64" # "linux/amd64,linux/arm64" target: hyku-web solr: true - solrTarget: "" + solrTarget: worker: true workerTarget: hyku-worker From da8cec3d71c58c6869b141b83b82b0d110e596c7 Mon Sep 17 00:00:00 2001 From: Rob Kaufman Date: Mon, 27 Feb 2023 17:15:31 -0800 Subject: [PATCH 10/15] use the new docker image --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index c4367eea0..3b4854ea9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -56,7 +56,7 @@ services: timeout: "8s" solr: - image: hyku/solr:8v1 + image: ghcr.io/samvera/hyku/solr:v0.0.1 build: context: solr dockerfile: Dockerfile From 24ad34c77599b7e04c7ca64a10a7eb96cedcf9a0 Mon Sep 17 00:00:00 2001 From: Rob Kaufman Date: Mon, 27 Feb 2023 17:17:23 -0800 Subject: [PATCH 11/15] rethink tag starategy --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 3b4854ea9..baf84aad2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -56,7 +56,7 @@ services: timeout: "8s" solr: - image: ghcr.io/samvera/hyku/solr:v0.0.1 + image: ghcr.io/samvera/hyku/solr:${TAG:-latest} build: context: solr dockerfile: Dockerfile From b67d1d038ff1a8804620b6ad0a9354a350e43132 Mon Sep 17 00:00:00 2001 From: Rob Kaufman Date: Tue, 28 Feb 2023 12:15:53 -0800 Subject: [PATCH 12/15] stop trying to copy a field that does not exist --- solr/conf/schema.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/solr/conf/schema.xml b/solr/conf/schema.xml index 38e863e08..8b398f32e 100644 --- a/solr/conf/schema.xml +++ b/solr/conf/schema.xml @@ -171,7 +171,7 @@ - + @@ -380,7 +380,7 @@ --> - + From a80e3fb35b0f7e4291a2e9e5bb2f96733e90276d Mon Sep 17 00:00:00 2001 From: Rob Kaufman Date: Tue, 28 Feb 2023 12:41:21 -0800 Subject: [PATCH 13/15] stop words --- solr/conf/stopwords.txt | 58 ++++++++++++++++++++++++++++++++++++++ solr/conf/stopwords_en.txt | 58 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 solr/conf/stopwords.txt create mode 100644 solr/conf/stopwords_en.txt diff --git a/solr/conf/stopwords.txt b/solr/conf/stopwords.txt new file mode 100644 index 000000000..22f277fe0 --- /dev/null +++ b/solr/conf/stopwords.txt @@ -0,0 +1,58 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#----------------------------------------------------------------------- +# a couple of test stopwords to test that the words are really being +# configured from this file: +stopworda +stopwordb + +#Standard english stop words taken from Lucene's StopAnalyzer +a +an +and +are +as +at +be +but +by +for +if +in +into +is +it +no +not +of +on +or +s +such +t +that +the +their +then +there +these +they +this +to +was +will +with + diff --git a/solr/conf/stopwords_en.txt b/solr/conf/stopwords_en.txt new file mode 100644 index 000000000..22f277fe0 --- /dev/null +++ b/solr/conf/stopwords_en.txt @@ -0,0 +1,58 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#----------------------------------------------------------------------- +# a couple of test stopwords to test that the words are really being +# configured from this file: +stopworda +stopwordb + +#Standard english stop words taken from Lucene's StopAnalyzer +a +an +and +are +as +at +be +but +by +for +if +in +into +is +it +no +not +of +on +or +s +such +t +that +the +their +then +there +these +they +this +to +was +will +with + From 86c791fd1884f2fc1721a1d15edcdf52ab7d8b8b Mon Sep 17 00:00:00 2001 From: Rob Kaufman Date: Tue, 28 Feb 2023 17:15:12 -0800 Subject: [PATCH 14/15] unstick build/test by not doing autosuggest for iiif right now --- solr/conf/schema.xml | 25 ++++++++++---------- solr/conf/solrconfig.xml | 49 ++++++++++++++++++++-------------------- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/solr/conf/schema.xml b/solr/conf/schema.xml index 8b398f32e..c40b7026d 100644 --- a/solr/conf/schema.xml +++ b/solr/conf/schema.xml @@ -173,18 +173,19 @@ - - - - - - - - + + + + + + + + + - - + + @@ -340,7 +341,7 @@ - + @@ -380,7 +381,7 @@ --> - + diff --git a/solr/conf/solrconfig.xml b/solr/conf/solrconfig.xml index 9280a8f93..0522c3aed 100644 --- a/solr/conf/solrconfig.xml +++ b/solr/conf/solrconfig.xml @@ -322,31 +322,32 @@ - - - - - iiifSuggester - edu.stanford.dlss.search.suggest.analyzing.TokenizingLookupFactory - DocumentDictionaryFactory - textSuggest - textSuggestTokenizer - is_page_of_s - true - iiif_suggest - - + + From c702844de4c003eaa88eb5a7514c7a1eae1b289e Mon Sep 17 00:00:00 2001 From: Shana Moore Date: Wed, 1 Mar 2023 09:39:39 -0800 Subject: [PATCH 15/15] update iiif_print to pull in fix for missing translations --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 9a6ab1dc1..18813b8fc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -11,7 +11,7 @@ GIT GIT remote: https://github.com/scientist-softserv/iiif_print.git - revision: 7825aba75c6ae32988a8f221826d11bb902c935f + revision: 4f6b67276b57bf4648866408eb136905ca644e34 branch: main specs: iiif_print (0.0.1)