Explorar o código

Refactor building URLs

Matthias Vogelgesang %!s(int64=9) %!d(string=hai) anos
pai
achega
8112ebe9ab
Modificáronse 1 ficheiros con 16 adicións e 22 borrados
  1. 16 22
      dm.py

+ 16 - 22
dm.py

@@ -73,44 +73,38 @@ class Client(object):
         self.base_url = base_url
         self.log = logging.getLogger(__name__)
 
+    def url(self, *args):
+        return '/'.join([self.base_url] + [str(arg) for arg in args])
+
     def get_user_credentials(self, ldap_id):
-        url = '{}/information/properties'.format(self.base_url)
-        root = self.get_response(url, userId=ldap_id)
+        root = self.get_response(self.url('information/properties'), userId=ldap_id)
         return Credentials(root)
 
     def get_download_ids(self, limit=None):
-        results = '?results={}'.format(limit) if limit else ''
-        url = '{}/staging/downloads/{}'.format(self.base_url, results)
-        root = self.get_response(url)
-        return (int(e.text) for e in root.findall('./entities/entity/id'))
+        return self.get_collection('staging/downloads', 'id', limit)
 
     def get_download(self, oid):
-        url = '{}/staging/downloads/{}'.format(self.base_url, oid)
-        return Download(self.get_response(url))
+        return Download(self.get_response(self.url('staging/downloads', oid)))
 
     def get_ingest_ids(self, limit=None):
-        results = '?results={}'.format(limit) if limit else ''
-        url = '{}/staging/ingests/{}'.format(self.base_url, results)
-        root = self.get_response(url)
-        return (int(e.text) for e in root.findall('./entities/entity/id'))
+        return self.get_collection('staging/ingests', 'id', limit)
 
     def get_ingest(self, oid):
-        url = '{}/staging/ingests/{}'.format(self.base_url, oid)
-        return Ingest(self.get_response(url))
+        return Ingest(self.get_response(self.url('staging/ingests', oid)))
 
     def get_object_ids(self, limit=None, since=None):
-        results = '?results={}'.format(limit) if limit else ''
-        url = '{}/basemetadata/digitalObjects/{}'.format(self.base_url, results)
-        root = self.get_response(url)
-        return (int(e.text) for e in root.findall('./entities/entity/baseId'))
+        return self.get_collection('basemetadata/digitalObjects', 'baseId', limit)
 
     def get_object(self, oid):
-        url = '{}/basemetadata/digitalObjects/{}'.format(self.base_url, oid)
-        return Object(self.get_response(url))
+        return Object(self.get_response(self.url('basemetadata/digitalObjects', oid)))
 
     def get_organization(self, oid):
-        url = '{}/dataorganization/organization/{}'.format(self.base_url, oid)
-        return Organization(self.get_response(url))
+        return Organization(self.get_response(self.url('dataorganization/organization', oid)))
+
+    def get_collection(self, url, id_name, limit=None):
+        params = {'results': limit} if limit else {}
+        root = self.get_response(self.url(url), **params)
+        return (int(e.text) for e in root.findall('./entities/entity/{}'.format(id_name)))
 
     def get_response(self, url, **params):
         self.log.debug("Accessing {}".format(url))