From 21ad7b17910c82002888d57bf2ea4b584da46a27 Mon Sep 17 00:00:00 2001 From: "R. S. Doiel" Date: Tue, 12 Sep 2023 16:28:34 -0700 Subject: [PATCH 01/11] feat: implemented very fast clone of part of EPrint REST API for the eprint dataset, eprintrest --- .gitignore | 2 + Makefile | 2 +- cmd/eprintrest/eprintrest.go | 166 +++++++++ doi2rdm.1.md | 2 +- eprint2rdm.1.md | 2 +- eprintrest.1.html | 115 ++++++ eprintrest.1.md | 81 +++++ eprintrest.go | 336 ++++++++++++++++++ man/man1/doi2rdm.1 | 2 +- man/man1/eprint2rdm.1 | 2 +- man/man1/eprintrest.1 | 101 ++++++ man/man1/people2vocabulary.1 | 2 +- man/man1/rdmutil.1 | 2 +- pagefind/fragment/unknown_7cf1198.pf_fragment | Bin 0 -> 922 bytes pagefind/index/unknown_68fceb6.pf_index | Bin 0 -> 17900 bytes pagefind/pagefind-entry.json | 2 +- .../pagefind.unknown_29fa54e2969ebdb.pf_meta | Bin 0 -> 215 bytes people2vocabulary.1.md | 2 +- rdmutil.1.md | 2 +- version.go | 2 +- 20 files changed, 812 insertions(+), 11 deletions(-) create mode 100644 cmd/eprintrest/eprintrest.go create mode 100644 eprintrest.1.html create mode 100644 eprintrest.1.md create mode 100644 eprintrest.go create mode 100644 man/man1/eprintrest.1 create mode 100644 pagefind/fragment/unknown_7cf1198.pf_fragment create mode 100644 pagefind/index/unknown_68fceb6.pf_index create mode 100644 pagefind/pagefind.unknown_29fa54e2969ebdb.pf_meta diff --git a/.gitignore b/.gitignore index c404eeef..7fd0ec6d 100644 --- a/.gitignore +++ b/.gitignore @@ -107,3 +107,5 @@ test-*.txt *.yaml s3_uploads/ migration/ +testdata +*.bash diff --git a/Makefile b/Makefile index fcf7b9d9..e7b4b60c 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ RELEASE_DATE = $(shell date +%Y-%m-%d) RELEASE_HASH=$(shell git log --pretty=format:'%h' -n 1) -PROGRAMS = rdmutil eprint2rdm doi2rdm people2vocabulary # $(shell ls -1 cmd) +PROGRAMS = rdmutil eprint2rdm eprintrest doi2rdm people2vocabulary # $(shell ls -1 cmd) MAN_PAGES = $(shell ls -1 *.1.md | sed -E 's/\.1.md/.1/g') diff --git a/cmd/eprintrest/eprintrest.go b/cmd/eprintrest/eprintrest.go new file mode 100644 index 00000000..6e972812 --- /dev/null +++ b/cmd/eprintrest/eprintrest.go @@ -0,0 +1,166 @@ +// eprintrest is a command line program that re-creates a EPrints 3.x REST +// API running on localhost. It requires access to the repository's +// "archives" directory as well as the MySQL database. +// +// @author R. S. Doiel, +// @author Tom Morrell, +// +// Copyright (c) 2023, Caltech +// All rights not granted herein are expressly reserved by Caltech. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors +// may be used to endorse or promote products derived from this software without +// specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +package main + +import ( + "flag" + "fmt" + "os" + "path" + + // Caltech Library packages + "github.com/caltechlibrary/irdmtools" +) + +var ( + helpText = `%{app_name}(1) irdmtools user manual | version {version} {release_hash} +% R. S. Doiel and Tom Morrell +% {release_date} + +# NAME + +{app_name} + +# SYNOPSIS + +{app_name} [OPTIONS] + +# DESCRIPTION + +{app_name} is a Caltech Library centric localhost web service +that creates a funcionally similar replica of the EPrints REST API +for EPrints 3.3.x based repositories. It uses the path to the +"archives" directory and a MySQL Database for the repository. +It only supports "archive" eprint.eprint_status records and +only the complete XML. Start up time is slow because it builds +the data structures representing the content in memory. This +makes the response times to request VERY fast compared to +the EPrints REST API. + +NOTE: the rest API does not enforce user permissions, restrictions +or roles. It is a minimal READ ONLY re-implementation of the EPrints 3.3 +REST API! + +The application is configured from the environment. The following +environment variables need to be set. + +REPO_ID +: The repository id string (e.g. caltechauthors). Also the name of the database for the repository. + +EPRINT_ARCHIVES_PATH +: A path to the "archives" directory holding your repository content +(e.g. /usr/local/eprints/archives) + +DB_USER +: The user name needed to access the MySQL database[^1] + +DB_PASSWORD +: The password needed to access the MySQL database[^1] + +REST_PORT +: The localhost port to use for the read only REST API. + +[^1]: MySQL, like this REST service assumes to be running on localhost. + + +# OPTIONS + +-help +: display help + +-license +: display license + +-version +: display version + + +# EXAMPLE + +This is an example environment + +~~~ +REPO_ID="caltechauthors" +EPRINT_ARCHIVES_PATH="/code/eprints3.3/archives" +REST_PORT=80 +DB_USER="eprints" +DB_PASSWORD="something_secret_here" +~~~ + +Running the localhost REST API clone + +~~~ +{app_name} +~~~ + +` +) + +func main() { + appName := path.Base(os.Args[0]) + // NOTE: The following are set when version.go is generated + version := irdmtools.Version + releaseDate := irdmtools.ReleaseDate + releaseHash := irdmtools.ReleaseHash + fmtHelp := irdmtools.FmtHelp + + showHelp, showVersion, showLicense := false, false, false + flag.BoolVar(&showHelp, "help", false, "display help") + flag.BoolVar(&showVersion, "version", false, "display version") + flag.BoolVar(&showLicense, "license", false, "display license") + + flag.Parse() + + if showHelp { + fmt.Fprintf(os.Stdout, "%s\n", fmtHelp(helpText, appName, version, releaseDate, releaseHash)) + os.Exit(0) + } + if showVersion { + fmt.Fprintf(os.Stdout, "%s %s %s\n", appName, version, releaseHash) + os.Exit(0) + } + if showLicense { + fmt.Fprintf(os.Stdout, "%s\n", irdmtools.LicenseText) + os.Exit(0) + } + + // Create a appity object + app := new(irdmtools.EPrintRest) + if err := app.Run(os.Stdin, os.Stdout, os.Stderr); err != nil { + fmt.Fprintf(os.Stderr, "%s\n", err) + os.Exit(1) + } +} diff --git a/doi2rdm.1.md b/doi2rdm.1.md index ef856150..4ca7b598 100644 --- a/doi2rdm.1.md +++ b/doi2rdm.1.md @@ -1,4 +1,4 @@ -%doi2rdm(1) irdmtools user manual | version 0.0.48 fb9e58e +%doi2rdm(1) irdmtools user manual | version 0.0.48 0238bfa % R. S. Doiel and Tom Morrell % 2023-09-12 diff --git a/eprint2rdm.1.md b/eprint2rdm.1.md index c90a7668..6f6e760d 100644 --- a/eprint2rdm.1.md +++ b/eprint2rdm.1.md @@ -1,4 +1,4 @@ -%eprint2rdm(1) irdmtools user manual | version 0.0.48 fb9e58e +%eprint2rdm(1) irdmtools user manual | version 0.0.48 0238bfa % R. S. Doiel and Tom Morrell % 2023-09-12 diff --git a/eprintrest.1.html b/eprintrest.1.html new file mode 100644 index 00000000..007b8e86 --- /dev/null +++ b/eprintrest.1.html @@ -0,0 +1,115 @@ + + + + Institutional Repository Data Management + + + + +
+Caltech Library logo +
+ + +
+

NAME

+

eprintrest

+

SYNOPSIS

+

eprintrest OPTIONS

+

DESCRIPTION

+

eprintrest is a Caltech Library centric localhost web service that +creates a funcionally similar replica of the EPrints REST API for +EPrints 3.3.x based repositories. It uses the path to the “archives” +directory and a MySQL Database for the repository. It only supports +“archive” eprint.eprint_status records and only the complete XML. Start +up time is slow because it builds the data structures representing the +content in memory. This makes the response times to request VERY fast +compared to the EPrints REST API.

+

NOTE: the rest API does not enforce user permissions, restrictions or +roles. It is a minimal READ ONLY re-implementation of the EPrints 3.3 +REST API!

+

The application is configured from the environment. The following +environment variables need to be set.

+
+
REPO_ID
+
+The repository id string (e.g. caltechauthors). Also the name of the +database for the repository. +
+
EPRINT_ARCHIVES_PATH
+
+A path to the “archives” directory holding your repository content +(e.g. /usr/local/eprints/archives) +
+
DB_USER
+
+The user name needed to access the MySQL database1 +
+
DB_PASSWORD
+
+The password needed to access the MySQL database2 +
+
REST_PORT
+
+The localhost port to use for the read only REST API. +
+
+

OPTIONS

+
+
-help
+
+display help +
+
-license
+
+display license +
+
-version
+
+display version +
+
+

EXAMPLE

+

This is an example environment

+
REPO_ID="caltechauthors"
+EPRINT_ARCHIVES_PATH="/code/eprints3.3/archives"
+REST_PORT=80
+DB_USER="eprints"
+DB_PASSWORD="something_secret_here"
+

Running the localhost REST API clone

+
eprintrest
+ +
+ + + + diff --git a/eprintrest.1.md b/eprintrest.1.md new file mode 100644 index 00000000..6838b4c8 --- /dev/null +++ b/eprintrest.1.md @@ -0,0 +1,81 @@ +%eprintrest(1) irdmtools user manual | version 0.0.48 0238bfa +% R. S. Doiel and Tom Morrell +% 2023-09-12 + +# NAME + +eprintrest + +# SYNOPSIS + +eprintrest [OPTIONS] + +# DESCRIPTION + +eprintrest is a Caltech Library centric localhost web service +that creates a funcionally similar replica of the EPrints REST API +for EPrints 3.3.x based repositories. It uses the path to the +"archives" directory and a MySQL Database for the repository. +It only supports "archive" eprint.eprint_status records and +only the complete XML. Start up time is slow because it builds +the data structures representing the content in memory. This +makes the response times to request VERY fast compared to +the EPrints REST API. + +NOTE: the rest API does not enforce user permissions, restrictions +or roles. It is a minimal READ ONLY re-implementation of the EPrints 3.3 +REST API! + +The application is configured from the environment. The following +environment variables need to be set. + +REPO_ID +: The repository id string (e.g. caltechauthors). Also the name of the database for the repository. + +EPRINT_ARCHIVES_PATH +: A path to the "archives" directory holding your repository content +(e.g. /usr/local/eprints/archives) + +DB_USER +: The user name needed to access the MySQL database[^1] + +DB_PASSWORD +: The password needed to access the MySQL database[^1] + +REST_PORT +: The localhost port to use for the read only REST API. + +[^1]: MySQL, like this REST service assumes to be running on localhost. + + +# OPTIONS + +-help +: display help + +-license +: display license + +-version +: display version + + +# EXAMPLE + +This is an example environment + +~~~ +REPO_ID="caltechauthors" +EPRINT_ARCHIVES_PATH="/code/eprints3.3/archives" +REST_PORT=80 +DB_USER="eprints" +DB_PASSWORD="something_secret_here" +~~~ + +Running the localhost REST API clone + +~~~ +eprintrest +~~~ + + diff --git a/eprintrest.go b/eprintrest.go new file mode 100644 index 00000000..0bb4a095 --- /dev/null +++ b/eprintrest.go @@ -0,0 +1,336 @@ +// irdmtools is a package for working with institutional repositories and +// data management systems. Current implementation targets Invenio-RDM. +// +// @author R. S. Doiel, +// @author Tom Morrell, +// +// Copyright (c) 2023, Caltech +// All rights not granted herein are expressly reserved by Caltech. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors +// may be used to endorse or promote products derived from this software without +// specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +package irdmtools + +import ( + "database/sql" + "fmt" + "io" + "log" + "net/http" + "os" + "strings" + "time" + + // 3rd Party packages + _ "github.com/go-sql-driver/mysql" +) + +// EPrintRest the "app" structure for the service. +type EPrintRest struct { + RepoID string `json:"repo_id,required"` + EPrintArchivesPath string `json:"eprint_archives_path,required"` + Port string `json:"rest_port,omitempty"` + DbHost string `json:"db_host,omitempty` + DbUser string `json:"db_user,omitempty` + DbPassword string `json:"db_password,omitempty` + in io.Reader + out io.Writer + eout io.Writer +} + +var ( + restPage = ` + + + {repo_id} REST: Datasets + + +

{repo_id} REST: Datasets

+ + +` + + datasetPage = ` + + + {repo_id} REST: {dataset} DataSet + + +

{repo_id} REST: {dataset} DataSet

+
    + {list_of_li} +
