This file is indexed.

/usr/lib/python2.7/dist-packages/dirspec/utils.py is in python-dirspec 13.10-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
# -*- coding: utf-8 -*-
#
# Copyright 2011-2012 Canonical Ltd.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License version 3
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
"""Utilities for multiplatform support of XDG directory handling."""

from __future__ import unicode_literals, print_function

import errno
import os
import sys

__all__ = ['user_home',
           'default_cache_home',
           'default_config_home',
           'default_config_path',
           'default_data_home',
           'default_data_path',
           'get_env_path',
           'get_program_path',
           'unicode_path',
           ]


def _get_exe_path_frozen_win32(exe_name):
    """Get path to the helper .exe on packaged windows."""
    # all the .exes are in the same place on windows:
    cur_exec_path = os.path.abspath(sys.executable)
    exe_dir = os.path.dirname(cur_exec_path)
    return os.path.join(exe_dir, exe_name + ".exe")


def _get_exe_path_frozen_darwin(exe_name, app_names):
    """Get path to the sub-app executable on packaged darwin."""

    sub_app_name = app_names[exe_name]
    main_app_dir = "".join(__file__.partition(".app")[:-1])
    main_app_resources_dir = os.path.join(main_app_dir,
                                          "Contents",
                                          "Resources")
    exe_bin = os.path.join(main_app_resources_dir,
                           sub_app_name,
                           "Contents", "MacOS",
                           exe_name)
    return exe_bin


def get_program_path(program_name, *args, **kwargs):
    """Given a program name, returns the path to run that program.

    Raises OSError if the program is not found.

    :param program_name: The name of the program to find. For darwin and win32
        platforms, the behavior is changed slightly, when sys.frozen is set,
        to look in the packaged program locations for the program.
    :param search_dirs: A list of directories to look for the program in. This
        is only available as a keyword argument.
    :param app_names: A dict of program names mapped to sub-app names. Used
        for discovering paths in embedded .app bundles on the darwin platform.
        This is only available as a keyword argument.
    :return: The path to the discovered program.
    """
    search_dirs = kwargs.get('fallback_dirs', None)
    app_names = kwargs.get('app_names', None)

    if getattr(sys, "frozen", None) is not None:
        if sys.platform == 'win32':
            program_path = _get_exe_path_frozen_win32(program_name)
        elif sys.platform == 'darwin':
            program_path = _get_exe_path_frozen_darwin(program_name,
                                                       app_names)
        else:
            raise Exception("Unsupported platform for frozen execution: %r" %
                            sys.platform)
    else:
        if search_dirs is not None:
            for dirname in search_dirs:
                program_path = os.path.join(dirname, program_name)
                if os.path.exists(program_path):
                    return program_path
        else:
            # Check in normal system $PATH, if no fallback dirs specified
            from distutils.spawn import find_executable
            program_path = find_executable(program_name)

    if program_path is None or not os.path.exists(program_path):
        raise OSError(errno.ENOENT,
                      "Could not find executable %r" % program_name)

    return program_path


def get_env_path(key, default):
    """Get a UTF-8 encoded path from an environment variable."""
    if key in os.environ:
        # on windows, environment variables are mbcs bytes
        # so we must turn them into utf-8 Syncdaemon paths
        try:
            path = os.environb.get(key.encode('utf-8'))
        except AttributeError:
            path = os.environ[key]
        return path.decode(sys.getfilesystemencoding()).encode('utf-8')
    else:
        if not isinstance(default, bytes):
            return default.encode('utf-8')
        return default


def unicode_path(utf8path):
    """Turn an utf8 path into a unicode path."""
    if isinstance(utf8path, bytes):
        return utf8path.decode("utf-8")
    return utf8path


def get_special_folders():
    """ Routine to grab all the Windows Special Folders locations.

    If successful, returns dictionary
    of shell folder locations indexed on Windows keyword for each;
    otherwise, returns an empty dictionary.
    """
    # pylint: disable=W0621, F0401, E0611
    special_folders = {}

    if sys.platform == 'win32':
        from win32com.shell import shell, shellcon
        # CSIDL_LOCAL_APPDATA = C:\Users\<username>\AppData\Local
        # CSIDL_PROFILE = C:\Users\<username>
        # CSIDL_COMMON_APPDATA = C:\ProgramData
        # More information on these constants at
        # http://msdn.microsoft.com/en-us/library/bb762494

        # per http://msdn.microsoft.com/en-us/library/windows/desktop/bb762181,
        # SHGetFolderPath is deprecated, replaced by SHGetKnownFolderPath
        # (http://msdn.microsoft.com/en-us/library/windows/desktop/bb762188)
        def get_path(name):
            return shell.SHGetFolderPath(0, getattr(shellcon, name),
                                         None, 0).encode('utf8')
        special_folders['Personal'] = get_path("CSIDL_PROFILE")
        special_folders['Local AppData'] = get_path("CSIDL_LOCAL_APPDATA")
        special_folders['AppData'] = os.path.dirname(
            special_folders['Local AppData'])
        special_folders['Common AppData'] = get_path("CSIDL_COMMON_APPDATA")

    return special_folders


# pylint: disable=C0103
if sys.platform == 'win32':
    special_folders = get_special_folders()
    user_home = special_folders['Personal']
    default_config_path = special_folders['Common AppData']
    default_config_home = special_folders['Local AppData']
    default_data_path = os.path.join(default_config_path, b'xdg')
    default_data_home = os.path.join(default_config_home, b'xdg')
    default_cache_home = os.path.join(default_data_home, b'cache')
elif sys.platform == 'darwin':
    user_home = os.path.expanduser(b'~')
    default_cache_home = os.path.join(user_home, b'Library', b'Caches')
    default_config_path = b'/Library/Preferences:/etc/xdg'
    default_config_home = os.path.join(user_home, b'Library', b'Preferences')
    default_data_path = b':'.join([b'/Library/Application Support',
                                   b'/usr/local/share',
                                   b'/usr/share'])
    default_data_home = os.path.join(user_home, b'Library',
                                     b'Application Support')
else:
    user_home = os.path.expanduser(b'~')
    default_cache_home = os.path.join(user_home,
                                      b'.cache')
    default_config_path = b'/etc/xdg'
    default_config_home = os.path.join(user_home,
                                       b'.config')
    default_data_path = b'/usr/local/share:/usr/share'
    default_data_home = os.path.join(user_home,
                                     b'.local', b'share')