Esempio n. 1
0
    def test_get_single_id(self):
        """Tests the retrieval of information for one ID"""

        # Normal query
        res = get(host=self._host, port=self._port, version=self._version,
                  species=self._species, category="feature", subcategory="gene",
                  resource="snp", query_id="BRCA1")
        assert len(res[0]['result']) == 8196

        # Query with limit
        res = get(host=self._host, port=self._port, version=self._version,
                  species=self._species, category="feature", subcategory="gene",
                  resource="snp", query_id="BRCA1",
                  options={'limit': 2042})
        assert len(res[0]['result']) == 2042

        # Query with skip
        res = get(host=self._host, port=self._port, version=self._version,
                  species=self._species, category="feature", subcategory="gene",
                  resource="snp", query_id="BRCA1",
                  options={'skip': 3000})
        assert len(res[0]['result']) == 5196

        # Query with limit and skip
        res = get(host=self._host, port=self._port, version=self._version,
                  species=self._species, category="feature", subcategory="gene",
                  resource="snp", query_id="BRCA1",
                  options={'limit': 2000, 'skip': 42})
        assert len(res[0]['result']) == 2000
Esempio n. 2
0
    def test_get_single_id(self):
        """Tests the retrieval of information for one ID"""
        # Normal query
        res = get(host=self._host, version=self._version,
                  species=self._species, category='feature', subcategory='gene',
                  resource='snp', query_id='BRCA1')
        assert len(res[0]['result']) == 8140

        # Query with limit
        res = get(host=self._host, version=self._version,
                  species=self._species, category='feature', subcategory='gene',
                  resource='snp', query_id='BRCA1',
                  options={'limit': 2042})
        assert len(res[0]['result']) == 2042

        # Query with skip
        res = get(host=self._host, version=self._version,
                  species=self._species, category='feature', subcategory='gene',
                  resource='snp', query_id='BRCA1',
                  options={'skip': 3000})
        assert len(res[0]['result']) == 5140

        # Query with limit and skip
        res = get(host=self._host, version=self._version,
                  species=self._species, category='feature', subcategory='gene',
                  resource='snp', query_id='BRCA1',
                  options={'limit': 2000, 'skip': 42})
        assert len(res[0]['result']) == 2000
Esempio n. 3
0
    def test_url_creation(self):
        """Tests the correct creation of the url"""
        # Normal query
        res = get(session=self._session,
                  host=self._host,
                  version=self._version,
                  species=self._species,
                  category='feature',
                  subcategory='gene',
                  resource='snp',
                  query_id='BRCA1',
                  options={'limit': 200})
        assert len(res[0]['result']) == 200

        # Query with a dict option
        res = get(session=self._session,
                  host=self._host,
                  version=self._version,
                  species=self._species,
                  category='feature',
                  subcategory='gene',
                  resource='snp',
                  query_id='BRCA1',
                  options={
                      'limit': 200,
                      'include': ['chromosome', 'start']
                  })
        assert len(res[0]['result']) == 200
Esempio n. 4
0
    def test_url_creation(self):
        """Tests the correct creation of the url"""
        # Normal query
        res = get(host=self._host, version=self._version,
                  species=self._species, category='feature', subcategory='gene',
                  resource='snp', query_id='BRCA1', options={'limit': 200})
        assert len(res[0]['result']) == 200

        # Query with a dict option
        res = get(host=self._host, version=self._version,
                  species=self._species, category='feature', subcategory='gene',
                  resource='snp', query_id='BRCA1',
                  options={'limit': 200, 'include': ['chromosome', 'start']})
        assert len(res[0]['result']) == 200
