DCC switched to https
[htsworkflow.git] / htsworkflow / submission / encoded.py
index f113bebd36121d5e403754caeb236e61697fcb88..58eb59eb157ed6ffff72d2b8ea845a4b32107d18 100644 (file)
@@ -10,9 +10,8 @@ import logging
 import json
 import jsonschema
 import requests
-from requests.utils import urlparse, urlunparse
 import types
-from urlparse import urljoin
+from urlparse import urljoin, urlparse, urlunparse
 
 LOGGER = logging.getLogger(__name__)
 
@@ -217,7 +216,7 @@ class ENCODED:
     def get_schema_url(self, obj):
         obj_type = self.get_object_type(obj)
         if obj_type:
-            return self.prepare_url(ENCODED_SCHEMA_ROOT + obj_type + '.json')
+            return self.prepare_url(ENCODED_SCHEMA_ROOT + obj_type + '.json') + '#'
 
     def _is_encoded_object(self, obj):
         '''Test to see if an object is a JSON-LD object
@@ -271,12 +270,34 @@ class ENCODED:
         # clean up potentially messy urls
         url = urlparse(request_url)._asdict()
         if not url['scheme']:
-            url['scheme'] = 'http'
+            url['scheme'] = 'https'
         if not url['netloc']:
             url['netloc'] = self.server
         url = urlunparse(url.values())
         return url
 
+    def search_jsonld(self, term, **kwargs):
+        '''Send search request to ENCODED
+        '''
+        url = self.prepare_url('/search/')
+        result = self.get_json(url, searchTerm=term, **kwargs)
+        self.convert_search_to_jsonld(result)
+        return result
+
+    def convert_search_to_jsonld(self, result):
+        '''Add the context to search result
+
+        Also remove hard to handle nested attributes
+          e.g. remove object.term when we have no id
+        '''
+        graph = result['@graph']
+        for i, obj in enumerate(graph):
+            # suppress nested attributes
+            graph[i] = {k: v for k, v in obj.items() if '.' not in k}
+
+        self.add_jsonld_context(result, self.prepare_url(result['@id']))
+        return result
+
     def validate(self, obj):
         obj_type = self.get_object_type(obj)
         schema_url = self.get_schema_url(obj)