Source code for easydev.paths

# -*- python -*-
# -*- coding: utf-8 -*-
#
#  This file is part of the easydev software
#
#  Copyright (c) 2011-2013
#
#  File author(s): Thomas Cokelaer <cokelaer@gmail.com>
#
#  Distributed under the GPLv3 License.
#  See accompanying file LICENSE.txt or copy at
#      http://www.gnu.org/licenses/gpl-3.0.html
#
#  Website: https://github.com/cokelaer/easydev
#  Documentation: http://packages.python.org/easydev
#
##############################################################################
# $:Id $
"""Utilities to ease access to share data paths"""
import os
from os.path import join as pj
import pkg_resources


__all__ = ["get_shared_directory_path", "get_shared_directories",
    "get_share_file", "gsf", "get_package_location"]



[docs]def get_package_location(package): """Return physical location of a package""" try: info = pkg_resources.get_distribution(package) location = info.location except pkg_resources.DistributionNotFound as err: print("package provided (%s) not installed." % package) raise return location
[docs]def get_shared_directory_path(package): """Returns the share directory path of an installed package :: sharedir = get_shared_directory_path("easydev") """ location = get_package_location(package) #print("install mode ? ") sharedir = os.path.realpath(pj(location, package, 'share')) if os.path.isdir(sharedir) == True: # looks like we have found the share directory so it is an install mode #print ("yes") return sharedir else: #print("no. searching for share dir as if in develop mode") # let us try a couple of directories # FIXME: do we need the 3 cases ?? # probably just 2 are required, one for develop and one for install mode sharedir = os.path.realpath(pj(location, '..', 'share')) if os.path.isdir(sharedir) == True: return sharedir sharedir = os.path.realpath(pj(location, '..', '..', 'share')) if os.path.isdir(sharedir) == True: return sharedir sharedir = os.path.realpath(pj(location, '..', '..', '..', 'share')) if os.path.isdir(sharedir) == True: return sharedir # could not be found, sharedir = [] print("could not find any share directory in %s" % package) return sharedir
[docs]def get_shared_directories(package, datadir="data"): """Returns all directory paths found in the package share/datadir directory :param str datadir: scans package/share/<datadir> where datadir is "data" by default. If it does not exists, the list returned is empty. .. doctest:: >>> from easydev import get_shared_directories >>> shared_directories = get_shared_directories("easydev", "themes") >>> len(shared_directories)>=2 True """ packagedir = get_shared_directory_path(package) if len(packagedir) == 0: return [] packagedir = pj(packagedir, datadir) directories = os.listdir(packagedir) # get rid of .svn (for the packages installed with develop) directories_to_process = [] for directory in directories: fullpath = os.path.join(packagedir,directory) if directory != '.svn' and os.path.isdir(fullpath): directories_to_process.append(fullpath) directories_to_process.sort() return directories_to_process
[docs]def gsf(package, datadir, filename): return get_share_file(package, datadir, filename)
[docs]def get_share_file(package, datadir, filename): """Creates the full path of a file to be found in the share directory of a package """ packagedir = get_shared_directory_path(package) fullpath = os.path.join(packagedir, datadir) # check that it exists if os.path.isdir(fullpath) == False: raise ValueError("The directory %s in package %s does not seem to exist" % (packagedir, fullpath)) filename_path = os.path.join(fullpath, filename) if os.path.isfile(filename_path)==False: correct_files = [x for x in os.listdir(fullpath) if os.path.isfile(x)] msg = "The file %s does not exists. Correct filenames found in %s/%s are:\n" % (filename_path, package, datadir) for f in correct_files: msg += "%s\n" % f raise ValueError(msg) return filename_path