Changeset 11037:4b41e882f3cb in orange for Orange/utils/addons.py


Ignore:
Timestamp:
11/16/12 09:16:04 (17 months ago)
Author:
Matija Polajnar <matija.polajnar@…>
Branch:
default
Message:

Make add-on names case-insensitive; windows likes to have them all lowercase after installation. Hopefully fixes #1242.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/utils/addons.py

    r11027 r11037  
    4949try: 
    5050    addons = shelve.open(AOLIST_FILE, 'c') 
    51     list(addons.items())  # Try to read the whole list. 
     51    if any(name != name.lower() for name, record in addons.items()):  # Try to read the whole list and check for sanity. 
     52        raise Exception("Corrupted add-on list.") 
    5253except: 
    5354    if os.path.isfile(AOLIST_FILE): 
     
    107108        progress_callback(len(pkg_dict)+1, 1) 
    108109    for i, (name, (_, version)) in enumerate(pkg_dict.items()): 
    109         if force or name not in addons or addons[name].available_version != version: 
     110        if force or name not in addons or addons[name.lower()].available_version != version: 
    110111            try: 
    111112                data = pypi.release_data(name, version) 
     
    117118                    except: 
    118119                        docs = {} 
    119                 addons[name] = OrangeAddOn(name = name, 
     120                addons[name.lower()] = OrangeAddOn(name = name, 
    120121                                           available_version = data['version'], 
    121                                            installed_version = addons[name].installed_version if name in addons else None, 
     122                                           installed_version = addons[name.lower()].installed_version if name.lower() in addons else None, 
    122123                                           summary = data['summary'], 
    123124                                           description = data.get('description', ''), 
     
    146147        name, version = entry_point.dist.project_name, entry_point.dist.version 
    147148        #TODO We could import setup.py from entry_point.location and load descriptions and such ... 
    148         if name in addons: 
    149             addons[name] = addons[name]._replace(installed_version = version) 
     149        if name.lower() in addons: 
     150            addons[name.lower()] = addons[name.lower()]._replace(installed_version = version) 
    150151        else: 
    151             addons[name] = OrangeAddOn(name = name, 
     152            addons[name.lower()] = OrangeAddOn(name = name, 
    152153                available_version = None, 
    153154                installed_version = version, 
     
    162163                release_size = None, 
    163164                python_version = None) 
    164         found.add(name) 
     165        found.add(name.lower()) 
    165166    for name in set(addons).difference(found): 
    166         addons[name] = addons[name]._replace(installed_version = None) 
     167        addons[name.lower()] = addons[name.lower()]._replace(installed_version = None) 
    167168    addons.sync() 
    168169    rebuild_index() 
     
    208209        import urllib 
    209210        rh = (lambda done, bs, fs: progress_callback(fs/bs, done)) if progress_callback else None 
    210         egg = urllib.urlretrieve(addons[name].release_url, reporthook=rh)[0] 
     211        egg = urllib.urlretrieve(addons[name.lower()].release_url, reporthook=rh)[0] 
    211212    except Exception, e: 
    212213        raise Exception("Unable to download add-on from repository: %s" % e) 
     
    217218            egg_contents = tarfile.open(egg) 
    218219            egg_contents.extractall(tmpdir) 
    219             setup_py = os.path.join(tmpdir, name+'-'+addons[name].available_version, 'setup.py') 
     220            setup_py = os.path.join(tmpdir, name+'-'+addons[name.lower()].available_version, 'setup.py') 
    220221        except Exception, e: 
    221222            raise Exception("Unable to unpack add-on: %s" % e) 
Note: See TracChangeset for help on using the changeset viewer.