Changeset 1418:24216dbf63f6 in orange-bioinformatics


Ignore:
Timestamp:
06/14/11 15:49:56 (3 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
fdf6b25b28bbff48cf9a52f7aeafe54e8d4a6c97
Message:

Added AtlasConditionExperiment.
Check for error response from Atlas.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • obiArrayExpress.py

    r1354 r1418  
    7979     "wholewords", 
    8080    ] 
    81  
    82 class forgetfull(dict): 
    83     """ A forgetfull dictionary. 
    84     """ 
    85     def __setitem__(self, key, value): 
    86         """ Do nothing. 
    87         """ 
    88         return 
    8981     
    9082 
     
    158150                raise ValueError("Must be an interval argument (min, max)!") 
    159151        def format_date(val): 
    160             return val 
     152            # TODO check if val contains a datetime.date object, assert proper format 
     153            return format_interval(val) 
    161154        def format_wholewords(val): 
    162155            if val: 
     
    230223        url = self.query_url_experiments(**kwargs) 
    231224        stream = self._cache_urlopen(url, timeout=self.timeout) 
    232 #        stream = urllib2.urlopen(url, timeout=self.timeout) 
    233225        return stream 
    234226     
     
    539531        ['bar the foo', ... 
    540532         
    541         >>> sdr. 
    542533        >>> sdr.derived_array_data_matrix_file 
    543534        ['foobar.data.txt', ... 
     
    922913        # find the exact match (more then one experiment can be listed in the query result) 
    923914        experiments = [e for e in experiments if e.find("accession").text.strip() == accession] 
    924         self._experiment = experiment = experiments[0] #tree.find("experiment")  
     915        self._experiment = experiment = experiments[0] 
    925916         
    926917        self.species = [e.text for e in experiment.findall("species")] 
     
    956947        self.bioassaydatagroups = [_dictify(group) for group in experiment.findall("bioassaydatagroup")] 
    957948        self.bibliography = [_dictify(e) for e in experiment.findall("bibliography")] 
    958 #        assert(len(experiment.findall("bibliography")) < 2) 
    959949        self.provider = [_dictify(e) for e in experiment.findall("provider")] 
    960 #        assert(len(experiment.findall("provider")) < 2) 
    961950         
    962951        self.experimentdesign = [] 
     
    965954             
    966955        self.description = [_dictify(e) for e in experiment.findall("description")] 
    967 #        assert(len(experiment.findall("description")) < 2) 
    968956         
    969957        tree = query_files(accession=self.accession, format="xml", connection=self.connection) 
     
    971959        experiments = [e for e in experiments if e.find("accession").text.strip() == accession] 
    972960        experiment = experiments[0] 
    973 #        files = tree.findall("experiment/file") 
    974961        files = experiment.findall("file") 
    975962        self.files = [_dictify(file) for file in files] 
     
    1006993                gzfile = gzip.open(local_filename) 
    1007994                gzfile.extractall(repo_dir) 
    1008             elif file["extension"] in ["tgz", "tar.gz"]: 
     995            elif file["extension"] in ["tgz", "tar"]: 
    1009996                import tarfile 
    1010997                tfile = tarfile.TarFile(local_filename) 
     
    11841171     
    11851172    def query(self, condition, format="json", start=None, rows=None, indent=False): 
    1186         url = self.address + "api?" + condition.rest() 
     1173        url = self.address + "api/v1?" + condition.rest() 
    11871174        if start and rows: 
    11881175            url += "&start={0}&rows={1}".format(start, rows) 
     
    13731360        return "species={0}".format(self.organism.replace(" ", "+").lower()) 
    13741361         
    1375      
     1362         
     1363class AtlasConditionExperiment(AtlasCondition): 
     1364    """ Condition on experiement 
     1365     
     1366    :param property: Property of the experiment. If None or "" all properties  
     1367        will be searched. 
     1368    :param qualifier: Qualifier can be 'Has' or 'HasNot' 
     1369    :param value: The value to search for. 
     1370     
     1371    Example :: 
     1372     
     1373        >>> # Condition on a experiemnt acession 
     1374        >>> condition = AtlasConditionExperiment("", "", "E-GEOD-24283") 
     1375        >>> # Condition on experiments involving lung 
     1376        >>> condition = AtlasConditionGeneProperty("Organism_part", "Has", "lung") 
     1377         
     1378    """ 
     1379#    EXPERIMENT_FILTERS = [ 
     1380#                "Organism" 
     1381#                "Factor"] 
     1382     
     1383    EXPERIMENT_FILTER_QUALIFIERS = [ 
     1384                "Has", 
     1385                "HasNot"] 
     1386     
     1387    def __init__(self, property, qualifier, value): 
     1388        self.property = property 
     1389        self.qualifier = qualifier 
     1390        if isinstance(value, basestring): 
     1391            self.value = value.replace(" ", "+") 
     1392        elif isinstance(value, list): 
     1393            self.value = "+".join(value) 
     1394        else: 
     1395            raise ValueError(value) 
     1396         
     1397        self.validate() 
     1398         
     1399    def validate(self): 
     1400        # TODO: check to EFO factors 
     1401#        assert(self.property in EXPERIMENT_FILTERS + [""]) 
     1402        assert(self.qualifier in self.EXPERIMENT_FILTER_QUALIFIERS + [""]) 
     1403         
     1404    def rest(self): 
     1405        return "experiment{property}{qualifier}={value}".format(**self.__dict__) 
     1406         
     1407         
     1408class GeneAtlasError(ValueError): 
     1409    """ An error response from the Atlas server. 
     1410    """ 
     1411    pass 
     1412     
     1413     
     1414def __check_atlas_error_json(response): 
     1415     if "error" in response: 
     1416         raise GeneAtlasError(response["error"]) 
     1417     return response 
     1418      
     1419def __check_atlas_error_xml(response): 
     1420    error = response.find("error") 
     1421    if error is not None: 
     1422        raise GeneAtlasError(error.text) 
     1423    return response 
     1424     
     1425         
    13761426def query_atlas_simple(genes=None, regulation=None, organism=None, 
    13771427                       condition=None, format="json", start=None, 
     
    14381488                               rows=rows, indent=indent) 
    14391489    if format == "json": 
    1440         return parse_json(results) 
     1490        response = parse_json(results) 
     1491        return __check_atlas_error_json(response) 
    14411492    else: 
    1442         return parse_xml(results) 
     1493        response = parse_xml(results) 
     1494        return __check_atlas_error_xml(response) 
    14431495 
    14441496 
Note: See TracChangeset for help on using the changeset viewer.