dryad2dataverse 0.7.6__py3-none-any.whl → 0.7.9__py3-none-any.whl
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/__init__.py +1 -1
- dryad2dataverse/scripts/dryadd.py +66 -11
- {dryad2dataverse-0.7.6.dist-info → dryad2dataverse-0.7.9.dist-info}/METADATA +27 -16
- dryad2dataverse-0.7.9.dist-info/RECORD +12 -0
- {dryad2dataverse-0.7.6.dist-info → dryad2dataverse-0.7.9.dist-info}/WHEEL +1 -2
- dryad2dataverse-0.7.9.dist-info/entry_points.txt +3 -0
- dryad2dataverse-0.7.6.dist-info/RECORD +0 -13
- dryad2dataverse-0.7.6.dist-info/entry_points.txt +0 -2
- dryad2dataverse-0.7.6.dist-info/top_level.txt +0 -1
dryad2dataverse/__init__.py
CHANGED
|
@@ -24,7 +24,7 @@ Modules included:
|
|
|
24
24
|
'''
|
|
25
25
|
import sys
|
|
26
26
|
|
|
27
|
-
VERSION = (0, 7,
|
|
27
|
+
VERSION = (0, 7, 9)
|
|
28
28
|
__version__ = '.'.join([str(x) for x in VERSION])
|
|
29
29
|
USERAGENT = (f'dryad2dataverse/v{__version__} ({sys.platform.capitalize()}); '
|
|
30
30
|
f'Python {sys.version[:sys.version.find("(")-1]}')
|
|
@@ -15,6 +15,7 @@ import logging
|
|
|
15
15
|
import logging.handlers
|
|
16
16
|
import os
|
|
17
17
|
import pathlib
|
|
18
|
+
import pprint
|
|
18
19
|
import shutil
|
|
19
20
|
import smtplib
|
|
20
21
|
import sys
|
|
@@ -28,9 +29,12 @@ import dryad2dataverse.serializer
|
|
|
28
29
|
import dryad2dataverse.transfer
|
|
29
30
|
from dryad2dataverse.handlers import SSLSMTPHandler
|
|
30
31
|
|
|
31
|
-
VERSION = (0,
|
|
32
|
+
VERSION = (0, 7, 1)
|
|
32
33
|
__version__ = '.'.join([str(x) for x in VERSION])
|
|
33
34
|
|
|
35
|
+
USER_AGENT = {'User-agent': dryad2dataverse.USERAGENT}
|
|
36
|
+
|
|
37
|
+
|
|
34
38
|
DRY = 'https://datadryad.org/api/v2'
|
|
35
39
|
|
|
36
40
|
def new_content(serial):
|
|
@@ -215,6 +219,7 @@ def get_records(ror: 'str', mod_date=None, verbosity=True, timeout=100):
|
|
|
215
219
|
'''
|
|
216
220
|
headers = {'accept':'application/json',
|
|
217
221
|
'Content-Type':'application/json'}
|
|
222
|
+
headers.update(USER_AGENT)
|
|
218
223
|
per_page = 1
|
|
219
224
|
params = {'affiliation' : ror,
|
|
220
225
|
'per_page' : per_page}
|
|
@@ -344,6 +349,24 @@ def argp():
|
|
|
344
349
|
required=False,
|
|
345
350
|
dest='log',
|
|
346
351
|
default='/var/log/dryadd.log')
|
|
352
|
+
parser.add_argument('--loglevel',
|
|
353
|
+
help='Log level of server rotating log. Choose one of '
|
|
354
|
+
'debug, info, warning, error or critical. '
|
|
355
|
+
'Note: case sensitive. '
|
|
356
|
+
'Default: logging.warning.',
|
|
357
|
+
required=False,
|
|
358
|
+
dest='loglevel',
|
|
359
|
+
default='warning',
|
|
360
|
+
choices=['debug', 'info', 'warning','error','critical'])
|
|
361
|
+
parser.add_argument('--email-loglevel',
|
|
362
|
+
help='Log level of email log. Choose one of '
|
|
363
|
+
'debug, info, warning, error or critical. '
|
|
364
|
+
'Note: case sensitive. '
|
|
365
|
+
'Default: warning',
|
|
366
|
+
required=False,
|
|
367
|
+
dest='email_loglevel',
|
|
368
|
+
default='warning',
|
|
369
|
+
choices=['debug', 'info', 'warning','error','critical'])
|
|
347
370
|
parser.add_argument('-l', '--no_force_unlock',
|
|
348
371
|
help='No forcible file unlock. Required '
|
|
349
372
|
'if /lock endpint is restricted',
|
|
@@ -389,16 +412,14 @@ def argp():
|
|
|
389
412
|
default=5,
|
|
390
413
|
dest='testlimit')
|
|
391
414
|
parser.add_argument('--version', action='version',
|
|
392
|
-
version='
|
|
393
|
-
+'; dryad2dataverse '+
|
|
394
|
-
dryad2dataverse.__version__,
|
|
415
|
+
version='dryad2dataverse ' + dryad2dataverse.__version__,
|
|
395
416
|
help='Show version number and exit')
|
|
396
417
|
|
|
397
418
|
return parser
|
|
398
419
|
|
|
399
420
|
def set_constants(args):
|
|
400
421
|
'''
|
|
401
|
-
Set the appropriate dryad2dataverse constants
|
|
422
|
+
Set the appropriate dryad2dataverse "constants"
|
|
402
423
|
'''
|
|
403
424
|
dryad2dataverse.constants.DV_CONTACT_EMAIL = args.contact
|
|
404
425
|
dryad2dataverse.constants.DV_CONTACT_ = args.contact
|
|
@@ -528,7 +549,31 @@ def verbo(verbosity:bool, **kwargs)->None:
|
|
|
528
549
|
for key, value in kwargs.items():
|
|
529
550
|
print(f'{key}: {value}')
|
|
530
551
|
|
|
531
|
-
def
|
|
552
|
+
def anonymizer(args: argparse.Namespace) -> dict:
|
|
553
|
+
'''
|
|
554
|
+
Redacts sensitive info for the log when parsing arguments and returns a dictionary
|
|
555
|
+
with cleaner values.
|
|
556
|
+
'''
|
|
557
|
+
clean_me = args.__dict__.copy()#Don't work on the real thing!
|
|
558
|
+
cleanser = {x : 'REDACTED' for x in ['email', 'mailserve',
|
|
559
|
+
'key', 'mailserve',
|
|
560
|
+
'pwd', 'recipients',
|
|
561
|
+
'user']}
|
|
562
|
+
clean_me.update(cleanser)
|
|
563
|
+
return clean_me
|
|
564
|
+
|
|
565
|
+
def bulklog(message, *logfuncs):
|
|
566
|
+
'''
|
|
567
|
+
Convenience logging function
|
|
568
|
+
|
|
569
|
+
message : str
|
|
570
|
+
log message
|
|
571
|
+
logfuncs: logging.Logger[.debug, .info, etc. method]
|
|
572
|
+
'''
|
|
573
|
+
for log in logfuncs:
|
|
574
|
+
log('%s', message)
|
|
575
|
+
|
|
576
|
+
def main():
|
|
532
577
|
'''
|
|
533
578
|
Main Dryad transfer daemon
|
|
534
579
|
|
|
@@ -542,16 +587,26 @@ def main(log='/var/log/dryadd.log', level=logging.WARNING):
|
|
|
542
587
|
#pylint: disable=too-many-locals
|
|
543
588
|
parser = argp()
|
|
544
589
|
args = parser.parse_args()
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
590
|
+
|
|
591
|
+
#Ensure log can be written
|
|
592
|
+
logpath = pathlib.Path(args.log)
|
|
593
|
+
if not logpath.parent.exists():
|
|
594
|
+
os.makedirs(logpath.parent)
|
|
548
595
|
|
|
549
596
|
set_constants(args)
|
|
597
|
+
|
|
598
|
+
logger = rotating_log(args.log,
|
|
599
|
+
level=logging.getLevelName(args.loglevel.upper()))
|
|
600
|
+
|
|
550
601
|
elog = email_log(args.mailserv, args.email, args.recipients,
|
|
551
|
-
(args.user, args.pwd), port=args.port
|
|
602
|
+
(args.user, args.pwd), port=args.port,
|
|
603
|
+
level = logging.getLevelName(args.email_loglevel.upper()))
|
|
552
604
|
|
|
553
605
|
|
|
554
606
|
logger.info('Beginning update process')
|
|
607
|
+
for logme in [elog, logger]:
|
|
608
|
+
logme.debug('Command line arguments: %s' , pprint.pprint(anonymizer(args)))
|
|
609
|
+
|
|
555
610
|
monitor = dryad2dataverse.monitor.Monitor(args.dbase)
|
|
556
611
|
#copy the database to make a backup, because paranoia is your friend
|
|
557
612
|
if os.path.exists(dryad2dataverse.constants.DBASE):
|
|
@@ -690,7 +745,7 @@ def main(log='/var/log/dryadd.log', level=logging.WARNING):
|
|
|
690
745
|
elog.info('Completed update process')
|
|
691
746
|
finished = ('Dryad to Dataverse transfers completed',
|
|
692
747
|
('Dryad to Dataverse transfer daemon has completed.\n'
|
|
693
|
-
f'Log available at: {log}'))
|
|
748
|
+
f'Log available at: {args.log}'))
|
|
694
749
|
notify(finished, **vars(args))
|
|
695
750
|
|
|
696
751
|
except dryad2dataverse.exceptions.DataverseBadApiKeyError as api_err:
|
|
@@ -1,30 +1,40 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
2
|
Name: dryad2dataverse
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.9
|
|
4
4
|
Summary: Utility for copying and syncing data from a Dryad data repository to a Dataverse repository
|
|
5
|
-
|
|
6
|
-
Project-URL: Homepage, https://ubc-library-rc.github.io/dryad2dataverse
|
|
7
|
-
Project-URL: Documentation, https://ubc-library-rc.github.io/dryad2dataverse
|
|
8
|
-
Project-URL: Repository, https://github.com/ubc-library-rc/dryad2dataverse.git
|
|
9
|
-
Project-URL: Tracker, https://github.com/ubc-library-rc/dryad2dataverse/issues
|
|
5
|
+
License: MIT
|
|
10
6
|
Keywords: Harvard Dataverse,Dataverse,research data management,data repository,Dryad,datadryad.org,dataverse.org
|
|
7
|
+
Author: Paul Lesack
|
|
8
|
+
Author-email: paul.lesack@ubc.ca
|
|
9
|
+
Requires-Python: >=3.9, <4
|
|
11
10
|
Classifier: Development Status :: 4 - Beta
|
|
12
11
|
Classifier: Environment :: Console
|
|
13
12
|
Classifier: Intended Audience :: Education
|
|
14
13
|
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
20
|
Classifier: Topic :: Education
|
|
16
21
|
Classifier: Topic :: Internet :: WWW/HTTP :: Site Management
|
|
17
22
|
Classifier: Topic :: Utilities
|
|
18
|
-
Requires-
|
|
23
|
+
Requires-Dist: certifi (>=2022.12.7)
|
|
24
|
+
Requires-Dist: chardet (>=3.0.4)
|
|
25
|
+
Requires-Dist: charset-normalizer (>=2.0.4)
|
|
26
|
+
Requires-Dist: idna (>=2.10.0)
|
|
27
|
+
Requires-Dist: pycryptodome (>=3.20.0)
|
|
28
|
+
Requires-Dist: pydoc-markdown (>=4.8.2,<5.0.0)
|
|
29
|
+
Requires-Dist: requests (>=2.26.0)
|
|
30
|
+
Requires-Dist: requests-toolbelt (>=0.9.1)
|
|
31
|
+
Requires-Dist: setuptools (>=80.8.0,<81.0.0)
|
|
32
|
+
Requires-Dist: urllib3 (>=1.26.6)
|
|
33
|
+
Project-URL: Bug Tracker, https://github.com/ubc-library-rc/dryad2dataverse/issues
|
|
34
|
+
Project-URL: Documentation, https://ubc-library-rc.github.io/dryad2dataverse
|
|
35
|
+
Project-URL: Homepage, https://ubc-library-rc.github.io/dryad2dataverse
|
|
36
|
+
Project-URL: Repository, https://github.com/ubc-library-rc/dryad2dataverse.git
|
|
19
37
|
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.0
|
|
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
|
|
28
38
|
|
|
29
39
|
# dryad2dataverse
|
|
30
40
|
|
|
@@ -77,3 +87,4 @@ This very terse description is by no means the entirety of the documentation. Co
|
|
|
77
87
|
A (much) more user-friendly version of the documentation is available at <https://ubc-library-rc.github.io/dryad2dataverse>, including full `dryadd` documentation and API information.
|
|
78
88
|
|
|
79
89
|
Or if you've cloned the git repostory above, you can use [mkdocs](https://www.mkdocs.org/) and `mkdocs serve` to have a local server version of the documentation.
|
|
90
|
+
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
dryad2dataverse/__init__.py,sha256=wL2bRwLbZdS0_SIsHNr2a9MQfQsmH8_BHxBu-GwQhVI,865
|
|
2
|
+
dryad2dataverse/constants.py,sha256=ZfD2N0f742nnP8NPUV0QsDdVVAbrW-3Py8Lg9al1Z5c,1429
|
|
3
|
+
dryad2dataverse/exceptions.py,sha256=oIP1_fSEvLF3HpK6gOYb05vUisY-IAxwXZDeNoAvCPM,1008
|
|
4
|
+
dryad2dataverse/handlers.py,sha256=Xb0vvs1HE92qaK6g-Gu3eyHkLrSwU0-RQjLcl6FZPUY,1487
|
|
5
|
+
dryad2dataverse/monitor.py,sha256=KOyWCpPTZLYRStB-RN0e5kgHTfbxHsByD72K1VtEPP8,26406
|
|
6
|
+
dryad2dataverse/scripts/dryadd.py,sha256=uNroXVEvE_OUqvxtw9iYaPaSXaZmGEryZ82JgfvcP10,30297
|
|
7
|
+
dryad2dataverse/serializer.py,sha256=DoIjHYKtoH047X5Gd-WUdoLpL-kvTtSAPg-lUElCx8c,33865
|
|
8
|
+
dryad2dataverse/transfer.py,sha256=83tju_o4DSgSkF7JDLsgTpAwm03b0CMb0OjcKAEACuY,37548
|
|
9
|
+
dryad2dataverse-0.7.9.dist-info/METADATA,sha256=E7zJDsqwLf8W0e56FDme5o_nmTruM4uqjahwUS39tFI,3737
|
|
10
|
+
dryad2dataverse-0.7.9.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
11
|
+
dryad2dataverse-0.7.9.dist-info/entry_points.txt,sha256=P-Wu7phJ2dGqaZT6OzHEgy3I-TXXq_7ad67r--O8IcA,62
|
|
12
|
+
dryad2dataverse-0.7.9.dist-info/RECORD,,
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
dryad2dataverse/__init__.py,sha256=jAPJzOKbatarco3wW4I_BI9wbfR8tqcOk-ePPq5VQig,865
|
|
2
|
-
dryad2dataverse/constants.py,sha256=ZfD2N0f742nnP8NPUV0QsDdVVAbrW-3Py8Lg9al1Z5c,1429
|
|
3
|
-
dryad2dataverse/exceptions.py,sha256=oIP1_fSEvLF3HpK6gOYb05vUisY-IAxwXZDeNoAvCPM,1008
|
|
4
|
-
dryad2dataverse/handlers.py,sha256=Xb0vvs1HE92qaK6g-Gu3eyHkLrSwU0-RQjLcl6FZPUY,1487
|
|
5
|
-
dryad2dataverse/monitor.py,sha256=KOyWCpPTZLYRStB-RN0e5kgHTfbxHsByD72K1VtEPP8,26406
|
|
6
|
-
dryad2dataverse/serializer.py,sha256=DoIjHYKtoH047X5Gd-WUdoLpL-kvTtSAPg-lUElCx8c,33865
|
|
7
|
-
dryad2dataverse/transfer.py,sha256=83tju_o4DSgSkF7JDLsgTpAwm03b0CMb0OjcKAEACuY,37548
|
|
8
|
-
dryad2dataverse/scripts/dryadd.py,sha256=WQUbibzbeNamRntMyJBFYLXSk5qVjgJffQSRQuIls0I,28192
|
|
9
|
-
dryad2dataverse-0.7.6.dist-info/METADATA,sha256=yqKN__bCVpVu2ImSIwwSSVLjetF1DX3HQDoHOHvvL78,3299
|
|
10
|
-
dryad2dataverse-0.7.6.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
|
11
|
-
dryad2dataverse-0.7.6.dist-info/entry_points.txt,sha256=9kBsBa5SivAtfAox__vZGL7H-HI7Vd-jGztCh_eIJEc,63
|
|
12
|
-
dryad2dataverse-0.7.6.dist-info/top_level.txt,sha256=0X45AghpKfL69Oc51sRddeiHtq8o-OyOhFX3AMal6YI,16
|
|
13
|
-
dryad2dataverse-0.7.6.dist-info/RECORD,,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
dryad2dataverse
|