Esempio n. 5
0
    def test_get_multiple_ids(self):
        """Tests the retrieval of information for multiple IDs"""

        # Normal query with string ids
        res = get(host=self._host, version=self._version,
                  species=self._species, category='feature', subcategory='gene',
                  resource='snp', query_id='BRCA1,BRCA2,LDLR')
        assert len(res) == 3
        assert len(res[0]['result']) == 8140
        assert len(res[1]['result']) == 10419
        assert len(res[2]['result']) == 4108

        # Normal query with list ids
        res = get(host=self._host, version=self._version,
                  species=self._species, category='feature', subcategory='gene',
                  resource='snp', query_id=['BRCA1', 'BRCA2', 'LDLR'])
        assert len(res) == 3
        assert len(res[0]['result']) == 8140
        assert len(res[1]['result']) == 10419
        assert len(res[2]['result']) == 4108

        # Query with limit
        res = get(host=self._host, version=self._version,
                  species=self._species, category='feature', subcategory='gene',
                  resource='snp', query_id='BRCA1,BRCA2,LDLR',
                  options={'limit': 8000})
        assert len(res) == 3
        assert len(res[0]['result']) == 8000
        assert len(res[1]['result']) == 8000
        assert len(res[2]['result']) == 4108

        # Query with skip
        res = get(host=self._host, version=self._version,
                  species=self._species, category='feature', subcategory='gene',
                  resource='snp', query_id='BRCA1,BRCA2,LDLR',
                  options={'skip': 4000})
        assert len(res) == 3
        assert len(res[0]['result']) == 4140
        assert len(res[1]['result']) == 6419
        assert len(res[2]['result']) == 108

        # Query with limit and skip
        res = get(host=self._host, version=self._version,
                  species=self._species, category='feature', subcategory='gene',
                  resource='snp', query_id='BRCA1,BRCA2,LDLR',
                  options={'limit': 6000, 'skip': 4000})
        assert len(res) == 3
        assert len(res[0]['result']) == 4140
        assert len(res[1]['result']) == 6000
        assert len(res[2]['result']) == 108
Esempio n. 6
0
    def test_multiple_threads(self):
        """Tests the retrieval of information with multiple threads"""

        # Modifying the number of ids needed for multithreading
        get.__globals__['_CALL_BATCH_SIZE'] = 2

        # Normal query
        res = get(host=self._host, version=self._version,
                  species=self._species, category='feature', subcategory='gene',
                  resource='snp', query_id='BRCA1,BRCA2,LDLR')
        assert len(res) == 3
        assert len(res[0]['result']) == 8140
        assert len(res[1]['result']) == 10419
        assert len(res[2]['result']) == 4108

        # Query with limit
        res = get(host=self._host, version=self._version,
                  species=self._species, category='feature', subcategory='gene',
                  resource='snp', query_id='BRCA1,BRCA2,LDLR',
                  options={'limit': 8000})
        assert len(res) == 3
        assert len(res[0]['result']) == 8000
        assert len(res[1]['result']) == 8000
        assert len(res[2]['result']) == 4108

        # Query with skip
        res = get(host=self._host, version=self._version,
                  species=self._species, category='feature', subcategory='gene',
                  resource='snp', query_id='BRCA1,BRCA2,LDLR',
                  options={'skip': 4000})
        assert len(res) == 3
        assert len(res[0]['result']) == 4140
        assert len(res[1]['result']) == 6419
        assert len(res[2]['result']) == 108

        # Query with limit and skip
        res = get(host=self._host, version=self._version,
                  species=self._species, category='feature', subcategory='gene',
                  resource='snp', query_id='BRCA1,BRCA2,LDLR',
                  options={'limit': 6000, 'skip': 4000})
        assert len(res) == 3
        assert len(res[0]['result']) == 4140
        assert len(res[1]['result']) == 6000
        assert len(res[2]['result']) == 108
Esempio n. 7
0
    def test_multiple_threads(self):
        # Modifying the number of ids needed for multithreading
        get.__globals__['_CALL_BATCH_SIZE'] = 2

        # Normal query
        res = get(host=self._host, port=self._port, version=self._version,
                  species=self._species, category="feature", subcategory="gene",
                  resource="snp", query_id="BRCA1,BRCA2,LDLR")
        assert len(res) == 3
        assert len(res[0]['result']) == 8196
        assert len(res[1]['result']) == 10519
        assert len(res[2]['result']) == 4113

        # Query with limit
        res = get(host=self._host, port=self._port, version=self._version,
                  species=self._species, category="feature", subcategory="gene",
                  resource="snp", query_id="BRCA1,BRCA2,LDLR",
                  options={'limit': 8000})
        assert len(res) == 3
        assert len(res[0]['result']) == 8000
        assert len(res[1]['result']) == 8000
        assert len(res[2]['result']) == 4113

        # Query with skip
        res = get(host=self._host, port=self._port, version=self._version,
                  species=self._species, category="feature", subcategory="gene",
                  resource="snp", query_id="BRCA1,BRCA2,LDLR",
                  options={'skip': 4000})
        assert len(res) == 3
        assert len(res[0]['result']) == 4196
        assert len(res[1]['result']) == 6519
        assert len(res[2]['result']) == 113

        # Query with limit and skip
        res = get(host=self._host, port=self._port, version=self._version,
                  species=self._species, category="feature", subcategory="gene",
                  resource="snp", query_id="BRCA1,BRCA2,LDLR",
                  options={'limit': 6000, 'skip': 4000})
        assert len(res) == 3
        assert len(res[0]['result']) == 4196
        assert len(res[1]['result']) == 6000
        assert len(res[2]['result']) == 113
