Imported from SVN by Bitbucket

This commit is contained in:
2015-03-31 20:26:20 +00:00
committed by bitbucket
commit ceb7984dec
212 changed files with 49537 additions and 0 deletions

View File

@@ -0,0 +1,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))