From 7a0bb421ca6a1f9c4444f2b054eb161064ada4e8 Mon Sep 17 00:00:00 2001 From: "R. S. Doiel" Date: Wed, 10 Jan 2024 10:37:52 -0800 Subject: [PATCH 01/15] Quick Save --- doi2rdm.1.md | 2 +- ep3util.1.md | 2 +- eprint2rdm.1.md | 2 +- eprintrest.1.md | 2 +- man/man1/doi2rdm.1 | 2 +- man/man1/ep3util.1 | 2 +- man/man1/eprint2rdm.1 | 2 +- man/man1/eprintrest.1 | 2 +- man/man1/people2vocabulary.1 | 2 +- man/man1/rdm2eprint.1 | 2 +- man/man1/rdmutil.1 | 2 +- people2vocabulary.1.md | 2 +- rdm2eprint.1.md | 2 +- rdmutil.1.md | 2 +- version.go | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/doi2rdm.1.md b/doi2rdm.1.md index 4f1c3f6e..f2f965f7 100644 --- a/doi2rdm.1.md +++ b/doi2rdm.1.md @@ -1,4 +1,4 @@ -%doi2rdm(1) irdmtools user manual | version 0.0.66 926e9462 +%doi2rdm(1) irdmtools user manual | version 0.0.66 927d9ddd % R. S. Doiel and Tom Morrell % 2024-01-10 diff --git a/ep3util.1.md b/ep3util.1.md index d60e0df7..1e84b5a5 100644 --- a/ep3util.1.md +++ b/ep3util.1.md @@ -1,4 +1,4 @@ -%ep3util(1) irdmtools user manual | version 0.0.66 926e9462 +%ep3util(1) irdmtools user manual | version 0.0.66 927d9ddd % R. S. Doiel and Tom Morrell % 2024-01-10 diff --git a/eprint2rdm.1.md b/eprint2rdm.1.md index 90936c62..10d4b8f9 100644 --- a/eprint2rdm.1.md +++ b/eprint2rdm.1.md @@ -1,4 +1,4 @@ -%eprint2rdm(1) irdmtools user manual | version 0.0.66 926e9462 +%eprint2rdm(1) irdmtools user manual | version 0.0.66 927d9ddd % R. S. Doiel and Tom Morrell % 2024-01-10 diff --git a/eprintrest.1.md b/eprintrest.1.md index 026d75a2..666b724f 100644 --- a/eprintrest.1.md +++ b/eprintrest.1.md @@ -1,4 +1,4 @@ -%eprintrest(1) irdmtools user manual | version 0.0.66 926e9462 +%eprintrest(1) irdmtools user manual | version 0.0.66 927d9ddd % R. S. Doiel and Tom Morrell % 2024-01-10 diff --git a/man/man1/doi2rdm.1 b/man/man1/doi2rdm.1 index 2e0d0ccd..31f0b4ca 100644 --- a/man/man1/doi2rdm.1 +++ b/man/man1/doi2rdm.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11 .\" -.TH "doi2rdm" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 926e9462" +.TH "doi2rdm" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 927d9ddd" .SH NAME doi2rdm .SH SYNOPSIS diff --git a/man/man1/ep3util.1 b/man/man1/ep3util.1 index 7b69057f..3372f4d5 100644 --- a/man/man1/ep3util.1 +++ b/man/man1/ep3util.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11 .\" -.TH "ep3util" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 926e9462" +.TH "ep3util" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 927d9ddd" .SH NAME ep3util .SH SYNOPSIS diff --git a/man/man1/eprint2rdm.1 b/man/man1/eprint2rdm.1 index 5a6d1305..72a5ee70 100644 --- a/man/man1/eprint2rdm.1 +++ b/man/man1/eprint2rdm.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11 .\" -.TH "eprint2rdm" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 926e9462" +.TH "eprint2rdm" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 927d9ddd" .SH NAME eprint2rdm .SH SYNOPSIS diff --git a/man/man1/eprintrest.1 b/man/man1/eprintrest.1 index 935bd9d9..bad6319f 100644 --- a/man/man1/eprintrest.1 +++ b/man/man1/eprintrest.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11 .\" -.TH "eprintrest" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 926e9462" +.TH "eprintrest" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 927d9ddd" .SH NAME eprintrest .SH SYNOPSIS diff --git a/man/man1/people2vocabulary.1 b/man/man1/people2vocabulary.1 index d79395d5..32edef21 100644 --- a/man/man1/people2vocabulary.1 +++ b/man/man1/people2vocabulary.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11 .\" -.TH "people2vocabulary" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 926e9462" +.TH "people2vocabulary" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 927d9ddd" .SH NAME people2vocabulary .SH SYNOPSIS diff --git a/man/man1/rdm2eprint.1 b/man/man1/rdm2eprint.1 index a23e6d21..63e880b3 100644 --- a/man/man1/rdm2eprint.1 +++ b/man/man1/rdm2eprint.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11 .\" -.TH "rdm2eprint" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 926e9462" +.TH "rdm2eprint" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 927d9ddd" .SH NAME rdm2eprint .SH SYNOPSIS diff --git a/man/man1/rdmutil.1 b/man/man1/rdmutil.1 index 183f1dd7..adb9c2cf 100644 --- a/man/man1/rdmutil.1 +++ b/man/man1/rdmutil.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11 .\" -.TH "rdmutil" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 926e9462" +.TH "rdmutil" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 927d9ddd" .SH NAME rdmutil .SH SYNOPSIS diff --git a/people2vocabulary.1.md b/people2vocabulary.1.md index 8db29393..2affe24a 100644 --- a/people2vocabulary.1.md +++ b/people2vocabulary.1.md @@ -1,4 +1,4 @@ -%people2vocabulary(1) irdmtools user manual | version 0.0.66 926e9462 +%people2vocabulary(1) irdmtools user manual | version 0.0.66 927d9ddd % R. S. Doiel % 2024-01-10 diff --git a/rdm2eprint.1.md b/rdm2eprint.1.md index b89386bd..ff161241 100644 --- a/rdm2eprint.1.md +++ b/rdm2eprint.1.md @@ -1,4 +1,4 @@ -%rdm2eprint(1) irdmtools user manual | version 0.0.66 926e9462 +%rdm2eprint(1) irdmtools user manual | version 0.0.66 927d9ddd % R. S. Doiel and Tom Morrell % 2024-01-10 diff --git a/rdmutil.1.md b/rdmutil.1.md index ec442374..4986da38 100644 --- a/rdmutil.1.md +++ b/rdmutil.1.md @@ -1,4 +1,4 @@ -%rdmutil(1) irdmtools user manual | version 0.0.66 926e9462 +%rdmutil(1) irdmtools user manual | version 0.0.66 927d9ddd % R. S. Doiel and Tom Morrell % 2024-01-10 diff --git a/version.go b/version.go index 234edad7..302d68ad 100644 --- a/version.go +++ b/version.go @@ -12,7 +12,7 @@ const ( ReleaseDate = "2024-01-10" // ReleaseHash, the Git hash when version.go was generated - ReleaseHash = "926e9462" + ReleaseHash = "927d9ddd" LicenseText = ` Redistribution and use in source and binary forms, with or without From 25722d899a2a23ca065d673eec0a7cbbcbd0ff2f Mon Sep 17 00:00:00 2001 From: Tom Morrell Date: Wed, 10 Jan 2024 13:28:08 -0800 Subject: [PATCH 02/15] Add back in blank record --- blank.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 blank.json diff --git a/blank.json b/blank.json new file mode 100644 index 00000000..e9c433e8 --- /dev/null +++ b/blank.json @@ -0,0 +1,24 @@ +{ + "pids": { + }, + "access": { + "files": "restricted", + "status": "restricted", + "record": "restricted" + }, + "metadata": { + "resource_type": {"id": "other"}, + "creators": [ + { + "person_or_org": { + "name": "Caltech Library", + "type": "organizational" + } + } + ], + "title": "Deleted Record", + "publisher": "Caltech Library", + "publication_date": "1700", + "description": "This record was created accidentally and will be deleted" + } +} From c809ded9a39821120eec5a80acc62a4b865891bb Mon Sep 17 00:00:00 2001 From: Tom Morrell Date: Wed, 10 Jan 2024 13:28:42 -0800 Subject: [PATCH 03/15] Re-add blank json file --- deleted_records/72k82-bv782.json | 185 +++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 deleted_records/72k82-bv782.json diff --git a/deleted_records/72k82-bv782.json b/deleted_records/72k82-bv782.json new file mode 100644 index 00000000..aa928f22 --- /dev/null +++ b/deleted_records/72k82-bv782.json @@ -0,0 +1,185 @@ +{ + "parent": { + "communities": { + "default": "aedd135f-227e-4fdf-9476-5b3fd011bac6", + "ids": [ + "aedd135f-227e-4fdf-9476-5b3fd011bac6" + ] + }, + "id": "sddc3-dpf53" + }, + "stats": { + "this_version": { + "downloads": 11, + "views": 8, + "unique_views": 5, + "data_volume": 25991918.0, + "unique_downloads": 6 + }, + "all_versions": { + "downloads": 11, + "views": 8, + "unique_views": 5, + "data_volume": 25991918.0, + "unique_downloads": 6 + } + }, + "access": { + "files": "public", + "record": "public", + "status": "open", + "embargo": { + "active": false, + "reason": null + } + }, + "created": "2023-09-21T22:27:14.309389+00:00", + "revision_id": 3, + "links": { + "self": "https://authors.library.caltech.edu/api/records/72k82-bv782", + "self_html": "https://authors.library.caltech.edu/records/72k82-bv782", + "self_doi": "https://authors.library.caltech.edu/doi/10.7907111/72k82-bv782", + "doi": "https://doi.org/10.7907111/72k82-bv782", + "self_iiif_manifest": "https://authors.library.caltech.edu/api/iiif/record:72k82-bv782/manifest", + "self_iiif_sequence": "https://authors.library.caltech.edu/api/iiif/record:72k82-bv782/sequence/default", + "files": "https://authors.library.caltech.edu/api/records/72k82-bv782/files", + "archive": "https://authors.library.caltech.edu/api/records/72k82-bv782/files-archive", + "latest": "https://authors.library.caltech.edu/api/records/72k82-bv782/versions/latest", + "latest_html": "https://authors.library.caltech.edu/records/72k82-bv782/latest", + "draft": "https://authors.library.caltech.edu/api/records/72k82-bv782/draft", + "versions": "https://authors.library.caltech.edu/api/records/72k82-bv782/versions", + "access_links": "https://authors.library.caltech.edu/api/records/72k82-bv782/access/links", + "reserve_doi": "https://authors.library.caltech.edu/api/records/72k82-bv782/draft/pids/doi", + "communities": "https://authors.library.caltech.edu/api/records/72k82-bv782/communities", + "communities-suggestions": "https://authors.library.caltech.edu/api/records/72k82-bv782/communities-suggestions", + "requests": "https://authors.library.caltech.edu/api/records/72k82-bv782/requests" + }, + "versions": { + "is_latest": true, + "index": 1 + }, + "files": { + "default_preview": "RDMworkbook_1.0.pdf", + "total_bytes": 4533353, + "entries": { + "RDMworkbook_1.0.pdf": { + "key": "RDMworkbook_1.0.pdf", + "mimetype": "application/pdf", + "ext": "pdf", + "metadata": null, + "size": 2384285 + }, + "RDMworkbook_1.0.epub": { + "key": "RDMworkbook_1.0.epub", + "mimetype": "application/epub+zip", + "ext": "epub", + "metadata": null, + "size": 2149068 + } + }, + "enabled": true, + "order": [], + "count": 2 + }, + "custom_fields": { + "caltech:groups": [ + { + "title": { + "en": "Caltech Library" + }, + "id": "Caltech-Library" + } + ], + "imprint:imprint": { + "pages": "50", + "title": "The Research Data Management Workbook", + "isbn": "978-1-60049-015-6", + "place": "Pasadena, CA" + } + }, + "status": "published", + "updated": "2023-09-21T22:27:14.384495+00:00", + "id": "72k82-bv782", + "pids": { + "doi": { + "client": "datacite", + "provider": "datacite", + "identifier": "10.7907111/72k82-bv782" + }, + "oai": { + "provider": "oai", + "identifier": "oai:authors.library.caltech.edu:72k82-bv782" + } + }, + "metadata": { + "creators": [ + { + "person_or_org": { + "identifiers": [ + { + "scheme": "clpid", + "identifier": "Briney-Kristin-A" + }, + { + "scheme": "orcid", + "identifier": "0000-0003-1802-0184" + } + ], + "type": "personal", + "name": "Briney, Kristin", + "given_name": "Kristin", + "family_name": "Briney" + }, + "affiliations": [ + { + "name": "California Institute of Technology", + "id": "05dxps055" + } + ] + } + ], + "resource_type": { + "title": { + "de": "Buch", + "en": "Book" + }, + "id": "publication-book" + }, + "version": "Published", + "description": "

The Research Data Management Workbook is made up of a collection of exercises for researchers to improve their data management. The Workbook contains exercises across the data lifecycle, including: 

  • Evaluate a laboratory notebook 
  • Write a project-level README.txt 
  • Create a data dictionary 
  • Set up a file organization system 
  • Create a file naming convention 
  • Pick storage and backup systems 
  • Test your backup 
  • Write a living data management plan (DMP) 
  • Determine data stewardship 
  • Pick a data repository 
  • Share data 
  • Prepare data for future use 
  • Convert data files types 
  • Create an Archive folder 
  • Separate from the institution 

Every exercise comes with a description of its value within data management, instructions on how to do the exercise, original source of the exercise (when applicable), and the exercise itself. 