Esempio n. 8
0
    def get_help(self, method_name=None, show_params=False, **options):

        # Getting swagger documentation
        response = get(session=self._session,
                       host=self._configuration.host,
                       version='swagger.json',
                       species=None,
                       category=None,
                       subcategory=None,
                       resource=None,
                       options=options)
        sys.stdout.write(self.__class__.__name__ + '\n')

        # Getting class methods
        methods = [
            func for func in dir(self)
            if callable(getattr(self, func)) and not func.startswith('_')
        ]

        text = '{indent}{bullet} {name}: {desc}\n'
        for method in methods:
            if method_name is not None and method_name != method:
                continue
            # Getting method info
            method_swag = (method[4:] if method.startswith('get_') else method)
            path_info = [
                response['paths'][path] for path in response['paths']
                if self._category in path and self._subcategory in path
                and method_swag in path
            ]
            if not path_info:
                continue
            if 'summary' not in path_info[0]['get']:
                continue
            desc = path_info[0]['get']['summary']
            desc = desc.replace('http://bioinfo.hpc.cam.ac.uk/cellbase',
                                self._configuration.host)
            sys.stdout.write(
                text.format(indent=' ' * 4, bullet='-', name=method,
                            desc=desc))
            # Getting method parameters
            if not show_params:
                continue
            for param in path_info[0]['get']['parameters']:
                if param['name'] in ['version', 'species', 'Output format']:
                    continue
                desc = param['description'] if 'description' in param else '-'
                desc = desc.replace('http://bioinfo.hpc.cam.ac.uk/cellbase',
                                    self._configuration.host)
                sys.stdout.write(
                    text.format(indent=' ' * 8,
                                bullet='*',
                                name=param['name'],
                                desc=desc))
Esempio n. 9
0
    def test_get_multiple_ids(self):
        """Tests the retrieval of information for multiple ID"""

        # Normal query
        res = get(host=self._host, port=self._port, version=self._version,
                  species=self._species, category="feature", subcategory="gene",
                  resource="snp", query_id="BRCA1,BRCA2,LDLR")
        assert len(res) == 3
        assert len(res[0]['result']) == 8196
        assert len(res[1]['result']) == 10519
        assert len(res[2]['result']) == 4113

        # Query with limit
        res = get(host=self._host, port=self._port, version=self._version,
                  species=self._species, category="feature", subcategory="gene",
                  resource="snp", query_id="BRCA1,BRCA2,LDLR",
                  options={'limit': 8000})
        assert len(res) == 3
        assert len(res[0]['result']) == 8000
        assert len(res[1]['result']) == 8000
        assert len(res[2]['result']) == 4113

        # Query with skip
        res = get(host=self._host, port=self._port, version=self._version,
                  species=self._species, category="feature", subcategory="gene",
                  resource="snp", query_id="BRCA1,BRCA2,LDLR",
                  options={'skip': 4000})
        assert len(res) == 3
        assert len(res[0]['result']) == 4196
        assert len(res[1]['result']) == 6519
        assert len(res[2]['result']) == 113

        # Query with limit and skip
        res = get(host=self._host, port=self._port, version=self._version,
                  species=self._species, category="feature", subcategory="gene",
                  resource="snp", query_id="BRCA1,BRCA2,LDLR",
                  options={'limit': 6000, 'skip': 4000})
        assert len(res) == 3
        assert len(res[0]['result']) == 4196
        assert len(res[1]['result']) == 6000
        assert len(res[2]['result']) == 113
Esempio n. 10
0
    def test_get_multiple_ids_with_list_ids(self):
        """Normal query with list ids"""

        res = get(session=self._session,
                  host=self._host,
                  version=self._version,
                  species=self._species,
                  category='feature',
                  subcategory='gene',
                  resource='snp',
                  query_id=['BRCA1', 'BRCA2', 'LDLR'])
        self.check_counts(res)
