dryad2dataverse 0.6.1__tar.gz → 0.7.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dryad2dataverse-0.6.1/src/dryad2dataverse.egg-info → dryad2dataverse-0.7.1}/PKG-INFO +9 -1
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/api_reference.md +274 -34
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/changelog.md +6 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/requirements.txt +1 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/src/dryad2dataverse/__init__.py +1 -1
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/src/dryad2dataverse/scripts/dryadd.py +2 -2
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/src/dryad2dataverse/serializer.py +5 -1
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/src/dryad2dataverse/transfer.py +63 -15
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1/src/dryad2dataverse.egg-info}/PKG-INFO +9 -1
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/src/dryad2dataverse.egg-info/requires.txt +1 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/.gitignore +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/README.md +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/_config.yml +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/compiling.md +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/credits.md +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/css/extra.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/anomalies.html +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/anomalies.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/bootstrap/css/bootstrap-theme.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/bootstrap/css/bootstrap-theme.css.map +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/bootstrap/css/bootstrap-theme.min.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/bootstrap/css/bootstrap-theme.min.css.map +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/bootstrap/css/bootstrap.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/bootstrap/css/bootstrap.css.map +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/bootstrap/css/bootstrap.min.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/bootstrap/css/bootstrap.min.css.map +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/bootstrap/fonts/glyphicons-halflings-regular.svg +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/bootstrap/js/bootstrap.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/bootstrap/js/bootstrap.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/bootstrap/js/npm.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/plugins/fastclick/fastclick.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/plugins/fastclick/fastclick.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/plugins/jQuery/jquery-2.2.3.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/plugins/jQueryUI/jquery-ui.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/plugins/jQueryUI/jquery-ui.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/plugins/slimScroll/jquery.slimscroll.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/admin-lte/plugins/slimScroll/jquery.slimscroll.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/anchor-js/anchor.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/codemirror/codemirror.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/codemirror/codemirror.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/codemirror/sql.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net/jquery.dataTables.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-bs/css/dataTables.bootstrap.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-bs/css/dataTables.bootstrap.min.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-bs/js/dataTables.bootstrap.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-bs/js/dataTables.bootstrap.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-buttons/buttons.colVis.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-buttons/buttons.colVis.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-buttons/buttons.flash.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-buttons/buttons.flash.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-buttons/buttons.html5.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-buttons/buttons.html5.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-buttons/buttons.print.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-buttons/buttons.print.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-buttons/dataTables.buttons.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-buttons/dataTables.buttons.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-buttons-bs/css/buttons.bootstrap.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-buttons-bs/css/buttons.bootstrap.min.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-buttons-bs/js/buttons.bootstrap.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/datatables.net-buttons-bs/js/buttons.bootstrap.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/font-awesome/css/font-awesome.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/font-awesome/css/font-awesome.css.map +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/font-awesome/css/font-awesome.min.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/font-awesome/fonts/FontAwesome.otf +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/font-awesome/fonts/fontawesome-webfont.eot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/font-awesome/fonts/fontawesome-webfont.svg +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/font-awesome/fonts/fontawesome-webfont.woff +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/html5shiv/html5shiv.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/ionicons/css/ionicons.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/ionicons/css/ionicons.min.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/ionicons/fonts/ionicons.eot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/ionicons/fonts/ionicons.svg +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/ionicons/fonts/ionicons.ttf +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/ionicons/fonts/ionicons.woff +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/jquery/jquery.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/js-xlsx/xlsx.full.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/pdfmake/pdfmake.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/pdfmake/vfs_fonts.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/respond/respond.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/salvattore/salvattore.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/bower/salvattore/salvattore.min.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/column.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/columns.html +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/constraint.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/constraints.html +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/deletionOrder.txt +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/orphans/orphans.dot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/orphans/orphans.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/summary/relationships.real.compact.dot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/summary/relationships.real.compact.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/summary/relationships.real.large.dot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/summary/relationships.real.large.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/dryadFiles.1degree.dot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/dryadFiles.1degree.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/dryadFiles.2degrees.dot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/dryadFiles.2degrees.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/dryadStudy.1degree.dot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/dryadStudy.1degree.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/dvFiles.1degree.dot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/dvFiles.1degree.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/dvFiles.2degrees.dot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/dvFiles.2degrees.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/dvStudy.1degree.dot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/dvStudy.1degree.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/dvStudy.2degrees.dot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/dvStudy.2degrees.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/failed_uploads.1degree.dot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/failed_uploads.1degree.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/failed_uploads.2degrees.dot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/failed_uploads.2degrees.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/lastcheck.1degree.dot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/diagrams/tables/lastcheck.1degree.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/dryad_dataverse_monitor.sqlite3.%.xml +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/favicon.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/indieflower/indie-flower-v8-latin-regular.eot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/indieflower/indie-flower-v8-latin-regular.svg +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/indieflower/indie-flower-v8-latin-regular.ttf +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/indieflower/indie-flower-v8-latin-regular.woff +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/indieflower/indie-flower-v8-latin-regular.woff2 +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/indieflower/indie-flower.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-300.eot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-300.svg +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-300.ttf +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-300.woff +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-300.woff2 +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-300italic.eot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-300italic.svg +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-300italic.ttf +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-300italic.woff +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-300italic.woff2 +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-600.eot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-600.svg +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-600.ttf +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-600.woff +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-600.woff2 +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-600italic.eot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-600italic.svg +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-600italic.ttf +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-600italic.woff +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-600italic.woff2 +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-700.eot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-700.svg +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-700.ttf +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-700.woff +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-700.woff2 +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-regular.eot +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-regular.svg +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-regular.ttf +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-regular.woff +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro-v10-latin-regular.woff2 +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/fonts/source-sans-pro/source-sans-pro.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/images/foreignKey.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/images/foreignKeys.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/images/primaryKey.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/images/primaryKeys.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/index.html +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/info-html.txt +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/insertionOrder.txt +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/main.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/orphans.html +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/relationships.html +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/relationships.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/routines/routine.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/routines.html +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/routines.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/schemaSpy.css +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/schemaSpy.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/tables/dryadFiles.html +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/tables/dryadStudy.html +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/tables/dvFiles.html +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/tables/dvStudy.html +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/tables/failed_uploads.html +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/tables/lastcheck.html +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/dbase_structure/tables/table.js +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/faq.md +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/images/dryad2dataverseLogo.png +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/images/dryad2dataverseLogo.svg +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/index.md +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/installation.md +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/other_utils.md +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/pydoc-markdown.yml +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/reference.md +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/script.md +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/docs/track.md +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/license.md +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/mkdocs.yml +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/pyproject.toml +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/setup.cfg +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/setup.py +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/src/dryad2dataverse/constants.py +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/src/dryad2dataverse/exceptions.py +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/src/dryad2dataverse/handlers.py +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/src/dryad2dataverse/monitor.py +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/src/dryad2dataverse.egg-info/SOURCES.txt +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/src/dryad2dataverse.egg-info/dependency_links.txt +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/src/dryad2dataverse.egg-info/entry_points.txt +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/src/dryad2dataverse.egg-info/top_level.txt +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/tests/__init__.py +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/tests/badURL.json +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/tests/tests_monitor.py +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/tests/tests_serializer.py +0 -0
- {dryad2dataverse-0.6.1 → dryad2dataverse-0.7.1}/tests/tests_transfer.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dryad2dataverse
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.1
|
|
4
4
|
Summary: Utility for copying and syncing data from a Dryad data repository to a Dataverse repository
|
|
5
5
|
Author-email: Paul Lesack <paul.lesack@ubc.ca>
|
|
6
6
|
Project-URL: Homepage, https://ubc-library-rc.github.io/dryad2dataverse
|
|
@@ -17,6 +17,14 @@ Classifier: Topic :: Internet :: WWW/HTTP :: Site Management
|
|
|
17
17
|
Classifier: Topic :: Utilities
|
|
18
18
|
Requires-Python: >=3.6
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
|
+
Requires-Dist: certifi>=2022.12.7
|
|
21
|
+
Requires-Dist: charset-normalizer>=2.0.4
|
|
22
|
+
Requires-Dist: chardet>=3.0.4
|
|
23
|
+
Requires-Dist: idna>=2.10
|
|
24
|
+
Requires-Dist: pycryptodome>=3.20.0
|
|
25
|
+
Requires-Dist: requests>=2.26.0
|
|
26
|
+
Requires-Dist: requests-toolbelt>=0.9.1
|
|
27
|
+
Requires-Dist: urllib3>=1.26.6
|
|
20
28
|
|
|
21
29
|
# dryad2dataverse
|
|
22
30
|
|
|
@@ -6,8 +6,6 @@ nav_order: 15
|
|
|
6
6
|
|
|
7
7
|
# Complete API reference
|
|
8
8
|
|
|
9
|
-
<a name="dryad2dataverse"></a>
|
|
10
|
-
|
|
11
9
|
<a id="dryad2dataverse"></a>
|
|
12
10
|
|
|
13
11
|
## dryad2dataverse
|
|
@@ -279,14 +277,14 @@ to discover Dataverse file ids for deletion.
|
|
|
279
277
|
filelist : list
|
|
280
278
|
— List of Dryad file tuples: eg:
|
|
281
279
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
280
|
+
```
|
|
281
|
+
[('https://datadryad.org/api/v2/files/385819/download',
|
|
282
|
+
'GCB_ACG_Mortality_2020.zip',
|
|
283
|
+
'application/x-zip-compressed', 23787587),
|
|
284
|
+
('https://datadryad.org/api/v2/files/385820/download',
|
|
285
|
+
'Readme_ACG_Mortality.txt',
|
|
286
|
+
'text/plain', 1350)]
|
|
287
|
+
```
|
|
290
288
|
----------------------------------------
|
|
291
289
|
|
|
292
290
|
<a id="dryad2dataverse.monitor.Monitor.get_json_dvfids"></a>
|
|
@@ -368,6 +366,12 @@ required to transfer data from Dryad to Dataverse.
|
|
|
368
366
|
"Constants" may be a bit strong, but the only constant is the
|
|
369
367
|
presence of change.
|
|
370
368
|
|
|
369
|
+
<a id="dryad2dataverse.constants.MAX_UPLOAD"></a>
|
|
370
|
+
|
|
371
|
+
##### MAX\_UPLOAD
|
|
372
|
+
|
|
373
|
+
Max 3GB upload
|
|
374
|
+
|
|
371
375
|
<a id="dryad2dataverse.handlers"></a>
|
|
372
376
|
|
|
373
377
|
## dryad2dataverse.handlers
|
|
@@ -625,37 +629,44 @@ Supplying a `targetDv` kwarg creates a new study and supplying a
|
|
|
625
629
|
##### download\_file
|
|
626
630
|
|
|
627
631
|
```python
|
|
628
|
-
def download_file(url
|
|
632
|
+
def download_file(url=None,
|
|
633
|
+
filename=None,
|
|
634
|
+
tmp=None,
|
|
635
|
+
size=None,
|
|
636
|
+
chk=None,
|
|
637
|
+
timeout=45,
|
|
638
|
+
**kwargs)
|
|
629
639
|
```
|
|
630
640
|
|
|
631
641
|
Downloads a file via requests streaming and saves to constants.TMP.
|
|
632
|
-
returns
|
|
642
|
+
returns checksum on success and an exception on failure.
|
|
633
643
|
|
|
634
644
|
----------------------------------------
|
|
645
|
+
Required keyword arguments:
|
|
635
646
|
|
|
636
|
-
|
|
647
|
+
url : str
|
|
648
|
+
— URL of download.
|
|
637
649
|
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
----------------------------------------
|
|
650
|
+
filename : str
|
|
651
|
+
— Output file name.
|
|
652
|
+
|
|
653
|
+
timeout : int
|
|
654
|
+
— Requests timeout.
|
|
655
|
+
|
|
656
|
+
tmp : str
|
|
657
|
+
— Temporary directory for downloads.
|
|
658
|
+
Defaults to dryad2dataverse.constants.TMP.
|
|
659
|
+
|
|
660
|
+
size : int
|
|
661
|
+
— Reported file size in bytes.
|
|
662
|
+
Defaults to dryad2dataverse.constants.MAX_UPLOAD.
|
|
663
|
+
|
|
664
|
+
digest_type: str
|
|
665
|
+
— checksum type (ie, md5, sha-256, etc)
|
|
666
|
+
|
|
667
|
+
chk : str
|
|
668
|
+
— checksum of file (if available and known).
|
|
669
|
+
----------------------------------------
|
|
659
670
|
|
|
660
671
|
<a id="dryad2dataverse.transfer.Transfer.download_files"></a>
|
|
661
672
|
|
|
@@ -935,6 +946,235 @@ a Dataverse installation.
|
|
|
935
946
|
— API key for Dataverse. Defaults to dryad2dataverse.constants.APIKEY.
|
|
936
947
|
----------------------------------------
|
|
937
948
|
|
|
949
|
+
<a id="dryad2dataverse.scripts.dryadd"></a>
|
|
950
|
+
|
|
951
|
+
## dryad2dataverse.scripts.dryadd
|
|
952
|
+
|
|
953
|
+
Dryad daemon for monitoring and automatically uploading studies associated with a particular ROR
|
|
954
|
+
|
|
955
|
+
Requires Python 3.6+ and requests library
|
|
956
|
+
|
|
957
|
+
<a id="dryad2dataverse.scripts.dryadd.new_content"></a>
|
|
958
|
+
|
|
959
|
+
##### new\_content
|
|
960
|
+
|
|
961
|
+
```python
|
|
962
|
+
def new_content(serial)
|
|
963
|
+
```
|
|
964
|
+
|
|
965
|
+
Creates content for new study upload message (potentially redundant
|
|
966
|
+
with Dataverse emailer).
|
|
967
|
+
serial : dryad2dataverse.serializer.Serializer instance
|
|
968
|
+
|
|
969
|
+
<a id="dryad2dataverse.scripts.dryadd.changed_content"></a>
|
|
970
|
+
|
|
971
|
+
##### changed\_content
|
|
972
|
+
|
|
973
|
+
```python
|
|
974
|
+
def changed_content(serial, monitor)
|
|
975
|
+
```
|
|
976
|
+
|
|
977
|
+
Creates content for file update message.
|
|
978
|
+
serial : dryad2dataverse.serializer.Serializer instance
|
|
979
|
+
monitor : dryad2dataverse.monitor.Monitor instance
|
|
980
|
+
|
|
981
|
+
<a id="dryad2dataverse.scripts.dryadd.notify"></a>
|
|
982
|
+
|
|
983
|
+
##### notify
|
|
984
|
+
|
|
985
|
+
```python
|
|
986
|
+
def notify(msgtxt, width=100, **kwargs)
|
|
987
|
+
```
|
|
988
|
+
|
|
989
|
+
Basic email change notifier. Will sent email outlining metadata changes
|
|
990
|
+
to recipient. Uses SSL.
|
|
991
|
+
|
|
992
|
+
Has only really been tested with Gmail (although it should work with anything,
|
|
993
|
+
and Gmail requires 'Allow less secure apps' or whatever they call it.
|
|
994
|
+
If you are having troubles with GMail:
|
|
995
|
+
|
|
996
|
+
1. Enable less secure access
|
|
997
|
+
|
|
998
|
+
2. Disable the CAPTCHA:
|
|
999
|
+
https://accounts.google.com/DisplayUnlockCaptcha
|
|
1000
|
+
|
|
1001
|
+
Note: Google will automatically revert settings after some arbitrary period
|
|
1002
|
+
of time. You have been warned.
|
|
1003
|
+
|
|
1004
|
+
If your application worked before but suddenly it crashes with authenication
|
|
1005
|
+
errors, this is why.
|
|
1006
|
+
|
|
1007
|
+
msgtext : tuple
|
|
1008
|
+
Tuple containing strings of ('subject', 'message content')
|
|
1009
|
+
width : int
|
|
1010
|
+
Maximum line length. Max 1000
|
|
1011
|
+
|
|
1012
|
+
From the argument parser these keys and values are required:
|
|
1013
|
+
email : str
|
|
1014
|
+
From address for account
|
|
1015
|
+
user : str
|
|
1016
|
+
User name for email account
|
|
1017
|
+
pwd : str
|
|
1018
|
+
Password for email account
|
|
1019
|
+
mailserv : str
|
|
1020
|
+
SMTP server for sending mail
|
|
1021
|
+
port : int
|
|
1022
|
+
Mailserver port. Default 465
|
|
1023
|
+
recipients : list
|
|
1024
|
+
List of email addresses of recipients
|
|
1025
|
+
|
|
1026
|
+
<a id="dryad2dataverse.scripts.dryadd.get_records"></a>
|
|
1027
|
+
|
|
1028
|
+
##### get\_records
|
|
1029
|
+
|
|
1030
|
+
```python
|
|
1031
|
+
def get_records(ror: 'str', mod_date=None, verbosity=True, timeout=100)
|
|
1032
|
+
```
|
|
1033
|
+
|
|
1034
|
+
returns a tuple of ((doi, metadata), ...). Dryad searches return complete
|
|
1035
|
+
study metadata from the search, surprisingly.
|
|
1036
|
+
|
|
1037
|
+
ror : str
|
|
1038
|
+
ROR string including http. To find your ROR, see
|
|
1039
|
+
https://ror.org/
|
|
1040
|
+
|
|
1041
|
+
mod_date : str
|
|
1042
|
+
UTC datetime string in the format suitable for the Dryad API.
|
|
1043
|
+
eg. 2021-01-21T21:42:40Z
|
|
1044
|
+
or .strftime('%Y-%m-%dT%H:%M:%SZ')
|
|
1045
|
+
if no mod_date is passed, all studies will be retrieved
|
|
1046
|
+
|
|
1047
|
+
verbosity : bool
|
|
1048
|
+
Output some data to stdout
|
|
1049
|
+
|
|
1050
|
+
timeout : int
|
|
1051
|
+
request timeout in seconds
|
|
1052
|
+
|
|
1053
|
+
<a id="dryad2dataverse.scripts.dryadd.argp"></a>
|
|
1054
|
+
|
|
1055
|
+
##### argp
|
|
1056
|
+
|
|
1057
|
+
```python
|
|
1058
|
+
def argp()
|
|
1059
|
+
```
|
|
1060
|
+
|
|
1061
|
+
Argument parser
|
|
1062
|
+
|
|
1063
|
+
<a id="dryad2dataverse.scripts.dryadd.set_constants"></a>
|
|
1064
|
+
|
|
1065
|
+
##### set\_constants
|
|
1066
|
+
|
|
1067
|
+
```python
|
|
1068
|
+
def set_constants(args)
|
|
1069
|
+
```
|
|
1070
|
+
|
|
1071
|
+
Set the appropriate dryad2dataverse constants
|
|
1072
|
+
|
|
1073
|
+
<a id="dryad2dataverse.scripts.dryadd.email_log"></a>
|
|
1074
|
+
|
|
1075
|
+
##### email\_log
|
|
1076
|
+
|
|
1077
|
+
```python
|
|
1078
|
+
def email_log(mailhost,
|
|
1079
|
+
fromaddr,
|
|
1080
|
+
toaddrs,
|
|
1081
|
+
credentials,
|
|
1082
|
+
port=465,
|
|
1083
|
+
secure=(),
|
|
1084
|
+
level=logging.WARNING,
|
|
1085
|
+
timeout=100)
|
|
1086
|
+
```
|
|
1087
|
+
|
|
1088
|
+
Emails log error messages to recipient
|
|
1089
|
+
|
|
1090
|
+
mailhost : str
|
|
1091
|
+
Address of mail server. Eg. smtp.gmail.com
|
|
1092
|
+
fromaddr : str
|
|
1093
|
+
"From" address for email
|
|
1094
|
+
toaddrs :
|
|
1095
|
+
Recipient of email
|
|
1096
|
+
credentials : tuple
|
|
1097
|
+
(Username, password) tuple
|
|
1098
|
+
port : Mailserver port. Default 465
|
|
1099
|
+
secure : tuple
|
|
1100
|
+
The tuple should be either an empty tuple, or a single-value tuple with
|
|
1101
|
+
the name of a keyfile, or a 2-value tuple with the names of the keyfile
|
|
1102
|
+
and certificate file.
|
|
1103
|
+
See https://docs.python.org/3/library/logging.handlers.html
|
|
1104
|
+
level : int
|
|
1105
|
+
logging level. Default logging.WARNING
|
|
1106
|
+
|
|
1107
|
+
<a id="dryad2dataverse.scripts.dryadd.rotating_log"></a>
|
|
1108
|
+
|
|
1109
|
+
##### rotating\_log
|
|
1110
|
+
|
|
1111
|
+
```python
|
|
1112
|
+
def rotating_log(path, level)
|
|
1113
|
+
```
|
|
1114
|
+
|
|
1115
|
+
Create log of transactions
|
|
1116
|
+
|
|
1117
|
+
path : str
|
|
1118
|
+
Complete path to log
|
|
1119
|
+
level : logging.LOGLEVEL
|
|
1120
|
+
logging level (eg, logging.DEBUG)
|
|
1121
|
+
|
|
1122
|
+
<a id="dryad2dataverse.scripts.dryadd.checkwarn"></a>
|
|
1123
|
+
|
|
1124
|
+
##### checkwarn
|
|
1125
|
+
|
|
1126
|
+
```python
|
|
1127
|
+
def checkwarn(val: int, **kwargs) -> None
|
|
1128
|
+
```
|
|
1129
|
+
|
|
1130
|
+
Halt program execution before processing if threshold value of modified
|
|
1131
|
+
Dryad studies exceeded. Useful for checking if the Dryad API has changed
|
|
1132
|
+
and caused havoc.
|
|
1133
|
+
|
|
1134
|
+
val: int
|
|
1135
|
+
Number of modified or new studies
|
|
1136
|
+
kwargs: dict
|
|
1137
|
+
Email notification information.
|
|
1138
|
+
{'user': user email,
|
|
1139
|
+
'recipients':[list of recipients],
|
|
1140
|
+
'pwd' ; email server password],
|
|
1141
|
+
'mailserv' : smtp mail server,
|
|
1142
|
+
'warn': Threshold for number of warnings (int)}
|
|
1143
|
+
see dryadd.notify for full details of parameters.
|
|
1144
|
+
|
|
1145
|
+
Include log info:
|
|
1146
|
+
{loggers: [logging.logger, logging.logger,...]}
|
|
1147
|
+
Skip check
|
|
1148
|
+
{'warn_too_many': bool}
|
|
1149
|
+
|
|
1150
|
+
<a id="dryad2dataverse.scripts.dryadd.verbo"></a>
|
|
1151
|
+
|
|
1152
|
+
##### verbo
|
|
1153
|
+
|
|
1154
|
+
```python
|
|
1155
|
+
def verbo(verbosity: bool, **kwargs) -> None
|
|
1156
|
+
```
|
|
1157
|
+
|
|
1158
|
+
verbosity: bool
|
|
1159
|
+
if True, print dict
|
|
1160
|
+
kwargs : dict
|
|
1161
|
+
Dictionary to print out
|
|
1162
|
+
|
|
1163
|
+
<a id="dryad2dataverse.scripts.dryadd.main"></a>
|
|
1164
|
+
|
|
1165
|
+
##### main
|
|
1166
|
+
|
|
1167
|
+
```python
|
|
1168
|
+
def main(log='/var/log/dryadd.log', level=logging.WARNING)
|
|
1169
|
+
```
|
|
1170
|
+
|
|
1171
|
+
Main Dryad transfer daemon
|
|
1172
|
+
|
|
1173
|
+
log : str
|
|
1174
|
+
path to logfile
|
|
1175
|
+
level : int
|
|
1176
|
+
log level, usually one of logging.LOGLEVEL (ie, logging.warning)
|
|
1177
|
+
|
|
938
1178
|
<a id="dryad2dataverse.serializer"></a>
|
|
939
1179
|
|
|
940
1180
|
## dryad2dataverse.serializer
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
Perfection on the first attempt is rare.
|
|
4
4
|
|
|
5
|
+
## v0.6.1 - 11 May 2023
|
|
6
|
+
|
|
7
|
+
** dryad2dataverse.constants**
|
|
8
|
+
|
|
9
|
+
* Eliminated deprecated parameter in call to `urllib3.util.Retry` as per <https://github.com/urllib3/urllib3/issues/2092>
|
|
10
|
+
|
|
5
11
|
## v0.6.0 - 2 May 2023
|
|
6
12
|
|
|
7
13
|
* Updated to current Python packaging standards
|
|
@@ -27,7 +27,7 @@ import dryad2dataverse.serializer
|
|
|
27
27
|
import dryad2dataverse.transfer
|
|
28
28
|
from dryad2dataverse.handlers import SSLSMTPHandler
|
|
29
29
|
|
|
30
|
-
VERSION = (0, 5,
|
|
30
|
+
VERSION = (0, 5, 3)
|
|
31
31
|
__version__ = '.'.join([str(x) for x in VERSION])
|
|
32
32
|
|
|
33
33
|
DRY = 'https://datadryad.org/api/v2'
|
|
@@ -509,7 +509,7 @@ def verbo(verbosity:bool, **kwargs)->None:
|
|
|
509
509
|
for key, value in kwargs.items():
|
|
510
510
|
print(f'{key}: {value}')
|
|
511
511
|
|
|
512
|
-
def main(log='/var/log/dryadd.log', level=logging.
|
|
512
|
+
def main(log='/var/log/dryadd.log', level=logging.WARNING):
|
|
513
513
|
'''
|
|
514
514
|
Main Dryad transfer daemon
|
|
515
515
|
|
|
@@ -202,7 +202,11 @@ class Serializer():
|
|
|
202
202
|
files = page['_embedded'].get('stash:files')
|
|
203
203
|
if files:
|
|
204
204
|
for f in files:
|
|
205
|
-
|
|
205
|
+
#This broke with this commit:
|
|
206
|
+
# https://github.com/datadryad/dryad-app/commit/b8a333ba34b14e55cbc1d7ed5aa4451e0f41db66
|
|
207
|
+
|
|
208
|
+
#downLink = f['_links']['stash:file-download']['href']
|
|
209
|
+
downLink = f['_links']['stash:download']['href']
|
|
206
210
|
downLink = f'{constants.DRYURL}{downLink}'
|
|
207
211
|
name = f['path']
|
|
208
212
|
mimeType = f['mimeType']
|
|
@@ -9,7 +9,9 @@ import logging
|
|
|
9
9
|
import os
|
|
10
10
|
import time
|
|
11
11
|
import traceback
|
|
12
|
+
import zlib #crc32, adler32
|
|
12
13
|
|
|
14
|
+
import Crypto.Hash.MD2 #md2
|
|
13
15
|
import requests
|
|
14
16
|
from requests.adapters import HTTPAdapter
|
|
15
17
|
from requests_toolbelt.multipart.encoder import MultipartEncoder
|
|
@@ -20,6 +22,15 @@ from dryad2dataverse import exceptions
|
|
|
20
22
|
LOGGER = logging.getLogger(__name__)
|
|
21
23
|
URL_LOGGER = logging.getLogger('urllib3')
|
|
22
24
|
|
|
25
|
+
HASHTABLE = {'adler-32' : zlib.adler32, #zlib?
|
|
26
|
+
'crc-32' : zlib.crc32, #zlib
|
|
27
|
+
'md2' : Crypto.Hash.MD2, #insecure
|
|
28
|
+
'md5' : hashlib.md5,
|
|
29
|
+
'sha-1' : hashlib.sha1,
|
|
30
|
+
'sha-256' : hashlib.sha256,
|
|
31
|
+
'sha-384' : hashlib.sha384,
|
|
32
|
+
'sha-512': hashlib.sha512}
|
|
33
|
+
|
|
23
34
|
class Transfer():
|
|
24
35
|
'''
|
|
25
36
|
Transfers metadata and data files from a
|
|
@@ -342,7 +353,7 @@ class Transfer():
|
|
|
342
353
|
return self.dvpid
|
|
343
354
|
|
|
344
355
|
@staticmethod
|
|
345
|
-
def _check_md5(infile):
|
|
356
|
+
def _check_md5(infile, dig_type):
|
|
346
357
|
'''
|
|
347
358
|
Returns the md5 checksum of a file.
|
|
348
359
|
|
|
@@ -351,25 +362,51 @@ class Transfer():
|
|
|
351
362
|
|
|
352
363
|
infile : str
|
|
353
364
|
— Complete path to target file.
|
|
365
|
+
|
|
366
|
+
dig_type : str or None
|
|
367
|
+
— Digest type
|
|
354
368
|
----------------------------------------
|
|
355
369
|
'''
|
|
370
|
+
#From Ryan Scherle
|
|
371
|
+
#When Dryad calculates a digest, it only uses MD5.
|
|
372
|
+
#But if you have precomputed some other type of digest, we should accept it.
|
|
373
|
+
#The list of allowed values is:
|
|
374
|
+
#('adler-32','crc-32','md2','md5','sha-1','sha-256','sha-384','sha-512')
|
|
375
|
+
#hashlib doesn't support adler-32, crc-32, md2
|
|
376
|
+
|
|
356
377
|
blocksize = 2**16
|
|
378
|
+
#Well, this is inelegant
|
|
357
379
|
with open(infile, 'rb') as m:
|
|
358
|
-
fmd5 = hashlib.md5()
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
380
|
+
#fmd5 = hashlib.md5()
|
|
381
|
+
## var name kept for posterity. Maybe refactor
|
|
382
|
+
if dig_type in ['sha-1', 'sha-256', 'sha-384', 'sha-512', 'md5', 'md2']:
|
|
383
|
+
if dig_type == 'md2':
|
|
384
|
+
fmd5 = Crypto.Hash.MD2.new()
|
|
385
|
+
else:
|
|
386
|
+
fmd5 = HASHTABLE[dig_type]()
|
|
387
|
+
fblock = m.read(blocksize)
|
|
388
|
+
while fblock:
|
|
389
|
+
fmd5.update(fblock)
|
|
390
|
+
fblock = m.read(blocksize)
|
|
391
|
+
return fmd5.hexdigest()
|
|
392
|
+
if dig_type in ['adler-32', 'crc-32']:
|
|
362
393
|
fblock = m.read(blocksize)
|
|
363
|
-
|
|
394
|
+
curvalue = HASHTABLE[dig_type](fblock)
|
|
395
|
+
while fblock:
|
|
396
|
+
fblock = m.read(blocksize)
|
|
397
|
+
curvalue = HASHTABLE[dig_type](fblock, curvalue)
|
|
398
|
+
return curvalue
|
|
399
|
+
raise exceptions.HashError(f'Unable to determine hash type for{infile}: {dig_type}')
|
|
364
400
|
|
|
365
|
-
|
|
366
|
-
|
|
401
|
+
|
|
402
|
+
def download_file(self, url=None, filename=None, tmp=None,
|
|
403
|
+
size=None, chk=None, timeout=45, **kwargs):
|
|
367
404
|
'''
|
|
368
405
|
Downloads a file via requests streaming and saves to constants.TMP.
|
|
369
|
-
returns
|
|
406
|
+
returns checksum on success and an exception on failure.
|
|
370
407
|
|
|
371
408
|
----------------------------------------
|
|
372
|
-
|
|
409
|
+
Required keyword arguments:
|
|
373
410
|
|
|
374
411
|
url : str
|
|
375
412
|
— URL of download.
|
|
@@ -388,8 +425,11 @@ class Transfer():
|
|
|
388
425
|
— Reported file size in bytes.
|
|
389
426
|
Defaults to dryad2dataverse.constants.MAX_UPLOAD.
|
|
390
427
|
|
|
428
|
+
digest_type: str
|
|
429
|
+
— checksum type (ie, md5, sha-256, etc)
|
|
430
|
+
|
|
391
431
|
chk : str
|
|
392
|
-
|
|
432
|
+
— checksum of file (if available and known).
|
|
393
433
|
----------------------------------------
|
|
394
434
|
'''
|
|
395
435
|
LOGGER.debug('Start download sequence')
|
|
@@ -430,11 +470,13 @@ class Transfer():
|
|
|
430
470
|
LOGGER.exception(e)
|
|
431
471
|
raise
|
|
432
472
|
#now check the md5
|
|
433
|
-
md5 =
|
|
434
|
-
if chk:
|
|
473
|
+
md5 = None
|
|
474
|
+
if chk and kwargs.get('digest_type') in HASHTABLE:
|
|
475
|
+
md5 = Transfer._check_md5(f'{tmp}{os.sep}{filename}',
|
|
476
|
+
kwargs['digest_type'])
|
|
435
477
|
if md5 != chk:
|
|
436
478
|
try:
|
|
437
|
-
raise exceptions.HashError('Hex digest mismatch: {md5} : {chk}')
|
|
479
|
+
raise exceptions.HashError(f'Hex digest mismatch: {md5} : {chk}')
|
|
438
480
|
#is this really what I want to do on a bad checksum?
|
|
439
481
|
except exceptions.HashError as e:
|
|
440
482
|
LOGGER.exception(e)
|
|
@@ -474,7 +516,13 @@ class Transfer():
|
|
|
474
516
|
files = self.files
|
|
475
517
|
try:
|
|
476
518
|
for f in files:
|
|
477
|
-
self.download_file(f[0],
|
|
519
|
+
self.download_file(url=f[0],
|
|
520
|
+
filename=f[1],
|
|
521
|
+
mimetype=f[2],
|
|
522
|
+
size=f[3],
|
|
523
|
+
descr=f[4],
|
|
524
|
+
digest_type=f[5],
|
|
525
|
+
chk=f[-1])
|
|
478
526
|
except exceptions.DataverseDownloadError as e:
|
|
479
527
|
LOGGER.exception('Unable to download file with info %s\n%s', f, e)
|
|
480
528
|
raise
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dryad2dataverse
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.1
|
|
4
4
|
Summary: Utility for copying and syncing data from a Dryad data repository to a Dataverse repository
|
|
5
5
|
Author-email: Paul Lesack <paul.lesack@ubc.ca>
|
|
6
6
|
Project-URL: Homepage, https://ubc-library-rc.github.io/dryad2dataverse
|
|
@@ -17,6 +17,14 @@ Classifier: Topic :: Internet :: WWW/HTTP :: Site Management
|
|
|
17
17
|
Classifier: Topic :: Utilities
|
|
18
18
|
Requires-Python: >=3.6
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
|
+
Requires-Dist: certifi>=2022.12.7
|
|
21
|
+
Requires-Dist: charset-normalizer>=2.0.4
|
|
22
|
+
Requires-Dist: chardet>=3.0.4
|
|
23
|
+
Requires-Dist: idna>=2.10
|
|
24
|
+
Requires-Dist: pycryptodome>=3.20.0
|
|
25
|
+
Requires-Dist: requests>=2.26.0
|
|
26
|
+
Requires-Dist: requests-toolbelt>=0.9.1
|
|
27
|
+
Requires-Dist: urllib3>=1.26.6
|
|
20
28
|
|
|
21
29
|
# dryad2dataverse
|
|
22
30
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|