Changeset 1734:91d14dd2cf0e in orange-bioinformatics for _bioinformatics/obiKEGG/pathway.py


Ignore:
Timestamp:
03/05/13 19:48:26 (14 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

obiKEGG code style fixes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _bioinformatics/obiKEGG/pathway.py

    r1733 r1734  
    88import urllib2 
    99 
    10 import xml.dom 
    1110import xml.parsers 
    1211from xml.dom import minidom 
    1312 
    1413from contextlib import closing 
     14 
     15from Orange.utils import deprecated_attribute 
    1516 
    1617from . import conf 
    1718from . import caching 
    1819from . import api 
    19  
    20 from Orange.utils import deprecated_attribute 
    2120 
    2221 
     
    3130    return wrapper 
    3231 
     32 
    3333class Pathway(object): 
    3434    KGML_URL_FORMAT = "http://www.genome.jp/kegg-bin/download?entry={pathway_id}&format=kgml" 
    35      
     35 
    3636    def __init__(self, pathway_id, local_cache=None, connection=None): 
    3737        if pathway_id.startswith("path:"): 
    3838            _, pathway_id = pathway_id.split(":", 1) 
    39              
     39 
    4040        self.pathway_id = pathway_id 
    4141        if local_cache is None: 
     
    4343        self.local_cache = local_cache 
    4444        self.connection = connection 
    45          
     45 
    4646    def cache_store(self): 
    4747        caching.touch_path(self.local_cache) 
    4848        return caching.Sqlite3Store(os.path.join(self.local_cache, 
    4949                                                 "pathway_store.sqlite3")) 
    50          
     50 
    5151    def _open_last_modified_store(self): 
    52         import shelve 
    5352        caching.touch_dir(self.local_cache) 
    5453        return caching.Sqlite3Store(os.path.join(self.local_cache, 
    5554                                                 "last_modified.sqlite3")) 
    56          
     55 
    5756    def _get_kgml(self): 
    5857        """ Return an open kgml file for the pathway. 
     
    6059        from datetime import datetime, timedelta 
    6160        valid = False 
    62         local_filename = os.path.join(self.local_cache, self.pathway_id + ".xml") 
     61        local_filename = os.path.join(self.local_cache, 
     62                                      self.pathway_id + ".xml") 
    6363        if os.path.exists(local_filename): 
    6464            mtime = os.stat(local_filename).st_mtime 
     
    7575            else: 
    7676                valid = False 
    77          
     77 
    7878        if not valid: 
    7979            url = self.KGML_URL_FORMAT.format(pathway_id=self.pathway_id) 
    8080            s = urllib2.urlopen(url) 
    8181            contents = s.read() 
    82              
     82 
    8383            with open(local_filename, "wb") as f: 
    8484                f.write(contents) 
    85                  
     85 
    8686        return open(local_filename, "rb") 
    87      
     87 
    8888    def _get_image_filename(self): 
    8989        """ Return a filename of a local copy of the pathway image 
     
    9191        # TODO: keep-alive (using httplib if it supports it) 
    9292        # better to move all code to use requests package 
    93          
     93 
    9494        url = str(self.image) 
    95          
    96         local_filename = os.path.join(self.local_cache, self.pathway_id + ".png") 
    97          
     95 
     96        local_filename = os.path.join(self.local_cache, 
     97                                      self.pathway_id + ".png") 
     98 
    9899        if not os.path.exists(local_filename): 
    99100            response = urllib2.urlopen(url) 
     
    102103        else: 
    103104            request = urllib2.Request(url) 
    104             modified_cache = os.path.join(self.local_cache, "http-last-modified-cache.store") 
    105105            with closing(self._open_last_modified_store()) as store: 
    106106                modified_since = store.get(url, None) 
    107                  
     107 
    108108            request.add_header("If-Modified-Since", modified_since) 
    109109            try: 
     
    116116            modified_since = response.headers.get("last-modified") 
    117117            image = response.read() 
    118                  
     118 
    119119        with open(local_filename, "wb") as f: 
    120120            f.write(image) 
    121              
     121 
    122122        with closing(self._open_last_modified_store()) as store: 
    123123            store[url] = modified_since 
    124              
    125         return local_filename  
    126          
     124 
     125        return local_filename 
     126 
    127127    def _local_kgml_filename(self): 
    128128        """ Return the local kgml xml filename for the pathway. 
    129129        """ 
    130         local_filename = os.path.join(self.local_cache, self.pathway_id + ".xml") 
     130        local_filename = os.path.join(self.local_cache, 
     131                                      self.pathway_id + ".xml") 
    131132        return local_filename 
    132          
     133 
    133134    class entry(object): 
    134135        def __init__(self, dom_element): 
     
    138139            self.graphics = dict(dom_element.getElementsByTagName("graphics")[0].attributes.items()) 
    139140            self.components = [node.getAttribute("id") for node in dom_element.getElementsByTagName("component")] 
    140              
     141 
    141142    class reaction(object): 
    142143        def __init__(self, dom_element): 
     
    144145            self.substrates = [node.getAttribute("name") for node in dom_element.getElementsByTagName("substrate")] 
    145146            self.products = [node.getAttribute("name") for node in dom_element.getElementsByTagName("product")] 
    146              
     147 
    147148    class relation(object): 
    148149        def __init__(self, dom_element): 
    149150            self.__dict__.update(dom_element.attributes.items()) 
    150151            self.subtypes = [node.attributes.items() for node in dom_element.getElementsByTagName("subtype")] 
    151          
     152 
    152153    @cached_method 
    153154    def pathway_attributes(self): 
    154155        return dict(self.pathway_dom().attributes.items()) 
    155      
     156 
    156157    @property 
    157158    def name(self): 
    158159        return self.pathway_attributes().get("name") 
    159      
     160 
    160161    @property 
    161162    def org(self): 
    162163        return self.pathway_attributes().get("org") 
    163      
     164 
    164165    @property 
    165166    def number(self): 
    166167        return self.pathway_attributes().get("number") 
    167      
    168     @property     
     168 
     169    @property 
    169170    def title(self): 
    170171        return self.pathway_attributes().get("title") 
    171      
     172 
    172173    @property 
    173174    def image(self): 
    174175        return self.pathway_attributes().get("image") 
    175      
     176 
    176177    @property 
    177178    def link(self): 
    178179        return self.pathway_attributes().get("link") 
    179      
     180 
    180181    @cached_method 
    181182    def pathway_dom(self): 
     
    185186            # TODO: Should delete the cached xml file. 
    186187            return None 
    187      
     188 
    188189    @cached_method 
    189190    def entries(self): 
     
    193194        else: 
    194195            return [] 
    195      
     196 
    196197    entrys = deprecated_attribute("entrys", "entries") 
    197      
     198 
    198199    @cached_method 
    199200    def reactions(self): 
     
    203204        else: 
    204205            return [] 
    205      
     206 
    206207    @cached_method 
    207208    def relations(self): 
     
    211212        else: 
    212213            return [] 
    213      
     214 
    214215    def __iter__(self): 
    215216        """ Iterate over all elements in the pathway 
    216217        """ 
    217218        return iter(self.all_elements()) 
    218      
     219 
    219220    def __contains__(self, element): 
    220221        """ Retrurn true if element in the pathway 
    221222        """ 
    222223        return element in self.all_elements() 
    223      
     224 
    224225    @classmethod 
    225226    def split_pathway_id(cls, id): 
    226227        path, id = id.split(":") if ":" in id else ("path", id) 
    227228        org, id = id[:-5], id[-5:] 
    228         return path, org, id   
    229      
     229        return path, org, id 
     230 
    230231    @cached_method 
    231232    def all_elements(self): 
    232233        """ Return all elements 
    233234        """ 
    234         return reduce(list.__add__, [self.genes(), self.compounds(), self.enzmes(), self.reactions()], []) 
    235      
     235        return reduce(list.__add__, 
     236                      [self.genes(), self.compounds(), 
     237                       self.enzmes(), self.reactions()], 
     238                      []) 
     239 
    236240    def _get_entries_by_type(self, type): 
    237         return sorted(reduce(set.union, [entry.name.split() for entry in self.entries() if entry.type == type], set())) 
    238      
     241        return sorted(reduce(set.union, 
     242                             [entry.name.split() for entry in self.entries() 
     243                              if entry.type == type], 
     244                             set())) 
     245 
    239246    @cached_method 
    240247    def genes(self): 
     
    242249        """ 
    243250        return self._get_entries_by_type("gene") 
    244      
     251 
    245252    @cached_method 
    246253    def compounds(self): 
     
    248255        """ 
    249256        return self._get_entries_by_type("compound") 
    250      
     257 
    251258    @cached_method 
    252259    def enzymes(self): 
     
    254261        """ 
    255262        return self._get_entries_by_type("enzyme") 
    256      
     263 
    257264    @cached_method 
    258265    def orthologs(self): 
     
    260267        """ 
    261268        return self._get_entries_by_type("ortholog") 
    262      
     269 
    263270    @cached_method 
    264271    def maps(self): 
     
    266273        """ 
    267274        return self._get_entries_by_type("map") 
    268      
     275 
    269276    @cached_method 
    270277    def groups(self): 
     
    272279        """ 
    273280        return self._get_entries_by_type("ortholog") 
    274      
     281 
    275282    def get_image(self): 
    276283        """ Return an image of the pathway 
Note: See TracChangeset for help on using the changeset viewer.