+ +` + + idFields = map[string]string{ + "eprint": "eprintid", + "user": "userid", + "subject": "subjectid", + } +) + +// LoadEnv settings from the enviroment to run a local host clone +// of the EPrints REST API using the archives content and MySQL database. +func (app *EPrintRest) LoadEnv() { + app.RepoID = os.Getenv("REPO_ID") + app.EPrintArchivesPath = os.Getenv("EPRINT_ARCHIVES_PATH") + app.Port = os.Getenv("REST_PORT") + if app.Port == "" { + app.Port = ":8003" + } else if ! strings.HasPrefix(app.Port, ":") { + app.Port = ":" + app.Port + } + app.DbUser = os.Getenv("DB_USER") + app.DbPassword = os.Getenv("DB_PASSWORD") +} + +func transformTxt(s string, target string, dest string) string { + return strings.ReplaceAll(s, target, dest) +} + +// MkDatasetPage takes the simple page template and maps the dataset and label +// rendering the HTML page as a string +func (app *EPrintRest) MkDatasetPage(db *sql.DB, tmpl string, dataset string, label string) (string, error) { + src := transformTxt(transformTxt(tmpl, "{repo_id}", app.RepoID), "{dataset}", label) + // Figure out which dataset we're working with and retrieve the ids building a list of + // LI elements in the form `
  • {id}.xml
  • ` + items := []string{} + idField, ok := idFields[dataset] + if !ok { + return "", fmt.Errorf("%q is not a supported dataset", dataset) + } + queryTxt := transformTxt(transformTxt(`SELECT {idField} AS id FROM {dataset} ORDER BY {idField}`, `{idField}`, idField), `{dataset}`, dataset) + rows, err := db.Query(queryTxt) + if err != nil { + return "", err + } + defer rows.Close() + liTmpl := transformTxt(`
  • {id}.xml
  • `, `{dataset}`, dataset) + for rows.Next() { + var id string + if err := rows.Scan(&id); err != nil { + return "", err + } + items = append(items, transformTxt(liTmpl, `{id}`, id)) + + } + return transformTxt(src, "{list_of_li}", strings.Join(items, "\n")), nil +} + +// RequestLogger logs http request to service +func RequestLogger(targetMux http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + start := time.Now() + targetMux.ServeHTTP(w, r) + + // log request by who(IP address) + requesterIP := r.RemoteAddr + + log.Printf( + "%s\t\t%s\t\t%s\t\t%v", + r.Method, + r.RequestURI, + requesterIP, + time.Since(start), + ) + }) + } + +// EPrintXMLPath takes the app setup and generates the path do the EPrintXML document from +// an id. +func (app *EPrintRest) EPrintXMLPath(db *sql.DB, id string) (string, error) { + queryTxt := `SELECT IFNULL(dir, "") AS dir, IFNULL(rev_number, "") AS rev_number FROM eprint WHERE eprintid = ?` + rows, err := db.Query(queryTxt, id) + if err != nil { + return "", err + } + defer rows.Close() + for rows.Next() { + var ( + dir string + revNumber string + ) + if err := rows.Scan(&dir, &revNumber); err != nil { + return "", err + } + return fmt.Sprintf("%s/%s/documents/%s/revisions/%s.xml", app.EPrintArchivesPath, app.RepoID, dir, revNumber), nil + } + return "", fmt.Errorf("failed to get next row for eprintid %q", id) +} + +func getIds(db *sql.DB, dataset string) ([]string, error) { + idField, ok := idFields[dataset] + if ! ok { + return nil, fmt.Errorf("unsupported dataset %q", dataset) + } + whereClause := "" + if dataset == "eprint" { + whereClause = `WHERE eprint_status = "archive"` + } + queryTxt := fmt.Sprintf(`SELECT %s FROM %s %s ORDER BY %s`, idField, dataset, whereClause, idField) + ids := []string{} + rows, err := db.Query(queryTxt) + if err != nil { + return nil, err + } + defer rows.Close() + for rows.Next() { + var id string + if err := rows.Scan(&id); err != nil { + return nil, err + } + ids = append(ids, id) + } + return ids, nil +} + +// Serve runs the web service minimally replicating the EPrints 3.x +// REST API. +func (app *EPrintRest) ListenAndServe() error { + db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@/%s", app.DbUser, app.DbPassword, app.RepoID)) + if err != nil { + return err + } + defer db.Close() + + // Preload set pages, content and cache the id list pages + eprintSrc, err := app.MkDatasetPage(db, datasetPage, "eprint", "EPrints") + if err != nil { + return err + } + userSrc, err := app.MkDatasetPage(db, datasetPage, "user", "Users") + if err != nil { + return err + } + subjectSrc, err := app.MkDatasetPage(db, datasetPage, "subject", "Subjects") + if err != nil { + return err + } + restPageSrc := transformTxt(restPage, "{repo_id}", app.RepoID) + + + // Set up our server Mux + mux := http.NewServeMux() + + // Map the on URLs to the disk path to EPrint XML files with the latest version. + eprintXML := map[string]string{} + ids, err := getIds(db, "eprint") + tot := len(ids) + cnt := 0 + for i, id := range ids { + var ( + fName string + src []byte + err error + ) + apiPath := fmt.Sprintf("/rest/eprint/%s.xml", id) + fName, err = app.EPrintXMLPath(db, id) + if err != nil { + return err + } + src, err = os.ReadFile(fName) + if err != nil { + log.Printf("skipping, failed to read record %s from %s", id, fName) + continue + } + eprintXML[apiPath] = fmt.Sprintf("%s", src) + cnt += 1 + if (i % 1000) == 0 { + log.Printf("scanned %d/%d records, read %d", i, tot, cnt) + } + } + log.Printf("found %d/%d records", cnt, tot) + // Handle `/rest/eprint/` and the individual EPrint XML responses + mux.HandleFunc("/rest/eprint/", func(w http.ResponseWriter, req *http.Request) { + // FIXME: Set content type to HTML + if req.URL.Path == "/rest/eprint/" { + io.WriteString(w, eprintSrc) + return + } + if txt, ok := eprintXML[req.URL.Path]; ok { + io.WriteString(w, txt) + return + } + http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound) + }) + + // Handle `/rest/user/` + mux.HandleFunc("/rest/user/", func(w http.ResponseWriter, req *http.Request) { + // FIXME: Set content type to HTML + if req.URL.Path == "/rest/user/" { + io.WriteString(w, userSrc) + return + } + http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound) + }) + + // Handle `/rest/subject/` + mux.HandleFunc("/rest/subject/", func(w http.ResponseWriter, req *http.Request) { + // FIXME: Set content type to HTML + if req.URL.Path == "/rest/subject/" { + io.WriteString(w, subjectSrc) + return + } + http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound) + }) + + // Handle of REST API page `/rest/` and '/' with restPage + mux.HandleFunc("/rest/", func(w http.ResponseWriter, req *http.Request) { + // FIXME: Set content type to HTML + io.WriteString(w, restPageSrc) + }) + /* + mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { + // FIXME: Set content type to HTML + io.WriteString(w, restPageSrc) + }) + */ + // FIXME need to setup a 404 error page response. + log.Printf("Starting REST API for %q up listening on http://localhost%s", app.RepoID, app.Port) + return http.ListenAndServe(app.Port, RequestLogger(mux)) +} + +// Run loads a configuration from the environment and does a sanity check of the service setup +// maps standard in, out and error to the service then invokes app.ListenAndServe(). +func (app *EPrintRest) Run(in io.Reader, out io.Writer, eout io.Writer) error { + app.LoadEnv() + // Sanity check the application's settings. + if app.RepoID == "" || app.EPrintArchivesPath == "" || app.Port == "" { + return fmt.Errorf("repoID, eprint archives path or rest port number missing") + } + if app.DbUser == "" || app.DbPassword == "" { + return fmt.Errorf("MySQL EPrint database access not configured") + } + app.in = in + app.out = out + app.eout = eout + return app.ListenAndServe() +} diff --git a/man/man1/doi2rdm.1 b/man/man1/doi2rdm.1 index b1b4f72e..88040c2b 100644 --- a/man/man1/doi2rdm.1 +++ b/man/man1/doi2rdm.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "doi2rdm" "1" "2023-09-12" "irdmtools user manual" "version 0.0.48 fb9e58e" +.TH "doi2rdm" "1" "2023-09-12" "irdmtools user manual" "version 0.0.48 0238bfa" .hy .SH NAME .PP diff --git a/man/man1/eprint2rdm.1 b/man/man1/eprint2rdm.1 index c3c4be69..44956c33 100644 --- a/man/man1/eprint2rdm.1 +++ b/man/man1/eprint2rdm.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "eprint2rdm" "1" "2023-09-12" "irdmtools user manual" "version 0.0.48 fb9e58e" +.TH "eprint2rdm" "1" "2023-09-12" "irdmtools user manual" "version 0.0.48 0238bfa" .hy .SH NAME .PP diff --git a/man/man1/eprintrest.1 b/man/man1/eprintrest.1 new file mode 100644 index 00000000..bd3c58f0 --- /dev/null +++ b/man/man1/eprintrest.1 @@ -0,0 +1,101 @@ +.\" Automatically generated by Pandoc 3.1.4 +.\" +.\" Define V font for inline verbatim, using C font in formats +.\" that render this, and otherwise B font. +.ie "\f[CB]x\f[]"x" \{\ +. ftr V B +. ftr VI BI +. ftr VB B +. ftr VBI BI +.\} +.el \{\ +. ftr V CR +. ftr VI CI +. ftr VB CB +. ftr VBI CBI +.\} +.TH "eprintrest" "1" "2023-09-12" "irdmtools user manual" "version 0.0.48 0238bfa" +.hy +.SH NAME +.PP +eprintrest +.SH SYNOPSIS +.PP +eprintrest OPTIONS +.SH DESCRIPTION +.PP +eprintrest is a Caltech Library centric localhost web service that +creates a funcionally similar replica of the EPrints REST API for +EPrints 3.3.x based repositories. +It uses the path to the \[lq]archives\[rq] directory and a MySQL +Database for the repository. +It only supports \[lq]archive\[rq] eprint.eprint_status records and only +the complete XML. +Start up time is slow because it builds the data structures representing +the content in memory. +This makes the response times to request VERY fast compared to the +EPrints REST API. +.PP +NOTE: the rest API does not enforce user permissions, restrictions or +roles. +It is a minimal READ ONLY re-implementation of the EPrints 3.3 REST API! +.PP +The application is configured from the environment. +The following environment variables need to be set. +.TP +REPO_ID +The repository id string (e.g.\ caltechauthors). +Also the name of the database for the repository. +.TP +EPRINT_ARCHIVES_PATH +A path to the \[lq]archives\[rq] directory holding your repository +content (e.g.\ /usr/local/eprints/archives) +.TP +DB_USER +The user name needed to access the MySQL database[1] +.TP +DB_PASSWORD +The password needed to access the MySQL database[2] +.TP +REST_PORT +The localhost port to use for the read only REST API. +.SH OPTIONS +.TP +-help +display help +.TP +-license +display license +.TP +-version +display version +.SH EXAMPLE +.PP +This is an example environment +.IP +.nf +\f[C] +REPO_ID=\[dq]caltechauthors\[dq] +EPRINT_ARCHIVES_PATH=\[dq]/code/eprints3.3/archives\[dq] +REST_PORT=80 +DB_USER=\[dq]eprints\[dq] +DB_PASSWORD=\[dq]something_secret_here\[dq] +\f[R] +.fi +.PP +Running the localhost REST API clone +.IP +.nf +\f[C] +eprintrest +\f[R] +.fi +.SH NOTES +.SS [1] +.PP +MySQL, like this REST service assumes to be running on localhost. +.SS [2] +.PP +MySQL, like this REST service assumes to be running on localhost. +.SH AUTHORS +R. S. Doiel and Tom Morrell. diff --git a/man/man1/people2vocabulary.1 b/man/man1/people2vocabulary.1 index 1fa7339c..279a0d31 100644 --- a/man/man1/people2vocabulary.1 +++ b/man/man1/people2vocabulary.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "people2vocabulary" "1" "2023-09-12" "irdmtools user manual" "version 0.0.48 fb9e58e" +.TH "people2vocabulary" "1" "2023-09-12" "irdmtools user manual" "version 0.0.48 0238bfa" .hy .SH NAME .PP diff --git a/man/man1/rdmutil.1 b/man/man1/rdmutil.1 index d4f1b19d..4ad47226 100644 --- a/man/man1/rdmutil.1 +++ b/man/man1/rdmutil.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "rdmutil" "1" "2023-09-12" "irdmtools user manual" "version 0.0.48 fb9e58e" +.TH "rdmutil" "1" "2023-09-12" "irdmtools user manual" "version 0.0.48 0238bfa" .hy .SH NAME .PP diff --git a/pagefind/fragment/unknown_7cf1198.pf_fragment b/pagefind/fragment/unknown_7cf1198.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..bec8baa7bd458ed6b26777a63302ecf3778abbc5 GIT binary patch literal 922 zcmV;L17-XliwFP!00002|E*Qcj@vd6ewC?C4X`VBvzKCl9Ne{l81UMz<)&F6fIw5@ z6%mS5Ny-}|SRkh!`vfh}Yu}*fKFYp8U!gOU0Vet?beSaO{8Dp;q`r!WoB zdb)!l8WAc8HoiZ9`c*htsU7;~PrpH_97>AWgD@o}bhppHpTR@~!JzRjjyhoPBeFG| zZ`(B1Q4&W;M(p@WyGP-J2(71hXStqd(G!RgV1h*##JhmKl z&+It-sby8)WUG7F3VP!Ng(GTv?mm|yh52Hg-3)jk%2Qf`Gd2JkVvi)J^c^(lYUMp? z?Jwe4vPj?+5W~*uUb5(@S{YRfP1lSku$a&8Dd18uS2finIP7zCkPi-7eMO}rh$gxy z9wt;GWUC%pE@ta&9fQ&Al(U9G(-^b0nmA_;Pd>p;I3+fktHO?p4U(TJW|b`$#dH#5 zj}8G->up#@cs`8bMn3wUqy5x@@_c&ez3wb^ChyCd-TE zc>Nm2U*_z}>XNhB+t!`tIhdr+a@2Y^ie1}}4?i04UcltL;)gt2#Zsf7F>@xQqeMuF zzH?UBLPIrI9J(Cm`HzcL$5bP{f23~slIWLF)nd6=tz+zQsBr6XXnRJO=-cb)(8CbB ztWY<^if^slmiIilRp0r;EGHe?es)ktxE`EXI$)>IKmYOfpTDI48xZ}* w*gA!@E&s``US3}$TSWvrpWJ+Wx=5&SL2pS=L1X``OP-$o0kI*8fF%b200P{>lmGw# literal 0 HcmV?d00001 diff --git a/pagefind/index/unknown_68fceb6.pf_index b/pagefind/index/unknown_68fceb6.pf_index new file mode 100644 index 0000000000000000000000000000000000000000..6fca17c4fbbcba3c70c3b05d9c77b65c685c39f6 GIT binary patch literal 17900 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Νym5 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 b+{JdglvGN2F0>OP{>c9WluzMpJahm6PxRgh literal 0 HcmV?d00001 diff --git a/pagefind/pagefind-entry.json b/pagefind/pagefind-entry.json index 9df4f931..0b54c005 100644 --- a/pagefind/pagefind-entry.json +++ b/pagefind/pagefind-entry.json @@ -1 +1 @@ -{"version":"0.12.0","languages":{"unknown":{"hash":"unknown_48584b63b23e7dc","wasm":null,"page_count":15}}} \ No newline at end of file +{"version":"0.12.0","languages":{"unknown":{"hash":"unknown_29fa54e2969ebdb","wasm":null,"page_count":16}}} \ No newline at end of file diff --git a/pagefind/pagefind.unknown_29fa54e2969ebdb.pf_meta b/pagefind/pagefind.unknown_29fa54e2969ebdb.pf_meta new file mode 100644 index 0000000000000000000000000000000000000000..3f05825eac42f7caee7737db6f8a8db6f2d51be9 GIT binary patch literal 215 zcmV;|04V<-iwFP!00002|4q-qO@lEE1z?pCkdWLZs>IHpICCIztr9y1gqm^zgt!zC zcgA25HsHiG?Wu{6pPp^K$8y{3zUx*+zszksZru0B{;5Co{Y&2_G4C_O+n~xAFbmua zS~!s`9-gN~;-p?64JuShZ3w>;6*I29UR@6(rJRbaSC^9sn>B(y$RkpS27iN;BNtca zpN(?xWbi-8SmJ^acuJ|&DD7f86$1xlaDxIBTq?rPRMH7!%vbN9>RjNv*VF8Fs^>st RlUC#5a0Ct6^fqS!003dxVoCr2 literal 0 HcmV?d00001 diff --git a/people2vocabulary.1.md b/people2vocabulary.1.md index f43ed7a0..61570649 100644 --- a/people2vocabulary.1.md +++ b/people2vocabulary.1.md @@ -1,4 +1,4 @@ -%people2vocabulary(1) irdmtools user manual | version 0.0.48 fb9e58e +%people2vocabulary(1) irdmtools user manual | version 0.0.48 0238bfa % R. S. Doiel % 2023-09-12 diff --git a/rdmutil.1.md b/rdmutil.1.md index 8f864fed..07dc15e6 100644 --- a/rdmutil.1.md +++ b/rdmutil.1.md @@ -1,4 +1,4 @@ -%rdmutil(1) irdmtools user manual | version 0.0.48 fb9e58e +%rdmutil(1) irdmtools user manual | version 0.0.48 0238bfa % R. S. Doiel and Tom Morrell % 2023-09-12 diff --git a/version.go b/version.go index cbeb84a4..f3535a51 100644 --- a/version.go +++ b/version.go @@ -12,7 +12,7 @@ const ( ReleaseDate = "2023-09-12" // ReleaseHash, the Git hash when version.go was generated - ReleaseHash = "fb9e58e" + ReleaseHash = "0238bfa" LicenseText = ` Redistribution and use in source and binary forms, with or without From 188b576d93c243c2d7cb8e90686ce34c0f8863f0 Mon Sep 17 00:00:00 2001 From: Thomas Morrell Date: Tue, 12 Sep 2023 16:37:51 -0700 Subject: [PATCH 02/11] Complete identifier cleanup --- irdm/fixups.py | 371 +++++++++++------- match_identifiers_with_logs.py | 4 +- migrated_records.csv | 40 -- ...e_identifiers.py => update_from_eprints.py | 49 +-- 4 files changed, 226 insertions(+), 238 deletions(-) rename update_identifiers.py => update_from_eprints.py (84%) diff --git a/irdm/fixups.py b/irdm/fixups.py index 044eb7be..2c131c45 100644 --- a/irdm/fixups.py +++ b/irdm/fixups.py @@ -1,5 +1,5 @@ -'''fixup.py is a module for cleanup output from eprint2rdm and making -it ready for import to RDM with rdmutil''' +"""fixup.py is a module for cleanup output from eprint2rdm and making +it ready for import to RDM with rdmutil""" import os import sys import json @@ -10,35 +10,36 @@ # Roles defined for person_or_org scheme defined_roles = [ - "contactperson", - "datacollector", - "datacurator", - "datamanager", - "distributor", - "editor", - "hostinginstitution", - "producer", - "projectleader", - "projectmanager", - "projectmember", - "registrationagency", - "registrationauthority", - "relatedperson", - "researcher", - "researchgroup", + "contactperson", + "datacollector", + "datacurator", + "datamanager", + "distributor", + "editor", + "hostinginstitution", + "producer", + "projectleader", + "projectmanager", + "projectmember", + "registrationagency", + "registrationauthority", + "relatedperson", + "researcher", + "researchgroup", "rightsholder", "sponsor", "supervisor", "workpackageleader", - "other" + "other", ] # Decide if we're in production or not. Defaut to Not in production. -rdm_url = os.getenv('RDM_URL', None) -in_production = ((rdm_url is not None) and ('caltech.edu' in rdm_url)) +rdm_url = os.getenv("RDM_URL", None) +in_production = (rdm_url is not None) and ("caltech.edu" in rdm_url) + def check_for_doi(doi, production, token=None): - '''Check to see if DOI already exists in our RDM instance''' + """Check to see if DOI already exists in our RDM instance""" # Returns whether or not a DOI has already been added to CaltechAUTHORS if production is True: url = "https://authors.library.caltech.edu/api/records" @@ -46,13 +47,13 @@ def check_for_doi(doi, production, token=None): url = "https://authors.caltechlibrary.dev/api/records" if token: headers = { - "Authorization": "Bearer %s" % token, - "Content-type": "application/json", - } + "Authorization": "Bearer %s" % token, + "Content-type": "application/json", + } else: headers = { - "Content-type": "application/json", - } + "Content-type": "application/json", + } query = f'?q=pids.doi.identifier:"{doi}"&allversions=true' @@ -61,7 +62,7 @@ def check_for_doi(doi, production, token=None): except Exception as err: return False, err if response.status_code != 200: - print(f'error {response.text}', file = sys.stderr) + print(f"error {response.text}", file=sys.stderr) return False, None records = response.json() if records["hits"]["total"] > 0: @@ -69,8 +70,8 @@ def check_for_doi(doi, production, token=None): return False, None -def get_dict_path(obj, args = None): - '''look up path in dict recursively, return value if found''' +def get_dict_path(obj, args=None): + """look up path in dict recursively, return value if found""" if args is None: return None if len(args) == 0: @@ -82,70 +83,80 @@ def get_dict_path(obj, args = None): return get_dict_path(obj[arg], args[1:]) return None -def normalize_doi(doi = None): - '''vet and normalize DOI''' + +def normalize_doi(doi=None): + """vet and normalize DOI""" if doi is not None and idutils.is_doi(doi): return idutils.normalize_doi(doi) return None -def normalize_pmcid(pmcid = None): - '''normalize PCM ids to just the id, trim from URL if needed.''' + +def normalize_pmcid(pmcid=None): + """normalize PCM ids to just the id, trim from URL if needed.""" if pmcid is not None: if idutils.is_url(pmcid): if idutils.is_doi(pmcid): return None _u = urlparse(pmcid) - pmcid = os.path.basename(_u.path.rstrip('/')).lower() + pmcid = os.path.basename(_u.path.rstrip("/")).lower() return pmcid.upper() + def trim_prefixes(text, prefixes): - '''trim prefixes from string''' + """trim prefixes from string""" for prefix in prefixes: if text.startswith(prefix): - return text[len(prefix):] + return text[len(prefix) :] return text + def trim_suffixes(text, suffixes): - '''trim suffixes from string''' + """trim suffixes from string""" for suffix in suffixes: if text.endswith(suffix): - return text[0:(len(suffix)*-1)] + return text[0 : (len(suffix) * -1)] return text -def normalize_arxiv(arxiv = None): - '''vet and normalize an arxiv''' - arxiv = trim_prefixes(arxiv, ['http://arxiv.org/abs/', 'https://arxiv.org/abs/']) + +def normalize_arxiv(arxiv=None): + """vet and normalize an arxiv""" + arxiv = trim_prefixes(arxiv, ["http://arxiv.org/abs/", "https://arxiv.org/abs/"]) if idutils.is_doi(arxiv): return None if idutils.is_arxiv(arxiv): return idutils.normalize_arxiv(arxiv) return None -def normalize_ads(ads = None): - '''vet and normalize an ads id''' - ads = trim_prefixes(ads, ['https://ui.adsabs.harvard.edu/abs/']) - ads = trim_suffixes(ads, ['/abstract']) + +def normalize_ads(ads=None): + """vet and normalize an ads id""" + ads = trim_prefixes(ads, ["https://ui.adsabs.harvard.edu/abs/"]) + ads = trim_suffixes(ads, ["/abstract"]) if idutils.is_ads(ads): return idutils.normalize_ads(ads) return None -def normalize_pub(pub_url = None, doi = None): - '''vet and normalize a publication url, uses whitelist matching''' + +def normalize_pub(pub_url=None, doi=None): + """vet and normalize a publication url, uses whitelist matching""" if idutils.is_url(pub_url): _u = urlparse(pub_url) - if 'hostname' in _u: - if _u.hostname in [ 'rdcu.be', 'geoscienceworld', 'ieeexplore.ieee.org' ]: - if _u.hostname == 'ieeexplore.ieee.org' and \ - (doi is not None and doi.startswith('10.1364/')): + if "hostname" in _u: + if _u.hostname in ["rdcu.be", "geoscienceworld", "ieeexplore.ieee.org"]: + if _u.hostname == "ieeexplore.ieee.org" and ( + doi is not None and doi.startswith("10.1364/") + ): return pub_url - elif _u.netloc in [ 'rdcu.be', 'geoscienceworld', 'ieeexplore.ieee.org' ]: - if _u.netloc == 'ieeexplore.ieee.org' and \ - (doi is not None and doi.startswith('10.1364/')): + elif _u.netloc in ["rdcu.be", "geoscienceworld", "ieeexplore.ieee.org"]: + if _u.netloc == "ieeexplore.ieee.org" and ( + doi is not None and doi.startswith("10.1364/") + ): return pub_url return None + # fixup_record takes the simplfied record and prepares a -# draft record structure for import using rdmutil. +# draft record structure for import using rdmutil. # # This include things like crosswalking vocabularies to map from an # existing Caltech Library EPrints repository to @@ -154,18 +165,18 @@ def normalize_pub(pub_url = None, doi = None): # Where possible these adjustments should be ported back # into eprinttools' simple.go and crosswalk.go. # -def fixup_record(record,reload=False,token=None): - """fixup_record accepts a dict of simple record and files returns a -normlzied record dict that is a for migration into Invenio-RDM.""" +def fixup_record(record, reload=False, token=None): + """fixup_record accepts a dict of simple record and files returns a + normlzied record dict that is a for migration into Invenio-RDM.""" record_id = get_dict_path(record, ["pid", "id"]) - #FIXME: sort out how these fields should be structured then + # FIXME: sort out how these fields should be structured then # update the eprinttools simple.go and crosswalk.go to reflect # correction and remove this code. if "access" in record: del record["access"] if "metadata" in record: # Fixup resource type mapping from EPrints to Invenio-RDM types - resource_type = get_dict_path(record, [ "metadata", "resource_type", "id" ]) + resource_type = get_dict_path(record, ["metadata", "resource_type", "id"]) if resource_type is not None: if resource_type == "book_section": record["metadata"]["resource_type"]["id"] = "publication-section" @@ -181,25 +192,33 @@ def fixup_record(record,reload=False,token=None): if "dates" in record["metadata"]: date_list = [] for entry in record["metadata"]["dates"]: - if "type" in entry and "id" in entry["type"] and \ - (entry["type"]["id"] == "created" or \ - entry["type"]["id"] == "updated"): + if ( + "type" in entry + and "id" in entry["type"] + and ( + entry["type"]["id"] == "created" + or entry["type"]["id"] == "updated" + ) + ): date_list.append(entry) record["metadata"]["dates"] = date_list if "funding" in record["metadata"]: for i, funder in enumerate(record["metadata"]["funding"]): if "award" in funder and not "title" in funder["award"]: - funder["award"]["title"] = { "en": " " } + funder["award"]["title"] = {"en": " "} record["metadata"]["funding"][i] = funder # Fixup name in creators and contributors if "creators" in record["metadata"]: for i, creator in enumerate(record["metadata"]["creators"]): - if "person_or_org" in creator and not 'name' in creator["person_or_org"]: + if ( + "person_or_org" in creator + and not "name" in creator["person_or_org"] + ): person = creator["person_or_org"] - family_name = person.get('family_name', None) - given_name = person.get('given_name', None) + family_name = person.get("family_name", None) + given_name = person.get("given_name", None) if family_name is not None and given_name is not None: - person['name'] = f'{family_name}, {given_name}' + person["name"] = f"{family_name}, {given_name}" record["metadata"]["creators"][i]["person_or_org"] = person # Fix up contributor roles, FIXME: since we don't have a mapping, # undefined roles get mapped to "other" @@ -207,7 +226,7 @@ def fixup_record(record,reload=False,token=None): for i, contributor in enumerate(record["metadata"]["contributors"]): # FIXME: This is a temporary mapping of role until we get Caltech Library # roles implemented properly. - role_id = get_dict_path(contributor, [ "role", "id"]) + role_id = get_dict_path(contributor, ["role", "id"]) if not role_id in defined_roles: record["metadata"]["contributors"][i]["role"]["id"] = "other" # Fixup alternative title types @@ -216,37 +235,46 @@ def fixup_record(record,reload=False,token=None): if not "type" in title: title["type"] = { "id": "alternative-title", - "title": { - "en": "Alternative Title" - } + "title": {"en": "Alternative Title"}, } record["metadata"]["additional_titles"][i] = title if "contributors" in record["metadata"]: for i, contributor in enumerate(record["metadata"]["contributors"]): - if "person_or_org" in contributor and not 'name' in contributor['person_or_org']: - person = contributor['person_or_org'] - if 'family_name' in person: - person['name'] = f'{person["family_name"]}, {person["given_name"]}' + if ( + "person_or_org" in contributor + and not "name" in contributor["person_or_org"] + ): + person = contributor["person_or_org"] + if "family_name" in person: + person[ + "name" + ] = f'{person["family_name"]}, {person["given_name"]}' record["metadata"]["contributors"][i]["person_or_org"] = person else: - print(json.dumps(record, indent = 4)) - print(f'ERROR: (id: {record_id}) contributor missing family name') + print(json.dumps(record, indent=4)) + print( + f"ERROR: (id: {record_id}) contributor missing family name" + ) sys.exit(1) # Map the eprintid to the identifier list - if "pid" in record and "id" in record["pid"] and \ - "eprint" in record["pid"] and record["pid"]["eprint"] == "eprintid": + if ( + "pid" in record + and "id" in record["pid"] + and "eprint" in record["pid"] + and record["pid"]["eprint"] == "eprintid" + ): eprintid = record["pid"]["id"] if "metadata" in record and "identifier" in record["metadata"]: - record["metadata"]["identifier"].append({ - "scheme": "eprintid", "identifier": f"{eprintid}" - }) + record["metadata"]["identifier"].append( + {"scheme": "eprintid", "identifier": f"{eprintid}"} + ) # Setup an empty .files attribute for use with rdmutil upload_files - if 'files' in record: - record["files"] = { "enabled": True, "order": [] } + if "files" in record: + record["files"] = {"enabled": True, "order": []} else: - record["files"] = { "enabled": False, "order": [] } + record["files"] = {"enabled": False, "order": []} # Normalize DOI, issue #39 - doi = normalize_doi(get_dict_path(record, ['pids', 'doi', 'identifier'])) + doi = normalize_doi(get_dict_path(record, ["pids", "doi", "identifier"])) if doi is not None: if not reload: # See if DOI already exists in CaltechAUTHORS, if so move it to metadata identifiers. @@ -254,33 +282,35 @@ def fixup_record(record,reload=False,token=None): if err is not None: return rec, err if has_doi: - del record['pids']['doi'] + del record["pids"]["doi"] if "metadata" not in record: record["metadata"] = {} if "identifiers" not in record["metadata"]: record["metadata"]["identifiers"] = [] - record["metadata"]["identifiers"].append({ "scheme": "doi", "identifier": f"{doi}" }) + record["metadata"]["identifiers"].append( + {"scheme": "doi", "identifier": f"{doi}"} + ) doi = None - #Mark system DOIs - #if doi.startswith('10.7907'): + # Mark system DOIs + # if doi.startswith('10.7907'): # record['pids']['doi']['provider'] = 'datacite' # record['pids']['doi']['client'] = 'datacite' # Make sure records DOI isn't in related identifiers - identifiers = get_dict_path(record, [ 'metadata', 'related_identifiers']) + identifiers = get_dict_path(record, ["metadata", "related_identifiers"]) added_identifiers = [] if identifiers is not None: keep_identifiers = [] for identifier in identifiers: - scheme = get_dict_path(identifier, ['scheme']) - id_val = get_dict_path(identifier, ['identifier']) - relation = get_dict_path(identifier,["relation_type","id"]) + scheme = get_dict_path(identifier, ["scheme"]) + id_val = get_dict_path(identifier, ["identifier"]) + relation = get_dict_path(identifier, ["relation_type", "id"]) if idutils.is_doi(id_val): normalized = normalize_doi(id_val) if normalized != doi: if id_val not in added_identifiers: - identifier['identifier'] = id_val - identifier['scheme'] = 'doi' + identifier["identifier"] = id_val + identifier["scheme"] = "doi" added_identifiers.append(id_val) keep_identifiers.append(identifier) else: @@ -294,97 +324,138 @@ def fixup_record(record,reload=False,token=None): identifier["identifier"] = normalized added_identifiers.append(normalized) keep_identifiers.append(identifier) - record['metadata']['related_identifiers'] = keep_identifiers + record["metadata"]["related_identifiers"] = keep_identifiers # Run through related URLs, if DOI then normalize DOI, if DOI match # pids.doi.identifier then discard related url value, issue #39 - identifiers = get_dict_path(record, [ 'metadata', 'identifiers']) + identifiers = get_dict_path(record, ["metadata", "identifiers"]) if identifiers is not None: + keep_identifiers = [] # Find a PMCID in the indenitifiers ro compare with pmc id ... pmcid = None for identifier in identifiers: - scheme = get_dict_path(identifier, ['scheme']) - if scheme == 'pmcid': - pmcid = normalize_pmcid(get_dict_path(identifier, ['identifier'])) - keep_identifiers = [] + scheme = get_dict_path(identifier, ["scheme"]) + if scheme == "pmcid": + # We have two or more values, add to related + if pmcid: + related_pmcid = normalize_pmcid( + get_dict_path(identifier, ["identifier"]) + ) + record["metadata"]["related_identifiers"].append( + { + "scheme": "pmcid", + "identifier": related_pmcid, + "relation_type": {"id": "isvariantformof"}, + } + ) + # Haven't seen a pmcid yet + else: + pmcid = normalize_pmcid(get_dict_path(identifier, ["identifier"])) + keep_identifiers.append({"scheme": "pmcid", "identifier": pmcid}) for identifier in identifiers: - scheme = get_dict_path(identifier, ['scheme']) - id_val = get_dict_path(identifier, ['identifier']) + scheme = get_dict_path(identifier, ["scheme"]) + id_val = get_dict_path(identifier, ["identifier"]) if scheme is not None: - if scheme == 'doi': - related_doi = normalize_doi(get_dict_path(identifier, ['identifier'])) + if scheme == "doi": + related_doi = normalize_doi( + get_dict_path(identifier, ["identifier"]) + ) if related_doi is not None: if related_doi != doi: - keep_identifiers.append({"scheme": "doi", "identifier": related_doi}) + keep_identifiers.append( + {"scheme": "doi", "identifier": related_doi} + ) if doi is None: doi = related_doi - elif scheme == 'pmcid': - related_pmcid = normalize_pmcid(get_dict_path(identifier, [ 'identifier'])) - if related_pmcid is not None: - keep_identifiers.append({"scheme":"pmcid", "identifier": related_pmcid}) - elif scheme == 'pmc': - related_pmcid = normalize_pmcid(get_dict_path(identifier, ['identifier'])) + elif scheme == "pmc": + related_pmcid = normalize_pmcid( + get_dict_path(identifier, ["identifier"]) + ) if related_pmcid is not None: if related_pmcid != pmcid: - keep_identifiers.append({"scheme": "pmcid", "identifier": related_pmcid}) - elif scheme == 'arxiv': - related_arxiv = normalize_arxiv(get_dict_path(identifier, ['identifier'])) + # Extra pmcid values go in related identifiers + record["metadata"]["related_identifiers"].append( + { + "scheme": "pmcid", + "identifier": related_pmcid, + "relation_type": {"id": "isvariantformof"}, + } + ) + elif scheme == "arxiv": + related_arxiv = normalize_arxiv( + get_dict_path(identifier, ["identifier"]) + ) if related_arxiv is not None: - keep_identifiers.append({"scheme": "arxiv", "identifier": related_arxiv}) - elif scheme == 'ads': - related_ads = normalize_ads(get_dict_path(identifier, ['identifier'])) + keep_identifiers.append( + {"scheme": "arxiv", "identifier": related_arxiv} + ) + elif scheme == "ads": + related_ads = normalize_ads( + get_dict_path(identifier, ["identifier"]) + ) if related_ads is not None: - keep_identifiers.append({"scheme": "ads", "identifier": related_ads}) - elif scheme == 'pub': - related_pub = normalize_pub(get_dict_path(identifier, ['identifier']), doi) + keep_identifiers.append( + {"scheme": "ads", "identifier": related_ads} + ) + elif scheme == "pub": + related_pub = normalize_pub( + get_dict_path(identifier, ["identifier"]), doi + ) if related_pub is not None: - keep_identifiers.append({"scheme": "url", "identifier": related_pub}) - elif scheme == 'eprintid': - keep_identifiers.append({"scheme": "eprintid", "identifier": id_val}) - elif scheme == 'resolverid': - keep_identifiers.append({"scheme": "resolverid", "identifier": id_val}) + keep_identifiers.append( + {"scheme": "url", "identifier": related_pub} + ) + elif scheme == "eprintid": + keep_identifiers.append( + {"scheme": "eprintid", "identifier": id_val} + ) + elif scheme == "resolverid": + keep_identifiers.append( + {"scheme": "resolverid", "identifier": id_val} + ) else: if id_val is not None and id_val.strip() != "": - if idutils.is_url(identifier['identifier']): - keep_identifiers.append({"scheme":"url", "identifier": id_val}) + if idutils.is_url(identifier["identifier"]): + keep_identifiers.append( + {"scheme": "url", "identifier": id_val} + ) else: keep_identifiers.append({"scheme": scheme, "identifier": id_val}) if len(keep_identifiers) > 0: - record['metadata']['identifiers'] = keep_identifiers + record["metadata"]["identifiers"] = keep_identifiers else: - del record['metadata']['identifiers'] - + del record["metadata"]["identifiers"] + # Clean up caltech groups - groups = get_dict_path(record, [ 'custom_fields', 'caltech:groups']) + groups = get_dict_path(record, ["custom_fields", "caltech:groups"]) new = [] if groups: for group in groups: - if group['id'] == "Institute-for-Quantum-Information-and-Matter": - new.append({'id':'IQIM'}) - elif group['id'] == 'Owens-Valley-Radio-Observatory-(OVRO)': - new.append({'id':'Owens-Valley-Radio-Observatory'}) - elif group['id'] == 'Library-System-Papers-and-Publications': - new.append({'id':'Caltech-Library'}) + if group["id"] == "Institute-for-Quantum-Information-and-Matter": + new.append({"id": "IQIM"}) + elif group["id"] == "Owens-Valley-Radio-Observatory-(OVRO)": + new.append({"id": "Owens-Valley-Radio-Observatory"}) + elif group["id"] == "Library-System-Papers-and-Publications": + new.append({"id": "Caltech-Library"}) else: new.append(group) - record['custom_fields']['caltech:groups'] = new + record["custom_fields"]["caltech:groups"] = new # Remove .custom_fields["caltech:internal_note"] if it exist. if "custom_fields" in record and "caltech:internal_note" in record["custom_fields"]: del record["custom_fields"]["caltech:internal_note"] # Check to see if pids object is empty - pids = record.get('pids', None) + pids = record.get("pids", None) if pids is not None: - doi = pids.get('doi', {}) - doi_identifier = doi.get('identifier') + doi = pids.get("doi", {}) + doi_identifier = doi.get("identifier") if doi_identifier == "": - del pids['doi'] + del pids["doi"] if len(pids) == 0: - del record['pids'] + del record["pids"] # Remove eprint revision version number if is makes it through from - if 'metadata' in record and 'version' in record['metadata']: - del record['metadata']['version'] + if "metadata" in record and "version" in record["metadata"]: + del record["metadata"]["version"] # FIXME: Need to make sure we don't have duplicate related identifiers ..., # pmcid seem to have duplicates in some case. return record, None - diff --git a/match_identifiers_with_logs.py b/match_identifiers_with_logs.py index f3c2f65d..517875e4 100644 --- a/match_identifiers_with_logs.py +++ b/match_identifiers_with_logs.py @@ -1,5 +1,5 @@ import glob,sys -from update_identifiers import update_identifiers +from update_from_eprints import update_from_eprints logs = glob.glob('logs/*.log') mapping = {} @@ -21,7 +21,7 @@ for idv in ids: idv = idv.strip('\n') if idv in mapping: - update_identifiers(mapping[idv],idv,reload) + update_from_eprints(mapping[idv],idv,reload) with open('migrated_records.csv','a') as outfile: print(f"{mapping[idv]},{idv},public",file=outfile) print(idv + ',' + mapping[idv]) diff --git a/migrated_records.csv b/migrated_records.csv index d5d04717..38297ca1 100644 --- a/migrated_records.csv +++ b/migrated_records.csv @@ -135450,8 +135450,6 @@ eprintid,rdmid,record_status 122008,5nfwv-cna88,public 122276,ddt7k-74524,public 122426,gk8zt-p6252,public -19,f8d3n-r8v05,public -111440,vzr2z-cvj59,public 120695,d5pvp-0hp41,public 120697,2ybre-3g121,public 120698,4nvz3-n9t72,public @@ -135493,16 +135491,6 @@ eprintid,rdmid,record_status 121931,5hzgb-dp771,public 122478,j0vpp-a6b96,public 122397,hsvrt-31d55,public -105918,a7kkt-w2v79,public -44072,q8bd2-ktj03,public -100493,a6x6t-yfr73,public -43624,0wes0-5dg92,public -44222,gtfhn-53976,public -82287,e4mb2-pxv70,public -83078,asx3k-p9q34,public -83718,72t40-dkx78,public -83283,my3wd-7zq33,public -78687,y52z8-p2409,public 122477,hce37-9wp32,public 121809,c5gn3-cb856,public 121349,ckkk0-9et64,public @@ -135540,31 +135528,3 @@ eprintid,rdmid,record_status 122575,xhesv-wv708,public 122556,y6fck-maq35,public 122558,862gc-y4k77,public -37817,x01sa-v8665,public -101933,w4rpn-gm294,public -98954,v2tra-3gp34,public -55879,gb6gh-qbd38,public -102847,dqhe3-4k349,public -116166,2r0th-av040,public -108081,n456j-wgq95,public -106739,74cpm-pe049,public -99630,zscnk-xce70,public -74714,57pcw-w6930,public -94608,j0dkf-09y90,public -110311,73pzr-wrc40,public -122210,degbr-djc54,public -119325,h2ec9-3qs83,public -70204,67s3z-2px14,public -75231,a9mrs-hpw87,public -108641,r8qh8-y4065,public -90052,xfj8b-gky84,public -85532,6t6nv-52n04,public -45157,kmm22-n7586,public -91895,4xjbk-5nh74,public -90151,nxx3z-pcj85,public -86494,xqxz7-q9s24,public -65777,sa235-14m40,public -116205,y0ebs-b6g15,public -39274,6yhr2-fr809,public -1884,4wg6f-wm239,public -42811,h2b6f-vvm23,public diff --git a/update_identifiers.py b/update_from_eprints.py similarity index 84% rename from update_identifiers.py rename to update_from_eprints.py index 5d28ce2f..fe5ac68d 100755 --- a/update_identifiers.py +++ b/update_from_eprints.py @@ -111,52 +111,10 @@ def pairtree(txt): def update_record(config, rec, rdmutil, rdm_id): - """update draft record handling versioning if needed""" - url = "https://authors.library.caltech.edu/" - - headers = { - "Authorization": "Bearer %s" % config['RDMTOK'], - "Content-type": "application/json", - } - # Get existing metadata - existing = requests.get( - url + "/api/records/" + rdm_id, - headers=headers, - ) - existing = existing.json() - - # We want to update the pids section - if 'pids' in rec: - existing['pids'] = rec['pids'] - - #And add any missed identifiers - rec = rec['metadata'] - new_ids = [] - for idv in rec["identifiers"]: - new_ids.append(idv["identifier"]) - - identifiers = rec["identifiers"] - if "identifiers" in existing: - for idv in existing["identifiers"]: - if idv["identifier"] not in new_ids: - identifiers.append(idv) - existing["metadata"]["identifiers"] = identifiers - - new_related = [] - if "related_identifiers" in rec: - for idv in rec["related_identifiers"]: - new_related.append(idv["identifier"]) - - related_identifiers = rec["related_identifiers"] - if "related_identifiers" in existing: - for idv in existing["related_identifiers"]: - if idv["identifier"] not in new_related: - related_identifiers.append(idv) - existing["metadata"]["related_identifiers"] = related_identifiers caltechdata_edit( rdm_id, - metadata=existing, + metadata=rec, token=config['RDMTOK'], production=True, publish=True, @@ -193,7 +151,6 @@ def fix_record(config, eprintid, rdm_id,reload=False): print( f"{eprintid}, {rdm_id}, failed ({eprintid}): rdmutil new_record, fixup_record failed {err}" ) - #print(json.dumps(rec)) update_record(config, rec, rdmutil, rdm_id) return None @@ -264,12 +221,12 @@ def get_eprint_ids(): eprint_ids.append(eprint_id.strip()) return eprint_ids -def update_identifiers(eprintid,rdm_id,reload=False): +def update_from_eprints(eprintid,rdm_id,reload=False): config, is_ok = check_environment() if is_ok: err = fix_record(config, eprintid, rdm_id,reload) if err is not None: - print(f"Aborting update_identifiers, {err}", file=sys.stderr) + print(f"Aborting update_from_eprints, {err}", file=sys.stderr) sys.exit(1) From 89c170100daa328f80c7c49ec389f4d4a50ca5aa Mon Sep 17 00:00:00 2001 From: Thomas Morrell Date: Wed, 13 Sep 2023 09:24:24 -0700 Subject: [PATCH 03/11] Add missing records --- check_transferred_records.py | 20 +- get_missing_identifiers.py | 2 +- migrated_records.csv | 3 + missing_records.txt | 2345 ++++++++++++++++++++++++++++++++++ 4 files changed, 2365 insertions(+), 5 deletions(-) create mode 100644 missing_records.txt diff --git a/check_transferred_records.py b/check_transferred_records.py index cc7a99cd..f25bec21 100644 --- a/check_transferred_records.py +++ b/check_transferred_records.py @@ -12,12 +12,24 @@ reader = csv.DictReader(f) for row in reader: status = row['record_status'] - if status != 'restricted-duplicate': + if status == 'public': eprintid = row['eprintid'] if eprintid not in all_rdm_records: all_rdm_records.append(eprintid) - if eprintid not in eprint_mapping: - eprint_mapping[row['eprintid']] = row['rdmid'] else: - eprint_mapping[row['eprintid']] = [eprint_mapping[row['eprintid']] ,row['rdmid']] + print('duplicate', eprintid, row['rdmid']) + #if eprintid not in eprint_mapping: + # eprint_mapping[row['eprintid']] = row['rdmid'] + #else: + # eprint_mapping[row['eprintid']] = [eprint_mapping[row['eprintid']] ,row['rdmid']] print("Number of RDM records: ",len(all_rdm_records)) + +print('Missing Eprints records:') +count = 0 + +for record in eprints_records: + if record not in all_rdm_records: + print(record) + count += 1 + +print('Number of missing records: ',count) diff --git a/get_missing_identifiers.py b/get_missing_identifiers.py index cffa416c..24d7b3c6 100644 --- a/get_missing_identifiers.py +++ b/get_missing_identifiers.py @@ -4,7 +4,7 @@ url = "https://authors.library.caltech.edu/api/records" -query = '?q=NOT%20_exists_%3Ametadata.identifiers%20%2Bcreated%3A%5B2023-01-01%20TO%202023-08-28%5D' +query = '?q=NOT%20metadata.identifiers.scheme%3A"eprintid"%20%2Bcreated%3A%5B2023-01-01%20TO%202023-08-28%5D&f=access_status%3Aopen' response = requests.get(f"{url}{query}") total = response.json()["hits"]["total"] diff --git a/migrated_records.csv b/migrated_records.csv index 38297ca1..046b7352 100644 --- a/migrated_records.csv +++ b/migrated_records.csv @@ -135528,3 +135528,6 @@ eprintid,rdmid,record_status 122575,xhesv-wv708,public 122556,y6fck-maq35,public 122558,862gc-y4k77,public +122502,sneaq-f9v10,public +122422,b399m-w3c59,public +78687,y52z8-p2409,public diff --git a/missing_records.txt b/missing_records.txt new file mode 100644 index 00000000..bac39d0b --- /dev/null +++ b/missing_records.txt @@ -0,0 +1,2345 @@ +176 +279 +535 +552 +785 +854 +876 +929 +941 +944 +965 +966 +967 +968 +976 +992 +1048 +1434 +1480 +1506 +1608 +1632 +1739 +1853 +1884 +1995 +2063 +2094 +2227 +2386 +2461 +2514 +2631 +2653 +2778 +2861 +2873 +2990 +3001 +3136 +3172 +3358 +3487 +3980 +3986 +4115 +4134 +4159 +4452 +4523 +4586 +4662 +4691 +4806 +4865 +4868 +4874 +4936 +4947 +4957 +4983 +5124 +5128 +5244 +5299 +5329 +5354 +5355 +5356 +5439 +5525 +5586 +5618 +5752 +5881 +6275 +6299 +6300 +6301 +6302 +6387 +6420 +6424 +6487 +6491 +6509 +6532 +6587 +6758 +6815 +6855 +6993 +7067 +7163 +7177 +7208 +7215 +7306 +7327 +7464 +7506 +7596 +7654 +7655 +7682 +7705 +8643 +8710 +8835 +8851 +8908 +8996 +9057 +9061 +9335 +9404 +9518 +9602 +9686 +9693 +9694 +9763 +9935 +9943 +9971 +10079 +10257 +10278 +10343 +10344 +10386 +10423 +10493 +10569 +10571 +10776 +10787 +10791 +10953 +10954 +10956 +10976 +11003 +11117 +11148 +11149 +11151 +11169 +11177 +11179 +11182 +11194 +11218 +11220 +11233 +11234 +11249 +11250 +11343 +11352 +11355 +11369 +11383 +11452 +11467 +11497 +11515 +11564 +11590 +11657 +11693 +11735 +11770 +11827 +11954 +11999 +12016 +12154 +12202 +12346 +12369 +12393 +12407 +12474 +12491 +12557 +12591 +12613 +12744 +12747 +12755 +12762 +12765 +12775 +12893 +12899 +13040 +13240 +13385 +13401 +13415 +13435 +13453 +13471 +13561 +13590 +13596 +13643 +13644 +13655 +13678 +13682 +13699 +13747 +13789 +13790 +13801 +13807 +13815 +13825 +13826 +13841 +13864 +13877 +13936 +13961 +14089 +14228 +14257 +14308 +14331 +14426 +14491 +14531 +14596 +14634 +14637 +14895 +15238 +15357 +15499 +15562 +16248 +16294 +16296 +16354 +16503 +16848 +16871 +17056 +17085 +17284 +17304 +17420 +17503 +17587 +17725 +17748 +17779 +17810 +17985 +18064 +18212 +18397 +18502 +18506 +18592 +18689 +18725 +18819 +19027 +19080 +19101 +19133 +19156 +19208 +19752 +19790 +19892 +19943 +20122 +20319 +20360 +20567 +20613 +20834 +21047 +21180 +21337 +21462 +21802 +22079 +22124 +22191 +22251 +22509 +22543 +22590 +22635 +22853 +23226 +23430 +23464 +23510 +23544 +23668 +23725 +23741 +23808 +23849 +23874 +23895 +23897 +23906 +23913 +23916 +23931 +23934 +23943 +24075 +24148 +24174 +24239 +24275 +24906 +25057 +25059 +25202 +25693 +25823 +25851 +25877 +25880 +25881 +25883 +25884 +25885 +25887 +25888 +25889 +25890 +25891 +25892 +25893 +25894 +25895 +25896 +25897 +25898 +25899 +25900 +25901 +25902 +25903 +25904 +25905 +25906 +25907 +25908 +25909 +25910 +25911 +25912 +25913 +25914 +25915 +25916 +25918 +25919 +25920 +25921 +25922 +25923 +25924 +25925 +25926 +25927 +25928 +26245 +26249 +26250 +26251 +26252 +26253 +26254 +26255 +26256 +26257 +26264 +26266 +26267 +26268 +26269 +26270 +26279 +26280 +26281 +26282 +26283 +26284 +26285 +26286 +26287 +26288 +26289 +26290 +26291 +26292 +26293 +26294 +26295 +26296 +26297 +26298 +26299 +26300 +26301 +26302 +26303 +26304 +26305 +26306 +26307 +26308 +26309 +26310 +26311 +26315 +26316 +26317 +26318 +26319 +26320 +26321 +26322 +26323 +26324 +26325 +26326 +26327 +26330 +26331 +26332 +26336 +26337 +26338 +26339 +26340 +26341 +26342 +26343 +26344 +26345 +26349 +26350 +26419 +26443 +26446 +26501 +26509 +26532 +26884 +27243 +27276 +27747 +27778 +28106 +28144 +28145 +28196 +28208 +28335 +28336 +28363 +28384 +28493 +28584 +28588 +28698 +28829 +29058 +29191 +29195 +29255 +29324 +29340 +29499 +29599 +29699 +29850 +30019 +30200 +30321 +30354 +31556 +31733 +31785 +31846 +31938 +32234 +32569 +32736 +32738 +32758 +32785 +32859 +33120 +33163 +33168 +33411 +33443 +33499 +33546 +33547 +33552 +33615 +33616 +33643 +33695 +33697 +33821 +33829 +33887 +33891 +33892 +33929 +33932 +34047 +34060 +34065 +34067 +34071 +34073 +34094 +34149 +34214 +34253 +34312 +34314 +34330 +34337 +34347 +34348 +34353 +34354 +34394 +34399 +34442 +34462 +34463 +34499 +34504 +34505 +34506 +34516 +34556 +34564 +34565 +34566 +34567 +34568 +34569 +34570 +34571 +34601 +34602 +34700 +34709 +34712 +34717 +34719 +34721 +34776 +34779 +34801 +34837 +34851 +34900 +34909 +34965 +34977 +35043 +35055 +35084 +35089 +35100 +35151 +35180 +35201 +35211 +35239 +35251 +35296 +35319 +35320 +35391 +35394 +35411 +35481 +35488 +35489 +35515 +35522 +35657 +35679 +35763 +35782 +35783 +35789 +35806 +35814 +35859 +35882 +35888 +35897 +36056 +36066 +36081 +36089 +36102 +36103 +36104 +36105 +36118 +36126 +36154 +36174 +36215 +36566 +36803 +36810 +36877 +36879 +36947 +36986 +37056 +37159 +37161 +37173 +37185 +37264 +37269 +37372 +37539 +37570 +37592 +37657 +37686 +37762 +37868 +37910 +37960 +38031 +38066 +38090 +38150 +38214 +38244 +38272 +38338 +38348 +38369 +38375 +38392 +38547 +38583 +38603 +38837 +38876 +38991 +39274 +39297 +40332 +40333 +40334 +40335 +40337 +40338 +40340 +40341 +40342 +40343 +40344 +40345 +40346 +40348 +40349 +40351 +40352 +40353 +40354 +40355 +40356 +40357 +40358 +40359 +40360 +40361 +40362 +40364 +40365 +40368 +40369 +40370 +40373 +40374 +40375 +40376 +40377 +40378 +40379 +40380 +40383 +40384 +40385 +40386 +40388 +40389 +40390 +40392 +40394 +40396 +40397 +40398 +40401 +40402 +40407 +40408 +40410 +40411 +40412 +40415 +40418 +40420 +40421 +40422 +40423 +40424 +40425 +40426 +40427 +40428 +40430 +40432 +40437 +40438 +40439 +40440 +40441 +40443 +40446 +40447 +40449 +40450 +40451 +40452 +40456 +40457 +40458 +40461 +40462 +40463 +40464 +40465 +40466 +40467 +40470 +40473 +40475 +40476 +40477 +40478 +40480 +40482 +40483 +40484 +40485 +40487 +40488 +40489 +40490 +40491 +40492 +40493 +40494 +40495 +40496 +40498 +40499 +40501 +40502 +40503 +40505 +40506 +40508 +40510 +40513 +40515 +40516 +40517 +40518 +40519 +40520 +40521 +40522 +40523 +40526 +40531 +40532 +40534 +40536 +40538 +40539 +40540 +40541 +40542 +40543 +40544 +40545 +40546 +40548 +40549 +40550 +40551 +40552 +40553 +40556 +40557 +40565 +40568 +40569 +40571 +40572 +40573 +40575 +40576 +40577 +40578 +40579 +40580 +40583 +40586 +40588 +40589 +40595 +40597 +40598 +40600 +40601 +40604 +40606 +40608 +40609 +40610 +40611 +40614 +40618 +40621 +40623 +40624 +40626 +40627 +40631 +40635 +40636 +40638 +40642 +40643 +40646 +40648 +40650 +40653 +40655 +40656 +40658 +40661 +40670 +40677 +40681 +40687 +40690 +40701 +40703 +40704 +40705 +40756 +40957 +41074 +41208 +41246 +41304 +41420 +41478 +41480 +41786 +41951 +41962 +41963 +42044 +42082 +42103 +42129 +42264 +42423 +42491 +42498 +42532 +42686 +42811 +42922 +42977 +43118 +43141 +43185 +43276 +43632 +43944 +44059 +44226 +44468 +44540 +44573 +44740 +44843 +44860 +44889 +44966 +45010 +45039 +45099 +45177 +45239 +45351 +45353 +45357 +45359 +45418 +45429 +45433 +45441 +45449 +45455 +45459 +45594 +45601 +45623 +45641 +45642 +45757 +45769 +45775 +45827 +45828 +45869 +45940 +45959 +45960 +46006 +46037 +46040 +46066 +46084 +46144 +46145 +46224 +46226 +46267 +46318 +46351 +46376 +46449 +46511 +46519 +46546 +46567 +46632 +46909 +46995 +47141 +47143 +47163 +47255 +47343 +47425 +47539 +48068 +48070 +48085 +48124 +48139 +48163 +48184 +48253 +48434 +48440 +48605 +48721 +48785 +48811 +48829 +48848 +49119 +49136 +49162 +49235 +49423 +49476 +49637 +49910 +50125 +50214 +50231 +50354 +50363 +50384 +50387 +50443 +50554 +50661 +50667 +50724 +51072 +51110 +51137 +51281 +51339 +51368 +51618 +51808 +52111 +52133 +52465 +52467 +52812 +52819 +52936 +52992 +53021 +53087 +53210 +53301 +53565 +53687 +53693 +53720 +54010 +54020 +54072 +54102 +54103 +54592 +55014 +55057 +55174 +55178 +55386 +55432 +55564 +55565 +55567 +55793 +55964 +56178 +56430 +56440 +56451 +56506 +56668 +56739 +56884 +56999 +57019 +57030 +57042 +57184 +57230 +57425 +57455 +57501 +57521 +57549 +57630 +57687 +57735 +57763 +57765 +57766 +57790 +57935 +57997 +58035 +58055 +58084 +58156 +58633 +58644 +58649 +58814 +58837 +58913 +58921 +58941 +58942 +58981 +59012 +59235 +59376 +59444 +59580 +59652 +59660 +59699 +59718 +59945 +59946 +60058 +60089 +60141 +60234 +60277 +60410 +60441 +60483 +60538 +60645 +60651 +60701 +60704 +60802 +60804 +60805 +60806 +60814 +60845 +60869 +60870 +60871 +60873 +60874 +60878 +60932 +60974 +61009 +61247 +61363 +61386 +61479 +61513 +61705 +61710 +61732 +61953 +62036 +62097 +62098 +62121 +62192 +62236 +62237 +62308 +62366 +62375 +62376 +62495 +62714 +62719 +62742 +62768 +63007 +63179 +63186 +63187 +63207 +63210 +63211 +63212 +63273 +63374 +63464 +63484 +63555 +63563 +63586 +63850 +63989 +63996 +64002 +64071 +64179 +64225 +64278 +64282 +64295 +64327 +64381 +64397 +64404 +64456 +64465 +64507 +64508 +64594 +64688 +64690 +64695 +64706 +64828 +64850 +64875 +64878 +65053 +65288 +65361 +65533 +65543 +65573 +65583 +65600 +65601 +65603 +65631 +65632 +65736 +65777 +65950 +65978 +66169 +66173 +66242 +66561 +66576 +66713 +66733 +66744 +66799 +66840 +66877 +66937 +67055 +67158 +67242 +67284 +67287 +67333 +67378 +67381 +67533 +67634 +67644 +67683 +67746 +67747 +67748 +67749 +67756 +67765 +67798 +67800 +67832 +67863 +67868 +67877 +67879 +67944 +67962 +68507 +68530 +68536 +68542 +68557 +68660 +68676 +68693 +68699 +68711 +68838 +68852 +68855 +68876 +68880 +68886 +68888 +68889 +68891 +68900 +68994 +69096 +69166 +69292 +69634 +69849 +69954 +69956 +69957 +69971 +70573 +70574 +70575 +70576 +70842 +70911 +70999 +71032 +71049 +71229 +71255 +71345 +71371 +71377 +71594 +71603 +71631 +71679 +71779 +72054 +72179 +72312 +72331 +72421 +72483 +72586 +72919 +72920 +73062 +73243 +73278 +73501 +73528 +73745 +73882 +73883 +73974 +74170 +74256 +74261 +74286 +74392 +74536 +74584 +74615 +74848 +74939 +75117 +75269 +75415 +75449 +75450 +75754 +75779 +75880 +75887 +75889 +75890 +75931 +75941 +75942 +75951 +75954 +75957 +75958 +75969 +75970 +76019 +76021 +76038 +76100 +76106 +76128 +76154 +76179 +76205 +76227 +76267 +76286 +76360 +76364 +76376 +76391 +76393 +76405 +76406 +76412 +76414 +76418 +76419 +76430 +76436 +76438 +76441 +76445 +76446 +76456 +76585 +76680 +76936 +77073 +77169 +77419 +77621 +77654 +77685 +77700 +77742 +77923 +77949 +78076 +78078 +78151 +78275 +78354 +78373 +78599 +78717 +78936 +79007 +79133 +79134 +79338 +79423 +80015 +80113 +80187 +80315 +80469 +80575 +80576 +81073 +81188 +81241 +81311 +81337 +81442 +81755 +81774 +81858 +82063 +82355 +82630 +82638 +82732 +82946 +82993 +83038 +83048 +83051 +83135 +83220 +83306 +83416 +83529 +83784 +83787 +83901 +83987 +84266 +84288 +84313 +84333 +84439 +84466 +84618 +84625 +84686 +84693 +85138 +85188 +85258 +85581 +85923 +86041 +86053 +86076 +86228 +86301 +86358 +86643 +86717 +86772 +86808 +87029 +87143 +87149 +87152 +87195 +87264 +87339 +87363 +87369 +87399 +87555 +87592 +87603 +87604 +87651 +87716 +87718 +87789 +87903 +87984 +87998 +88050 +88354 +88372 +88397 +88425 +88435 +88606 +88614 +88626 +88628 +88825 +88847 +88863 +88943 +88985 +88997 +89064 +89150 +89180 +89255 +89273 +89354 +89402 +89470 +89471 +89481 +89482 +89484 +89613 +89665 +89679 +89889 +89898 +89946 +89947 +89949 +89989 +89995 +90047 +90061 +90072 +90073 +90089 +90229 +90284 +90307 +90326 +90327 +90328 +90341 +90406 +90409 +90413 +90417 +90422 +90441 +90451 +90554 +90589 +90594 +90609 +90614 +90628 +90636 +90638 +90699 +90900 +90901 +91018 +91290 +91403 +91478 +91479 +91480 +91488 +91713 +91729 +91745 +91769 +91771 +91812 +91813 +91815 +91937 +91956 +91957 +92550 +92686 +92942 +93293 +93329 +93367 +93535 +93585 +93690 +93720 +93878 +93879 +93880 +94223 +94254 +94271 +94275 +94495 +94544 +94599 +94871 +95045 +95067 +95252 +95424 +95629 +95791 +95917 +96090 +96100 +96140 +96206 +96218 +96219 +96298 +96779 +96823 +96914 +96965 +97157 +97250 +97254 +97277 +97393 +97552 +97553 +97682 +97686 +97687 +97781 +97810 +97824 +98001 +98048 +98201 +98250 +98296 +98342 +98349 +98398 +98527 +98596 +98714 +98733 +98745 +98781 +98828 +99029 +99033 +99053 +99179 +99381 +99470 +99585 +99759 +99831 +99881 +99930 +100027 +100112 +100114 +100404 +100529 +100570 +100763 +100933 +101100 +101106 +101333 +101616 +101912 +101941 +102191 +102312 +102319 +102486 +102636 +102819 +102868 +102910 +102978 +103118 +103123 +103225 +103232 +103244 +103245 +103261 +103263 +103274 +103275 +103306 +103326 +103329 +103330 +103331 +103344 +103345 +103347 +103351 +103352 +103357 +103358 +103359 +103363 +103370 +103371 +103387 +103388 +103389 +103390 +103429 +103430 +103431 +103445 +103447 +103448 +103449 +103507 +103540 +103541 +103572 +103580 +103584 +103586 +103587 +103588 +103589 +103590 +103591 +103592 +103594 +103595 +103596 +103606 +103607 +103608 +103609 +103610 +103611 +103612 +103613 +103629 +103630 +103631 +103632 +103633 +103634 +103637 +103644 +103645 +103646 +103647 +103648 +103650 +103651 +103680 +103757 +103758 +103759 +103760 +103812 +103814 +103822 +103824 +103826 +103827 +103829 +103830 +103907 +103937 +103938 +103939 +103940 +103941 +104048 +104152 +104153 +104158 +104159 +104167 +104168 +104169 +104170 +104171 +104172 +104173 +104174 +104175 +104176 +104177 +104178 +104179 +104180 +104208 +104209 +104210 +104211 +104212 +104214 +104265 +104357 +104376 +104458 +104459 +104460 +104461 +104462 +104463 +104464 +104469 +104470 +104471 +104476 +104477 +104480 +104481 +104493 +104504 +104516 +104525 +104529 +104639 +104755 +104818 +104819 +104846 +104882 +104883 +104901 +104921 +104983 +104997 +105001 +105004 +105030 +105099 +105227 +105261 +105265 +105295 +105299 +105350 +105421 +105431 +105432 +105434 +105444 +105541 +105571 +105573 +105592 +105614 +105685 +105754 +105863 +106007 +106018 +106074 +106086 +106098 +106102 +106103 +106106 +106109 +106220 +106263 +106293 +106430 +106435 +106436 +106440 +106451 +106472 +106505 +106510 +106645 +106668 +106695 +106697 +106698 +106725 +106792 +106867 +106948 +107002 +107073 +107093 +107271 +107282 +107478 +107580 +107582 +107591 +107603 +107775 +107776 +107807 +107829 +107943 +107963 +108048 +108067 +108073 +108128 +108140 +108162 +108169 +108244 +108260 +108276 +108282 +108344 +108371 +108374 +108382 +108466 +108495 +108505 +108512 +108516 +108530 +108531 +108579 +108586 +108601 +108642 +108807 +108831 +108851 +108862 +108864 +108930 +109137 +109144 +109162 +109168 +109190 +109237 +109317 +109371 +109413 +109443 +109472 +109477 +109511 +109545 +109584 +109596 +109599 +109604 +109619 +109794 +109830 +109844 +109941 +110057 +110217 +110218 +110253 +110516 +110659 +110664 +110699 +110805 +110812 +110888 +110892 +110909 +110941 +110977 +111035 +111051 +111067 +111068 +111073 +111078 +111079 +111080 +111095 +111120 +111141 +111236 +111240 +111246 +111286 +111317 +111336 +111355 +111377 +111387 +111441 +111479 +111481 +111578 +111711 +111723 +111725 +111764 +111766 +111767 +111769 +111789 +111795 +111843 +111871 +111873 +111919 +111925 +111956 +111976 +111981 +111994 +112010 +112029 +112043 +112051 +112059 +112062 +112067 +112078 +112088 +112146 +112164 +112177 +112179 +112183 +112186 +112200 +112204 +112209 +112227 +112266 +112267 +112269 +112274 +112303 +112309 +112317 +112325 +112338 +112340 +112343 +112363 +112371 +112373 +112440 +112451 +112488 +112568 +112596 +112597 +112616 +112619 +112630 +112645 +112649 +112684 +112685 +112719 +112743 +112785 +112803 +112805 +112830 +112844 +112847 +112849 +112861 +112884 +112885 +112916 +112917 +112918 +112919 +112930 +112933 +112935 +112942 +112952 +112953 +112957 +112958 +112962 +112963 +112964 +112975 +112982 +112987 +112996 +113003 +113013 +113022 +113025 +113026 +113028 +113033 +113039 +113061 +113063 +113072 +113078 +113086 +113101 +113126 +113130 +113153 +113182 +113216 +113217 +113218 +113238 +113279 +113300 +113310 +113319 +113323 +113334 +113337 +113442 +113447 +113448 +113467 +113493 +113496 +113505 +113506 +113510 +113511 +113512 +113514 +113522 +113534 +113545 +113566 +113591 +113594 +113595 +113596 +113609 +113637 +113676 +113702 +113712 +113714 +113747 +113769 +113773 +113800 +113830 +113878 +113891 +113914 +113915 +113926 +113945 +113951 +113953 +113954 +114078 +114105 +114118 +114129 +114147 +114190 +114225 +114300 +114307 +114312 +114336 +114343 +114473 +114513 +114526 +114531 +114551 +114651 +114744 +114754 +114765 +114770 +114796 +114797 +114798 +114948 +114994 +115035 +115045 +115072 +115073 +115106 +115109 +115123 +115186 +115189 +115204 +115228 +115318 +115358 +115519 +115641 +115648 +115658 +115659 +115660 +115685 +115697 +115700 +115707 +115717 +115721 +115726 +115762 +115796 +115838 +115901 +116050 +116124 +116166 +116175 +116205 +116290 +116352 +116396 +116402 +116409 +116587 +117030 +117375 +117620 +117756 +117841 +117845 +117898 +118221 +118223 +118366 +118430 +118676 +118713 +118798 +118815 +118909 +118927 +119223 +119224 +119230 +119231 +119232 +119260 +119261 +119262 +119264 +119266 +119267 +119268 +119269 +119270 +119271 +119305 +119325 +119463 +119516 +119645 +119664 +119717 +119906 +119913 +119963 +120130 +120149 +120161 +120306 +120318 +120328 +120591 +120595 +120603 +120605 +120607 +120610 +120613 +120640 +120690 +120721 +120766 +120771 +120772 +120777 +120779 +120781 +120784 +120785 +120799 +120801 +120857 +120905 +120917 +120937 +120950 +120960 +120965 +120967 +120999 +121005 +121008 +121009 +121010 +121011 +121013 +121014 +121020 +121036 +121039 +121048 +121049 +121050 +121134 +121137 +121138 +121173 +121176 +121177 +121216 +121448 +121455 +121457 +121652 +121700 +121949 +121983 +121988 +122024 +122105 +122181 +122210 +122218 +122350 +122358 From 7af291fd70b7017a4a62027bac8e9d2c1e47b403 Mon Sep 17 00:00:00 2001 From: Thomas Morrell Date: Wed, 13 Sep 2023 09:50:42 -0700 Subject: [PATCH 04/11] In progress migration --- eprints_to_rdm.py | 4 ++- migrated_records.csv | 75 ++++++++++++++++++++++++++++++++++++++++++++ missing_records.txt | 2 -- 3 files changed, 78 insertions(+), 3 deletions(-) diff --git a/eprints_to_rdm.py b/eprints_to_rdm.py index 3a44c0ba..01029fa0 100755 --- a/eprints_to_rdm.py +++ b/eprints_to_rdm.py @@ -182,7 +182,7 @@ def get_file_list(config, eprintid, rec, security): if content: content = content_mapping[content] format_des = metadata.get('format_des', None) - if format_desc: + if format_des: content = content + format_des if _security is not None and security == _security: file_url = file['file_id'] @@ -421,6 +421,8 @@ def migrate_record(config, eprintid): return err # sys.exit(1) print(f'{obj.eprintid}, {rdm_id}, {restriction}') print(f'{obj.eprintid}, {root_rdm_id}, migrated') + with open('migrated_records.csv','a') as outfile: + print(f"{obj.eprintid},{rdm_id},public",file=outfile) sys.stdout.flush() return None diff --git a/migrated_records.csv b/migrated_records.csv index 046b7352..833b0f1d 100644 --- a/migrated_records.csv +++ b/migrated_records.csv @@ -135531,3 +135531,78 @@ eprintid,rdmid,record_status 122502,sneaq-f9v10,public 122422,b399m-w3c59,public 78687,y52z8-p2409,public +176, mvhgr-qkt66, public +279,8jkb9-v1q69,public +535,wvcwj-0fx78,public +552,hgcq6-gjx82,public +785,464dn-zy612,public +876,rprm5-ka839,public +929,65fxp-8t742,public +976,expg6-ep752,public +992,5emmx-ybq38,public +1434,v2hr4-kya24,public +1480,5517q-nf413,public +1608,59dpj-58d58,public +1632,fcn9b-c3e17,public +1739,4pex3-vr798,public +1853,51a9m-dcm55,public +1884,edmxd-gda68,public +1995,hx545-eh615,public +2063,2hn96-37618,public +2094,w3arp-2ws06,public +2227,vrwkw-an486,public +2386,ccakd-phh08,public +2461,qp8b5-khw19,public +2514,06j8s-x9106,public +2631,6acnt-ee187,public +2653,mppty-w7t10,public +2778,1bfpr-55j46,public +2861,h3mpa-fvf21,public +2873,xra7s-0fx85,public +2990,w4jzz-k1e89,public +3001,m4cz0-x2030,public +3136,zq1f0-2k797,public +3172,mmsyw-gce91,public +3487,92y2s-74173,public +3980,qghxn-hm551,public +3986,c90ss-8xr37,public +4115,ks9mt-6db05,public +4134,qqpf0-eg361,public +4159,1s8q3-1bh63,public +4523,9wche-sra06,public +4586,anran-2jm51,public +4662,sr4a6-1f023,public +4806,5x52v-e1p03,public +4865,d6cgg-aw541,public +4874,p5aj0-3hz85,public +4936,j1whe-wye58,public +4947,29v21-20j45,public +4957,b5gx3-p7p56,public +4983,dzbfp-40995,public +5124,9wrpm-sv054,public +5128,5n9c8-0re85,public +5244,4mz2v-yp161,public +5299,s9vz1-mjd18,public +5354,s4khe-y4y25,public +5355,c01y1-fkd86,public +5356,kbd2a-bd486,public +5439,b93ka-zt125,public +5525,d2nyq-97676,public +5586,e0mvw-3xb52,public +5618,f24hj-5z112,public +5752,ewvs6-15n29,public +6275,xkxb6-m7x34,public +6299,20zma-84305,public +6300,91p93-qxk69,public +6301,7cj0m-r7p68,public +6302,bfxny-pmm86,public +6387,yywhb-vrx54,public +6420,m5fxm-5v613,public +6424,z4yt7-gxm35,public +6487,pjaj4-36h15,public +6491,0te3k-ss181,public +6509,pkary-5qk26,public +6532,9c5ha-vdq85,public +6587,c4eny-3ay82,public +6758,41jdm-39h72,public +6815,eg2np-pwr70,public diff --git a/missing_records.txt b/missing_records.txt index bac39d0b..856f572e 100644 --- a/missing_records.txt +++ b/missing_records.txt @@ -1,5 +1,3 @@ -176 -279 535 552 785 From 81e3fc75b4c9f6c1ffbe2fccb3ad2df710fcfcea Mon Sep 17 00:00:00 2001 From: Thomas Morrell Date: Wed, 13 Sep 2023 10:02:27 -0700 Subject: [PATCH 05/11] Update to current status --- migrated_records.csv | 28 ++++++++++++- missing_records.txt | 99 +------------------------------------------- 2 files changed, 27 insertions(+), 100 deletions(-) diff --git a/migrated_records.csv b/migrated_records.csv index 833b0f1d..f9d170bb 100644 --- a/migrated_records.csv +++ b/migrated_records.csv @@ -135530,8 +135530,7 @@ eprintid,rdmid,record_status 122558,862gc-y4k77,public 122502,sneaq-f9v10,public 122422,b399m-w3c59,public -78687,y52z8-p2409,public -176, mvhgr-qkt66, public +176,mvhgr-qkt66,public 279,8jkb9-v1q69,public 535,wvcwj-0fx78,public 552,hgcq6-gjx82,public @@ -135606,3 +135605,28 @@ eprintid,rdmid,record_status 6587,c4eny-3ay82,public 6758,41jdm-39h72,public 6815,eg2np-pwr70,public +6855,wg56b-4pa74,public +6993,hpzfj-8c316,public +7067,990rs-1kv04,public +7177,cgjzf-ns258,public +7208,422xf-1np28,public +7327,nkwat-xx774,public +7464,wts8p-vnw55,public +7596,zmvts-36w09,public +8710,5anjz-s4v17,public +8835,p0gc5-d0w45,public +8908,6hfep-vtc08,public +8996,49zrs-cj069,public +9057,y68n8-0ex38,public +9061,7msch-gmw37,public +9335,35v6c-z8531,public +9404,yayps-tds62,public +9693,hckdg-rf028,public +9694,hhajh-69k65,public +9935,5q6ne-w7952,public +9943,jse7w-d2396,public +9971,ypccs-26768,public +10257,qnbd7-3b550,public +10278,nj2d1-djc15,public +10344,9qgbv-tey36,public +10386,tag51-0hv59,public diff --git a/missing_records.txt b/missing_records.txt index 856f572e..ba496f45 100644 --- a/missing_records.txt +++ b/missing_records.txt @@ -1,132 +1,34 @@ -535 -552 -785 854 -876 -929 941 944 965 966 967 968 -976 -992 1048 -1434 -1480 1506 -1608 -1632 -1739 -1853 -1884 -1995 -2063 -2094 -2227 -2386 -2461 -2514 -2631 -2653 -2778 -2861 -2873 -2990 -3001 -3136 -3172 3358 -3487 -3980 -3986 -4115 -4134 -4159 4452 -4523 -4586 -4662 4691 -4806 -4865 4868 -4874 -4936 -4947 -4957 -4983 -5124 -5128 -5244 -5299 5329 -5354 -5355 -5356 -5439 -5525 -5586 -5618 -5752 5881 -6275 -6299 -6300 -6301 -6302 -6387 -6420 -6424 -6487 -6491 -6509 -6532 -6587 -6758 -6815 -6855 -6993 -7067 7163 -7177 -7208 7215 7306 -7327 -7464 7506 -7596 7654 7655 7682 7705 8643 -8710 -8835 8851 -8908 -8996 -9057 -9061 -9335 -9404 9518 9602 9686 -9693 -9694 9763 -9935 -9943 -9971 10079 -10257 -10278 10343 -10344 -10386 10423 10493 10569 @@ -2341,3 +2243,4 @@ 122218 122350 122358 + From 436b9ed05be51585cd6391669305f6c5a8719c9a Mon Sep 17 00:00:00 2001 From: "R. S. Doiel" Date: Thu, 14 Sep 2023 09:47:14 -0700 Subject: [PATCH 06/11] fix: irdmtools issue #53 --- CITATION.cff | 2 +- about.md | 4 ++-- codemeta.json | 4 ++-- doi2rdm.1.md | 4 ++-- eprint2rdm.1.md | 4 ++-- eprint2rdm.go | 33 +++++++++++++++------------------ eprintrest.1.md | 4 ++-- installer.sh | 2 +- man/man1/doi2rdm.1 | 2 +- man/man1/eprint2rdm.1 | 2 +- man/man1/eprintrest.1 | 2 +- man/man1/people2vocabulary.1 | 2 +- man/man1/rdmutil.1 | 2 +- people2vocabulary.1.md | 4 ++-- rdmutil.1.md | 4 ++-- version.go | 6 +++--- 16 files changed, 39 insertions(+), 42 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 58da891c..b40e7be3 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -14,7 +14,7 @@ authors: repository-code: "https://github.com/caltechlibrary/irdmtools" -version: 0.0.48 +version: 0.0.49 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 e2023ebe..d35473ec 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.48 +version: 0.0.49 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.48 +## irdmtools 0.0.49 ### Authors diff --git a/codemeta.json b/codemeta.json index 2d33c66e..7f3533a0 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": "2023-09-12", + "dateRelease": "2023-09-14", "issueTracker": "https://github.com/caltechlibrary/irdmtools/issues", "name": "irdmtools", - "version": "0.0.48", + "version": "0.0.49", "description": "Tools for working with institutional repositories and data management systems. Current implementation targets Invenio-RDM.", "applicationCategory": "library science", "releaseNotes": "This is a proof of concept", diff --git a/doi2rdm.1.md b/doi2rdm.1.md index 4ca7b598..0f5f2085 100644 --- a/doi2rdm.1.md +++ b/doi2rdm.1.md @@ -1,6 +1,6 @@ -%doi2rdm(1) irdmtools user manual | version 0.0.48 0238bfa +%doi2rdm(1) irdmtools user manual | version 0.0.49 21ad7b1 % R. S. Doiel and Tom Morrell -% 2023-09-12 +% 2023-09-14 # NAME diff --git a/eprint2rdm.1.md b/eprint2rdm.1.md index 6f6e760d..30c85be0 100644 --- a/eprint2rdm.1.md +++ b/eprint2rdm.1.md @@ -1,6 +1,6 @@ -%eprint2rdm(1) irdmtools user manual | version 0.0.48 0238bfa +%eprint2rdm(1) irdmtools user manual | version 0.0.49 21ad7b1 % R. S. Doiel and Tom Morrell -% 2023-09-12 +% 2023-09-14 # NAME diff --git a/eprint2rdm.go b/eprint2rdm.go index cf5e1a0b..6798f223 100644 --- a/eprint2rdm.go +++ b/eprint2rdm.go @@ -359,18 +359,13 @@ func customFieldsMetadataFromEPrint(eprint *eprinttools.EPrint, rec *simplified. // instread of simplified.go because I need to gaurantee duplicate subjects don't get added // as part of the merging of keywords and subjects from EPrints. if eprint.Keywords != "" || (eprint.Subjects != nil && eprint.Subjects.Length() > 0) { - if rec.Metadata.Subjects == nil { - rec.Metadata.Subjects = []*simplified.Subject{} - } - subjectsTest := map[string]bool{} + subjectStrings := []string{} if eprint.Keywords != "" { keywords := strings.Split(eprint.Keywords, ";") for _, keyword := range keywords { - if _, duplicate := subjectsTest[keyword]; ! duplicate { - subjectsTest[keyword] = true - rec.Metadata.Subjects = append(rec.Metadata.Subjects, &simplified.Subject{ - Subject: strings.TrimSpace(keyword), - }) + val := strings.TrimSpace(keyword) + if val != "" && val != "cls" { + subjectStrings = append(subjectStrings, val) } } } @@ -378,19 +373,21 @@ func customFieldsMetadataFromEPrint(eprint *eprinttools.EPrint, rec *simplified. subject := eprint.Subjects.IndexOf(i) //NOTE: irdmtools issue #51, ignore cls as a subject, this was an EPrints-ism // needed for Caltech Library only. - if subject.Value != "" && subject.Value != "cls" { - if _, duplicate := subjectsTest[subject.Value]; ! duplicate { - subjectsTest[subject.Value] = true - rec.Metadata.Subjects = append(rec.Metadata.Subjects, &simplified.Subject{ - Subject: strings.TrimSpace(subject.Value), - }) + val := strings.TrimSpace(subject.Value) + if val != "" && val != "cls" { + subjectStrings = append(subjectStrings, val) + } + } + if len(subjectStrings) > 0 { + duplicates := map[string]bool{} + for _, subject := range subjectStrings { + if _, duplicate := duplicates[subject]; ! duplicate { + AddSubject(rec, subject) } + duplicates[subject] = true } } } - - // FIXME: Handle non-subject keyswords - return nil } diff --git a/eprintrest.1.md b/eprintrest.1.md index 6838b4c8..8bc0c076 100644 --- a/eprintrest.1.md +++ b/eprintrest.1.md @@ -1,6 +1,6 @@ -%eprintrest(1) irdmtools user manual | version 0.0.48 0238bfa +%eprintrest(1) irdmtools user manual | version 0.0.49 21ad7b1 % R. S. Doiel and Tom Morrell -% 2023-09-12 +% 2023-09-14 # NAME diff --git a/installer.sh b/installer.sh index 78f04d08..ee4b8a67 100755 --- a/installer.sh +++ b/installer.sh @@ -4,7 +4,7 @@ # Set the package name and version to install # PACKAGE="irdmtools" -VERSION="0.0.48" +VERSION="0.0.49" 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 88040c2b..4598c21e 100644 --- a/man/man1/doi2rdm.1 +++ b/man/man1/doi2rdm.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "doi2rdm" "1" "2023-09-12" "irdmtools user manual" "version 0.0.48 0238bfa" +.TH "doi2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 21ad7b1" .hy .SH NAME .PP diff --git a/man/man1/eprint2rdm.1 b/man/man1/eprint2rdm.1 index 44956c33..fca18dd1 100644 --- a/man/man1/eprint2rdm.1 +++ b/man/man1/eprint2rdm.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "eprint2rdm" "1" "2023-09-12" "irdmtools user manual" "version 0.0.48 0238bfa" +.TH "eprint2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 21ad7b1" .hy .SH NAME .PP diff --git a/man/man1/eprintrest.1 b/man/man1/eprintrest.1 index bd3c58f0..fb6141a0 100644 --- a/man/man1/eprintrest.1 +++ b/man/man1/eprintrest.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "eprintrest" "1" "2023-09-12" "irdmtools user manual" "version 0.0.48 0238bfa" +.TH "eprintrest" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 21ad7b1" .hy .SH NAME .PP diff --git a/man/man1/people2vocabulary.1 b/man/man1/people2vocabulary.1 index 279a0d31..9f427861 100644 --- a/man/man1/people2vocabulary.1 +++ b/man/man1/people2vocabulary.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "people2vocabulary" "1" "2023-09-12" "irdmtools user manual" "version 0.0.48 0238bfa" +.TH "people2vocabulary" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 21ad7b1" .hy .SH NAME .PP diff --git a/man/man1/rdmutil.1 b/man/man1/rdmutil.1 index 4ad47226..24c4d6c1 100644 --- a/man/man1/rdmutil.1 +++ b/man/man1/rdmutil.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "rdmutil" "1" "2023-09-12" "irdmtools user manual" "version 0.0.48 0238bfa" +.TH "rdmutil" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 21ad7b1" .hy .SH NAME .PP diff --git a/people2vocabulary.1.md b/people2vocabulary.1.md index 61570649..f22c23d5 100644 --- a/people2vocabulary.1.md +++ b/people2vocabulary.1.md @@ -1,6 +1,6 @@ -%people2vocabulary(1) irdmtools user manual | version 0.0.48 0238bfa +%people2vocabulary(1) irdmtools user manual | version 0.0.49 21ad7b1 % R. S. Doiel -% 2023-09-12 +% 2023-09-14 # NAME diff --git a/rdmutil.1.md b/rdmutil.1.md index 07dc15e6..f0b4b82b 100644 --- a/rdmutil.1.md +++ b/rdmutil.1.md @@ -1,6 +1,6 @@ -%rdmutil(1) irdmtools user manual | version 0.0.48 0238bfa +%rdmutil(1) irdmtools user manual | version 0.0.49 21ad7b1 % R. S. Doiel and Tom Morrell -% 2023-09-12 +% 2023-09-14 # NAME diff --git a/version.go b/version.go index f3535a51..e16b6822 100644 --- a/version.go +++ b/version.go @@ -6,13 +6,13 @@ import ( const ( // Version number of release - Version = "0.0.48" + Version = "0.0.49" // ReleaseDate, the date version.go was generated - ReleaseDate = "2023-09-12" + ReleaseDate = "2023-09-14" // ReleaseHash, the Git hash when version.go was generated - ReleaseHash = "0238bfa" + ReleaseHash = "21ad7b1" LicenseText = ` Redistribution and use in source and binary forms, with or without From 894e4c9b0d3e5a32b5bc9a08b3a49411853473ad Mon Sep 17 00:00:00 2001 From: "R. S. Doiel" Date: Thu, 14 Sep 2023 09:47:21 -0700 Subject: [PATCH 07/11] Quick Save --- about.html | 2 +- doi2rdm.1.md | 2 +- eprint2rdm.1.md | 2 +- eprintrest.1.md | 2 +- man/man1/doi2rdm.1 | 2 +- man/man1/eprint2rdm.1 | 2 +- man/man1/eprintrest.1 | 2 +- man/man1/people2vocabulary.1 | 2 +- man/man1/rdmutil.1 | 2 +- pagefind/fragment/unknown_bc9d25d.pf_fragment | Bin 0 -> 447 bytes pagefind/index/unknown_b221bfd.pf_index | Bin 0 -> 17900 bytes pagefind/pagefind-entry.json | 2 +- .../pagefind.unknown_b5c993ddd607e7d.pf_meta | Bin 0 -> 212 bytes people2vocabulary.1.md | 2 +- rdmutil.1.md | 2 +- version.go | 2 +- 16 files changed, 13 insertions(+), 13 deletions(-) create mode 100644 pagefind/fragment/unknown_bc9d25d.pf_fragment create mode 100644 pagefind/index/unknown_b221bfd.pf_index create mode 100644 pagefind/pagefind.unknown_b5c993ddd607e7d.pf_meta diff --git a/about.html b/about.html index 97adbf65..9745ba01 100644 --- a/about.html +++ b/about.html @@ -24,7 +24,7 @@

    About this software

    -

    irdmtools 0.0.48

    +

    irdmtools 0.0.49

    Authors

    • R. S. Doiel
    • diff --git a/doi2rdm.1.md b/doi2rdm.1.md index 0f5f2085..0c94887d 100644 --- a/doi2rdm.1.md +++ b/doi2rdm.1.md @@ -1,4 +1,4 @@ -%doi2rdm(1) irdmtools user manual | version 0.0.49 21ad7b1 +%doi2rdm(1) irdmtools user manual | version 0.0.49 436b9ed % R. S. Doiel and Tom Morrell % 2023-09-14 diff --git a/eprint2rdm.1.md b/eprint2rdm.1.md index 30c85be0..c949b963 100644 --- a/eprint2rdm.1.md +++ b/eprint2rdm.1.md @@ -1,4 +1,4 @@ -%eprint2rdm(1) irdmtools user manual | version 0.0.49 21ad7b1 +%eprint2rdm(1) irdmtools user manual | version 0.0.49 436b9ed % R. S. Doiel and Tom Morrell % 2023-09-14 diff --git a/eprintrest.1.md b/eprintrest.1.md index 8bc0c076..acfc785d 100644 --- a/eprintrest.1.md +++ b/eprintrest.1.md @@ -1,4 +1,4 @@ -%eprintrest(1) irdmtools user manual | version 0.0.49 21ad7b1 +%eprintrest(1) irdmtools user manual | version 0.0.49 436b9ed % R. S. Doiel and Tom Morrell % 2023-09-14 diff --git a/man/man1/doi2rdm.1 b/man/man1/doi2rdm.1 index 4598c21e..ea71a96f 100644 --- a/man/man1/doi2rdm.1 +++ b/man/man1/doi2rdm.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "doi2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 21ad7b1" +.TH "doi2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 436b9ed" .hy .SH NAME .PP diff --git a/man/man1/eprint2rdm.1 b/man/man1/eprint2rdm.1 index fca18dd1..21d46889 100644 --- a/man/man1/eprint2rdm.1 +++ b/man/man1/eprint2rdm.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "eprint2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 21ad7b1" +.TH "eprint2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 436b9ed" .hy .SH NAME .PP diff --git a/man/man1/eprintrest.1 b/man/man1/eprintrest.1 index fb6141a0..557a0017 100644 --- a/man/man1/eprintrest.1 +++ b/man/man1/eprintrest.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "eprintrest" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 21ad7b1" +.TH "eprintrest" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 436b9ed" .hy .SH NAME .PP diff --git a/man/man1/people2vocabulary.1 b/man/man1/people2vocabulary.1 index 9f427861..7860abc0 100644 --- a/man/man1/people2vocabulary.1 +++ b/man/man1/people2vocabulary.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "people2vocabulary" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 21ad7b1" +.TH "people2vocabulary" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 436b9ed" .hy .SH NAME .PP diff --git a/man/man1/rdmutil.1 b/man/man1/rdmutil.1 index 24c4d6c1..7f34bdc9 100644 --- a/man/man1/rdmutil.1 +++ b/man/man1/rdmutil.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "rdmutil" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 21ad7b1" +.TH "rdmutil" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 436b9ed" .hy .SH NAME .PP diff --git a/pagefind/fragment/unknown_bc9d25d.pf_fragment b/pagefind/fragment/unknown_bc9d25d.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..9588e2b13a6abe05c004b11384da2aa44e2817ea GIT binary patch literal 447 zcmV;w0YLsAiwFP!00002|CLg~ZWBQa{S|A^VYUS#K_rl>G%A6Fw%JM?tI4jjYcV?x z9uFa^^6z+;KqbV5+sw25Y`^EdZ*fPld2H(DsmKzFSyB2eXLX(Sp_mjkN5!ayUkxy5 zM+p+|^xy>@kTktAhXfby!o7a$;3{j!k{oOtR1U70FgSSN9@Z>^!9H{26xwDT^FDd) zj_{GYm^eDPL6#Qbjzv+1!hw9p0tc3_6k9luc0e&HX;$Ls0|@RpkRU7Gi=6@=46e=w!v?=)5>rY? zE_nYAF5OFW+E_VhD_GsHMs#{cHjColc4!*|L&~+0$uKSZ{By!u$^S?>j6`r=O~@Js8RY008SO(J24` literal 0 HcmV?d00001 diff --git a/pagefind/index/unknown_b221bfd.pf_index b/pagefind/index/unknown_b221bfd.pf_index new file mode 100644 index 0000000000000000000000000000000000000000..913a60444f3bf86d0cb3c06828604f94fd0d9564 GIT binary patch literal 17900 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 b!Ch>(OG%}a=R!L%;*b14K+hQ(Jahm65pm^u literal 0 HcmV?d00001 diff --git a/pagefind/pagefind-entry.json b/pagefind/pagefind-entry.json index 0b54c005..e10a7c41 100644 --- a/pagefind/pagefind-entry.json +++ b/pagefind/pagefind-entry.json @@ -1 +1 @@ -{"version":"0.12.0","languages":{"unknown":{"hash":"unknown_29fa54e2969ebdb","wasm":null,"page_count":16}}} \ No newline at end of file +{"version":"0.12.0","languages":{"unknown":{"hash":"unknown_b5c993ddd607e7d","wasm":null,"page_count":16}}} \ No newline at end of file diff --git a/pagefind/pagefind.unknown_b5c993ddd607e7d.pf_meta b/pagefind/pagefind.unknown_b5c993ddd607e7d.pf_meta new file mode 100644 index 0000000000000000000000000000000000000000..2273764b108a5bb7256bf6e941f2e5e56950e591 GIT binary patch literal 212 zcmV;_04x6=iwFP!00002|4q+LN(3+r1z^S_2twu(L!0y`J%`|SXp=@orsGCM+>DBQ zkKskUfh$j=yEe;@guHiOue;q2-K*$_xt+(I`+Pe-jJt7s8v88fePMW+)EEO6fvZW8 zGfDLDxEvB^^#XZPrCM7@_+F@*apUdgavCX>TxGjCUrgAn6O2h7kwP-~S&~UnjJp2p zRDvgi-$}-jA|~KvORXj8XHzr<4$9yr1*#Yu!q-yL31cc3ukY$yC^yglb2zBZM2Nnb Oo=$&Eo8sbU0RRBI_+mr= literal 0 HcmV?d00001 diff --git a/people2vocabulary.1.md b/people2vocabulary.1.md index f22c23d5..a0e8a78c 100644 --- a/people2vocabulary.1.md +++ b/people2vocabulary.1.md @@ -1,4 +1,4 @@ -%people2vocabulary(1) irdmtools user manual | version 0.0.49 21ad7b1 +%people2vocabulary(1) irdmtools user manual | version 0.0.49 436b9ed % R. S. Doiel % 2023-09-14 diff --git a/rdmutil.1.md b/rdmutil.1.md index f0b4b82b..e0707a3c 100644 --- a/rdmutil.1.md +++ b/rdmutil.1.md @@ -1,4 +1,4 @@ -%rdmutil(1) irdmtools user manual | version 0.0.49 21ad7b1 +%rdmutil(1) irdmtools user manual | version 0.0.49 436b9ed % R. S. Doiel and Tom Morrell % 2023-09-14 diff --git a/version.go b/version.go index e16b6822..d53a9439 100644 --- a/version.go +++ b/version.go @@ -12,7 +12,7 @@ const ( ReleaseDate = "2023-09-14" // ReleaseHash, the Git hash when version.go was generated - ReleaseHash = "21ad7b1" + ReleaseHash = "436b9ed" LicenseText = ` Redistribution and use in source and binary forms, with or without From 6fc184a5b7305caaf9eaefec1dba2fa29ea2b570 Mon Sep 17 00:00:00 2001 From: "R. S. Doiel" Date: Thu, 14 Sep 2023 09:47:41 -0700 Subject: [PATCH 08/11] fix: irdmtools issue #53 --- doi2rdm.1.md | 2 +- eprint2rdm.1.md | 2 +- eprintrest.1.md | 2 +- man/man1/doi2rdm.1 | 2 +- man/man1/eprint2rdm.1 | 2 +- man/man1/eprintrest.1 | 2 +- man/man1/people2vocabulary.1 | 2 +- man/man1/rdmutil.1 | 2 +- people2vocabulary.1.md | 2 +- rdmutil.1.md | 2 +- version.go | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/doi2rdm.1.md b/doi2rdm.1.md index 0c94887d..72aedeec 100644 --- a/doi2rdm.1.md +++ b/doi2rdm.1.md @@ -1,4 +1,4 @@ -%doi2rdm(1) irdmtools user manual | version 0.0.49 436b9ed +%doi2rdm(1) irdmtools user manual | version 0.0.49 6b95911 % R. S. Doiel and Tom Morrell % 2023-09-14 diff --git a/eprint2rdm.1.md b/eprint2rdm.1.md index c949b963..84fff5f0 100644 --- a/eprint2rdm.1.md +++ b/eprint2rdm.1.md @@ -1,4 +1,4 @@ -%eprint2rdm(1) irdmtools user manual | version 0.0.49 436b9ed +%eprint2rdm(1) irdmtools user manual | version 0.0.49 6b95911 % R. S. Doiel and Tom Morrell % 2023-09-14 diff --git a/eprintrest.1.md b/eprintrest.1.md index acfc785d..4a40e7dc 100644 --- a/eprintrest.1.md +++ b/eprintrest.1.md @@ -1,4 +1,4 @@ -%eprintrest(1) irdmtools user manual | version 0.0.49 436b9ed +%eprintrest(1) irdmtools user manual | version 0.0.49 6b95911 % R. S. Doiel and Tom Morrell % 2023-09-14 diff --git a/man/man1/doi2rdm.1 b/man/man1/doi2rdm.1 index ea71a96f..1084f9d8 100644 --- a/man/man1/doi2rdm.1 +++ b/man/man1/doi2rdm.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "doi2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 436b9ed" +.TH "doi2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6b95911" .hy .SH NAME .PP diff --git a/man/man1/eprint2rdm.1 b/man/man1/eprint2rdm.1 index 21d46889..5b39e310 100644 --- a/man/man1/eprint2rdm.1 +++ b/man/man1/eprint2rdm.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "eprint2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 436b9ed" +.TH "eprint2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6b95911" .hy .SH NAME .PP diff --git a/man/man1/eprintrest.1 b/man/man1/eprintrest.1 index 557a0017..b8976da5 100644 --- a/man/man1/eprintrest.1 +++ b/man/man1/eprintrest.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "eprintrest" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 436b9ed" +.TH "eprintrest" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6b95911" .hy .SH NAME .PP diff --git a/man/man1/people2vocabulary.1 b/man/man1/people2vocabulary.1 index 7860abc0..3d1fe9cc 100644 --- a/man/man1/people2vocabulary.1 +++ b/man/man1/people2vocabulary.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "people2vocabulary" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 436b9ed" +.TH "people2vocabulary" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6b95911" .hy .SH NAME .PP diff --git a/man/man1/rdmutil.1 b/man/man1/rdmutil.1 index 7f34bdc9..9d06958a 100644 --- a/man/man1/rdmutil.1 +++ b/man/man1/rdmutil.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "rdmutil" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 436b9ed" +.TH "rdmutil" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6b95911" .hy .SH NAME .PP diff --git a/people2vocabulary.1.md b/people2vocabulary.1.md index a0e8a78c..e747d2fb 100644 --- a/people2vocabulary.1.md +++ b/people2vocabulary.1.md @@ -1,4 +1,4 @@ -%people2vocabulary(1) irdmtools user manual | version 0.0.49 436b9ed +%people2vocabulary(1) irdmtools user manual | version 0.0.49 6b95911 % R. S. Doiel % 2023-09-14 diff --git a/rdmutil.1.md b/rdmutil.1.md index e0707a3c..9194543b 100644 --- a/rdmutil.1.md +++ b/rdmutil.1.md @@ -1,4 +1,4 @@ -%rdmutil(1) irdmtools user manual | version 0.0.49 436b9ed +%rdmutil(1) irdmtools user manual | version 0.0.49 6b95911 % R. S. Doiel and Tom Morrell % 2023-09-14 diff --git a/version.go b/version.go index d53a9439..a58a217b 100644 --- a/version.go +++ b/version.go @@ -12,7 +12,7 @@ const ( ReleaseDate = "2023-09-14" // ReleaseHash, the Git hash when version.go was generated - ReleaseHash = "436b9ed" + ReleaseHash = "6b95911" LicenseText = ` Redistribution and use in source and binary forms, with or without From 265a46b14d886aea1ce4a58dc1ed6e597607af4b Mon Sep 17 00:00:00 2001 From: "R. S. Doiel" Date: Thu, 14 Sep 2023 09:47:48 -0700 Subject: [PATCH 09/11] Quick Save --- doi2rdm.1.md | 2 +- eprint2rdm.1.md | 2 +- eprintrest.1.md | 2 +- man/man1/doi2rdm.1 | 2 +- man/man1/eprint2rdm.1 | 2 +- man/man1/eprintrest.1 | 2 +- man/man1/people2vocabulary.1 | 2 +- man/man1/rdmutil.1 | 2 +- people2vocabulary.1.md | 2 +- rdmutil.1.md | 2 +- version.go | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/doi2rdm.1.md b/doi2rdm.1.md index 72aedeec..8c200d51 100644 --- a/doi2rdm.1.md +++ b/doi2rdm.1.md @@ -1,4 +1,4 @@ -%doi2rdm(1) irdmtools user manual | version 0.0.49 6b95911 +%doi2rdm(1) irdmtools user manual | version 0.0.49 6fc184a % R. S. Doiel and Tom Morrell % 2023-09-14 diff --git a/eprint2rdm.1.md b/eprint2rdm.1.md index 84fff5f0..086f9c12 100644 --- a/eprint2rdm.1.md +++ b/eprint2rdm.1.md @@ -1,4 +1,4 @@ -%eprint2rdm(1) irdmtools user manual | version 0.0.49 6b95911 +%eprint2rdm(1) irdmtools user manual | version 0.0.49 6fc184a % R. S. Doiel and Tom Morrell % 2023-09-14 diff --git a/eprintrest.1.md b/eprintrest.1.md index 4a40e7dc..170d2432 100644 --- a/eprintrest.1.md +++ b/eprintrest.1.md @@ -1,4 +1,4 @@ -%eprintrest(1) irdmtools user manual | version 0.0.49 6b95911 +%eprintrest(1) irdmtools user manual | version 0.0.49 6fc184a % R. S. Doiel and Tom Morrell % 2023-09-14 diff --git a/man/man1/doi2rdm.1 b/man/man1/doi2rdm.1 index 1084f9d8..5ee0140c 100644 --- a/man/man1/doi2rdm.1 +++ b/man/man1/doi2rdm.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "doi2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6b95911" +.TH "doi2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6fc184a" .hy .SH NAME .PP diff --git a/man/man1/eprint2rdm.1 b/man/man1/eprint2rdm.1 index 5b39e310..656eb316 100644 --- a/man/man1/eprint2rdm.1 +++ b/man/man1/eprint2rdm.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "eprint2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6b95911" +.TH "eprint2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6fc184a" .hy .SH NAME .PP diff --git a/man/man1/eprintrest.1 b/man/man1/eprintrest.1 index b8976da5..e2ee2a90 100644 --- a/man/man1/eprintrest.1 +++ b/man/man1/eprintrest.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "eprintrest" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6b95911" +.TH "eprintrest" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6fc184a" .hy .SH NAME .PP diff --git a/man/man1/people2vocabulary.1 b/man/man1/people2vocabulary.1 index 3d1fe9cc..6c55040e 100644 --- a/man/man1/people2vocabulary.1 +++ b/man/man1/people2vocabulary.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "people2vocabulary" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6b95911" +.TH "people2vocabulary" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6fc184a" .hy .SH NAME .PP diff --git a/man/man1/rdmutil.1 b/man/man1/rdmutil.1 index 9d06958a..53626ea1 100644 --- a/man/man1/rdmutil.1 +++ b/man/man1/rdmutil.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "rdmutil" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6b95911" +.TH "rdmutil" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6fc184a" .hy .SH NAME .PP diff --git a/people2vocabulary.1.md b/people2vocabulary.1.md index e747d2fb..8669de9d 100644 --- a/people2vocabulary.1.md +++ b/people2vocabulary.1.md @@ -1,4 +1,4 @@ -%people2vocabulary(1) irdmtools user manual | version 0.0.49 6b95911 +%people2vocabulary(1) irdmtools user manual | version 0.0.49 6fc184a % R. S. Doiel % 2023-09-14 diff --git a/rdmutil.1.md b/rdmutil.1.md index 9194543b..f3d83897 100644 --- a/rdmutil.1.md +++ b/rdmutil.1.md @@ -1,4 +1,4 @@ -%rdmutil(1) irdmtools user manual | version 0.0.49 6b95911 +%rdmutil(1) irdmtools user manual | version 0.0.49 6fc184a % R. S. Doiel and Tom Morrell % 2023-09-14 diff --git a/version.go b/version.go index a58a217b..80a79ef3 100644 --- a/version.go +++ b/version.go @@ -12,7 +12,7 @@ const ( ReleaseDate = "2023-09-14" // ReleaseHash, the Git hash when version.go was generated - ReleaseHash = "6b95911" + ReleaseHash = "6fc184a" LicenseText = ` Redistribution and use in source and binary forms, with or without From a3f1768e242b553b1634eaabea0cdf2d50a8ed48 Mon Sep 17 00:00:00 2001 From: "R. S. Doiel" Date: Thu, 14 Sep 2023 09:54:16 -0700 Subject: [PATCH 10/11] release v0.0.49 --- doi2rdm.1.md | 2 +- eprint2rdm.1.md | 2 +- eprintrest.1.md | 2 +- man/man1/doi2rdm.1 | 2 +- man/man1/eprint2rdm.1 | 2 +- man/man1/eprintrest.1 | 2 +- man/man1/people2vocabulary.1 | 2 +- man/man1/rdmutil.1 | 2 +- people2vocabulary.1.md | 2 +- rdmutil.1.md | 2 +- version.go | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/doi2rdm.1.md b/doi2rdm.1.md index 8c200d51..0e92f983 100644 --- a/doi2rdm.1.md +++ b/doi2rdm.1.md @@ -1,4 +1,4 @@ -%doi2rdm(1) irdmtools user manual | version 0.0.49 6fc184a +%doi2rdm(1) irdmtools user manual | version 0.0.49 265a46b % R. S. Doiel and Tom Morrell % 2023-09-14 diff --git a/eprint2rdm.1.md b/eprint2rdm.1.md index 086f9c12..c5c016bc 100644 --- a/eprint2rdm.1.md +++ b/eprint2rdm.1.md @@ -1,4 +1,4 @@ -%eprint2rdm(1) irdmtools user manual | version 0.0.49 6fc184a +%eprint2rdm(1) irdmtools user manual | version 0.0.49 265a46b % R. S. Doiel and Tom Morrell % 2023-09-14 diff --git a/eprintrest.1.md b/eprintrest.1.md index 170d2432..dbd71838 100644 --- a/eprintrest.1.md +++ b/eprintrest.1.md @@ -1,4 +1,4 @@ -%eprintrest(1) irdmtools user manual | version 0.0.49 6fc184a +%eprintrest(1) irdmtools user manual | version 0.0.49 265a46b % R. S. Doiel and Tom Morrell % 2023-09-14 diff --git a/man/man1/doi2rdm.1 b/man/man1/doi2rdm.1 index 5ee0140c..7ebf201e 100644 --- a/man/man1/doi2rdm.1 +++ b/man/man1/doi2rdm.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "doi2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6fc184a" +.TH "doi2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 265a46b" .hy .SH NAME .PP diff --git a/man/man1/eprint2rdm.1 b/man/man1/eprint2rdm.1 index 656eb316..398a5310 100644 --- a/man/man1/eprint2rdm.1 +++ b/man/man1/eprint2rdm.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "eprint2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6fc184a" +.TH "eprint2rdm" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 265a46b" .hy .SH NAME .PP diff --git a/man/man1/eprintrest.1 b/man/man1/eprintrest.1 index e2ee2a90..2b55dac5 100644 --- a/man/man1/eprintrest.1 +++ b/man/man1/eprintrest.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "eprintrest" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6fc184a" +.TH "eprintrest" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 265a46b" .hy .SH NAME .PP diff --git a/man/man1/people2vocabulary.1 b/man/man1/people2vocabulary.1 index 6c55040e..b4e181ed 100644 --- a/man/man1/people2vocabulary.1 +++ b/man/man1/people2vocabulary.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "people2vocabulary" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6fc184a" +.TH "people2vocabulary" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 265a46b" .hy .SH NAME .PP diff --git a/man/man1/rdmutil.1 b/man/man1/rdmutil.1 index 53626ea1..798e0dd3 100644 --- a/man/man1/rdmutil.1 +++ b/man/man1/rdmutil.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "rdmutil" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 6fc184a" +.TH "rdmutil" "1" "2023-09-14" "irdmtools user manual" "version 0.0.49 265a46b" .hy .SH NAME .PP diff --git a/people2vocabulary.1.md b/people2vocabulary.1.md index 8669de9d..0c264191 100644 --- a/people2vocabulary.1.md +++ b/people2vocabulary.1.md @@ -1,4 +1,4 @@ -%people2vocabulary(1) irdmtools user manual | version 0.0.49 6fc184a +%people2vocabulary(1) irdmtools user manual | version 0.0.49 265a46b % R. S. Doiel % 2023-09-14 diff --git a/rdmutil.1.md b/rdmutil.1.md index f3d83897..51a431e0 100644 --- a/rdmutil.1.md +++ b/rdmutil.1.md @@ -1,4 +1,4 @@ -%rdmutil(1) irdmtools user manual | version 0.0.49 6fc184a +%rdmutil(1) irdmtools user manual | version 0.0.49 265a46b % R. S. Doiel and Tom Morrell % 2023-09-14 diff --git a/version.go b/version.go index 80a79ef3..f6d07195 100644 --- a/version.go +++ b/version.go @@ -12,7 +12,7 @@ const ( ReleaseDate = "2023-09-14" // ReleaseHash, the Git hash when version.go was generated - ReleaseHash = "6fc184a" + ReleaseHash = "265a46b" LicenseText = ` Redistribution and use in source and binary forms, with or without From 8575da6fca927427fe7060c1d1dbdbffdb1601b1 Mon Sep 17 00:00:00 2001 From: Thomas Morrell Date: Thu, 14 Sep 2023 09:59:23 -0700 Subject: [PATCH 11/11] Additional group fix --- irdm/fixups.py | 2 ++ migrated_records.csv | 47 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/irdm/fixups.py b/irdm/fixups.py index 2c131c45..5d6d987a 100644 --- a/irdm/fixups.py +++ b/irdm/fixups.py @@ -437,6 +437,8 @@ def fixup_record(record, reload=False, token=None): new.append({"id": "Owens-Valley-Radio-Observatory"}) elif group["id"] == "Library-System-Papers-and-Publications": new.append({"id": "Caltech-Library"}) + elif group["id"] == 'Koch-Laboratory-(KLAB)': + new.append({"id": "Koch-Laboratory"}) else: new.append(group) record["custom_fields"]["caltech:groups"] = new diff --git a/migrated_records.csv b/migrated_records.csv index f9d170bb..c6299732 100644 --- a/migrated_records.csv +++ b/migrated_records.csv @@ -135630,3 +135630,50 @@ eprintid,rdmid,record_status 10278,nj2d1-djc15,public 10344,9qgbv-tey36,public 10386,tag51-0hv59,public +10571,4xdnv-yr859,public +10787,0sn8a-9ss32,public +10791,zf6yv-wyz65,public +10953,5f28q-aks55,public +10954,s6dv5-0wv41,public +10956,xdmxy-2qw19,public +11003,ft4cg-ez334,public +11148,513m7-kn635,public +11149,29emd-eth25,public +11151,emats-q3e25,public +11177,24czq-28a81,public +11179,gd51h-cye59,public +11182,81bdh-qk895,public +11194,7grp1-gkr73,public +11218,cejm8-hbf89,public +11169,y7g3c-w5g95,public +11117,grqbc-bx868,public +11220,qea1q-7ay26,public +11233,e0tpv-t9h46,public +11234,543fd-mbf50,public +11249,m8pmd-y0042,public +11250,8ytb3-2x127,public +11343,pm25q-m5n08,public +11352,fagpg-d9b74,public +11355,1b2hx-7tx89,public +11369,bjzqg-cry21,public +11383,p6pdb-vsk02,public +11452,8d0mt-avg30,public +11515,8mxw1-cbc17,public +11590,21sze-z2340,public +11657,v18jb-xb789,public +11693,eanx2-5zy62,public +11735,t882t-h4867,public +11770,bb7ve-k0486,public +11827,cn5d6-ez857,public +11954,3b91s-8jv08,public +11999,qg4xz-jnv92,public +12016,gf9rc-wfb95,public +12154,h73fj-4t355,public +12202,61vhr-z0s35,public +12369,bywz9-are23,public +12393,w9880-ger04,public +12407,6f9kb-hsf29,public +12474,zz44n-yby19,public +12491,5e3b0-rbc22,public +12591,300h0-18998,public +12613,r20n5-8mz88,public