@@ -12,23 +12,27 @@ def __init__(self, host, token):
1212 self .token = token
1313 self .host = host
1414 self .sd_uri = 'https://{host}/dvn/api/data-deposit/v1.1/swordv2/service-document' .format (host = self .host )
15- self .service_document = None
15+ self ._service_document = None
1616
17- self .connect ()
17+ self .get_service_document ()
1818
1919 @property
2020 def auth (self ):
2121 return self .token , None
2222
23- def connect (self ):
23+ def get_service_document (self , refresh = False ):
24+ if not refresh and self ._service_document :
25+ return self ._service_document
26+
2427 resp = requests .get (self .sd_uri , auth = self .auth )
2528
2629 if resp .status_code == 403 :
2730 raise exceptions .UnauthorizedError ('The credentials provided are invalid.' )
2831 elif resp .status_code != 200 :
2932 raise exceptions .ConnectionError ('Could not connect to the Dataverse' )
3033
31- self .service_document = etree .XML (resp .content )
34+ self ._service_document = etree .XML (resp .content )
35+ return self ._service_document
3236
3337 def create_dataverse (self , alias , name , email , parent = ':root' ):
3438 resp = requests .post (
@@ -46,6 +50,8 @@ def create_dataverse(self, alias, name, email, parent=':root'):
4650 elif resp .status_code != 201 :
4751 raise exceptions .OperationFailedError ('{0} Dataverse could not be created.' .format (name ))
4852
53+ self .get_service_document (refresh = True )
54+
4955 def delete_dataverse (self , alias ):
5056 resp = requests .delete (
5157 'https://{0}/api/dataverses/{1}' .format (self .host , alias ),
@@ -59,12 +65,11 @@ def delete_dataverse(self, alias):
5965 elif resp .status_code != 200 :
6066 raise exceptions .OperationFailedError ('Dataverse {0} could not be deleted.' .format (alias ))
6167
62- def get_dataverses (self , refresh = False ):
63- if refresh :
64- self .connect ()
68+ self .get_service_document (refresh = True )
6569
70+ def get_dataverses (self , refresh = False ):
6671 collections = get_elements (
67- self .service_document [0 ],
72+ self .get_service_document ( refresh ) [0 ],
6873 tag = 'collection' ,
6974 )
7075
0 commit comments