Skip to content

Commit ae15760

Browse files
committed
BUGFIXES:
- fix status_message on ST2 - don't lose [extras,in,packages]
1 parent f2da61b commit ae15760

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

requirements.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def _fetch_packages():
8080
"""Does the actual package list fetch, returns a list of unicode names"""
8181
sublime.status_message("requirements.txt: listing packages...")
8282
packages = ServerProxy(get_pip_index()).list_packages()
83-
sublime.status_message("requirements.txt: got {}".format(len(packages)))
83+
sublime.status_message("requirements.txt: got {count}".format(count=len(packages)))
8484
if not isinstance(packages[0], unicode_type):
8585
packages = [pkg.decode("utf-8") for pkg in packages]
8686
CACHE.set("--packages--", packages, ttl=5 * 60)
@@ -148,6 +148,14 @@ def run(self):
148148
sublime.status_message("requirements.txt: cache cleared")
149149

150150

151+
def normalized_name(package_line):
152+
"""Remove extras from package name"""
153+
lower = package_line.lower()
154+
extras_match = re.search(r'\[(.*)\]', package_line)
155+
extras = extras_match.group(1) if extras_match else None
156+
return re.sub(r'\[.*\]', "", lower), extras
157+
158+
151159
class RequirementsAutoVersion(sublime_plugin.TextCommand):
152160
def run(self, edit, strict=False):
153161
if not requirements_view(self.view):
@@ -157,26 +165,30 @@ def run(self, edit, strict=False):
157165
pkg_dict = dict(((name.lower(), name) for name in packages))
158166

159167
for line_sel, line in self.selected_lines():
160-
lower_pkg_name = self.package_name(line).lower()
168+
lower_pkg_name, extras = normalized_name(self.package_name(line))
161169
if lower_pkg_name not in pkg_dict:
162170
continue
163171
real_name = pkg_dict[lower_pkg_name]
164172
sorted_releases = releases(real_name)
173+
if extras:
174+
full_name = "{name}[{extras}]".format(name=real_name, extras=extras)
175+
else:
176+
full_name = real_name
165177

166178
most_recent = sorted_releases[-1]
167179
if strict:
168180
version_string = self.strict_version(most_recent)
169181
else:
170182
version_string = self.non_strict_version(most_recent)
171183

172-
self.view.replace(edit, line_sel, real_name + version_string)
184+
self.view.replace(edit, line_sel, full_name + version_string)
173185

174186
def strict_version(self, most_recent):
175187
return "==" + most_recent
176188

177189
def non_strict_version(self, most_recent):
178190
next_major = str(int(most_recent.split(".", 1)[0]) + 1)
179-
next_version = ".".join([next_major] + ["0" for x in most_recent.split(".")[1:]])
191+
next_version = ".".join([next_major] + ["0" for _ in most_recent.split(".")[1:]])
180192
return ">=%s,<%s" % (most_recent, next_version)
181193

182194
def package_name(self, line):

0 commit comments

Comments
 (0)