Esempio n. 11
0
    def get(self, category, subcategory, resource, query_id=None, **options):
        """Creates the URL for querying the REST service"""
        response = get(host=self._configuration.host,
                       version=self._configuration.version,
                       species=self._configuration.species,
                       category=category,
                       subcategory=subcategory,
                       query_id=query_id,
                       resource=resource,
                       options=options)

        return response
Esempio n. 12
0
 def _get(self, resource, query_id=None, options=None):
     """Queries the REST service and returns the result"""
     response = get(session=self._session,
                    host=self._configuration.host,
                    version=self._configuration.version,
                    species=self._configuration.species,
                    category=self._category,
                    subcategory=self._subcategory,
                    query_id=query_id,
                    resource=resource,
                    options=options)
     return response
Esempio n. 13
0
    def get(self, category, subcategory, resource, query_id=None, **options):
        """Creates the URL for querying the REST service"""
        response = get(host=self._configuration.host,
                       version=self._configuration.version,
                       species=self._configuration.species,
                       category=category,
                       subcategory=subcategory,
                       query_id=query_id,
                       resource=resource,
                       options=options)

        return response
Esempio n. 14
0
    def _get(self, resource, query_id=None, options=None):
        """Queries the REST service and returns the result"""
        response = get(host=self._configuration.host,
                       version=self._configuration.version,
                       species=self._configuration.species,
                       category=self._category,
                       subcategory=self._subcategory,
                       query_id=query_id,
                       resource=resource,
                       options=options)

        return response
Esempio n. 15
0
 def get_versions(self, **options):
     # This particular REST endpoint follows the structure
     # /{version}/meta/{species}/versions
     """Returns source version metadata, including source urls"""
     response = get(session=self._session,
                    host=self._configuration.host,
                    version=self._configuration.version,
                    species=None,
                    category=self._category,
                    subcategory=self._configuration.species,
                    resource='versions',
                    options=options)
     return response
Esempio n. 16
0
 def get_feature_type(self, **options):
     """Returns list of available regulatory feature types"""
     # This particular REST endpoint follows the structure
     # /{version}/{species}/regulatory/featureType
     response = get(session=self._session,
                    host=self._configuration.host,
                    version=self._configuration.version,
                    species=self._configuration.species,
                    category=self._category,
                    subcategory=None,
                    resource='featureType',
                    options=options)
     return response
Esempio n. 17
0
 def get_info(self, **options):
     """Returns general information"""
     # This particular REST endpoint follows the structure
     # /{version}/{species}/info
     response = get(session=self._session,
                    host=self._configuration.host,
                    version=self._configuration.version,
                    species=self._configuration.species,
                    category=None,
                    subcategory=None,
                    resource='info',
                    options=options)
     return response
Esempio n. 18
0
 def about(self, **options):
     # This particular REST endpoint follows the structure
     # /{version}/meta/about
     """Returns info about CellBase code"""
     response = get(session=self._session,
                    host=self._configuration.host,
                    version=self._configuration.version,
                    species=None,
                    category=self._category,
                    subcategory=None,
                    resource='about',
                    options=options)
     return response
Esempio n. 19
0
 def get_feature_type(self, **options):
     """Returns list of available regulatory feature types"""
     # This particular REST endpoint follows the structure
     # /{version}/{species}/regulatory/featureType
     response = get(session=self._session,
                    host=self._configuration.host,
                    version=self._configuration.version,
                    species=self._configuration.species,
                    category=self._category,
                    subcategory=None,
                    resource='featureType',
                    options=options)
     return response
Esempio n. 20
0
 def search(self, **options):
     """Returns regulatory elements"""
     # This particular REST endpoint follows the structure
     # /{version}/{species}/regulatory/search
     response = get(session=self._session,
                    host=self._configuration.host,
                    version=self._configuration.version,
                    species=self._configuration.species,
                    category=self._category,
                    subcategory=None,
                    resource='search',
                    options=options)
     return response
Esempio n. 21
0
 def ping(self, **options):
     """Checks if service is alive"""
     # This particular REST endpoint follows the structure
     # /{version}/meta/ping
     response = get(session=self._session,
                    host=self._configuration.host,
                    version=self._configuration.version,
                    species=None,
                    category=self._category,
                    subcategory=None,
                    resource='ping',
                    options=options)
     return response
