diff --git a/ubuntutools/archive.py b/ubuntutools/archive.py index fcb206b..be93243 100644 --- a/ubuntutools/archive.py +++ b/ubuntutools/archive.py @@ -154,6 +154,10 @@ class SourcePackage(object): self.version = debian.debian_support.Version(version) + # uses default proxies from the environment + proxy = urllib2.ProxyHandler() + self.url_opener = urllib2.build_opener(proxy) + @property def lp_spph(self): "Return the LP Source Package Publishing History entry" @@ -317,11 +321,8 @@ class SourcePackage(object): if parsed.scheme == 'file': in_ = open(parsed.path, 'r') else: - # uses default proxy from environment - proxy = urllib2.ProxyHandler() - opener = urllib2.build_opener(proxy) try: - in_ = opener.open(url) + in_ = self.url_opener.open(url) except urllib2.URLError: return False @@ -499,7 +500,7 @@ class DebianSourcePackage(SourcePackage): "python-simplejson") try: - srcfiles = json.load(urllib2.urlopen( + srcfiles = json.load(self.url_opener.open( 'http://snapshot.debian.org' '/mr/package/%s/%s/srcfiles?fileinfo=1' % (self.source, self.version.full_version))) diff --git a/ubuntutools/test/test_archive.py b/ubuntutools/test/test_archive.py index f828280..c45cbab 100644 --- a/ubuntutools/test/test_archive.py +++ b/ubuntutools/test/test_archive.py @@ -1,6 +1,6 @@ # test_archive.py - Test suite for ubuntutools.archive # -# Copyright (C) 2010, Stefano Rivera +# Copyright (C) 2010-2012, Stefano Rivera # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -36,6 +36,7 @@ from ubuntutools.test import unittest from ubuntutools.test.example_package import ExamplePackage + def setUpModule(): if not os.path.exists('test-data/example-0.1-1.dsc'): ex_pkg = ExamplePackage() @@ -67,7 +68,7 @@ class DscVerificationTestCase(mox.MoxTestBase, unittest.TestCase): fn = 'test-data/example_1.0.orig.tar.gz' with open(fn, 'rb') as f: data = f.read() - data = data[:-1] + chr(ord(data[-1]) ^ 8) + data = data[:-1] + chr(ord(data[-1]) ^ 8) self.mox.StubOutWithMock(__builtin__, 'open') open(fn, 'rb').AndReturn(StringIO.StringIO(data)) self.mox.ReplayAll() @@ -95,9 +96,6 @@ class LocalSourcePackageTestCase(mox.MoxTestBase, unittest.TestCase): self.mox.StubOutWithMock(ubuntutools.archive, 'Distribution') self.mox.StubOutWithMock(ubuntutools.archive, 'rmadison') - self.real_urlopen = urllib2.urlopen - self.mox.StubOutWithMock(urllib2, 'urlopen') - self.real_http = httplib2.Http() self.mox.StubOutWithMock(httplib2, 'Http') self.mock_http = self.mox.CreateMock(httplib2.Http) @@ -115,7 +113,7 @@ class LocalSourcePackageTestCase(mox.MoxTestBase, unittest.TestCase): if destname is None: destname = os.path.basename(url) destpath = os.path.join(os.path.abspath('test-data'), destname) - return self.real_urlopen('file://' + destpath) + return urllib2.urlopen('file://' + destpath) def urlopen_file(self, filename): "Wrapper for urlopen_proxy for named files" @@ -195,14 +193,16 @@ class LocalSourcePackageTestCase(mox.MoxTestBase, unittest.TestCase): self.mock_http.request('https://launchpad.net/%s/+archive/primary/' '+files/example_1.0-1.dsc' % dist ).WithSideEffects(self.request_proxy) - urllib2.urlopen(mirror + urlbase + 'example_1.0.orig.tar.gz' + url_opener = self.mox.CreateMock(urllib2.OpenerDirector) + url_opener.open(mirror + urlbase + 'example_1.0.orig.tar.gz' ).WithSideEffects(self.urlopen_proxy) - urllib2.urlopen(mirror + urlbase + 'example_1.0-1.debian.tar.gz' + url_opener.open(mirror + urlbase + 'example_1.0-1.debian.tar.gz' ).WithSideEffects(self.urlopen_proxy) self.mox.ReplayAll() pkg = self.SourcePackage('example', '1.0-1', 'main', workdir=self.workdir) + pkg.url_opener = url_opener pkg.pull() def test_mirrors(self): @@ -213,18 +213,20 @@ class LocalSourcePackageTestCase(mox.MoxTestBase, unittest.TestCase): httplib2.Http().AndReturn(self.mock_http) self.mock_http.request(lpbase + 'example_1.0-1.dsc' ).WithSideEffects(self.request_proxy) - urllib2.urlopen(mirror + urlbase + 'example_1.0.orig.tar.gz' + url_opener = self.mox.CreateMock(urllib2.OpenerDirector) + url_opener.open(mirror + urlbase + 'example_1.0.orig.tar.gz' ).WithSideEffects(self.urlopen_null) - urllib2.urlopen(master + urlbase + 'example_1.0.orig.tar.gz' + url_opener.open(master + urlbase + 'example_1.0.orig.tar.gz' ).WithSideEffects(self.urlopen_404) - urllib2.urlopen(lpbase + 'example_1.0.orig.tar.gz' + url_opener.open(lpbase + 'example_1.0.orig.tar.gz' ).WithSideEffects(self.urlopen_proxy) - urllib2.urlopen(mirror + urlbase + 'example_1.0-1.debian.tar.gz' + url_opener.open(mirror + urlbase + 'example_1.0-1.debian.tar.gz' ).WithSideEffects(self.urlopen_proxy) self.mox.ReplayAll() pkg = self.SourcePackage('example', '1.0-1', 'main', workdir=self.workdir, mirrors=[mirror]) + pkg.url_opener = url_opener pkg.pull() def test_dsc_missing(self): @@ -253,31 +255,33 @@ class DebianLocalSourcePackageTestCase(LocalSourcePackageTestCase): httplib2.Http().AndReturn(self.mock_http) self.mock_http.request(lpbase + 'example_1.0-1.dsc' ).WithSideEffects(self.request_proxy) - urllib2.urlopen(debian_mirror + base + 'example_1.0.orig.tar.gz' + url_opener = self.mox.CreateMock(urllib2.OpenerDirector) + url_opener.open(debian_mirror + base + 'example_1.0.orig.tar.gz' ).WithSideEffects(self.urlopen_null) - urllib2.urlopen(debsec_mirror + base + 'example_1.0.orig.tar.gz' + url_opener.open(debsec_mirror + base + 'example_1.0.orig.tar.gz' ).WithSideEffects(self.urlopen_404) - urllib2.urlopen(debian_master + base + 'example_1.0.orig.tar.gz' + url_opener.open(debian_master + base + 'example_1.0.orig.tar.gz' ).WithSideEffects(self.urlopen_404) - urllib2.urlopen(debsec_master + base + 'example_1.0.orig.tar.gz' + url_opener.open(debsec_master + base + 'example_1.0.orig.tar.gz' ).WithSideEffects(self.urlopen_404) - urllib2.urlopen(lpbase + 'example_1.0.orig.tar.gz' + url_opener.open(lpbase + 'example_1.0.orig.tar.gz' ).WithSideEffects(self.urlopen_404) - urllib2.urlopen('http://snapshot.debian.org/mr/package/example/1.0-1/' + url_opener.open('http://snapshot.debian.org/mr/package/example/1.0-1/' 'srcfiles?fileinfo=1' ).WithSideEffects(lambda x: StringIO.StringIO( '{"fileinfo": {"hashabc": [{"name": "example_1.0.orig.tar.gz"}]}}' )) - urllib2.urlopen('http://snapshot.debian.org/file/hashabc' + url_opener.open('http://snapshot.debian.org/file/hashabc' ).WithSideEffects(self.urlopen_file( 'example_1.0.orig.tar.gz')) - urllib2.urlopen(debian_mirror + base + 'example_1.0-1.debian.tar.gz' + url_opener.open(debian_mirror + base + 'example_1.0-1.debian.tar.gz' ).WithSideEffects(self.urlopen_proxy) self.mox.ReplayAll() pkg = self.SourcePackage('example', '1.0-1', 'main', workdir=self.workdir, mirrors=[debian_mirror, debsec_mirror]) + pkg.url_opener = url_opener pkg.pull() pkg.unpack() @@ -291,9 +295,10 @@ class DebianLocalSourcePackageTestCase(LocalSourcePackageTestCase): httplib2.Http().AndReturn(self.mock_http) self.mock_http.request(mirror + base + 'example_1.0-1.dsc' ).WithSideEffects(self.request_proxy) - urllib2.urlopen(mirror + base + 'example_1.0.orig.tar.gz' + url_opener = self.mox.CreateMock(urllib2.OpenerDirector) + url_opener.open(mirror + base + 'example_1.0.orig.tar.gz' ).WithSideEffects(self.urlopen_proxy) - urllib2.urlopen(mirror + base + 'example_1.0-1.debian.tar.gz' + url_opener.open(mirror + base + 'example_1.0-1.debian.tar.gz' ).WithSideEffects(self.urlopen_proxy) def fake_gpg_info(self, message, keyrings=None): @@ -312,6 +317,7 @@ class DebianLocalSourcePackageTestCase(LocalSourcePackageTestCase): pkg = self.SourcePackage('example', '1.0-1', 'main', workdir=self.workdir, mirrors=[mirror]) + pkg.url_opener = url_opener pkg.pull() def test_dsc_badsig(self):