", + "publication_date": "2023-10-02", + "publisher": "Caltech Library", + "title": "The Research Data Management Workbook", + "rights": [ + { + "id": "cc-by-nc-4.0", + "description": { + "en": "" + }, + "props": { + "url": "https://creativecommons.org/licenses/by-nc/4.0/legalcode", + "scheme": "spdx" + }, + "title": { + "en": "Creative Commons Attribution Non Commercial 4.0 International" + } + } + ], + "identifiers": [ + { + "scheme": "url", + "identifier": "https://library.caltech.edu/RDMworkbook" + } + ], + "languages": [ + { + "title": { + "en": "English" + }, + "id": "eng" + } + ] + }, + "is_published": true, + "is_draft": false +} \ No newline at end of file From db5955de7dbbf851b1c8e7108b46ab6220f76cd6 Mon Sep 17 00:00:00 2001 From: "R. S. Doiel" Date: Wed, 10 Jan 2024 15:54:58 -0800 Subject: [PATCH 04/15] minor speed improvement in rdmutil harvest --- CITATION.cff | 2 +- about.md | 4 ++-- codemeta.json | 4 ++-- doi2rdm.1.md | 2 +- ep3util.1.md | 2 +- eprint2rdm.1.md | 2 +- eprintrest.1.md | 2 +- harvest.go | 38 +++++++++++++++++++++++++++++------- installer.sh | 2 +- invenio_api.go | 12 ++++++++++++ man/man1/doi2rdm.1 | 2 +- man/man1/ep3util.1 | 2 +- man/man1/eprint2rdm.1 | 2 +- man/man1/eprintrest.1 | 2 +- man/man1/people2vocabulary.1 | 2 +- man/man1/rdm2eprint.1 | 2 +- man/man1/rdmutil.1 | 2 +- people2vocabulary.1.md | 2 +- rdm2eprint.1.md | 2 +- rdmutil.1.md | 2 +- version.go | 4 ++-- 21 files changed, 65 insertions(+), 29 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index b70435b6..55d87f7d 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -14,7 +14,7 @@ authors: repository-code: "https://github.com/caltechlibrary/irdmtools" -version: 0.0.66 +version: 0.0.67 license-url: "https://caltechlibrary.github.io/irdmtools/LICENSE" keywords: [ "institutional repository", "data management", "Invenio", "Invenio-RDM" ] diff --git a/about.md b/about.md index 68cc3b00..5ebcef18 100644 --- a/about.md +++ b/about.md @@ -14,7 +14,7 @@ authors: orcid: "https://orcid.org/0000-0001-9266-5146" repository-code: "https://github.com/caltechlibrary/irdmtools" -version: 0.0.66 +version: 0.0.67 license-url: "https://caltechlibrary.github.io/irdmtools/LICENSE" keywords: [ "institutional repository", "data management", "Invenio", "Invenio-RDM" ] @@ -24,7 +24,7 @@ management", "Invenio", "Invenio-RDM" ] About this software =================== -## irdmtools 0.0.66 +## irdmtools 0.0.67 ### Authors diff --git a/codemeta.json b/codemeta.json index ec5a6f25..ca6c8eb1 100644 --- a/codemeta.json +++ b/codemeta.json @@ -4,10 +4,10 @@ "license": "https://caltechlibrary.github.io/irdmtools/LICENSE", "codeRepository": "https://github.com/caltechlibrary/irdmtools", "dateCreated": "2022-10-27", - "dateRelease": "2024-01-08", + "dateRelease": "2024-01-10", "issueTracker": "https://github.com/caltechlibrary/irdmtools/issues", "name": "irdmtools", - "version": "0.0.66", + "version": "0.0.67", "description": "Tools for working with institutional repositories and data management systems. Current implementation targets Invenio-RDM.", "applicationCategory": "library science", "releaseNotes": "Proof of concept and refinements towards production testing, updated doi2rdm to map book-chapter to publication-section", diff --git a/doi2rdm.1.md b/doi2rdm.1.md index f2f965f7..066f85d8 100644 --- a/doi2rdm.1.md +++ b/doi2rdm.1.md @@ -1,4 +1,4 @@ -%doi2rdm(1) irdmtools user manual | version 0.0.66 927d9ddd +%doi2rdm(1) irdmtools user manual | version 0.0.67 7a0bb421 % R. S. Doiel and Tom Morrell % 2024-01-10 diff --git a/ep3util.1.md b/ep3util.1.md index 1e84b5a5..435d8f37 100644 --- a/ep3util.1.md +++ b/ep3util.1.md @@ -1,4 +1,4 @@ -%ep3util(1) irdmtools user manual | version 0.0.66 927d9ddd +%ep3util(1) irdmtools user manual | version 0.0.67 7a0bb421 % R. S. Doiel and Tom Morrell % 2024-01-10 diff --git a/eprint2rdm.1.md b/eprint2rdm.1.md index 10d4b8f9..151a0f41 100644 --- a/eprint2rdm.1.md +++ b/eprint2rdm.1.md @@ -1,4 +1,4 @@ -%eprint2rdm(1) irdmtools user manual | version 0.0.66 927d9ddd +%eprint2rdm(1) irdmtools user manual | version 0.0.67 7a0bb421 % R. S. Doiel and Tom Morrell % 2024-01-10 diff --git a/eprintrest.1.md b/eprintrest.1.md index 666b724f..dfe9a0aa 100644 --- a/eprintrest.1.md +++ b/eprintrest.1.md @@ -1,4 +1,4 @@ -%eprintrest(1) irdmtools user manual | version 0.0.66 927d9ddd +%eprintrest(1) irdmtools user manual | version 0.0.67 7a0bb421 % R. S. Doiel and Tom Morrell % 2024-01-10 diff --git a/harvest.go b/harvest.go index f67698ce..cb0a3cac 100644 --- a/harvest.go +++ b/harvest.go @@ -76,7 +76,32 @@ func Harvest(cfg *Config, fName string, debug bool) error { } t0 := time.Now() iTime, reportProgress := time.Now(), false - cfg.rl = new(RateLimit) + //fmt.Printf("DEBUG are we using the RDM REST API? %t\n", (cfg.InvenioDbHost == "")) + if cfg.InvenioDbHost == "" { + cfg.rl = new(RateLimit) + } else { + cfg.rl = nil + // Need to open our Postgres connection and defer the closing of it. + if cfg.pgDB == nil { + sslmode := "?sslmode=require" + if strings.HasPrefix(cfg.InvenioDbHost, "localhost") { + sslmode = "?sslmode=disable" + } + connStr := fmt.Sprintf("postgres://%s@%s/%s%s", + cfg.InvenioDbUser, cfg.InvenioDbHost, cfg.RepoID, sslmode) + if cfg.InvenioDbPassword != "" { + connStr = fmt.Sprintf("postgres://%s:%s@%s/%s%s", + cfg.InvenioDbUser, cfg.InvenioDbPassword, cfg.InvenioDbHost, cfg.RepoID, sslmode) + } + db, err := sql.Open("postgres", connStr) + if err != nil { + return err + } + defer db.Close() + cfg.pgDB = db + } + } + //fmt.Printf("DEBUG is cfg.rl nil? %t, is cfg.pgDB nil? %t\n", (cfg.rl == nil), (cfg.pgDB == nil)) for i, id := range recordIds { rec, err := GetRecord(cfg, id, false) if err != nil { @@ -110,8 +135,11 @@ func Harvest(cfg *Config, fName string, debug bool) error { if iTime, reportProgress = CheckWaitInterval(iTime, time.Minute); reportProgress || i == 0 { log.Printf("%s last id %q (%d/%d) %s", cName, id, i, tot, ProgressETA(t0, i, tot)) } - // NOTE: We need to respect rate limits of RDM API - cfg.rl.Throttle(i, tot) + // NOTE: We need to respect rate limits of RDM API if we're using it! + if cfg.rl != nil { + fmt.Println("DEBUG we are throttling API access") + cfg.rl.Throttle(i, tot) + } } log.Printf("%d harvested, %d errors, running time %s", hCnt, eCnt, time.Since(t0).Round(time.Second)) return nil @@ -244,8 +272,6 @@ func HarvestEPrintRecords(cfg *Config, recordIds []int, debug bool) error { if iTime, reportProgress = CheckWaitInterval(iTime, time.Minute); reportProgress || i == 0 { l.Printf("%s last id %q (%d/%d) %s", cName, id, i, tot, ProgressETA(t0, i, tot)) } - // NOTE: We need to respect rate limits of RDM API - //cfg.rl.Throttle(i, tot) } l.Printf("%d harvested, %d errors, running time %s", hCnt, eCnt, time.Since(t0).Round(time.Second)) return nil @@ -316,8 +342,6 @@ func HarvestEPrints(cfg *Config, fName string, debug bool) error { if iTime, reportProgress = CheckWaitInterval(iTime, time.Minute); reportProgress || i == 0 { log.Printf("%s last id %q (%d/%d) %s", cName, id, i, tot, ProgressETA(t0, i, tot)) } - // NOTE: We need to respect rate limits of RDM API - //cfg.rl.Throttle(i, tot) } log.Printf("%d harvested, %d errors, running time %s", hCnt, eCnt, time.Since(t0).Round(time.Second)) return nil diff --git a/installer.sh b/installer.sh index a386d0a0..13b8c4eb 100755 --- a/installer.sh +++ b/installer.sh @@ -4,7 +4,7 @@ # Set the package name and version to install # PACKAGE="irdmtools" -VERSION="0.0.66" +VERSION="0.0.67" GIT_GROUP="caltechlibrary" RELEASE="https://github.com/$GIT_GROUP/$PACKAGE/releases/tag/v$VERSION" diff --git a/invenio_api.go b/invenio_api.go index dd1cf63b..7be3ee4a 100644 --- a/invenio_api.go +++ b/invenio_api.go @@ -937,6 +937,8 @@ WHERE json->>'id' = $1 LIMIT 1;` } // Now we try to add Files.Entries to Record. + // FIXME: this is way too slow +/* stmt = `WITH t AS ( SELECT record_id AS record_id, files_object.key AS key @@ -950,6 +952,16 @@ FROM t JOIN rdm_records_metadata ON (t.record_id = rdm_records_metadata.id) WHERE json->>'id' = $1 ORDER BY key ASC` +*/ + + stmt = `SELECT + (CASE WHEN fd.json->'files'->>'default_preview' = fo.key THEN TRUE else FALSE END) AS is_default_preview, + fo.key AS key +FROM rdm_records_metadata rd +JOIN rdm_records_files fd ON (rd.id = fd.record_id) +JOIN files_object fo ON (fd.key = fo.key) +WHERE rd.json->>'id' = $1 +ORDER BY fo.key ASC` entries, err := db.Query(stmt, rdmID) if err != nil { return nil, err diff --git a/man/man1/doi2rdm.1 b/man/man1/doi2rdm.1 index 31f0b4ca..2c4beef6 100644 --- a/man/man1/doi2rdm.1 +++ b/man/man1/doi2rdm.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11 .\" -.TH "doi2rdm" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 927d9ddd" +.TH "doi2rdm" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.67 7a0bb421" .SH NAME doi2rdm .SH SYNOPSIS diff --git a/man/man1/ep3util.1 b/man/man1/ep3util.1 index 3372f4d5..81e4657d 100644 --- a/man/man1/ep3util.1 +++ b/man/man1/ep3util.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11 .\" -.TH "ep3util" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 927d9ddd" +.TH "ep3util" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.67 7a0bb421" .SH NAME ep3util .SH SYNOPSIS diff --git a/man/man1/eprint2rdm.1 b/man/man1/eprint2rdm.1 index 72a5ee70..88f4cdc8 100644 --- a/man/man1/eprint2rdm.1 +++ b/man/man1/eprint2rdm.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11 .\" -.TH "eprint2rdm" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 927d9ddd" +.TH "eprint2rdm" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.67 7a0bb421" .SH NAME eprint2rdm .SH SYNOPSIS diff --git a/man/man1/eprintrest.1 b/man/man1/eprintrest.1 index bad6319f..f0a7e610 100644 --- a/man/man1/eprintrest.1 +++ b/man/man1/eprintrest.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11 .\" -.TH "eprintrest" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 927d9ddd" +.TH "eprintrest" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.67 7a0bb421" .SH NAME eprintrest .SH SYNOPSIS diff --git a/man/man1/people2vocabulary.1 b/man/man1/people2vocabulary.1 index 32edef21..a9b7d741 100644 --- a/man/man1/people2vocabulary.1 +++ b/man/man1/people2vocabulary.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11 .\" -.TH "people2vocabulary" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 927d9ddd" +.TH "people2vocabulary" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.67 7a0bb421" .SH NAME people2vocabulary .SH SYNOPSIS diff --git a/man/man1/rdm2eprint.1 b/man/man1/rdm2eprint.1 index 63e880b3..97982047 100644 --- a/man/man1/rdm2eprint.1 +++ b/man/man1/rdm2eprint.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11 .\" -.TH "rdm2eprint" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 927d9ddd" +.TH "rdm2eprint" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.67 7a0bb421" .SH NAME rdm2eprint .SH SYNOPSIS diff --git a/man/man1/rdmutil.1 b/man/man1/rdmutil.1 index adb9c2cf..60ee0c4b 100644 --- a/man/man1/rdmutil.1 +++ b/man/man1/rdmutil.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11 .\" -.TH "rdmutil" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.66 927d9ddd" +.TH "rdmutil" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.67 7a0bb421" .SH NAME rdmutil .SH SYNOPSIS diff --git a/people2vocabulary.1.md b/people2vocabulary.1.md index 2affe24a..71512ad1 100644 --- a/people2vocabulary.1.md +++ b/people2vocabulary.1.md @@ -1,4 +1,4 @@ -%people2vocabulary(1) irdmtools user manual | version 0.0.66 927d9ddd +%people2vocabulary(1) irdmtools user manual | version 0.0.67 7a0bb421 % R. S. Doiel % 2024-01-10 diff --git a/rdm2eprint.1.md b/rdm2eprint.1.md index ff161241..6abcd3d7 100644 --- a/rdm2eprint.1.md +++ b/rdm2eprint.1.md @@ -1,4 +1,4 @@ -%rdm2eprint(1) irdmtools user manual | version 0.0.66 927d9ddd +%rdm2eprint(1) irdmtools user manual | version 0.0.67 7a0bb421 % R. S. Doiel and Tom Morrell % 2024-01-10 diff --git a/rdmutil.1.md b/rdmutil.1.md index 4986da38..1a7663c6 100644 --- a/rdmutil.1.md +++ b/rdmutil.1.md @@ -1,4 +1,4 @@ -%rdmutil(1) irdmtools user manual | version 0.0.66 927d9ddd +%rdmutil(1) irdmtools user manual | version 0.0.67 7a0bb421 % R. S. Doiel and Tom Morrell % 2024-01-10 diff --git a/version.go b/version.go index 302d68ad..f7778f65 100644 --- a/version.go +++ b/version.go @@ -6,13 +6,13 @@ import ( const ( // Version number of release - Version = "0.0.66" + Version = "0.0.67" // ReleaseDate, the date version.go was generated ReleaseDate = "2024-01-10" // ReleaseHash, the Git hash when version.go was generated - ReleaseHash = "927d9ddd" + ReleaseHash = "7a0bb421" LicenseText = ` Redistribution and use in source and binary forms, with or without From 9489d768209c8195b228ef937b9afc500bfb09dd Mon Sep 17 00:00:00 2001 From: "R. S. Doiel" Date: Thu, 11 Jan 2024 11:58:39 -0800 Subject: [PATCH 05/15] fix: error where itemList with one items had extra value --- TODO.md | 3 ++- doi2rdm.1.md | 4 +-- ep3sql.go | 33 +++++++++++++++++++++--- ep3util.1.md | 4 +-- eprint2rdm.1.md | 4 +-- eprintrest.1.md | 4 +-- go.mod | 8 +++--- go.sum | 10 +++++++ man/man1/doi2rdm.1 | 4 +-- man/man1/ep3util.1 | 4 +-- man/man1/eprint2rdm.1 | 4 +-- man/man1/eprintrest.1 | 4 +-- man/man1/migrate_record.py.1 | 2 +- man/man1/migrate_records_to_dataset.py.1 | 2 +- man/man1/people2vocabulary.1 | 4 +-- man/man1/rdm2eprint.1 | 4 +-- man/man1/rdmutil.1 | 4 +-- people2vocabulary.1.md | 4 +-- rdm2eprint.1.md | 4 +-- rdmutil.1.md | 4 +-- version.go | 4 +-- 21 files changed, 78 insertions(+), 40 deletions(-) diff --git a/TODO.md b/TODO.md index 8f60ce31..09d84059 100644 --- a/TODO.md +++ b/TODO.md @@ -5,7 +5,8 @@ Action Items Bugs ---- -- [ ] progress.go is producing non-sensical estamates of the time remaining, need to review my math +- [ ] Local group items are including an empty "{}" as an entry when retrieved with ep3util (e.g. thesis repository, ep3util get_record 7320) +- [x] progress.go is producing non-sensical estamates of the time remaining, need to review my math (this was a really bad SQL query on my part) - [ ] eprint2rdm missing metadata attributes - [x] journal related fields (e.g. journal:journal) in custom fields - [ ] thesis related fields diff --git a/doi2rdm.1.md b/doi2rdm.1.md index 066f85d8..eb8a950a 100644 --- a/doi2rdm.1.md +++ b/doi2rdm.1.md @@ -1,6 +1,6 @@ -%doi2rdm(1) irdmtools user manual | version 0.0.67 7a0bb421 +%doi2rdm(1) irdmtools user manual | version 0.0.67 db5955de % R. S. Doiel and Tom Morrell -% 2024-01-10 +% 2024-01-11 # NAME diff --git a/ep3sql.go b/ep3sql.go index c7406ea2..72dced50 100644 --- a/ep3sql.go +++ b/ep3sql.go @@ -7,6 +7,7 @@ import ( "database/sql" "fmt" "log" + "os" "strings" "time" @@ -1494,8 +1495,20 @@ func makeDirValue(ID int) string { return fmt.Sprintf(`disk0/%s`, strings.TrimSuffix(pairtree.Encode(fmt.Sprintf("%08d", ID)), "/")) } +// resizeItemList requires a non-nil itemList, NOTE: it can't create it since itemList is an interface. func resizeItemList(pos int, itemList eprinttools.ItemsInterface) { - if (pos >= 0) && (pos >= itemList.Length()) { + if pos == 0 && itemList.Length() == 0 { + itemList.Init() + if itemList.Length() == 0 { + item := itemList.IndexOf(0) + if item == nil { + item := new(eprinttools.Item) + itemList.Append(item) + } + } + } + if (pos > 0) && (pos >= itemList.Length()) { + // FIXME: I'm getting an exta element when appending to length zero for j := itemList.Length(); j <= (pos + 1); j++ { item := new(eprinttools.Item) itemList.Append(item) @@ -1656,7 +1669,6 @@ func eprintIDToThesisCommittee(eprintID int, db *sql.DB, tables map[string][]str /* * SimpleItemList model */ - func eprintIDToSimpleItemList(db *sql.DB, tables map[string][]string, eprintID int, tableName string, itemList eprinttools.ItemsInterface) int { columnName := strings.TrimPrefix(tableName, `eprint_`) var ( @@ -1675,13 +1687,22 @@ func eprintIDToSimpleItemList(db *sql.DB, tables map[string][]string, eprintID i if err := rows.Scan(&pos, &value); err != nil { log.Printf("Could not scan %s for %d, %s", tableName, eprintID, err) } else { + // DEBUG ON + if tableName == "eprint_local_group" { + fmt.Fprintf(os.Stderr, "DEBUG itemList.Length() -> %d, pos -> %d, value -> %s\n", itemList.Length(), pos, value) + } + // DEBUG OFF if value != "" { resizeItemList(pos, itemList) + // DEBUG ON + if tableName == "eprint_local_group" { + fmt.Fprintf(os.Stderr, "DEBUG itemList.Length() now %d\n", itemList.Length()) + } + // DEBUG OFF if item := itemList.IndexOf(pos); item != nil { item.Pos = pos item.Value = value } else { - log.Printf("Failed to resize item major/minor list (table: %s, eprintID: %d) scanned pos: %d, value: %q itemList.Length() %d -> %+v\n", tableName, eprintID, pos, value, itemList.Length(), item) } } @@ -1691,6 +1712,12 @@ func eprintIDToSimpleItemList(db *sql.DB, tables map[string][]string, eprintID i rows.Close() } } + // DEBUG ON + if tableName == "eprint_local_group" { + l := itemList.Length() + fmt.Fprintf(os.Stderr, "DEBUG length %d, itemList -> %+v\n", l, itemList.IndexOf(l-1)) + } + // DEBUG OFF return itemList.Length() } diff --git a/ep3util.1.md b/ep3util.1.md index 435d8f37..2908079b 100644 --- a/ep3util.1.md +++ b/ep3util.1.md @@ -1,6 +1,6 @@ -%ep3util(1) irdmtools user manual | version 0.0.67 7a0bb421 +%ep3util(1) irdmtools user manual | version 0.0.67 db5955de % R. S. Doiel and Tom Morrell -% 2024-01-10 +% 2024-01-11 # NAME diff --git a/eprint2rdm.1.md b/eprint2rdm.1.md index 151a0f41..c6228410 100644 --- a/eprint2rdm.1.md +++ b/eprint2rdm.1.md @@ -1,6 +1,6 @@ -%eprint2rdm(1) irdmtools user manual | version 0.0.67 7a0bb421 +%eprint2rdm(1) irdmtools user manual | version 0.0.67 db5955de % R. S. Doiel and Tom Morrell -% 2024-01-10 +% 2024-01-11 # NAME diff --git a/eprintrest.1.md b/eprintrest.1.md index dfe9a0aa..0700ea49 100644 --- a/eprintrest.1.md +++ b/eprintrest.1.md @@ -1,6 +1,6 @@ -%eprintrest(1) irdmtools user manual | version 0.0.67 7a0bb421 +%eprintrest(1) irdmtools user manual | version 0.0.67 db5955de % R. S. Doiel and Tom Morrell -% 2024-01-10 +% 2024-01-11 # NAME diff --git a/go.mod b/go.mod index 50caf3b6..61b5c60e 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/caltechlibrary/crossrefapi v1.0.6 github.com/caltechlibrary/dataciteapi v1.0.1 github.com/caltechlibrary/dataset/v2 v2.1.8 - github.com/caltechlibrary/eprinttools v1.3.6 + github.com/caltechlibrary/eprinttools v1.3.7-0.20240111193740-208de7f3f863 github.com/caltechlibrary/pairtree v1.0.2 github.com/caltechlibrary/simplified v0.0.23-0.20231114231003-718cd0a30ee5 github.com/go-sql-driver/mysql v1.7.1 @@ -23,9 +23,9 @@ require ( github.com/google/uuid v1.3.0 // indirect github.com/mattn/go-isatty v0.0.14 // indirect github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect - golang.org/x/crypto v0.11.0 // indirect - golang.org/x/sys v0.10.0 // indirect - golang.org/x/term v0.10.0 // indirect + golang.org/x/crypto v0.17.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/term v0.15.0 // indirect modernc.org/libc v1.16.19 // indirect modernc.org/mathutil v1.4.1 // indirect modernc.org/memory v1.1.1 // indirect diff --git a/go.sum b/go.sum index 63ef3164..3cfb0142 100644 --- a/go.sum +++ b/go.sum @@ -12,6 +12,10 @@ github.com/caltechlibrary/dsv1 v0.0.0-20220817192039-7c2741c5699d h1:SGz3rTkjsp/ github.com/caltechlibrary/dsv1 v0.0.0-20220817192039-7c2741c5699d/go.mod h1:ajUo9ZOowgXjLfDXeUdMmJit9CZyHUzgaPIHUh9TBcg= github.com/caltechlibrary/eprinttools v1.3.6 h1:uhfvyDvY+paRlU56SWWix8viLEKAqZSl5ZYtTxFpFCI= github.com/caltechlibrary/eprinttools v1.3.6/go.mod h1:5qi6bfj5hmTBiNjlM7g539+NwxNJWNrj6wzCp1xCmlI= +github.com/caltechlibrary/eprinttools v1.3.7-0.20240111185310-37e62dc06599 h1:jXjDyL2dEAo95rzK8BPMfAhcfD1MtVH8+AypAidcmEE= +github.com/caltechlibrary/eprinttools v1.3.7-0.20240111185310-37e62dc06599/go.mod h1:iLGUXTfOrOm3P9SVzxIME0cqcOyy+oJzNBxjLNukavg= +github.com/caltechlibrary/eprinttools v1.3.7-0.20240111193740-208de7f3f863 h1:qWPvJvYb+/gHYk5ya5RTx4PQcLYUi0qGhLG+tcJwtfQ= +github.com/caltechlibrary/eprinttools v1.3.7-0.20240111193740-208de7f3f863/go.mod h1:iLGUXTfOrOm3P9SVzxIME0cqcOyy+oJzNBxjLNukavg= github.com/caltechlibrary/pairtree v1.0.2 h1:zcsFibPW7tBvjOvbxHzkE1CIPm0BxUCfQrLCa+bB5qc= github.com/caltechlibrary/pairtree v1.0.2/go.mod h1:VZdWqmXgJ+tMxM37n/W+CjS8CQVPus+0ReFdRL10AS4= github.com/caltechlibrary/semver v0.0.0-20220817184719-a504da2d5c6a h1:3q6ct6FfFDF2dEiW06Ran7iEOZ4d9HBiMbkqJUOO2oU= @@ -44,6 +48,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -59,8 +65,12 @@ golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/man/man1/doi2rdm.1 b/man/man1/doi2rdm.1 index 2c4beef6..eb23843f 100644 --- a/man/man1/doi2rdm.1 +++ b/man/man1/doi2rdm.1 @@ -1,6 +1,6 @@ -.\" Automatically generated by Pandoc 3.1.11 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "doi2rdm" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.67 7a0bb421" +.TH "doi2rdm" "1" "2024\-01\-11" "irdmtools user manual" "version 0.0.67 db5955de" .SH NAME doi2rdm .SH SYNOPSIS diff --git a/man/man1/ep3util.1 b/man/man1/ep3util.1 index 81e4657d..9596f0b0 100644 --- a/man/man1/ep3util.1 +++ b/man/man1/ep3util.1 @@ -1,6 +1,6 @@ -.\" Automatically generated by Pandoc 3.1.11 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "ep3util" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.67 7a0bb421" +.TH "ep3util" "1" "2024\-01\-11" "irdmtools user manual" "version 0.0.67 db5955de" .SH NAME ep3util .SH SYNOPSIS diff --git a/man/man1/eprint2rdm.1 b/man/man1/eprint2rdm.1 index 88f4cdc8..22f9542e 100644 --- a/man/man1/eprint2rdm.1 +++ b/man/man1/eprint2rdm.1 @@ -1,6 +1,6 @@ -.\" Automatically generated by Pandoc 3.1.11 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "eprint2rdm" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.67 7a0bb421" +.TH "eprint2rdm" "1" "2024\-01\-11" "irdmtools user manual" "version 0.0.67 db5955de" .SH NAME eprint2rdm .SH SYNOPSIS diff --git a/man/man1/eprintrest.1 b/man/man1/eprintrest.1 index f0a7e610..0266428c 100644 --- a/man/man1/eprintrest.1 +++ b/man/man1/eprintrest.1 @@ -1,6 +1,6 @@ -.\" Automatically generated by Pandoc 3.1.11 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "eprintrest" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.67 7a0bb421" +.TH "eprintrest" "1" "2024\-01\-11" "irdmtools user manual" "version 0.0.67 db5955de" .SH NAME eprintrest .SH SYNOPSIS diff --git a/man/man1/migrate_record.py.1 b/man/man1/migrate_record.py.1 index 7944465e..5f15b5d0 100644 --- a/man/man1/migrate_record.py.1 +++ b/man/man1/migrate_record.py.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pandoc 3.1.11 +.\" Automatically generated by Pandoc 3.1.11.1 .\" .TH "migrate_record.py (1) user manual" "" "" "" "" .SH NAME diff --git a/man/man1/migrate_records_to_dataset.py.1 b/man/man1/migrate_records_to_dataset.py.1 index adbd1659..d1f7cf8a 100644 --- a/man/man1/migrate_records_to_dataset.py.1 +++ b/man/man1/migrate_records_to_dataset.py.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pandoc 3.1.11 +.\" Automatically generated by Pandoc 3.1.11.1 .\" .TH "migrate_records.py (1) user manual" "" "" "" "" .SH NAME diff --git a/man/man1/people2vocabulary.1 b/man/man1/people2vocabulary.1 index a9b7d741..d6814283 100644 --- a/man/man1/people2vocabulary.1 +++ b/man/man1/people2vocabulary.1 @@ -1,6 +1,6 @@ -.\" Automatically generated by Pandoc 3.1.11 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "people2vocabulary" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.67 7a0bb421" +.TH "people2vocabulary" "1" "2024\-01\-11" "irdmtools user manual" "version 0.0.67 db5955de" .SH NAME people2vocabulary .SH SYNOPSIS diff --git a/man/man1/rdm2eprint.1 b/man/man1/rdm2eprint.1 index 97982047..eb46408e 100644 --- a/man/man1/rdm2eprint.1 +++ b/man/man1/rdm2eprint.1 @@ -1,6 +1,6 @@ -.\" Automatically generated by Pandoc 3.1.11 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "rdm2eprint" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.67 7a0bb421" +.TH "rdm2eprint" "1" "2024\-01\-11" "irdmtools user manual" "version 0.0.67 db5955de" .SH NAME rdm2eprint .SH SYNOPSIS diff --git a/man/man1/rdmutil.1 b/man/man1/rdmutil.1 index 60ee0c4b..5f0ebcd8 100644 --- a/man/man1/rdmutil.1 +++ b/man/man1/rdmutil.1 @@ -1,6 +1,6 @@ -.\" Automatically generated by Pandoc 3.1.11 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "rdmutil" "1" "2024\-01\-10" "irdmtools user manual" "version 0.0.67 7a0bb421" +.TH "rdmutil" "1" "2024\-01\-11" "irdmtools user manual" "version 0.0.67 db5955de" .SH NAME rdmutil .SH SYNOPSIS diff --git a/people2vocabulary.1.md b/people2vocabulary.1.md index 71512ad1..fce68c48 100644 --- a/people2vocabulary.1.md +++ b/people2vocabulary.1.md @@ -1,6 +1,6 @@ -%people2vocabulary(1) irdmtools user manual | version 0.0.67 7a0bb421 +%people2vocabulary(1) irdmtools user manual | version 0.0.67 db5955de % R. S. Doiel -% 2024-01-10 +% 2024-01-11 # NAME diff --git a/rdm2eprint.1.md b/rdm2eprint.1.md index 6abcd3d7..1443a752 100644 --- a/rdm2eprint.1.md +++ b/rdm2eprint.1.md @@ -1,6 +1,6 @@ -%rdm2eprint(1) irdmtools user manual | version 0.0.67 7a0bb421 +%rdm2eprint(1) irdmtools user manual | version 0.0.67 db5955de % R. S. Doiel and Tom Morrell -% 2024-01-10 +% 2024-01-11 # NAME diff --git a/rdmutil.1.md b/rdmutil.1.md index 1a7663c6..92f65921 100644 --- a/rdmutil.1.md +++ b/rdmutil.1.md @@ -1,6 +1,6 @@ -%rdmutil(1) irdmtools user manual | version 0.0.67 7a0bb421 +%rdmutil(1) irdmtools user manual | version 0.0.67 db5955de % R. S. Doiel and Tom Morrell -% 2024-01-10 +% 2024-01-11 # NAME diff --git a/version.go b/version.go index f7778f65..8f5e0a24 100644 --- a/version.go +++ b/version.go @@ -9,10 +9,10 @@ const ( Version = "0.0.67" // ReleaseDate, the date version.go was generated - ReleaseDate = "2024-01-10" + ReleaseDate = "2024-01-11" // ReleaseHash, the Git hash when version.go was generated - ReleaseHash = "7a0bb421" + ReleaseHash = "db5955de" LicenseText = ` Redistribution and use in source and binary forms, with or without From 77cb3494230705cc7fd40c1a99353669b9a25329 Mon Sep 17 00:00:00 2001 From: "R. S. Doiel" Date: Fri, 12 Jan 2024 15:04:11 -0800 Subject: [PATCH 06/15] Quick Save --- TODO.html | 9 ++- about.html | 2 +- doi2rdm.1.md | 4 +- ep3sql.go | 72 +++++++++++------- ep3util.1.md | 4 +- eprint2rdm.1.md | 4 +- eprintrest.1.md | 4 +- man/man1/doi2rdm.1 | 2 +- man/man1/ep3util.1 | 2 +- man/man1/eprint2rdm.1 | 2 +- man/man1/eprintrest.1 | 2 +- man/man1/people2vocabulary.1 | 2 +- man/man1/rdm2eprint.1 | 2 +- man/man1/rdmutil.1 | 2 +- pagefind/fragment/unknown_a043e3f.pf_fragment | Bin 0 -> 593 bytes pagefind/index/unknown_c1b4e54.pf_index | Bin 0 -> 24435 bytes pagefind/pagefind-entry.json | 2 +- .../pagefind.unknown_953adf1780decdc.pf_meta | Bin 0 -> 245 bytes people2vocabulary.1.md | 4 +- rdm2eprint.1.md | 4 +- rdmutil.1.md | 4 +- version.go | 4 +- 22 files changed, 74 insertions(+), 57 deletions(-) create mode 100644 pagefind/fragment/unknown_a043e3f.pf_fragment create mode 100644 pagefind/index/unknown_c1b4e54.pf_index create mode 100644 pagefind/pagefind.unknown_953adf1780decdc.pf_meta diff --git a/TODO.html b/TODO.html index 52e7df68..f404dd78 100644 --- a/TODO.html +++ b/TODO.html @@ -26,9 +26,12 @@

