/usr/share/pyshared/paste/script/pluginlib.py is in python-pastescript 1.7.5-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 | # (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org)
# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
import os
import pkg_resources
def add_plugin(egg_info_dir, plugin_name):
"""
Add the plugin to the given distribution (or spec), in
.egg-info/paster_plugins.txt
"""
fn = os.path.join(egg_info_dir, 'paster_plugins.txt')
if not os.path.exists(fn):
lines = []
else:
f = open(fn)
lines = [l.strip() for l in f.readlines() if l.strip()]
f.close()
if plugin_name in lines:
# Nothing to do
return
lines.append(plugin_name)
if not os.path.exists(os.path.dirname(fn)):
os.makedirs(os.path.dirname(fn))
f = open(fn, 'w')
for line in lines:
f.write(line)
f.write('\n')
f.close()
def remove_plugin(egg_info_dir, plugin_name):
"""
Remove the plugin to the given distribution (or spec), in
.egg-info/paster_plugins.txt. Raises ValueError if the
plugin is not in the file.
"""
fn = os.path.join(egg_info_dir, 'paster_plugins.txt')
if not os.path.exists(fn):
raise ValueError(
"Cannot remove plugin from %s; file does not exist"
% fn)
f = open(fn)
lines = [l.strip() for l in f.readlines() if l.strip()]
f.close()
for line in lines:
# What about version specs?
if line.lower() == plugin_name.lower():
break
else:
raise ValueError(
"Plugin %s not found in file %s (from: %s)"
% (plugin_name, fn, lines))
lines.remove(line)
print 'writing', lines
f = open(fn, 'w')
for line in lines:
f.write(line)
f.write('\n')
f.close()
def find_egg_info_dir(dir):
while 1:
try:
filenames = os.listdir(dir)
except OSError:
# Probably permission denied or something
return None
for fn in filenames:
if (fn.endswith('.egg-info')
and os.path.isdir(os.path.join(dir, fn))):
return os.path.join(dir, fn)
parent = os.path.dirname(dir)
if parent == dir:
# Top-most directory
return None
dir = parent
def resolve_plugins(plugin_list):
found = []
while plugin_list:
plugin = plugin_list.pop()
try:
pkg_resources.require(plugin)
except pkg_resources.DistributionNotFound, e:
msg = '%sNot Found%s: %s (did you run python setup.py develop?)'
if str(e) != plugin:
e.args = (msg % (str(e) + ': ', ' for', plugin)),
else:
e.args = (msg % ('', '', plugin)),
raise
found.append(plugin)
dist = get_distro(plugin)
if dist.has_metadata('paster_plugins.txt'):
data = dist.get_metadata('paster_plugins.txt')
for add_plugin in parse_lines(data):
if add_plugin not in found:
plugin_list.append(add_plugin)
return map(get_distro, found)
def get_distro(spec):
return pkg_resources.get_distribution(spec)
def load_commands_from_plugins(plugins):
commands = {}
for plugin in plugins:
commands.update(pkg_resources.get_entry_map(
plugin, group='paste.paster_command'))
return commands
def parse_lines(data):
result = []
for line in data.splitlines():
line = line.strip()
if line and not line.startswith('#'):
result.append(line)
return result
def load_global_commands():
commands = {}
for p in pkg_resources.iter_entry_points('paste.global_paster_command'):
commands[p.name] = p
return commands
def egg_name(dist_name):
return pkg_resources.to_filename(pkg_resources.safe_name(dist_name))
def egg_info_dir(base_dir, dist_name):
all = []
for dir_extension in ['.'] + os.listdir(base_dir):
full = os.path.join(base_dir, dir_extension,
egg_name(dist_name)+'.egg-info')
all.append(full)
if os.path.exists(full):
return full
raise IOError("No egg-info directory found (looked in %s)"
% ', '.join(all))
|