Esempio n. 22
0
 def get_species(self, **options):
     """Returns available species"""
     # This particular REST endpoint follows the structure
     # /{version}/meta/species
     response = get(session=self._session,
                    host=self._configuration.host,
                    version=self._configuration.version,
                    species=None,
                    category=self._category,
                    subcategory=None,
                    resource='species',
                    options=options)
     return response
Esempio n. 23
0
 def get_versions(self, **options):
     # This particular REST endpoint follows the structure
     # /{version}/meta/{species}/versions
     """Returns source version metadata, including source urls"""
     response = get(session=self._session,
                    host=self._configuration.host,
                    version=self._configuration.version,
                    species=None,
                    category=self._category,
                    subcategory=self._configuration.species,
                    resource='versions',
                    options=options)
     return response
Esempio n. 24
0
 def about(self, **options):
     # This particular REST endpoint follows the structure
     # /{version}/meta/about
     """Returns info about CellBase code"""
     response = get(session=self._session,
                    host=self._configuration.host,
                    version=self._configuration.version,
                    species=None,
                    category=self._category,
                    subcategory=None,
                    resource='about',
                    options=options)
     return response
Esempio n. 25
0
 def ping(self, **options):
     """Checks if service is alive"""
     # This particular REST endpoint follows the structure
     # /{version}/meta/ping
     response = get(session=self._session,
                    host=self._configuration.host,
                    version=self._configuration.version,
                    species=None,
                    category=self._category,
                    subcategory=None,
                    resource='ping',
                    options=options)
     return response
Esempio n. 26
0
 def get_info(self, **options):
     """Returns general information"""
     # This particular REST endpoint follows the structure
     # /{version}/{species}/info
     response = get(session=self._session,
                    host=self._configuration.host,
                    version=self._configuration.version,
                    species=self._configuration.species,
                    category=None,
                    subcategory=None,
                    resource='info',
                    options=options)
     return response
Esempio n. 27
0
 def search(self, **options):
     """Returns regulatory elements"""
     # This particular REST endpoint follows the structure
     # /{version}/{species}/regulatory/search
     response = get(session=self._session,
                    host=self._configuration.host,
                    version=self._configuration.version,
                    species=self._configuration.species,
                    category=self._category,
                    subcategory=None,
                    resource='search',
                    options=options)
     return response
Esempio n. 28
0
    def test_get_multiple_ids(self):
        """Tests the retrieval of information for multiple IDs"""

        # Normal query with string ids
        res = get(session=self._session,
                  host=self._host,
                  version=self._version,
                  species=self._species,
                  category='feature',
                  subcategory='gene',
                  resource='snp',
                  query_id='BRCA1,BRCA2,LDLR')
        self.check_counts(res)
Esempio n. 29
0
 def get_species(self, **options):
     """Returns available species"""
     # This particular REST endpoint follows the structure
     # /{version}/meta/species
     response = get(session=self._session,
                    host=self._configuration.host,
                    version=self._configuration.version,
                    species=None,
                    category=self._category,
                    subcategory=None,
                    resource='species',
                    options=options)
     return response
Esempio n. 30
0
    def get_help(self, method_name=None, show_params=False, **options):

        # Getting swagger documentation
        response = get(session=self._session,
                       host=self._configuration.host,
                       version='swagger.json',
                       species=None,
                       category=None,
                       subcategory=None,
                       resource=None,
                       options=options)
        sys.stdout.write(self.__class__.__name__ + '\n')

        # Getting class methods
        methods = [
            func for func in dir(self)
            if callable(getattr(self, func)) and not func.startswith('_')
        ]

        text = '{indent}{bullet} {name}: {desc}\n'
        for method in methods:
            if method_name is not None and method_name != method:
                continue
            # Getting method info
            method_swag = (method[4:] if method.startswith('get_') else method)
            path_info = [response['paths'][path] for path in response['paths']
                         if self._category in path and method_swag in path]
            if not path_info:
                continue
            desc = path_info[0]['get']['summary']
            desc = desc.replace('http://bioinfo.hpc.cam.ac.uk/cellbase',
                                self._configuration.host)
            sys.stdout.write(text.format(indent=' ' * 4,
                                         bullet='-',
                                         name=method,
                                         desc=desc))
            # Getting method parameters
            if not show_params:
                continue
            for param in path_info[0]['get']['parameters']:
                if param['name'] in ['version', 'species', 'Output format']:
                    continue
                desc = param['description']
                desc = desc.replace('http://bioinfo.hpc.cam.ac.uk/cellbase',
                                    self._configuration.host)
                sys.stdout.write(text.format(indent=' ' * 8,
                                             bullet='*',
                                             name=param['name'],
                                             desc=desc))
