Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions tests/test_yolk_cli.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import unittest

import yolk.yolklib

class TestStdOut:
def test_object_initialization(self):
Expand Down Expand Up @@ -107,3 +110,7 @@ class TestMain:
def test_main(self):
pass # TODO: implement your test here

class TestYolkLib (unittest.TestCase):
def test_get_highest_version(self):
versions = ['2.2', '3.0.5', '1.3', '3.1.2', '1.3.4', '0.3', '3.1.1', '1.2.4']
self.assertEqual('3.1.2', yolk.yolklib.get_highest_version(versions))
48 changes: 31 additions & 17 deletions yolk/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -240,27 +240,41 @@ def show_updates(self):
#Check for every installed package
pkg_list = get_pkglist()
found = None
for pkg in pkg_list:

from multiprocessing import Process, Manager
manager = Manager()
def worker_function(pkg, result_list, index):
for (dist, active) in dists.get_distributions("all", pkg,
dists.get_highest_installed(pkg)):
(project_name, versions) = \
self.pypi.query_versions_pypi(dist.project_name)
if versions:

#PyPI returns them in chronological order,
#but who knows if its guaranteed in the API?
#Make sure we grab the highest version:

newest = get_highest_version(versions)
if newest != dist.version:

#We may have newer than what PyPI knows about

if pkg_resources.parse_version(dist.version) < \
pkg_resources.parse_version(newest):
found = True
print " %s %s (%s)" % (project_name, dist.version,
newest)
result_list[index] = (pkg, dist, project_name, versions)

outputs = manager.list([None for _ in pkg_list])
workers = []
for index, pkg in enumerate(pkg_list):
p = Process(target = worker_function, args=(pkg, outputs, index))
p.start()
workers.append(p)
for process in workers:
process.join()
for (pkg, dist, project_name, versions) in outputs:
if versions:

#PyPI returns them in chronological order,
#but who knows if its guaranteed in the API?
#Make sure we grab the highest version:

newest = get_highest_version(versions)
if newest != dist.version:

#We may have newer than what PyPI knows about

if pkg_resources.parse_version(dist.version) < \
pkg_resources.parse_version(newest):
found = True
print " %s %s (%s)" % (project_name, dist.version,
newest)
if not found and self.project_name:
self.logger.info("You have the latest version installed.")
elif not found:
Expand Down
13 changes: 8 additions & 5 deletions yolk/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,12 @@ def get_metadata(dist):
if not dist.has_metadata('PKG-INFO'):
return

msg = email.message_from_string(dist.get_metadata('PKG-INFO'))
metadata = {}
for header in [l for l in msg._headers]:
metadata[header[0]] = header[1]

try:
metadata = {}
msg = email.message_from_string(dist.get_metadata('PKG-INFO'))
for header in [l for l in msg._headers]:
metadata[header[0]] = header[1]
except IOError as e:
# no egg-file, installed using other package manager
pass
return metadata
2 changes: 1 addition & 1 deletion yolk/pypi.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ def package_releases(self, package_name):
return self.xmlrpc.package_releases(package_name)

def get_download_urls(self, package_name, version="", pkg_type="all"):
"""Query PyPI for pkg download URI for a packge"""
"""Query PyPI for pkg download URI for a package"""

if version:
versions = [version]
Expand Down
2 changes: 1 addition & 1 deletion yolk/yolklib.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ def get_highest_version(versions):
sorted_versions = []
for ver in versions:
sorted_versions.append((pkg_resources.parse_version(ver), ver))

sorted_versions = sorted(sorted_versions)
sorted_versions.reverse()
return sorted_versions[0][1]