Action Items

Bugs

    -
  • +
  • +
    • diff --git a/about.html b/about.html index d884939b..03eb6e0b 100644 --- a/about.html +++ b/about.html @@ -24,7 +24,7 @@

      About this software

      -

      irdmtools 0.0.66

      +

      irdmtools 0.0.67

      Authors

      • R. S. Doiel
      • diff --git a/doi2rdm.1.md b/doi2rdm.1.md index eb8a950a..d3068f37 100644 --- a/doi2rdm.1.md +++ b/doi2rdm.1.md @@ -1,6 +1,6 @@ -%doi2rdm(1) irdmtools user manual | version 0.0.67 db5955de +%doi2rdm(1) irdmtools user manual | version 0.0.67 9489d768 % R. S. Doiel and Tom Morrell -% 2024-01-11 +% 2024-01-12 # NAME diff --git a/ep3sql.go b/ep3sql.go index 72dced50..fc43b994 100644 --- a/ep3sql.go +++ b/ep3sql.go @@ -7,7 +7,6 @@ import ( "database/sql" "fmt" "log" - "os" "strings" "time" @@ -1294,6 +1293,7 @@ func documentIDToRelation(baseURL string, documentID int, pos int, db *sql.DB, t if okTypeTable && okUriTable { itemList := new(eprinttools.RelationItemList) + itemList.Items = []*eprinttools.Item{} stmt := fmt.Sprintf(`SELECT document_relation_type.pos AS pos, document_relation_type.relation_type, document_relation_uri.relation_uri FROM %s JOIN %s ON ((%s.docid = %s.docid) AND (%s.pos = %s.pos)) WHERE (%s.docid = ?)`, typeTable, uriTable, typeTable, uriTable, typeTable, uriTable, typeTable) rows, err := db.Query(stmt, documentID) if err != nil { @@ -1392,7 +1392,6 @@ func eprintIDToDocumentList(baseURL string, eprintID int, db *sql.DB, tables map /* * Common models and help functions */ - func makePersonName(given string, family string, honourific string, lineage string) *eprinttools.Name { name := new(eprinttools.Name) isFlat := true @@ -1497,19 +1496,20 @@ func makeDirValue(ID int) string { // resizeItemList requires a non-nil itemList, NOTE: it can't create it since itemList is an interface. func resizeItemList(pos int, itemList eprinttools.ItemsInterface) { - if pos == 0 && itemList.Length() == 0 { - itemList.Init() - if itemList.Length() == 0 { - item := itemList.IndexOf(0) - if item == nil { - item := new(eprinttools.Item) - itemList.Append(item) - } + // NOTE: Zero is a special case because of how I implemented eprinttools ItemsIterface.Length(). + // I didn't make the distinction between an empty list and a list with a zero-th element. + if pos == 0 { + // Check to see if there is space for the zero-ith element allocated + item := itemList.IndexOf(0) + if item == nil { + // We need to add an empty element to provide space. + item := new(eprinttools.Item) + itemList.Append(item) } + return } - if (pos > 0) && (pos >= itemList.Length()) { - // FIXME: I'm getting an exta element when appending to length zero - for j := itemList.Length(); j <= (pos + 1); j++ { + if (pos >= itemList.Length()) { + for j := itemList.Length(); j <= pos; j++ { item := new(eprinttools.Item) itemList.Append(item) } @@ -1588,6 +1588,7 @@ func eprintIDToPersonItemList(db *sql.DB, tables map[string][]string, eprintID i func eprintIDToCreators(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.CreatorItemList { tablePrefix := `eprint_creators` itemList := new(eprinttools.CreatorItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToPersonItemList(db, tables, eprintID, tablePrefix, itemList); count > 0 { return itemList } @@ -1597,6 +1598,7 @@ func eprintIDToCreators(eprintID int, db *sql.DB, tables map[string][]string) *e func eprintIDToEditors(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.EditorItemList { tablePrefix := `eprint_editors` itemList := new(eprinttools.EditorItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToPersonItemList(db, tables, eprintID, tablePrefix, itemList); count > 0 { return itemList } @@ -1606,6 +1608,7 @@ func eprintIDToEditors(eprintID int, db *sql.DB, tables map[string][]string) *ep func eprintIDToContributors(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.ContributorItemList { tablePrefix := `eprint_contributors` itemList := new(eprinttools.ContributorItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToPersonItemList(db, tables, eprintID, tablePrefix, itemList); count > 0 { return itemList } @@ -1615,6 +1618,7 @@ func eprintIDToContributors(eprintID int, db *sql.DB, tables map[string][]string func eprintIDToExhibitors(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.ExhibitorItemList { tablePrefix := `eprint_exhibitors` itemList := new(eprinttools.ExhibitorItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToPersonItemList(db, tables, eprintID, tablePrefix, itemList); count > 0 { return itemList } @@ -1624,6 +1628,7 @@ func eprintIDToExhibitors(eprintID int, db *sql.DB, tables map[string][]string) func eprintIDToProducers(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.ProducerItemList { tablePrefix := `eprint_producers` itemList := new(eprinttools.ProducerItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToPersonItemList(db, tables, eprintID, tablePrefix, itemList); count > 0 { return itemList } @@ -1633,6 +1638,7 @@ func eprintIDToProducers(eprintID int, db *sql.DB, tables map[string][]string) * func eprintIDToConductors(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.ConductorItemList { tablePrefix := `eprint_conductors` itemList := new(eprinttools.ConductorItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToPersonItemList(db, tables, eprintID, tablePrefix, itemList); count > 0 { return itemList } @@ -1642,6 +1648,7 @@ func eprintIDToConductors(eprintID int, db *sql.DB, tables map[string][]string) func eprintIDToLyricists(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.LyricistItemList { tablePrefix := `eprint_lyricists` itemList := new(eprinttools.LyricistItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToPersonItemList(db, tables, eprintID, tablePrefix, itemList); count > 0 { return itemList } @@ -1651,6 +1658,7 @@ func eprintIDToLyricists(eprintID int, db *sql.DB, tables map[string][]string) * func eprintIDToThesisAdvisors(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.ThesisAdvisorItemList { tablePrefix := `eprint_thesis_advisor` itemList := new(eprinttools.ThesisAdvisorItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToPersonItemList(db, tables, eprintID, tablePrefix, itemList); count > 0 { return itemList } @@ -1660,6 +1668,7 @@ func eprintIDToThesisAdvisors(eprintID int, db *sql.DB, tables map[string][]stri func eprintIDToThesisCommittee(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.ThesisCommitteeItemList { tablePrefix := `eprint_thesis_committee` itemList := new(eprinttools.ThesisCommitteeItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToPersonItemList(db, tables, eprintID, tablePrefix, itemList); count > 0 { return itemList } @@ -1687,18 +1696,8 @@ func eprintIDToSimpleItemList(db *sql.DB, tables map[string][]string, eprintID i if err := rows.Scan(&pos, &value); err != nil { log.Printf("Could not scan %s for %d, %s", tableName, eprintID, err) } else { - // DEBUG ON - if tableName == "eprint_local_group" { - fmt.Fprintf(os.Stderr, "DEBUG itemList.Length() -> %d, pos -> %d, value -> %s\n", itemList.Length(), pos, value) - } - // DEBUG OFF if value != "" { resizeItemList(pos, itemList) - // DEBUG ON - if tableName == "eprint_local_group" { - fmt.Fprintf(os.Stderr, "DEBUG itemList.Length() now %d\n", itemList.Length()) - } - // DEBUG OFF if item := itemList.IndexOf(pos); item != nil { item.Pos = pos item.Value = value @@ -1712,18 +1711,13 @@ func eprintIDToSimpleItemList(db *sql.DB, tables map[string][]string, eprintID i rows.Close() } } - // DEBUG ON - if tableName == "eprint_local_group" { - l := itemList.Length() - fmt.Fprintf(os.Stderr, "DEBUG length %d, itemList -> %+v\n", l, itemList.IndexOf(l-1)) - } - // DEBUG OFF return itemList.Length() } func eprintIDToLocalGroup(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.LocalGroupItemList { tableName := `eprint_local_group` itemList := new(eprinttools.LocalGroupItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToSimpleItemList(db, tables, eprintID, tableName, itemList); count > 0 { return itemList } @@ -1733,6 +1727,7 @@ func eprintIDToLocalGroup(eprintID int, db *sql.DB, tables map[string][]string) func eprintIDToReferenceText(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.ReferenceTextItemList { tableName := `eprint_referencetext` itemList := new(eprinttools.ReferenceTextItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToSimpleItemList(db, tables, eprintID, tableName, itemList); count > 0 { return itemList } @@ -1742,6 +1737,7 @@ func eprintIDToReferenceText(eprintID int, db *sql.DB, tables map[string][]strin func eprintIDToProjects(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.ProjectItemList { tableName := `eprint_projects` itemList := new(eprinttools.ProjectItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToSimpleItemList(db, tables, eprintID, tableName, itemList); count > 0 { return itemList } @@ -1751,6 +1747,7 @@ func eprintIDToProjects(eprintID int, db *sql.DB, tables map[string][]string) *e func eprintIDToSubjects(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.SubjectItemList { tableName := `eprint_subjects` itemList := new(eprinttools.SubjectItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToSimpleItemList(db, tables, eprintID, tableName, itemList); count > 0 { return itemList } @@ -1760,6 +1757,7 @@ func eprintIDToSubjects(eprintID int, db *sql.DB, tables map[string][]string) *e func eprintIDToAccompaniment(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.AccompanimentItemList { tableName := `eprint_accompaniment` itemList := new(eprinttools.AccompanimentItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToSimpleItemList(db, tables, eprintID, tableName, itemList); count > 0 { return itemList } @@ -1769,6 +1767,7 @@ func eprintIDToAccompaniment(eprintID int, db *sql.DB, tables map[string][]strin func eprintIDToSkillAreas(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.SkillAreaItemList { tableName := `eprint_skill_areas` itemList := new(eprinttools.SkillAreaItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToSimpleItemList(db, tables, eprintID, tableName, itemList); count > 0 { return itemList } @@ -1778,6 +1777,7 @@ func eprintIDToSkillAreas(eprintID int, db *sql.DB, tables map[string][]string) func eprintIDToCopyrightHolders(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.CopyrightHolderItemList { tableName := `eprint_copyright_holders` itemList := new(eprinttools.CopyrightHolderItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToSimpleItemList(db, tables, eprintID, tableName, itemList); count > 0 { return itemList } @@ -1787,6 +1787,7 @@ func eprintIDToCopyrightHolders(eprintID int, db *sql.DB, tables map[string][]st func eprintIDToReference(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.ReferenceItemList { tableName := `eprint_reference` itemList := new(eprinttools.ReferenceItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToSimpleItemList(db, tables, eprintID, tableName, itemList); count > 0 { return itemList } @@ -1796,6 +1797,7 @@ func eprintIDToReference(eprintID int, db *sql.DB, tables map[string][]string) * func eprintIDToAltTitle(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.AltTitleItemList { tableName := `eprint_alt_title` itemList := new(eprinttools.AltTitleItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToSimpleItemList(db, tables, eprintID, tableName, itemList); count > 0 { return itemList } @@ -1805,6 +1807,7 @@ func eprintIDToAltTitle(eprintID int, db *sql.DB, tables map[string][]string) *e func eprintIDToPatentAssignee(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.PatentAssigneeItemList { tableName := `eprint_patent_assignee` itemList := new(eprinttools.PatentAssigneeItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToSimpleItemList(db, tables, eprintID, tableName, itemList); count > 0 { return itemList } @@ -1814,6 +1817,7 @@ func eprintIDToPatentAssignee(eprintID int, db *sql.DB, tables map[string][]stri func eprintIDToRelatedPatents(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.RelatedPatentItemList { tableName := `eprint_related_patents` itemList := new(eprinttools.RelatedPatentItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToSimpleItemList(db, tables, eprintID, tableName, itemList); count > 0 { return itemList } @@ -1823,6 +1827,7 @@ func eprintIDToRelatedPatents(eprintID int, db *sql.DB, tables map[string][]stri func eprintIDToDivisions(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.DivisionItemList { tableName := `eprint_divisions` itemList := new(eprinttools.DivisionItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToSimpleItemList(db, tables, eprintID, tableName, itemList); count > 0 { return itemList } @@ -1832,6 +1837,7 @@ func eprintIDToDivisions(eprintID int, db *sql.DB, tables map[string][]string) * func eprintIDToOptionMajor(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.OptionMajorItemList { tableName := `eprint_option_major` itemList := new(eprinttools.OptionMajorItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToSimpleItemList(db, tables, eprintID, tableName, itemList); count > 0 { return itemList } @@ -1841,6 +1847,7 @@ func eprintIDToOptionMajor(eprintID int, db *sql.DB, tables map[string][]string) func eprintIDToOptionMinor(eprintID int, db *sql.DB, tables map[string][]string) *eprinttools.OptionMinorItemList { tableName := `eprint_option_minor` itemList := new(eprinttools.OptionMinorItemList) + itemList.Items = []*eprinttools.Item{} if count := eprintIDToSimpleItemList(db, tables, eprintID, tableName, itemList); count > 0 { return itemList } @@ -1861,6 +1868,7 @@ func eprintIDToConfCreators(eprintID int, db *sql.DB, tables map[string][]string _, ok := tables[tableName] if ok { itemList := new(eprinttools.ConfCreatorItemList) + itemList.Items = []*eprinttools.Item{} stmt := fmt.Sprintf(`SELECT pos, IFNULL(%s, '') AS %s FROM %s WHERE eprintid = ? ORDER BY eprintid, pos`, columnName, columnName, tableName) rows, err := db.Query(stmt, eprintID) @@ -1938,6 +1946,7 @@ func eprintIDToCorpCreators(eprintID int, db *sql.DB, tables map[string][]string value string ) itemList := new(eprinttools.CorpCreatorItemList) + itemList.Items = []*eprinttools.Item{} tableName := `eprint_corp_creators_name` columnName := `corp_creators_name` _, ok := tables[tableName] @@ -2016,6 +2025,7 @@ func eprintIDToCorpContributors(eprintID int, db *sql.DB, tables map[string][]st value string ) itemList := new(eprinttools.CorpContributorItemList) + itemList.Items = []*eprinttools.Item{} tableName := `eprint_corp_contributors_name` columnName := `corp_contributors_name` _, ok := tables[tableName] @@ -2099,6 +2109,7 @@ func eprintIDToFunders(eprintID int, db *sql.DB, tables map[string][]string) *ep if ok { // eprint_%_id is a known structure. eprintid, pos, contributors_id itemList := new(eprinttools.FunderItemList) + itemList.Items = []*eprinttools.Item{} stmt := fmt.Sprintf(`SELECT pos, IFNULL(%s, '') AS %s FROM %s WHERE eprintid = ? ORDER BY eprintid, pos`, columnName, columnName, tableName) rows, err := db.Query(stmt, eprintID) if err != nil { @@ -2171,6 +2182,7 @@ func eprintIDToRelatedURL(baseURL string, eprintID int, db *sql.DB, tables map[s "eprint_related_url_description": "related_url_description", } itemList := new(eprinttools.RelatedURLItemList) + itemList.Items = []*eprinttools.Item{} for tableName, columnName := range tablesAndColumns { if _, ok := tables[tableName]; ok { stmt := fmt.Sprintf(`SELECT pos, IFNULL(%s, "") AS %s FROM %s WHERE eprintid = ? ORDER BY eprintid, pos`, columnName, columnName, tableName) @@ -2224,6 +2236,7 @@ func eprintIDToOtherNumberingSystem(eprintID int, db *sql.DB, tables map[string] } if ok { itemList := new(eprinttools.OtherNumberingSystemItemList) + itemList.Items = []*eprinttools.Item{} stmt := fmt.Sprintf(` SELECT %s.pos AS pos, IFNULL(other_numbering_system_name, '') AS name, IFNULL(other_numbering_system_id, '') AS systemid FROM %s JOIN %s ON (%s.eprintid = %s.eprintid AND %s.pos = %s.pos) WHERE %s.eprintid = ?`, tableNames[0], tableNames[0], tableNames[1], tableNames[0], tableNames[1], tableNames[0], tableNames[1], tableNames[0]) rows, err := db.Query(stmt, eprintID) @@ -2268,6 +2281,7 @@ func eprintIDToItemIssues(eprintID int, db *sql.DB, tables map[string][]string) value string ) itemList := new(eprinttools.ItemIssueItemList) + itemList.Items = []*eprinttools.Item{} stmt := fmt.Sprintf(`SELECT pos, IFNULL(item_issues_timestamp_year, 0) AS year, IFNULL(item_issues_timestamp_month, 0) AS month, diff --git a/ep3util.1.md b/ep3util.1.md index 2908079b..7e82ec43 100644 --- a/ep3util.1.md +++ b/ep3util.1.md @@ -1,6 +1,6 @@ -%ep3util(1) irdmtools user manual | version 0.0.67 db5955de +%ep3util(1) irdmtools user manual | version 0.0.67 9489d768 % R. S. Doiel and Tom Morrell -% 2024-01-11 +% 2024-01-12 # NAME diff --git a/eprint2rdm.1.md b/eprint2rdm.1.md index c6228410..0d449226 100644 --- a/eprint2rdm.1.md +++ b/eprint2rdm.1.md @@ -1,6 +1,6 @@ -%eprint2rdm(1) irdmtools user manual | version 0.0.67 db5955de +%eprint2rdm(1) irdmtools user manual | version 0.0.67 9489d768 % R. S. Doiel and Tom Morrell -% 2024-01-11 +% 2024-01-12 # NAME diff --git a/eprintrest.1.md b/eprintrest.1.md index 0700ea49..dd65f634 100644 --- a/eprintrest.1.md +++ b/eprintrest.1.md @@ -1,6 +1,6 @@ -%eprintrest(1) irdmtools user manual | version 0.0.67 db5955de +%eprintrest(1) irdmtools user manual | version 0.0.67 9489d768 % R. S. Doiel and Tom Morrell -% 2024-01-11 +% 2024-01-12 # NAME diff --git a/man/man1/doi2rdm.1 b/man/man1/doi2rdm.1 index eb23843f..61bf93f3 100644 --- a/man/man1/doi2rdm.1 +++ b/man/man1/doi2rdm.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "doi2rdm" "1" "2024\-01\-11" "irdmtools user manual" "version 0.0.67 db5955de" +.TH "doi2rdm" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 9489d768" .SH NAME doi2rdm .SH SYNOPSIS diff --git a/man/man1/ep3util.1 b/man/man1/ep3util.1 index 9596f0b0..115b2384 100644 --- a/man/man1/ep3util.1 +++ b/man/man1/ep3util.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "ep3util" "1" "2024\-01\-11" "irdmtools user manual" "version 0.0.67 db5955de" +.TH "ep3util" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 9489d768" .SH NAME ep3util .SH SYNOPSIS diff --git a/man/man1/eprint2rdm.1 b/man/man1/eprint2rdm.1 index 22f9542e..fcd10cf1 100644 --- a/man/man1/eprint2rdm.1 +++ b/man/man1/eprint2rdm.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "eprint2rdm" "1" "2024\-01\-11" "irdmtools user manual" "version 0.0.67 db5955de" +.TH "eprint2rdm" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 9489d768" .SH NAME eprint2rdm .SH SYNOPSIS diff --git a/man/man1/eprintrest.1 b/man/man1/eprintrest.1 index 0266428c..86b528e6 100644 --- a/man/man1/eprintrest.1 +++ b/man/man1/eprintrest.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "eprintrest" "1" "2024\-01\-11" "irdmtools user manual" "version 0.0.67 db5955de" +.TH "eprintrest" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 9489d768" .SH NAME eprintrest .SH SYNOPSIS diff --git a/man/man1/people2vocabulary.1 b/man/man1/people2vocabulary.1 index d6814283..9c3fec4f 100644 --- a/man/man1/people2vocabulary.1 +++ b/man/man1/people2vocabulary.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "people2vocabulary" "1" "2024\-01\-11" "irdmtools user manual" "version 0.0.67 db5955de" +.TH "people2vocabulary" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 9489d768" .SH NAME people2vocabulary .SH SYNOPSIS diff --git a/man/man1/rdm2eprint.1 b/man/man1/rdm2eprint.1 index eb46408e..f2c8126b 100644 --- a/man/man1/rdm2eprint.1 +++ b/man/man1/rdm2eprint.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "rdm2eprint" "1" "2024\-01\-11" "irdmtools user manual" "version 0.0.67 db5955de" +.TH "rdm2eprint" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 9489d768" .SH NAME rdm2eprint .SH SYNOPSIS diff --git a/man/man1/rdmutil.1 b/man/man1/rdmutil.1 index 5f0ebcd8..16edfd6c 100644 --- a/man/man1/rdmutil.1 +++ b/man/man1/rdmutil.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "rdmutil" "1" "2024\-01\-11" "irdmtools user manual" "version 0.0.67 db5955de" +.TH "rdmutil" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 9489d768" .SH NAME rdmutil .SH SYNOPSIS diff --git a/pagefind/fragment/unknown_a043e3f.pf_fragment b/pagefind/fragment/unknown_a043e3f.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..368aec972f4730274b11967115f7262bacfd92bd GIT binary patch literal 593 zcmV-X0vhX2ZuuZe-SunB3CDvCNbSX-#Hi)pG%ViIeK z53`R)5#qn^Bz&YWxaeK-`kcq-&Z|cgI49>^a8zMoY5YX zO(0REpiq|EE4X^_D^I%M%ld(9V8IlNygE`P0!Z+>IrSOsuWfJ;;a_ zzSnHVDkmLhxtTfTRx;&6!b}=$9;VP74f})d(*d_(=u4Q@xx3&PixW(pEMe$<(EeRX zO;hDacyyRLRTSlja%I!Ny|a9ee6-?~@Ms?v+Ht=eFx}5%WNdhqJgWGCm-U0KfJ>IA zy9L8U{|UzNq^M%S=TFdZOJ$)KgYG)iOd+K2i(boSp^7LgK@vcvJ*M};% zujfr=2cgdHT*{8$JggegKUQl_yL}0?sLd1|%v2N4dhNKu?j f)+OYAWs$4hT2s$?`54^U{M!5j%T`U}3IzZFtwb(L literal 0 HcmV?d00001 diff --git a/pagefind/index/unknown_c1b4e54.pf_index b/pagefind/index/unknown_c1b4e54.pf_index new file mode 100644 index 0000000000000000000000000000000000000000..6e0cf0e8725fafcac9c721ddcd3dff0d02a87e86 GIT binary patch literal 24435 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 Date: Fri, 12 Jan 2024 15:07:41 -0800 Subject: [PATCH 07/15] v0.0.67 release --- doi2rdm.1.md | 2 +- ep3util.1.md | 2 +- eprint2rdm.1.md | 2 +- eprintrest.1.md | 2 +- man/man1/doi2rdm.1 | 2 +- man/man1/ep3util.1 | 2 +- man/man1/eprint2rdm.1 | 2 +- man/man1/eprintrest.1 | 2 +- man/man1/people2vocabulary.1 | 2 +- man/man1/rdm2eprint.1 | 2 +- man/man1/rdmutil.1 | 2 +- people2vocabulary.1.md | 2 +- rdm2eprint.1.md | 2 +- rdmutil.1.md | 2 +- version.go | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/doi2rdm.1.md b/doi2rdm.1.md index d3068f37..9985fbd3 100644 --- a/doi2rdm.1.md +++ b/doi2rdm.1.md @@ -1,4 +1,4 @@ -%doi2rdm(1) irdmtools user manual | version 0.0.67 9489d768 +%doi2rdm(1) irdmtools user manual | version 0.0.67 7a7f48e6 % R. S. Doiel and Tom Morrell % 2024-01-12 diff --git a/ep3util.1.md b/ep3util.1.md index 7e82ec43..a35e230e 100644 --- a/ep3util.1.md +++ b/ep3util.1.md @@ -1,4 +1,4 @@ -%ep3util(1) irdmtools user manual | version 0.0.67 9489d768 +%ep3util(1) irdmtools user manual | version 0.0.67 7a7f48e6 % R. S. Doiel and Tom Morrell % 2024-01-12 diff --git a/eprint2rdm.1.md b/eprint2rdm.1.md index 0d449226..dcf3ff80 100644 --- a/eprint2rdm.1.md +++ b/eprint2rdm.1.md @@ -1,4 +1,4 @@ -%eprint2rdm(1) irdmtools user manual | version 0.0.67 9489d768 +%eprint2rdm(1) irdmtools user manual | version 0.0.67 7a7f48e6 % R. S. Doiel and Tom Morrell % 2024-01-12 diff --git a/eprintrest.1.md b/eprintrest.1.md index dd65f634..47f65d3e 100644 --- a/eprintrest.1.md +++ b/eprintrest.1.md @@ -1,4 +1,4 @@ -%eprintrest(1) irdmtools user manual | version 0.0.67 9489d768 +%eprintrest(1) irdmtools user manual | version 0.0.67 7a7f48e6 % R. S. Doiel and Tom Morrell % 2024-01-12 diff --git a/man/man1/doi2rdm.1 b/man/man1/doi2rdm.1 index 61bf93f3..42d2b74f 100644 --- a/man/man1/doi2rdm.1 +++ b/man/man1/doi2rdm.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "doi2rdm" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 9489d768" +.TH "doi2rdm" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" .SH NAME doi2rdm .SH SYNOPSIS diff --git a/man/man1/ep3util.1 b/man/man1/ep3util.1 index 115b2384..8c92dff9 100644 --- a/man/man1/ep3util.1 +++ b/man/man1/ep3util.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "ep3util" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 9489d768" +.TH "ep3util" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" .SH NAME ep3util .SH SYNOPSIS diff --git a/man/man1/eprint2rdm.1 b/man/man1/eprint2rdm.1 index fcd10cf1..0221dadf 100644 --- a/man/man1/eprint2rdm.1 +++ b/man/man1/eprint2rdm.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "eprint2rdm" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 9489d768" +.TH "eprint2rdm" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" .SH NAME eprint2rdm .SH SYNOPSIS diff --git a/man/man1/eprintrest.1 b/man/man1/eprintrest.1 index 86b528e6..70497b6c 100644 --- a/man/man1/eprintrest.1 +++ b/man/man1/eprintrest.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "eprintrest" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 9489d768" +.TH "eprintrest" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" .SH NAME eprintrest .SH SYNOPSIS diff --git a/man/man1/people2vocabulary.1 b/man/man1/people2vocabulary.1 index 9c3fec4f..a30641be 100644 --- a/man/man1/people2vocabulary.1 +++ b/man/man1/people2vocabulary.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "people2vocabulary" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 9489d768" +.TH "people2vocabulary" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" .SH NAME people2vocabulary .SH SYNOPSIS diff --git a/man/man1/rdm2eprint.1 b/man/man1/rdm2eprint.1 index f2c8126b..27d523b1 100644 --- a/man/man1/rdm2eprint.1 +++ b/man/man1/rdm2eprint.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "rdm2eprint" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 9489d768" +.TH "rdm2eprint" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" .SH NAME rdm2eprint .SH SYNOPSIS diff --git a/man/man1/rdmutil.1 b/man/man1/rdmutil.1 index 16edfd6c..5206db4c 100644 --- a/man/man1/rdmutil.1 +++ b/man/man1/rdmutil.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "rdmutil" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 9489d768" +.TH "rdmutil" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" .SH NAME rdmutil .SH SYNOPSIS diff --git a/people2vocabulary.1.md b/people2vocabulary.1.md index c63643d7..ea6fdb32 100644 --- a/people2vocabulary.1.md +++ b/people2vocabulary.1.md @@ -1,4 +1,4 @@ -%people2vocabulary(1) irdmtools user manual | version 0.0.67 9489d768 +%people2vocabulary(1) irdmtools user manual | version 0.0.67 7a7f48e6 % R. S. Doiel % 2024-01-12 diff --git a/rdm2eprint.1.md b/rdm2eprint.1.md index 8cb6ea1a..af0690ad 100644 --- a/rdm2eprint.1.md +++ b/rdm2eprint.1.md @@ -1,4 +1,4 @@ -%rdm2eprint(1) irdmtools user manual | version 0.0.67 9489d768 +%rdm2eprint(1) irdmtools user manual | version 0.0.67 7a7f48e6 % R. S. Doiel and Tom Morrell % 2024-01-12 diff --git a/rdmutil.1.md b/rdmutil.1.md index 421cd267..273b26b4 100644 --- a/rdmutil.1.md +++ b/rdmutil.1.md @@ -1,4 +1,4 @@ -%rdmutil(1) irdmtools user manual | version 0.0.67 9489d768 +%rdmutil(1) irdmtools user manual | version 0.0.67 7a7f48e6 % R. S. Doiel and Tom Morrell % 2024-01-12 diff --git a/version.go b/version.go index 42b14d05..fd478fab 100644 --- a/version.go +++ b/version.go @@ -12,7 +12,7 @@ const ( ReleaseDate = "2024-01-12" // ReleaseHash, the Git hash when version.go was generated - ReleaseHash = "9489d768" + ReleaseHash = "7a7f48e6" LicenseText = ` Redistribution and use in source and binary forms, with or without From ce0479d4f7b9d13fcb62ec05ca28d6c5639be57f Mon Sep 17 00:00:00 2001 From: "R. S. Doiel" Date: Fri, 12 Jan 2024 15:33:41 -0800 Subject: [PATCH 08/15] start next dev cycle --- codemeta.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/codemeta.json b/codemeta.json index ca6c8eb1..43c64779 100644 --- a/codemeta.json +++ b/codemeta.json @@ -4,10 +4,10 @@ "license": "https://caltechlibrary.github.io/irdmtools/LICENSE", "codeRepository": "https://github.com/caltechlibrary/irdmtools", "dateCreated": "2022-10-27", - "dateRelease": "2024-01-10", + "dateRelease": "2024-01-12", "issueTracker": "https://github.com/caltechlibrary/irdmtools/issues", "name": "irdmtools", - "version": "0.0.67", + "version": "0.0.68-dev", "description": "Tools for working with institutional repositories and data management systems. Current implementation targets Invenio-RDM.", "applicationCategory": "library science", "releaseNotes": "Proof of concept and refinements towards production testing, updated doi2rdm to map book-chapter to publication-section", @@ -28,7 +28,7 @@ "Windows" ], "softwareRequirements": [ - "Go >= 1.20.4", + "Go >= 1.21.6", "PostgreSQL >= 15", "PostgREST >= 11", "Pandoc >= 3", From 92c435d5da03099c04157aca449dbbd31cc257be Mon Sep 17 00:00:00 2001 From: Tom Morrell Date: Mon, 15 Jan 2024 17:10:27 -0800 Subject: [PATCH 09/15] Add series script --- fix_series_number.py | 64 ++++++++++++++++++++++++++++++++++++++++++++ migrated_records.csv | 2 +- wipe_record.py | 4 +-- 3 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 fix_series_number.py diff --git a/fix_series_number.py b/fix_series_number.py new file mode 100644 index 00000000..81bea284 --- /dev/null +++ b/fix_series_number.py @@ -0,0 +1,64 @@ +import sys,os,csv,json +import requests +from irdm import eprint2rdm, fixup_record, get_record_versions +from caltechdata_api import caltechdata_edit +from ames.harvesters import get_group_records + +def fix_series_number(record,rdmid,token): + print(record) + print(rdmid) + response = requests.get(f'https://authors.library.caltech.edu/api/records/{rdmid}') + data = response.json() + custom = {} + if 'custom_fields' in data: + custom = data['custom_fields'] + if 'caltech:series' in custom: + print(f"Series already set for {rdmid}") + return + if 'caltech:series_number' in custom: + print(f"Series number already set for {rdmid}") + return + series = record['series'].strip() + custom['caltech:series'] = series + number = record['number'].strip() + if number != 'NULL': + custom['caltech:series_number'] = number + data['custom_fields'] = custom + print(custom) + #print(json.dumps(data,indent=2)) + #input("Press Enter to continue...") + + caltechdata_edit( + rdmid, + metadata=data, + token=token, + production=True, + publish=True, + authors=True, + ) + +token = os.environ["CTATOK"] + +with open('series_and_number.csv') as infile: + reader = csv.DictReader(infile) + to_update = [] + for row in reader: + if row['eprint_status'] =='archive': + to_update.append(row) + +eprint_ids = {} +with open('migrated_records.csv') as infile: + reader = csv.DictReader(infile) + for row in reader: + if row['record_status'] =='public': + eprint_ids[row['eprintid']] = row['rdmid'] + + +for record in to_update: + eprintid = record['eprintid'] + if eprintid in eprint_ids: + rdmid = eprint_ids[eprintid] + fix_series_number(record,rdmid,token) + else: + print(f"Missing mapping for: {eprintid}") + diff --git a/migrated_records.csv b/migrated_records.csv index acfe0a62..59a0e5b6 100644 --- a/migrated_records.csv +++ b/migrated_records.csv @@ -137255,7 +137255,7 @@ eprintid,rdmid,record_status 102910,sghc8-4hc57,public 72179,jgag2-phg49,public 113310,9jsct-w4560,public -120937,64yes-0bb89,public +120937,m5377-syp36,public 73974,a0z34-waf85,public 74939,hty8p-scq52,public 75890,zxrkq-x5q61,public diff --git a/wipe_record.py b/wipe_record.py index 4b3eaea6..d3a7e3d3 100755 --- a/wipe_record.py +++ b/wipe_record.py @@ -72,10 +72,10 @@ def main(): message = sys.argv[2] err = wipe_ind_record(config, rdm_id, message) if err is not None: - print(f"Aborting {app_name}, {err}", file=sys.stderr) + print(f"Aborting, {err}", file=sys.stderr) sys.exit(1) else: - print(f"Aborting {app_name}, environment not setup", file=sys.stderr) + print(f"Aborting, environment not setup", file=sys.stderr) sys.exit(1) From 4f4bdb1c3d3b538025c5c23416bea2cc77d3f1df Mon Sep 17 00:00:00 2001 From: Tom Morrell Date: Mon, 15 Jan 2024 17:10:50 -0800 Subject: [PATCH 10/15] New deleted record --- deleted_records/64yes-0bb89.json | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 deleted_records/64yes-0bb89.json diff --git a/deleted_records/64yes-0bb89.json b/deleted_records/64yes-0bb89.json new file mode 100644 index 00000000..fce25dbe --- /dev/null +++ b/deleted_records/64yes-0bb89.json @@ -0,0 +1,4 @@ +{ + "status": 403, + "message": "Permission denied." +} \ No newline at end of file From c0b184c58731f18daf7d68e7400adfc0214944c7 Mon Sep 17 00:00:00 2001 From: "R. S. Doiel" Date: Tue, 16 Jan 2024 17:24:47 +0000 Subject: [PATCH 11/15] Quick Save --- CITATION.cff | 2 +- about.md | 6 +++--- doi2rdm.1.md | 4 ++-- ep3util.1.md | 4 ++-- eprint2rdm.1.md | 4 ++-- eprintrest.1.md | 4 ++-- installer.sh | 2 +- man/man1/doi2rdm.1 | 4 ++-- man/man1/ep3util.1 | 4 ++-- man/man1/eprint2rdm.1 | 4 ++-- man/man1/eprintrest.1 | 4 ++-- man/man1/migrate_record.py.1 | 2 +- man/man1/migrate_records_to_dataset.py.1 | 2 +- man/man1/people2vocabulary.1 | 4 ++-- man/man1/rdm2eprint.1 | 4 ++-- man/man1/rdmutil.1 | 4 ++-- people2vocabulary.1.md | 4 ++-- rdm2eprint.1.md | 4 ++-- rdmutil.1.md | 4 ++-- version.go | 6 +++--- 20 files changed, 38 insertions(+), 38 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 55d87f7d..9fc6eb2f 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -14,7 +14,7 @@ authors: repository-code: "https://github.com/caltechlibrary/irdmtools" -version: 0.0.67 +version: 0.0.68-dev license-url: "https://caltechlibrary.github.io/irdmtools/LICENSE" keywords: [ "institutional repository", "data management", "Invenio", "Invenio-RDM" ] diff --git a/about.md b/about.md index 5ebcef18..37fd795b 100644 --- a/about.md +++ b/about.md @@ -14,7 +14,7 @@ authors: orcid: "https://orcid.org/0000-0001-9266-5146" repository-code: "https://github.com/caltechlibrary/irdmtools" -version: 0.0.67 +version: 0.0.68-dev license-url: "https://caltechlibrary.github.io/irdmtools/LICENSE" keywords: [ "institutional repository", "data management", "Invenio", "Invenio-RDM" ] @@ -24,7 +24,7 @@ management", "Invenio", "Invenio-RDM" ] About this software =================== -## irdmtools 0.0.67 +## irdmtools 0.0.68-dev ### Authors @@ -58,7 +58,7 @@ systems. Current implementation targets Invenio-RDM. ### Software Requiremets -- Go >= 1.20.4 +- Go >= 1.21.6 - PostgreSQL >= 15 - PostgREST >= 11 - Pandoc >= 3 diff --git a/doi2rdm.1.md b/doi2rdm.1.md index 9985fbd3..9ff86c8d 100644 --- a/doi2rdm.1.md +++ b/doi2rdm.1.md @@ -1,6 +1,6 @@ -%doi2rdm(1) irdmtools user manual | version 0.0.67 7a7f48e6 +%doi2rdm(1) irdmtools user manual | version 0.0.68-dev 4f4bdb1c % R. S. Doiel and Tom Morrell -% 2024-01-12 +% 2024-01-16 # NAME diff --git a/ep3util.1.md b/ep3util.1.md index a35e230e..e18e57e7 100644 --- a/ep3util.1.md +++ b/ep3util.1.md @@ -1,6 +1,6 @@ -%ep3util(1) irdmtools user manual | version 0.0.67 7a7f48e6 +%ep3util(1) irdmtools user manual | version 0.0.68-dev 4f4bdb1c % R. S. Doiel and Tom Morrell -% 2024-01-12 +% 2024-01-16 # NAME diff --git a/eprint2rdm.1.md b/eprint2rdm.1.md index dcf3ff80..44d987fb 100644 --- a/eprint2rdm.1.md +++ b/eprint2rdm.1.md @@ -1,6 +1,6 @@ -%eprint2rdm(1) irdmtools user manual | version 0.0.67 7a7f48e6 +%eprint2rdm(1) irdmtools user manual | version 0.0.68-dev 4f4bdb1c % R. S. Doiel and Tom Morrell -% 2024-01-12 +% 2024-01-16 # NAME diff --git a/eprintrest.1.md b/eprintrest.1.md index 47f65d3e..9cc61ca0 100644 --- a/eprintrest.1.md +++ b/eprintrest.1.md @@ -1,6 +1,6 @@ -%eprintrest(1) irdmtools user manual | version 0.0.67 7a7f48e6 +%eprintrest(1) irdmtools user manual | version 0.0.68-dev 4f4bdb1c % R. S. Doiel and Tom Morrell -% 2024-01-12 +% 2024-01-16 # NAME diff --git a/installer.sh b/installer.sh index 13b8c4eb..59cef4af 100755 --- a/installer.sh +++ b/installer.sh @@ -4,7 +4,7 @@ # Set the package name and version to install # PACKAGE="irdmtools" -VERSION="0.0.67" +VERSION="0.0.68-dev" GIT_GROUP="caltechlibrary" RELEASE="https://github.com/$GIT_GROUP/$PACKAGE/releases/tag/v$VERSION" diff --git a/man/man1/doi2rdm.1 b/man/man1/doi2rdm.1 index 42d2b74f..40aba06f 100644 --- a/man/man1/doi2rdm.1 +++ b/man/man1/doi2rdm.1 @@ -1,6 +1,6 @@ -.\" Automatically generated by Pandoc 3.1.11.1 +.\" Automatically generated by Pandoc 3.1.9 .\" -.TH "doi2rdm" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" +.TH "doi2rdm" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68\-dev 4f4bdb1c" .SH NAME doi2rdm .SH SYNOPSIS diff --git a/man/man1/ep3util.1 b/man/man1/ep3util.1 index 8c92dff9..30ac9fca 100644 --- a/man/man1/ep3util.1 +++ b/man/man1/ep3util.1 @@ -1,6 +1,6 @@ -.\" Automatically generated by Pandoc 3.1.11.1 +.\" Automatically generated by Pandoc 3.1.9 .\" -.TH "ep3util" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" +.TH "ep3util" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68\-dev 4f4bdb1c" .SH NAME ep3util .SH SYNOPSIS diff --git a/man/man1/eprint2rdm.1 b/man/man1/eprint2rdm.1 index 0221dadf..c92b5362 100644 --- a/man/man1/eprint2rdm.1 +++ b/man/man1/eprint2rdm.1 @@ -1,6 +1,6 @@ -.\" Automatically generated by Pandoc 3.1.11.1 +.\" Automatically generated by Pandoc 3.1.9 .\" -.TH "eprint2rdm" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" +.TH "eprint2rdm" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68\-dev 4f4bdb1c" .SH NAME eprint2rdm .SH SYNOPSIS diff --git a/man/man1/eprintrest.1 b/man/man1/eprintrest.1 index 70497b6c..141a975a 100644 --- a/man/man1/eprintrest.1 +++ b/man/man1/eprintrest.1 @@ -1,6 +1,6 @@ -.\" Automatically generated by Pandoc 3.1.11.1 +.\" Automatically generated by Pandoc 3.1.9 .\" -.TH "eprintrest" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" +.TH "eprintrest" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68\-dev 4f4bdb1c" .SH NAME eprintrest .SH SYNOPSIS diff --git a/man/man1/migrate_record.py.1 b/man/man1/migrate_record.py.1 index 5f15b5d0..ae73e5cd 100644 --- a/man/man1/migrate_record.py.1 +++ b/man/man1/migrate_record.py.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pandoc 3.1.11.1 +.\" Automatically generated by Pandoc 3.1.9 .\" .TH "migrate_record.py (1) user manual" "" "" "" "" .SH NAME diff --git a/man/man1/migrate_records_to_dataset.py.1 b/man/man1/migrate_records_to_dataset.py.1 index d1f7cf8a..2f685e06 100644 --- a/man/man1/migrate_records_to_dataset.py.1 +++ b/man/man1/migrate_records_to_dataset.py.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pandoc 3.1.11.1 +.\" Automatically generated by Pandoc 3.1.9 .\" .TH "migrate_records.py (1) user manual" "" "" "" "" .SH NAME diff --git a/man/man1/people2vocabulary.1 b/man/man1/people2vocabulary.1 index a30641be..15b37e64 100644 --- a/man/man1/people2vocabulary.1 +++ b/man/man1/people2vocabulary.1 @@ -1,6 +1,6 @@ -.\" Automatically generated by Pandoc 3.1.11.1 +.\" Automatically generated by Pandoc 3.1.9 .\" -.TH "people2vocabulary" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" +.TH "people2vocabulary" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68\-dev 4f4bdb1c" .SH NAME people2vocabulary .SH SYNOPSIS diff --git a/man/man1/rdm2eprint.1 b/man/man1/rdm2eprint.1 index 27d523b1..27fe86f2 100644 --- a/man/man1/rdm2eprint.1 +++ b/man/man1/rdm2eprint.1 @@ -1,6 +1,6 @@ -.\" Automatically generated by Pandoc 3.1.11.1 +.\" Automatically generated by Pandoc 3.1.9 .\" -.TH "rdm2eprint" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" +.TH "rdm2eprint" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68\-dev 4f4bdb1c" .SH NAME rdm2eprint .SH SYNOPSIS diff --git a/man/man1/rdmutil.1 b/man/man1/rdmutil.1 index 5206db4c..2de549de 100644 --- a/man/man1/rdmutil.1 +++ b/man/man1/rdmutil.1 @@ -1,6 +1,6 @@ -.\" Automatically generated by Pandoc 3.1.11.1 +.\" Automatically generated by Pandoc 3.1.9 .\" -.TH "rdmutil" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" +.TH "rdmutil" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68\-dev 4f4bdb1c" .SH NAME rdmutil .SH SYNOPSIS diff --git a/people2vocabulary.1.md b/people2vocabulary.1.md index ea6fdb32..af90ea6a 100644 --- a/people2vocabulary.1.md +++ b/people2vocabulary.1.md @@ -1,6 +1,6 @@ -%people2vocabulary(1) irdmtools user manual | version 0.0.67 7a7f48e6 +%people2vocabulary(1) irdmtools user manual | version 0.0.68-dev 4f4bdb1c % R. S. Doiel -% 2024-01-12 +% 2024-01-16 # NAME diff --git a/rdm2eprint.1.md b/rdm2eprint.1.md index af0690ad..48ed3929 100644 --- a/rdm2eprint.1.md +++ b/rdm2eprint.1.md @@ -1,6 +1,6 @@ -%rdm2eprint(1) irdmtools user manual | version 0.0.67 7a7f48e6 +%rdm2eprint(1) irdmtools user manual | version 0.0.68-dev 4f4bdb1c % R. S. Doiel and Tom Morrell -% 2024-01-12 +% 2024-01-16 # NAME diff --git a/rdmutil.1.md b/rdmutil.1.md index 273b26b4..2d6a44dc 100644 --- a/rdmutil.1.md +++ b/rdmutil.1.md @@ -1,6 +1,6 @@ -%rdmutil(1) irdmtools user manual | version 0.0.67 7a7f48e6 +%rdmutil(1) irdmtools user manual | version 0.0.68-dev 4f4bdb1c % R. S. Doiel and Tom Morrell -% 2024-01-12 +% 2024-01-16 # NAME diff --git a/version.go b/version.go index fd478fab..0f00b674 100644 --- a/version.go +++ b/version.go @@ -6,13 +6,13 @@ import ( const ( // Version number of release - Version = "0.0.67" + Version = "0.0.68-dev" // ReleaseDate, the date version.go was generated - ReleaseDate = "2024-01-12" + ReleaseDate = "2024-01-16" // ReleaseHash, the Git hash when version.go was generated - ReleaseHash = "7a7f48e6" + ReleaseHash = "4f4bdb1c" LicenseText = ` Redistribution and use in source and binary forms, with or without From 184ce81b15f684a341b3a44f324ffc121f0d785b Mon Sep 17 00:00:00 2001 From: "R. S. Doiel" Date: Tue, 16 Jan 2024 16:51:17 -0800 Subject: [PATCH 12/15] Quick Save --- CITATION.cff | 2 +- LICENSE | 2 +- README.md | 3 +++ TODO.md | 5 +++-- about.md | 6 +++--- codemeta.json | 8 ++++---- doi2rdm.1.md | 2 +- ep3util.1.md | 2 +- eprint2rdm.1.md | 2 +- eprintrest.1.md | 2 +- go.mod | 2 +- installer.sh | 2 +- man/man1/doi2rdm.1 | 2 +- man/man1/ep3util.1 | 2 +- man/man1/eprint2rdm.1 | 2 +- man/man1/eprintrest.1 | 2 +- man/man1/people2vocabulary.1 | 2 +- man/man1/rdm2eprint.1 | 2 +- man/man1/rdmutil.1 | 2 +- people2vocabulary.1.md | 2 +- rdm2eprint.1.md | 2 +- rdmutil.1.md | 2 +- version.go | 4 ++-- 23 files changed, 33 insertions(+), 29 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 55d87f7d..9fc6eb2f 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -14,7 +14,7 @@ authors: repository-code: "https://github.com/caltechlibrary/irdmtools" -version: 0.0.67 +version: 0.0.68-dev license-url: "https://caltechlibrary.github.io/irdmtools/LICENSE" keywords: [ "institutional repository", "data management", "Invenio", "Invenio-RDM" ] diff --git a/LICENSE b/LICENSE index a0eae16e..45253452 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2023, Caltech +Copyright (c) 2024, Caltech All rights not granted herein are expressly reserved by Caltech. Redistribution and use in source and binary forms, with or without diff --git a/README.md b/README.md index f7139df7..d9591bd6 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ +[![Project Status: WIP – Initial development is in progress, but there has not yet been a stable, usable release suitable for the public.](https://www.repostatus.org/badges/latest/wip.svg)](https://www.repostatus.org/#wip) + + Institutional Repository Data Management Tools ============================================== diff --git a/TODO.md b/TODO.md index 09d84059..5d6b17f2 100644 --- a/TODO.md +++ b/TODO.md @@ -5,7 +5,8 @@ Action Items Bugs ---- -- [ ] Local group items are including an empty "{}" as an entry when retrieved with ep3util (e.g. thesis repository, ep3util get_record 7320) +- [ ] rdm2eprint should always populate official URL, in some cases is showing up `/records/{rdmid}` but in others it is populated, when I checked authors record efd3g-p2669 it isn't populated in the JSON output +- [x] Local group items are including an empty "{}" as an entry when retrieved with ep3util (e.g. thesis repository, ep3util get_record 7320) - [x] progress.go is producing non-sensical estamates of the time remaining, need to review my math (this was a really bad SQL query on my part) - [ ] eprint2rdm missing metadata attributes - [x] journal related fields (e.g. journal:journal) in custom fields @@ -35,7 +36,7 @@ Bugs Next ---- -- [ ] rdmutil get_all_ids needs a get_all_stale_ids counterpart, see issue #68 +- [x] rdmutil get_all_ids needs a get_all_stale_ids counterpart, see issue #68 (implemented get_record_versions"` - [x] add put_record to rdmutil, actually done as many steps, new_record, new_draft, update_draft, ... - [x] Implement a CrossRef to Invenio RDM record - [x] Figure out a faster way to retrieve RDM ids without using the API or OAI-PMH. Possibly options would be to create an rdmapid service, or direct query via PostgreSQL. diff --git a/about.md b/about.md index 5ebcef18..37fd795b 100644 --- a/about.md +++ b/about.md @@ -14,7 +14,7 @@ authors: orcid: "https://orcid.org/0000-0001-9266-5146" repository-code: "https://github.com/caltechlibrary/irdmtools" -version: 0.0.67 +version: 0.0.68-dev license-url: "https://caltechlibrary.github.io/irdmtools/LICENSE" keywords: [ "institutional repository", "data management", "Invenio", "Invenio-RDM" ] @@ -24,7 +24,7 @@ management", "Invenio", "Invenio-RDM" ] About this software =================== -## irdmtools 0.0.67 +## irdmtools 0.0.68-dev ### Authors @@ -58,7 +58,7 @@ systems. Current implementation targets Invenio-RDM. ### Software Requiremets -- Go >= 1.20.4 +- Go >= 1.21.6 - PostgreSQL >= 15 - PostgREST >= 11 - Pandoc >= 3 diff --git a/codemeta.json b/codemeta.json index 43c64779..e334e33b 100644 --- a/codemeta.json +++ b/codemeta.json @@ -4,14 +4,14 @@ "license": "https://caltechlibrary.github.io/irdmtools/LICENSE", "codeRepository": "https://github.com/caltechlibrary/irdmtools", "dateCreated": "2022-10-27", - "dateRelease": "2024-01-12", + "dateRelease": "2024-01-16", "issueTracker": "https://github.com/caltechlibrary/irdmtools/issues", "name": "irdmtools", - "version": "0.0.68-dev", + "version": "0.0.68", "description": "Tools for working with institutional repositories and data management systems. Current implementation targets Invenio-RDM.", "applicationCategory": "library science", - "releaseNotes": "Proof of concept and refinements towards production testing, updated doi2rdm to map book-chapter to publication-section", - "developmentStatus": "concept", + "releaseNotes": "Proof of concept and refinements, piloting in production", + "developmentStatus": "WIP", "keywords": [ "institutional repository", "data management", diff --git a/doi2rdm.1.md b/doi2rdm.1.md index 9985fbd3..e8b51d72 100644 --- a/doi2rdm.1.md +++ b/doi2rdm.1.md @@ -1,4 +1,4 @@ -%doi2rdm(1) irdmtools user manual | version 0.0.67 7a7f48e6 +%doi2rdm(1) irdmtools user manual | version 0.0.68-dev ce0479d4 % R. S. Doiel and Tom Morrell % 2024-01-12 diff --git a/ep3util.1.md b/ep3util.1.md index a35e230e..05acdb9a 100644 --- a/ep3util.1.md +++ b/ep3util.1.md @@ -1,4 +1,4 @@ -%ep3util(1) irdmtools user manual | version 0.0.67 7a7f48e6 +%ep3util(1) irdmtools user manual | version 0.0.68-dev ce0479d4 % R. S. Doiel and Tom Morrell % 2024-01-12 diff --git a/eprint2rdm.1.md b/eprint2rdm.1.md index dcf3ff80..aa996d94 100644 --- a/eprint2rdm.1.md +++ b/eprint2rdm.1.md @@ -1,4 +1,4 @@ -%eprint2rdm(1) irdmtools user manual | version 0.0.67 7a7f48e6 +%eprint2rdm(1) irdmtools user manual | version 0.0.68-dev ce0479d4 % R. S. Doiel and Tom Morrell % 2024-01-12 diff --git a/eprintrest.1.md b/eprintrest.1.md index 47f65d3e..661eccaf 100644 --- a/eprintrest.1.md +++ b/eprintrest.1.md @@ -1,4 +1,4 @@ -%eprintrest(1) irdmtools user manual | version 0.0.67 7a7f48e6 +%eprintrest(1) irdmtools user manual | version 0.0.68-dev ce0479d4 % R. S. Doiel and Tom Morrell % 2024-01-12 diff --git a/go.mod b/go.mod index 61b5c60e..372ddeca 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/caltechlibrary/irdmtools -go 1.21.1 +go 1.21.6 require ( github.com/caltechlibrary/crossrefapi v1.0.6 diff --git a/installer.sh b/installer.sh index 13b8c4eb..59cef4af 100755 --- a/installer.sh +++ b/installer.sh @@ -4,7 +4,7 @@ # Set the package name and version to install # PACKAGE="irdmtools" -VERSION="0.0.67" +VERSION="0.0.68-dev" GIT_GROUP="caltechlibrary" RELEASE="https://github.com/$GIT_GROUP/$PACKAGE/releases/tag/v$VERSION" diff --git a/man/man1/doi2rdm.1 b/man/man1/doi2rdm.1 index 42d2b74f..6ab68c12 100644 --- a/man/man1/doi2rdm.1 +++ b/man/man1/doi2rdm.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "doi2rdm" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" +.TH "doi2rdm" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.68\-dev ce0479d4" .SH NAME doi2rdm .SH SYNOPSIS diff --git a/man/man1/ep3util.1 b/man/man1/ep3util.1 index 8c92dff9..e76b2eda 100644 --- a/man/man1/ep3util.1 +++ b/man/man1/ep3util.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "ep3util" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" +.TH "ep3util" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.68\-dev ce0479d4" .SH NAME ep3util .SH SYNOPSIS diff --git a/man/man1/eprint2rdm.1 b/man/man1/eprint2rdm.1 index 0221dadf..71ce0074 100644 --- a/man/man1/eprint2rdm.1 +++ b/man/man1/eprint2rdm.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "eprint2rdm" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" +.TH "eprint2rdm" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.68\-dev ce0479d4" .SH NAME eprint2rdm .SH SYNOPSIS diff --git a/man/man1/eprintrest.1 b/man/man1/eprintrest.1 index 70497b6c..411d3e7c 100644 --- a/man/man1/eprintrest.1 +++ b/man/man1/eprintrest.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "eprintrest" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" +.TH "eprintrest" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.68\-dev ce0479d4" .SH NAME eprintrest .SH SYNOPSIS diff --git a/man/man1/people2vocabulary.1 b/man/man1/people2vocabulary.1 index a30641be..ee9be90c 100644 --- a/man/man1/people2vocabulary.1 +++ b/man/man1/people2vocabulary.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "people2vocabulary" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" +.TH "people2vocabulary" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.68\-dev ce0479d4" .SH NAME people2vocabulary .SH SYNOPSIS diff --git a/man/man1/rdm2eprint.1 b/man/man1/rdm2eprint.1 index 27d523b1..1669561b 100644 --- a/man/man1/rdm2eprint.1 +++ b/man/man1/rdm2eprint.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "rdm2eprint" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" +.TH "rdm2eprint" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.68\-dev ce0479d4" .SH NAME rdm2eprint .SH SYNOPSIS diff --git a/man/man1/rdmutil.1 b/man/man1/rdmutil.1 index 5206db4c..71af1f4b 100644 --- a/man/man1/rdmutil.1 +++ b/man/man1/rdmutil.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "rdmutil" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.67 7a7f48e6" +.TH "rdmutil" "1" "2024\-01\-12" "irdmtools user manual" "version 0.0.68\-dev ce0479d4" .SH NAME rdmutil .SH SYNOPSIS diff --git a/people2vocabulary.1.md b/people2vocabulary.1.md index ea6fdb32..bf1ddefb 100644 --- a/people2vocabulary.1.md +++ b/people2vocabulary.1.md @@ -1,4 +1,4 @@ -%people2vocabulary(1) irdmtools user manual | version 0.0.67 7a7f48e6 +%people2vocabulary(1) irdmtools user manual | version 0.0.68-dev ce0479d4 % R. S. Doiel % 2024-01-12 diff --git a/rdm2eprint.1.md b/rdm2eprint.1.md index af0690ad..cbba9544 100644 --- a/rdm2eprint.1.md +++ b/rdm2eprint.1.md @@ -1,4 +1,4 @@ -%rdm2eprint(1) irdmtools user manual | version 0.0.67 7a7f48e6 +%rdm2eprint(1) irdmtools user manual | version 0.0.68-dev ce0479d4 % R. S. Doiel and Tom Morrell % 2024-01-12 diff --git a/rdmutil.1.md b/rdmutil.1.md index 273b26b4..812ee88a 100644 --- a/rdmutil.1.md +++ b/rdmutil.1.md @@ -1,4 +1,4 @@ -%rdmutil(1) irdmtools user manual | version 0.0.67 7a7f48e6 +%rdmutil(1) irdmtools user manual | version 0.0.68-dev ce0479d4 % R. S. Doiel and Tom Morrell % 2024-01-12 diff --git a/version.go b/version.go index fd478fab..84a83d6f 100644 --- a/version.go +++ b/version.go @@ -6,13 +6,13 @@ import ( const ( // Version number of release - Version = "0.0.67" + Version = "0.0.68-dev" // ReleaseDate, the date version.go was generated ReleaseDate = "2024-01-12" // ReleaseHash, the Git hash when version.go was generated - ReleaseHash = "7a7f48e6" + ReleaseHash = "ce0479d4" LicenseText = ` Redistribution and use in source and binary forms, with or without From 2425acab58d1008678ea8c987048248f363febd3 Mon Sep 17 00:00:00 2001 From: "R. S. Doiel" Date: Tue, 16 Jan 2024 17:20:30 -0800 Subject: [PATCH 13/15] fix: missing official_url value --- doi2rdm.1.md | 2 +- ep3util.1.md | 2 +- eprint2rdm.1.md | 2 +- eprintrest.1.md | 2 +- man/man1/doi2rdm.1 | 2 +- man/man1/ep3util.1 | 2 +- man/man1/eprint2rdm.1 | 2 +- man/man1/eprintrest.1 | 2 +- man/man1/people2vocabulary.1 | 2 +- man/man1/rdm2eprint.1 | 2 +- man/man1/rdmutil.1 | 2 +- people2vocabulary.1.md | 2 +- rdm2eprint.1.md | 2 +- rdm2eprint.go | 14 ++++++++------ rdmutil.1.md | 2 +- version.go | 2 +- 16 files changed, 23 insertions(+), 21 deletions(-) diff --git a/doi2rdm.1.md b/doi2rdm.1.md index 8d310bad..420f1099 100644 --- a/doi2rdm.1.md +++ b/doi2rdm.1.md @@ -1,4 +1,4 @@ -%doi2rdm(1) irdmtools user manual | version 0.0.68 184ce81b +%doi2rdm(1) irdmtools user manual | version 0.0.68 0b325708 % R. S. Doiel and Tom Morrell % 2024-01-16 diff --git a/ep3util.1.md b/ep3util.1.md index d1d6f09e..321954fd 100644 --- a/ep3util.1.md +++ b/ep3util.1.md @@ -1,4 +1,4 @@ -%ep3util(1) irdmtools user manual | version 0.0.68 184ce81b +%ep3util(1) irdmtools user manual | version 0.0.68 0b325708 % R. S. Doiel and Tom Morrell % 2024-01-16 diff --git a/eprint2rdm.1.md b/eprint2rdm.1.md index cce8a8ed..2ac4d883 100644 --- a/eprint2rdm.1.md +++ b/eprint2rdm.1.md @@ -1,4 +1,4 @@ -%eprint2rdm(1) irdmtools user manual | version 0.0.68 184ce81b +%eprint2rdm(1) irdmtools user manual | version 0.0.68 0b325708 % R. S. Doiel and Tom Morrell % 2024-01-16 diff --git a/eprintrest.1.md b/eprintrest.1.md index d9a0150a..f396ed20 100644 --- a/eprintrest.1.md +++ b/eprintrest.1.md @@ -1,4 +1,4 @@ -%eprintrest(1) irdmtools user manual | version 0.0.68 184ce81b +%eprintrest(1) irdmtools user manual | version 0.0.68 0b325708 % R. S. Doiel and Tom Morrell % 2024-01-16 diff --git a/man/man1/doi2rdm.1 b/man/man1/doi2rdm.1 index 4415ccb3..71674784 100644 --- a/man/man1/doi2rdm.1 +++ b/man/man1/doi2rdm.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "doi2rdm" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 184ce81b" +.TH "doi2rdm" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 0b325708" .SH NAME doi2rdm .SH SYNOPSIS diff --git a/man/man1/ep3util.1 b/man/man1/ep3util.1 index a7872d25..12a063e7 100644 --- a/man/man1/ep3util.1 +++ b/man/man1/ep3util.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "ep3util" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 184ce81b" +.TH "ep3util" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 0b325708" .SH NAME ep3util .SH SYNOPSIS diff --git a/man/man1/eprint2rdm.1 b/man/man1/eprint2rdm.1 index afbf6fac..0b0c781d 100644 --- a/man/man1/eprint2rdm.1 +++ b/man/man1/eprint2rdm.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "eprint2rdm" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 184ce81b" +.TH "eprint2rdm" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 0b325708" .SH NAME eprint2rdm .SH SYNOPSIS diff --git a/man/man1/eprintrest.1 b/man/man1/eprintrest.1 index 34ffd67b..84d58164 100644 --- a/man/man1/eprintrest.1 +++ b/man/man1/eprintrest.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "eprintrest" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 184ce81b" +.TH "eprintrest" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 0b325708" .SH NAME eprintrest .SH SYNOPSIS diff --git a/man/man1/people2vocabulary.1 b/man/man1/people2vocabulary.1 index 4cc4c71b..c785a6a6 100644 --- a/man/man1/people2vocabulary.1 +++ b/man/man1/people2vocabulary.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "people2vocabulary" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 184ce81b" +.TH "people2vocabulary" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 0b325708" .SH NAME people2vocabulary .SH SYNOPSIS diff --git a/man/man1/rdm2eprint.1 b/man/man1/rdm2eprint.1 index 108e89c6..459a950c 100644 --- a/man/man1/rdm2eprint.1 +++ b/man/man1/rdm2eprint.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "rdm2eprint" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 184ce81b" +.TH "rdm2eprint" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 0b325708" .SH NAME rdm2eprint .SH SYNOPSIS diff --git a/man/man1/rdmutil.1 b/man/man1/rdmutil.1 index 1a283bb5..05f6e1e7 100644 --- a/man/man1/rdmutil.1 +++ b/man/man1/rdmutil.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "rdmutil" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 184ce81b" +.TH "rdmutil" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 0b325708" .SH NAME rdmutil .SH SYNOPSIS diff --git a/people2vocabulary.1.md b/people2vocabulary.1.md index ba3f2a70..ada8f385 100644 --- a/people2vocabulary.1.md +++ b/people2vocabulary.1.md @@ -1,4 +1,4 @@ -%people2vocabulary(1) irdmtools user manual | version 0.0.68 184ce81b +%people2vocabulary(1) irdmtools user manual | version 0.0.68 0b325708 % R. S. Doiel % 2024-01-16 diff --git a/rdm2eprint.1.md b/rdm2eprint.1.md index d901a38f..04c7440f 100644 --- a/rdm2eprint.1.md +++ b/rdm2eprint.1.md @@ -1,4 +1,4 @@ -%rdm2eprint(1) irdmtools user manual | version 0.0.68 184ce81b +%rdm2eprint(1) irdmtools user manual | version 0.0.68 0b325708 % R. S. Doiel and Tom Morrell % 2024-01-16 diff --git a/rdm2eprint.go b/rdm2eprint.go index bdf28919..d9d75117 100644 --- a/rdm2eprint.go +++ b/rdm2eprint.go @@ -272,10 +272,7 @@ func CrosswalkRdmToEPrint(cfg *Config, rec *simplified.Record, eprint *eprinttoo if resolverID, ok := getIdentifier(rec.Metadata.Identifiers, "resolverid"); ok { eprint.OfficialURL = fmt.Sprintf("https://resolver.caltech.edu/%s", resolverID) eprint.IDNumber = resolverID - } else if rec.ID != "" { - //NOTE: We need to assemble an appropriate RDM url since resolver isn't available - eprint.OfficialURL = fmt.Sprintf("%s/records/%s", cfg.InvenioAPI, rec.ID) - } + } } if rec.Metadata.Rights != nil && len(rec.Metadata.Rights) > 0 { if rights, ok := rec.Metadata.Rights[0].Description["en"]; ok { @@ -455,6 +452,11 @@ func CrosswalkRdmToEPrint(cfg *Config, rec *simplified.Record, eprint *eprinttoo } + // Make sure we populate Official URL is populated if we don't have a resolver URL available + if eprint.OfficialURL == "" && rec.ID != "" { + //NOTE: We need to assemble an appropriate RDM url since resolver isn't available + eprint.OfficialURL = fmt.Sprintf("%s/records/%s", cfg.InvenioAPI, rec.ID) + } // Now that we have enough information the eprint structure we can answer some questions // and infer values. @@ -623,8 +625,8 @@ func (app *Rdm2EPrint) Configure(configFName string, envPrefix string, debug boo app.Cfg.Debug = true } // Make sure we have a minimal useful configuration - if (app.Cfg.InvenioAPI == "" || app.Cfg.InvenioToken == "") && app.Cfg.InvenioDbHost == "" { - return fmt.Errorf("RDM_URL and RDMTOK are not set, RDM_DB_HOST is not set.") + if app.Cfg.InvenioAPI == "" || (app.Cfg.InvenioToken == "" && app.Cfg.InvenioDbHost == "") { + return fmt.Errorf("RDM_URL, RDMTOK or RDM_DB_HOST are missing") } return nil } diff --git a/rdmutil.1.md b/rdmutil.1.md index df8d77a7..06d92445 100644 --- a/rdmutil.1.md +++ b/rdmutil.1.md @@ -1,4 +1,4 @@ -%rdmutil(1) irdmtools user manual | version 0.0.68 184ce81b +%rdmutil(1) irdmtools user manual | version 0.0.68 0b325708 % R. S. Doiel and Tom Morrell % 2024-01-16 diff --git a/version.go b/version.go index 148f2f3a..352c1c79 100644 --- a/version.go +++ b/version.go @@ -12,7 +12,7 @@ const ( ReleaseDate = "2024-01-16" // ReleaseHash, the Git hash when version.go was generated - ReleaseHash = "184ce81b" + ReleaseHash = "0b325708" LicenseText = ` Redistribution and use in source and binary forms, with or without From 9eb40b17f5f9d570a005789f2300fecff4582c7b Mon Sep 17 00:00:00 2001 From: "R. S. Doiel" Date: Tue, 16 Jan 2024 17:21:06 -0800 Subject: [PATCH 14/15] fix: official_url in rdm2eprint crosswalk --- doi2rdm.1.md | 2 +- ep3util.1.md | 2 +- eprint2rdm.1.md | 2 +- eprintrest.1.md | 2 +- man/man1/doi2rdm.1 | 2 +- man/man1/ep3util.1 | 2 +- man/man1/eprint2rdm.1 | 2 +- man/man1/eprintrest.1 | 2 +- man/man1/people2vocabulary.1 | 2 +- man/man1/rdm2eprint.1 | 2 +- man/man1/rdmutil.1 | 2 +- people2vocabulary.1.md | 2 +- rdm2eprint.1.md | 2 +- rdmutil.1.md | 2 +- version.go | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/doi2rdm.1.md b/doi2rdm.1.md index 420f1099..eac5e169 100644 --- a/doi2rdm.1.md +++ b/doi2rdm.1.md @@ -1,4 +1,4 @@ -%doi2rdm(1) irdmtools user manual | version 0.0.68 0b325708 +%doi2rdm(1) irdmtools user manual | version 0.0.68 2425acab % R. S. Doiel and Tom Morrell % 2024-01-16 diff --git a/ep3util.1.md b/ep3util.1.md index 321954fd..6eed6784 100644 --- a/ep3util.1.md +++ b/ep3util.1.md @@ -1,4 +1,4 @@ -%ep3util(1) irdmtools user manual | version 0.0.68 0b325708 +%ep3util(1) irdmtools user manual | version 0.0.68 2425acab % R. S. Doiel and Tom Morrell % 2024-01-16 diff --git a/eprint2rdm.1.md b/eprint2rdm.1.md index 2ac4d883..d9d33df0 100644 --- a/eprint2rdm.1.md +++ b/eprint2rdm.1.md @@ -1,4 +1,4 @@ -%eprint2rdm(1) irdmtools user manual | version 0.0.68 0b325708 +%eprint2rdm(1) irdmtools user manual | version 0.0.68 2425acab % R. S. Doiel and Tom Morrell % 2024-01-16 diff --git a/eprintrest.1.md b/eprintrest.1.md index f396ed20..575dd826 100644 --- a/eprintrest.1.md +++ b/eprintrest.1.md @@ -1,4 +1,4 @@ -%eprintrest(1) irdmtools user manual | version 0.0.68 0b325708 +%eprintrest(1) irdmtools user manual | version 0.0.68 2425acab % R. S. Doiel and Tom Morrell % 2024-01-16 diff --git a/man/man1/doi2rdm.1 b/man/man1/doi2rdm.1 index 71674784..8b348fea 100644 --- a/man/man1/doi2rdm.1 +++ b/man/man1/doi2rdm.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "doi2rdm" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 0b325708" +.TH "doi2rdm" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 2425acab" .SH NAME doi2rdm .SH SYNOPSIS diff --git a/man/man1/ep3util.1 b/man/man1/ep3util.1 index 12a063e7..f5da0d48 100644 --- a/man/man1/ep3util.1 +++ b/man/man1/ep3util.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "ep3util" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 0b325708" +.TH "ep3util" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 2425acab" .SH NAME ep3util .SH SYNOPSIS diff --git a/man/man1/eprint2rdm.1 b/man/man1/eprint2rdm.1 index 0b0c781d..524aac16 100644 --- a/man/man1/eprint2rdm.1 +++ b/man/man1/eprint2rdm.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "eprint2rdm" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 0b325708" +.TH "eprint2rdm" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 2425acab" .SH NAME eprint2rdm .SH SYNOPSIS diff --git a/man/man1/eprintrest.1 b/man/man1/eprintrest.1 index 84d58164..d3cb2bd4 100644 --- a/man/man1/eprintrest.1 +++ b/man/man1/eprintrest.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "eprintrest" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 0b325708" +.TH "eprintrest" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 2425acab" .SH NAME eprintrest .SH SYNOPSIS diff --git a/man/man1/people2vocabulary.1 b/man/man1/people2vocabulary.1 index c785a6a6..69a75d90 100644 --- a/man/man1/people2vocabulary.1 +++ b/man/man1/people2vocabulary.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "people2vocabulary" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 0b325708" +.TH "people2vocabulary" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 2425acab" .SH NAME people2vocabulary .SH SYNOPSIS diff --git a/man/man1/rdm2eprint.1 b/man/man1/rdm2eprint.1 index 459a950c..9b5f6b7b 100644 --- a/man/man1/rdm2eprint.1 +++ b/man/man1/rdm2eprint.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "rdm2eprint" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 0b325708" +.TH "rdm2eprint" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 2425acab" .SH NAME rdm2eprint .SH SYNOPSIS diff --git a/man/man1/rdmutil.1 b/man/man1/rdmutil.1 index 05f6e1e7..fdcd4516 100644 --- a/man/man1/rdmutil.1 +++ b/man/man1/rdmutil.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "rdmutil" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 0b325708" +.TH "rdmutil" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 2425acab" .SH NAME rdmutil .SH SYNOPSIS diff --git a/people2vocabulary.1.md b/people2vocabulary.1.md index ada8f385..dd04325e 100644 --- a/people2vocabulary.1.md +++ b/people2vocabulary.1.md @@ -1,4 +1,4 @@ -%people2vocabulary(1) irdmtools user manual | version 0.0.68 0b325708 +%people2vocabulary(1) irdmtools user manual | version 0.0.68 2425acab % R. S. Doiel % 2024-01-16 diff --git a/rdm2eprint.1.md b/rdm2eprint.1.md index 04c7440f..d87bde2d 100644 --- a/rdm2eprint.1.md +++ b/rdm2eprint.1.md @@ -1,4 +1,4 @@ -%rdm2eprint(1) irdmtools user manual | version 0.0.68 0b325708 +%rdm2eprint(1) irdmtools user manual | version 0.0.68 2425acab % R. S. Doiel and Tom Morrell % 2024-01-16 diff --git a/rdmutil.1.md b/rdmutil.1.md index 06d92445..46b2f0d3 100644 --- a/rdmutil.1.md +++ b/rdmutil.1.md @@ -1,4 +1,4 @@ -%rdmutil(1) irdmtools user manual | version 0.0.68 0b325708 +%rdmutil(1) irdmtools user manual | version 0.0.68 2425acab % R. S. Doiel and Tom Morrell % 2024-01-16 diff --git a/version.go b/version.go index 352c1c79..d501c15e 100644 --- a/version.go +++ b/version.go @@ -12,7 +12,7 @@ const ( ReleaseDate = "2024-01-16" // ReleaseHash, the Git hash when version.go was generated - ReleaseHash = "0b325708" + ReleaseHash = "2425acab" LicenseText = ` Redistribution and use in source and binary forms, with or without From 6072d0afd79ccba58d234a4badccf6a6d61d2343 Mon Sep 17 00:00:00 2001 From: "R. S. Doiel" Date: Tue, 16 Jan 2024 17:28:24 -0800 Subject: [PATCH 15/15] Quick Save --- TODO.html | 15 ++++++++++----- about.html | 4 ++-- doi2rdm.1.md | 2 +- ep3util.1.md | 2 +- eprint2rdm.1.md | 2 +- eprintrest.1.md | 2 +- index.html | 3 +++ man/man1/doi2rdm.1 | 2 +- man/man1/ep3util.1 | 2 +- man/man1/eprint2rdm.1 | 2 +- man/man1/eprintrest.1 | 2 +- man/man1/people2vocabulary.1 | 2 +- man/man1/rdm2eprint.1 | 2 +- man/man1/rdmutil.1 | 2 +- pagefind/fragment/unknown_feb5b1c.pf_fragment | Bin 0 -> 592 bytes pagefind/index/unknown_4936f68.pf_index | Bin 0 -> 24443 bytes pagefind/pagefind-entry.json | 2 +- .../pagefind.unknown_c3f1356fdb357ca.pf_meta | Bin 0 -> 245 bytes people2vocabulary.1.md | 2 +- rdm2eprint.1.md | 2 +- rdmutil.1.md | 2 +- version.go | 2 +- 22 files changed, 31 insertions(+), 23 deletions(-) create mode 100644 pagefind/fragment/unknown_feb5b1c.pf_fragment create mode 100644 pagefind/index/unknown_4936f68.pf_index create mode 100644 pagefind/pagefind.unknown_c3f1356fdb357ca.pf_meta diff --git a/TODO.html b/TODO.html index f404dd78..3a6ca2f8 100644 --- a/TODO.html +++ b/TODO.html @@ -26,9 +26,13 @@

        Action Items

        Bugs

          -
        • +
        • +
        • @@ -85,8 +89,9 @@

          Bugs

        Next

          -
        • +
        • diff --git a/about.html b/about.html index 03eb6e0b..0db72696 100644 --- a/about.html +++ b/about.html @@ -24,7 +24,7 @@

          About this software

          -

          irdmtools 0.0.67

          +

          irdmtools 0.0.68

          Authors

          • R. S. Doiel
          • @@ -59,7 +59,7 @@

            Operating Systems

          Software Requiremets

            -
          • Go >= 1.20.4
          • +
          • Go >= 1.21.6
          • PostgreSQL >= 15
          • PostgREST >= 11
          • Pandoc >= 3
          • diff --git a/doi2rdm.1.md b/doi2rdm.1.md index eac5e169..82b3bce2 100644 --- a/doi2rdm.1.md +++ b/doi2rdm.1.md @@ -1,4 +1,4 @@ -%doi2rdm(1) irdmtools user manual | version 0.0.68 2425acab +%doi2rdm(1) irdmtools user manual | version 0.0.68 9eb40b17 % R. S. Doiel and Tom Morrell % 2024-01-16 diff --git a/ep3util.1.md b/ep3util.1.md index 6eed6784..9dcd2443 100644 --- a/ep3util.1.md +++ b/ep3util.1.md @@ -1,4 +1,4 @@ -%ep3util(1) irdmtools user manual | version 0.0.68 2425acab +%ep3util(1) irdmtools user manual | version 0.0.68 9eb40b17 % R. S. Doiel and Tom Morrell % 2024-01-16 diff --git a/eprint2rdm.1.md b/eprint2rdm.1.md index d9d33df0..a30db61f 100644 --- a/eprint2rdm.1.md +++ b/eprint2rdm.1.md @@ -1,4 +1,4 @@ -%eprint2rdm(1) irdmtools user manual | version 0.0.68 2425acab +%eprint2rdm(1) irdmtools user manual | version 0.0.68 9eb40b17 % R. S. Doiel and Tom Morrell % 2024-01-16 diff --git a/eprintrest.1.md b/eprintrest.1.md index 575dd826..c534399f 100644 --- a/eprintrest.1.md +++ b/eprintrest.1.md @@ -1,4 +1,4 @@ -%eprintrest(1) irdmtools user manual | version 0.0.68 2425acab +%eprintrest(1) irdmtools user manual | version 0.0.68 9eb40b17 % R. S. Doiel and Tom Morrell % 2024-01-16 diff --git a/index.html b/index.html index bbff1b37..c198e1bd 100644 --- a/index.html +++ b/index.html @@ -23,6 +23,9 @@
            +

            Institutional Repository Data Management Tools

            This is a proof of concept set tools for working with Invenio RDM and diff --git a/man/man1/doi2rdm.1 b/man/man1/doi2rdm.1 index 8b348fea..bb8a8571 100644 --- a/man/man1/doi2rdm.1 +++ b/man/man1/doi2rdm.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "doi2rdm" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 2425acab" +.TH "doi2rdm" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 9eb40b17" .SH NAME doi2rdm .SH SYNOPSIS diff --git a/man/man1/ep3util.1 b/man/man1/ep3util.1 index f5da0d48..124b0aad 100644 --- a/man/man1/ep3util.1 +++ b/man/man1/ep3util.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "ep3util" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 2425acab" +.TH "ep3util" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 9eb40b17" .SH NAME ep3util .SH SYNOPSIS diff --git a/man/man1/eprint2rdm.1 b/man/man1/eprint2rdm.1 index 524aac16..80204dd3 100644 --- a/man/man1/eprint2rdm.1 +++ b/man/man1/eprint2rdm.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "eprint2rdm" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 2425acab" +.TH "eprint2rdm" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 9eb40b17" .SH NAME eprint2rdm .SH SYNOPSIS diff --git a/man/man1/eprintrest.1 b/man/man1/eprintrest.1 index d3cb2bd4..81ce425b 100644 --- a/man/man1/eprintrest.1 +++ b/man/man1/eprintrest.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "eprintrest" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 2425acab" +.TH "eprintrest" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 9eb40b17" .SH NAME eprintrest .SH SYNOPSIS diff --git a/man/man1/people2vocabulary.1 b/man/man1/people2vocabulary.1 index 69a75d90..4f5863b7 100644 --- a/man/man1/people2vocabulary.1 +++ b/man/man1/people2vocabulary.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "people2vocabulary" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 2425acab" +.TH "people2vocabulary" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 9eb40b17" .SH NAME people2vocabulary .SH SYNOPSIS diff --git a/man/man1/rdm2eprint.1 b/man/man1/rdm2eprint.1 index 9b5f6b7b..accd5b6f 100644 --- a/man/man1/rdm2eprint.1 +++ b/man/man1/rdm2eprint.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "rdm2eprint" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 2425acab" +.TH "rdm2eprint" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 9eb40b17" .SH NAME rdm2eprint .SH SYNOPSIS diff --git a/man/man1/rdmutil.1 b/man/man1/rdmutil.1 index fdcd4516..62f93f31 100644 --- a/man/man1/rdmutil.1 +++ b/man/man1/rdmutil.1 @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 3.1.11.1 .\" -.TH "rdmutil" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 2425acab" +.TH "rdmutil" "1" "2024\-01\-16" "irdmtools user manual" "version 0.0.68 9eb40b17" .SH NAME rdmutil .SH SYNOPSIS diff --git a/pagefind/fragment/unknown_feb5b1c.pf_fragment b/pagefind/fragment/unknown_feb5b1c.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..f4c45798439e87db340a345cf21d79ac9567947d GIT binary patch literal 592 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