Esempio n. 31
0
    def test_duplicated_ids(self):
        """Tests the retrieval of information for duplicated IDs"""

        # Modifying the number of ids needed for multithreading
        get.__globals__['_CALL_BATCH_SIZE'] = 5

        # Normal query
        n = 10  # Number of duplications
        res = get(host=self._host, version=self._version,
                  species=self._species, category='feature', subcategory='gene',
                  resource='snp', query_id=','.join(['LDLR']*n))
        assert len(res) == n
        # Checking that every response has the same number of results
        for i, r in enumerate(res):
            assert len(r['result']) == 4108
Esempio n. 32
0
 def test_multiple_threads_with_skip(self):
     """Tests the retrieval of information with multiple threads with skip"""
     res = get(session=self._session,
               host=self._host,
               version=self._version,
               species=self._species,
               category='feature',
               subcategory='gene',
               resource='snp',
               query_id='BRCA1,BRCA2,LDLR',
               options={'skip': 4000})
     assert len(res) == 3
     assert len(res[0]['result']) == 4152
     assert len(res[1]['result']) == 6419
     assert len(res[2]['result']) == 108
Esempio n. 33
0
 def test_get_multiple_ids_with_list_ids(self):
     """Query with skip"""
     res = get(session=self._session,
               host=self._host,
               version=self._version,
               species=self._species,
               category='feature',
               subcategory='gene',
               resource='snp',
               query_id='BRCA1,BRCA2,LDLR',
               options={'skip': 4000})
     assert len(res) == 3
     assert len(res[0]['result']) == 4152
     assert len(res[1]['result']) == 6419
     assert len(res[2]['result']) == 108
Esempio n. 34
0
    def test_multiple_threads(self):
        """Tests the retrieval of information with multiple threads"""

        # Modifying the number of ids needed for multithreading
        get.__globals__['_CALL_BATCH_SIZE'] = 2

        # Normal query
        res = get(session=self._session,
                  host=self._host,
                  version=self._version,
                  species=self._species,
                  category='feature',
                  subcategory='gene',
                  resource='snp',
                  query_id='BRCA1,BRCA2,LDLR')
        self.check_counts(res)
Esempio n. 35
0
 def test_multiple_threads_with_limit(self):
     """Tests the retrieval of information with multiple threads with limit"""
     # Query with limit
     res = get(session=self._session,
               host=self._host,
               version=self._version,
               species=self._species,
               category='feature',
               subcategory='gene',
               resource='snp',
               query_id='BRCA1,BRCA2,LDLR',
               options={'limit': 8000})
     assert len(res) == 3
     assert len(res[0]['result']) == 8000
     assert len(res[1]['result']) == 8000
     assert len(res[2]['result']) == 4108
Esempio n. 36
0
    def get_category(self, query_id, **options):
        # This particular REST endpoint follows the structure
        # /{version}/meta/{category}
        """Returns source version metadata, including source urls"""
        categories = ['feature', 'genomic', 'network', 'regulatory']
        if query_id not in categories:
            msg = 'Query has to be one of the following: ' + str(categories)
            raise ValueError(msg)

        response = get(session=self._session,
                       host=self._configuration.host,
                       version=self._configuration.version,
                       species=None,
                       category=self._category,
                       subcategory=None,
                       resource=query_id,
                       options=options)
        return response
Esempio n. 37
0
    def get_category(self, query_id, **options):
        # This particular REST endpoint follows the structure
        # /{version}/meta/{category}
        """Returns source version metadata, including source urls"""
        categories = ['feature', 'genomic', 'network', 'regulatory']
        if query_id not in categories:
            msg = 'Query has to be one of the following: ' + str(categories)
            raise ValueError(msg)

        response = get(session=self._session,
                       host=self._configuration.host,
                       version=self._configuration.version,
                       species=None,
                       category=self._category,
                       subcategory=None,
                       resource=query_id,
                       options=options)
        return response