comparison venv/lib/python2.7/site-packages/pip/req/req_file.py @ 0:d67268158946 draft

planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
author bcclaywell
date Mon, 12 Oct 2015 17:43:33 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:d67268158946
1 from __future__ import absolute_import
2
3 import os
4 import re
5
6 from pip._vendor.six.moves.urllib import parse as urllib_parse
7
8 from pip.download import get_file_content
9 from pip.req.req_install import InstallRequirement
10 from pip.utils import normalize_name
11
12 _scheme_re = re.compile(r'^(http|https|file):', re.I)
13
14
15 def _remove_prefixes(line, short_prefix, long_prefix):
16 if line.startswith(short_prefix):
17 return line[len(short_prefix):].lstrip()
18 else:
19 return _remove_prefix(line, long_prefix)
20
21
22 def _remove_prefix(line, prefix):
23 """Remove the prefix and eventually one '=' or spaces"""
24 return re.sub(r'\s*=?\s*', '', line[len(prefix):])
25
26
27 def parse_requirements(filename, finder=None, comes_from=None, options=None,
28 session=None):
29 if session is None:
30 raise TypeError(
31 "parse_requirements() missing 1 required keyword argument: "
32 "'session'"
33 )
34
35 skip_match = None
36 skip_regex = options.skip_requirements_regex if options else None
37 if skip_regex:
38 skip_match = re.compile(skip_regex)
39 reqs_file_dir = os.path.dirname(os.path.abspath(filename))
40 filename, content = get_file_content(
41 filename,
42 comes_from=comes_from,
43 session=session,
44 )
45 for line_number, line in enumerate(content.splitlines(), 1):
46 line = line.strip()
47
48 # Remove comments from file and all spaces before it
49 line = re.sub(r"(^|\s)+#.*$", "", line)
50
51 if not line:
52 continue
53 if skip_match and skip_match.search(line):
54 continue
55 if line.startswith(('-r', '--requirement')):
56 req_url = _remove_prefixes(line, '-r', '--requirement')
57 if _scheme_re.search(filename):
58 # Relative to a URL
59 req_url = urllib_parse.urljoin(filename, req_url)
60 elif not _scheme_re.search(req_url):
61 req_url = os.path.join(os.path.dirname(filename), req_url)
62 for item in parse_requirements(
63 req_url, finder,
64 comes_from=filename,
65 options=options,
66 session=session):
67 yield item
68 elif line.startswith(('-Z', '--always-unzip')):
69 # No longer used, but previously these were used in
70 # requirement files, so we'll ignore.
71 pass
72 elif line.startswith(('-f', '--find-links')):
73 find_links = _remove_prefixes(line, '-f', '--find-links')
74 # FIXME: it would be nice to keep track of the source of
75 # the find_links:
76 # support a find-links local path relative to a requirements file
77 relative_to_reqs_file = os.path.join(reqs_file_dir, find_links)
78 if os.path.exists(relative_to_reqs_file):
79 find_links = relative_to_reqs_file
80 if finder:
81 finder.find_links.append(find_links)
82 elif line.startswith(('-i', '--index-url')):
83 index_url = _remove_prefixes(line, '-i', '--index-url')
84 if finder:
85 finder.index_urls = [index_url]
86 elif line.startswith('--extra-index-url'):
87 line = _remove_prefix(line, '--extra-index-url')
88 if finder:
89 finder.index_urls.append(line)
90 elif line.startswith('--use-wheel'):
91 # Default in 1.5
92 pass
93 elif line.startswith('--no-use-wheel'):
94 if finder:
95 finder.use_wheel = False
96 elif line.startswith('--no-index'):
97 if finder:
98 finder.index_urls = []
99 elif line.startswith("--allow-external"):
100 line = _remove_prefix(line, '--allow-external')
101 if finder:
102 finder.allow_external |= set([normalize_name(line).lower()])
103 elif line.startswith("--allow-all-external"):
104 if finder:
105 finder.allow_all_external = True
106 # Remove in 7.0
107 elif line.startswith("--no-allow-external"):
108 pass
109 # Remove in 7.0
110 elif line.startswith("--no-allow-insecure"):
111 pass
112 # Remove after 7.0
113 elif line.startswith("--allow-insecure"):
114 line = _remove_prefix(line, '--allow-insecure')
115 if finder:
116 finder.allow_unverified |= set([normalize_name(line).lower()])
117 elif line.startswith("--allow-unverified"):
118 line = _remove_prefix(line, '--allow-unverified')
119 if finder:
120 finder.allow_unverified |= set([normalize_name(line).lower()])
121 else:
122 comes_from = '-r %s (line %s)' % (filename, line_number)
123 if line.startswith(('-e', '--editable')):
124 editable = _remove_prefixes(line, '-e', '--editable')
125 req = InstallRequirement.from_editable(
126 editable,
127 comes_from=comes_from,
128 default_vcs=options.default_vcs if options else None,
129 isolated=options.isolated_mode if options else False,
130 )
131 else:
132 req = InstallRequirement.from_line(
133 line,
134 comes_from,
135 isolated=options.isolated_mode if options else False,
136 )
137 yield req