def test_download_release_from_pypi_with_existing_package(self, get_connection_mock, request_mock): from papaye.factories import repository_root_factory from papaye.models import Package, Release, ReleaseFile from papaye.tasks.download import download_release_from_pypi request = get_current_request() get_connection_mock.return_value = self.conn json_response = open(get_resource('pyramid.json'), 'rb') release_file_content = open(get_resource('pyramid-1.5.tar.gz'), 'rb') request_mock.side_effect = [ FakeGRequestResponse(200, b'', 'http://pypi.python.org/simple/pyramid/'), FakeGRequestResponse(200, json_response.read()), FakeGRequestResponse(200, release_file_content.read()), ] root = repository_root_factory(self.conn) package = Package('pyramid') release = Release('1.0', '1.0', metadata={}) release_file = ReleaseFile('pyramid-1.0.tar.gz', b'') root['pyramid'] = package root['pyramid']['1.0'] = release root['pyramid']['1.0']['pyramid-1.0.tar.gz']= release_file download_release_from_pypi(request.registry.settings, 'pyramid', '1.5') self.assertEqual(request_mock.call_count, 3) assert request_mock.call_count == 3 assert len(list(root['pyramid'])) == 2
def test_download_release_from_pypi(self, get_connection_mock, request_mock): from papaye.tasks.download import download_release_from_pypi from papaye.factories import repository_root_factory request = get_current_request() get_connection_mock.return_value = self.conn json_response = open(get_resource('pyramid.json'), 'rb') release_file_content = open(get_resource('pyramid-1.5.tar.gz'), 'rb') request_mock.side_effect = [ FakeGRequestResponse(200, b'', 'http://pypi.python.org/simple/pyramid/'), FakeGRequestResponse(200, json_response.read()), FakeGRequestResponse(200, release_file_content.read()), ] download_release_from_pypi(request.registry.settings, 'pyramid', '1.5') self.assertEqual(request_mock.call_count, 3) root = repository_root_factory(self.conn) self.assertIn('pyramid', root) self.assertIn('1.5', root['pyramid'].releases) self.assertIn('pyramid-1.5.tar.gz', root['pyramid']['1.5'].release_files) release_file = root['pyramid']['1.5']['pyramid-1.5.tar.gz'] self.assertEqual(release_file.md5_digest, "8747658dcbab709a9c491e43d3b0d58b") self.assertEqual(release_file.filename, "pyramid-1.5.tar.gz") self.assertEqual(release_file.size, 2413504) self.assertEqual(list(root['pyramid'].releases.keys()), ['1.5', ])
def test_download_release_from_pypi(self, get_connection_mock, request_mock): from papaye.tasks.download import download_release_from_pypi get_connection_mock.return_value = self.root json_request_response = open(get_resource('pyramid1.4.json'), 'rb') release_file_content = open(get_resource('pyramid-1.5.tar.gz'), 'rb') request_mock.side_effect = [ FakeGRequestResponse(200, json_request_response.read()), FakeGRequestResponse(200, release_file_content.read()), ] download_release_from_pypi(self.conn.db(), 'pyramid', '1.5', 'pyramid-1.5.tar.gz') self.assertEqual(request_mock.call_count, 2) self.assertIn('pyramid', self.root) self.assertIn('1.5', self.root['pyramid'].releases) self.assertIn('pyramid-1.5.tar.gz', self.root['pyramid']['1.5'].release_files) release_file = self.root['pyramid']['1.5']['pyramid-1.5.tar.gz'] self.assertEqual(release_file.md5_digest, "8747658dcbab709a9c491e43d3b0d58b") self.assertEqual(release_file.filename, "pyramid-1.5.tar.gz") self.assertEqual(release_file.size, 2413504) self.assertEqual(list(self.root['pyramid'].releases.keys()), ['1.5', ]) assert self.root['pyramid']['1.5'].metadata is not None assert self.root['pyramid'].__parent__ is self.root assert self.root['pyramid']['1.5'].__parent__ is self.root['pyramid'] assert self.root['pyramid']['1.5']['pyramid-1.5.tar.gz'].__parent__ is self.root['pyramid']['1.5'] assert len(list(self.root['pyramid'])) == 1
def test_download_release_from_pypi(self, get_connection_mock, request_mock): from papaye.tasks.download import download_release_from_pypi from papaye.factories import repository_root_factory request = get_current_request() get_connection_mock.return_value = self.conn json_response = open(get_resource('pyramid.json'), 'rb') release_file_content = open(get_resource('pyramid-1.5.tar.gz'), 'rb') request_mock.side_effect = [ FakeGRequestResponse(200, b'', 'http://pypi.python.org/simple/pyramid/'), FakeGRequestResponse(200, json_response.read()), FakeGRequestResponse(200, release_file_content.read()), ] download_release_from_pypi(request.registry.settings, 'pyramid', '1.5') self.assertEqual(request_mock.call_count, 3) root = repository_root_factory(self.conn) self.assertIn('pyramid', root) self.assertIn('1.5', root['pyramid'].releases) self.assertIn('pyramid-1.5.tar.gz', root['pyramid']['1.5'].release_files) release_file = root['pyramid']['1.5']['pyramid-1.5.tar.gz'] self.assertEqual(release_file.md5_digest, "8747658dcbab709a9c491e43d3b0d58b") self.assertEqual(release_file.filename, "pyramid-1.5.tar.gz") self.assertEqual(release_file.size, 2413504) self.assertEqual(list(root['pyramid'].releases.keys()), ['1.5', ]) assert root['pyramid']['1.5'].metadata is not None assert root['pyramid'].__parent__ is root assert root['pyramid']['1.5'].__parent__ is root['pyramid'] assert root['pyramid']['1.5']['pyramid-1.5.tar.gz'].__parent__ is root['pyramid']['1.5']
def setUp(self): self.request = testing.DummyRequest() self.blob_dir = set_database_connection(self.request) settings = disable_cache() self.config = testing.setUp(request=self.request, settings=settings) with open(get_resource('pyramid.json'), 'rb') as pyramid_json: self.pypi_response = FakeGRequestResponse(200, pyramid_json.read())
def test__init__(self): from papaye.models import ReleaseFile with open(get_resource('pyramid-1.5.tar.gz'), 'rb') as tar_gz: release_file = ReleaseFile('pyramid-1.5.tar.gz', tar_gz.read()) self.assertEqual(release_file.size, 2413504)
def test_instanciate_local(self): from papaye.models import ReleaseFile, STATUS with open(get_resource('pyramid-1.5.tar.gz'), 'rb') as tar_gz: result = ReleaseFile('release file', tar_gz.read(), status=STATUS.local) assert hasattr(result, 'status') assert result.status == STATUS.local
def test_deserialize_from_setuptools(self): # Test response with open(get_resource('papaye_setuptools.json'), 'r') as json_file: cstruct = json.loads(json_file.read()) from papaye.schemas import Metadata schema = Metadata() expected_keys = sorted([ 'version', 'author', 'author_email', 'home_page', 'keywords', 'license', 'summary', 'maintainer', 'maintainer_email', 'description', 'platform', 'classifiers', 'name', ]) expected_classifiers = [ "Programming Language :: Python", "Framework :: Pyramid", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: WSGI :: Application", ] result = schema.deserialize(cstruct) self.assertIsNotNone(result) self.assertIsInstance(result, dict) self.assertEqual(expected_keys, sorted([key for key in result.keys()])) self.assertEqual(result['version'], '0.1.3-dev') self.assertEqual(result['author'], 'Romain Commandé') self.assertEqual(result['author_email'], '*****@*****.**') self.assertEqual(result['home_page'], 'https://github.com/rcommande/papaye') self.assertEqual(result['keywords'], ['web', 'wsgi', 'bfg', 'pylons', 'pyramid']) self.assertEqual(result['license'], 'UNKNOWN') self.assertEqual(result['summary'], cstruct['summary']) self.assertEqual(result['maintainer'], None) self.assertEqual(result['maintainer_email'], None) self.assertEqual( result['description'], { 'html': True, 'content': publish_parts(cstruct['description'], writer_name='html')['fragment'], } ) self.assertEqual(result['platform'], 'UNKNOWN') self.assertEqual(result['classifiers'], expected_classifiers) self.assertEqual(result['name'], 'papaye')
def test_download_release_from_pypi_with_existing_package(self, request_mock): from papaye.factories import repository_root_factory from papaye.models import Package, Release, ReleaseFile from papaye.tasks.download import download_release_from_pypi json_request_response = open(get_resource('pyramid1.4.json'), 'rb') release_file_content = open(get_resource('pyramid-1.5.tar.gz'), 'rb') request_mock.side_effect = [ FakeGRequestResponse(200, json_request_response.read()), FakeGRequestResponse(200, release_file_content.read()), ] root = repository_root_factory(self.conn) package = Package('pyramid') release = Release('1.0', '1.0', metadata={}) release_file = ReleaseFile('pyramid-1.0.tar.gz', b'') root['pyramid'] = package root['pyramid']['1.0'] = release root['pyramid']['1.0']['pyramid-1.0.tar.gz'] = release_file download_release_from_pypi(root, 'pyramid', '1.5', 'pyramid-1.5.tar.gz') assert request_mock.call_count == 2 assert len(list(root['pyramid'])) == 2
def test_download_release_from_pypi_different_metadata(self, get_connection_mock, request_mock, md5mock): from papaye.models import Package, Release, ReleaseFile from papaye.tasks.download import download_release_from_pypi get_connection_mock.return_value = self.root class FakeHexdigestMethod(object): def __init__(self, *args, **kwargs): pass def hexdigest(self): return 'd72b664cf3852570faa44a81eb0e448b' md5mock.return_value = FakeHexdigestMethod() json_request_response = open(get_resource('pyramid1.4.json'), 'rb') release_file_content = open(get_resource('pyramid-1.5.tar.gz'), 'rb') request_mock.side_effect = [ FakeGRequestResponse(200, json_request_response.read()), FakeGRequestResponse(200, release_file_content.read()), ] root = self.root package = Package('pyramid') release = Release('1.5', '1.5', metadata={'version': '1.5'}, deserialize_metadata=True) release_file = ReleaseFile('pyramid-1.5.tar.gz', b'') root['pyramid'] = package root['pyramid']['1.5'] = release root['pyramid']['1.5']['pyramid-1.5.tar.gz'] = release_file transaction.commit() download_release_from_pypi(root, 'pyramid', '1.4', 'pyramid-1.4.tar.gz') assert request_mock.call_count == 2 assert md5mock.call_count == 1 assert len(list(root['pyramid'])) == 2 assert '1.4' == root['pyramid']['1.4'].metadata['version'] existing_version = root['pyramid']['1.5'].metadata['version'] assert existing_version != root['pyramid']['1.4'].metadata['version']
def test_download_release_from_pypi_with_bad_md5(self, request_mock): from papaye.factories import repository_root_factory from papaye.tasks.download import download_release_from_pypi json_request_response = open(get_resource('pyramid1.4.json'), 'rb') release_file_content = io.BytesIO(b'corrupted_file') request_mock.side_effect = [ FakeGRequestResponse(200, json_request_response.read()), FakeGRequestResponse(200, release_file_content.read()), ] root = repository_root_factory(self.conn) download_release_from_pypi(root, 'pyramid', '1.5', 'pyramid-1.5.tar.gz') self.assertEqual(request_mock.call_count, 2) assert root._p_status == 'unsaved'
def test_clone(self): from papaye.models import ReleaseFile with open(get_resource('pyramid-1.5.tar.gz'), 'rb') as tar_gz: release_file = ReleaseFile('pyramid-1.5.tar.gz', tar_gz.read()) result = ReleaseFile.clone(release_file) assert result is not release_file assert result.filename == release_file.filename assert result.md5_digest == release_file.md5_digest assert result.upload_date == release_file.upload_date assert result.content.open().read() == release_file.content.open().read() assert result.content_type == release_file.content_type assert result.size == release_file.size assert result.__name__ == release_file.__name__ assert id(result) != id(release_file)
def test_deserialize_from_pypi(self): # Test response with open(get_resource('pyramid.json'), 'r') as json_file: cstruct = json.loads(json_file.read())['info'] from papaye.schemas import Metadata schema = Metadata() expected_keys = sorted([ 'version', 'author', 'author_email', 'home_page', 'keywords', 'license', 'summary', 'maintainer', 'maintainer_email', 'description', 'platform', 'classifiers', 'name', ]) result = schema.deserialize(cstruct) self.assertIsNotNone(result) self.assertIsInstance(result, dict) self.assertEqual(expected_keys, sorted([key for key in result.keys()])) self.assertEqual(result['version'], '1.5') self.assertEqual(result['author'], 'Chris McDonough, Agendaless Consulting') self.assertEqual(result['author_email'], '*****@*****.**') self.assertEqual(result['home_page'], 'http://pylonsproject.org') self.assertEqual(result['keywords'], ['web', 'wsgi', 'pylons', 'pyramid']) self.assertEqual(result['license'], 'BSD-derived (http://www.repoze.org/LICENSE.txt)') self.assertEqual(result['summary'], cstruct['summary']) self.assertEqual(result['maintainer'], None) self.assertEqual(result['maintainer_email'], None) self.assertEqual( result['description'], { 'html': True, 'content': publish_parts(cstruct['description'], writer_name='html')['fragment'], } ) self.assertEqual(result['platform'], 'UNKNOWN') self.assertEqual(result['classifiers'], cstruct['classifiers']) self.assertEqual(result['name'], 'pyramid')
def test_download_release_from_pypi_with_bad_md5(self, get_connection_mock, request_mock): from papaye.tasks.download import download_release_from_pypi from papaye.factories import repository_root_factory request = get_current_request() get_connection_mock.return_value = self.conn json_response = open(get_resource('pyramid.json'), 'rb') release_file_content = io.BytesIO(b'corrupted_file') request_mock.side_effect = [ FakeGRequestResponse(200, b'', 'http://pypi.python.org/simple/pyramid/'), FakeGRequestResponse(200, json_response.read()), FakeGRequestResponse(200, release_file_content.read()), ] download_release_from_pypi(request.registry.settings, 'pyramid', '1.5') self.assertEqual(request_mock.call_count, 3) assert 'pyramid' not in self.root
def test_download_release_from_pypi_with_bad_md5(self, get_connection_mock, request_mock): from papaye.tasks.download import download_release_from_pypi from papaye.factories import repository_root_factory request = get_current_request() get_connection_mock.return_value = self.conn json_response = open(get_resource('pyramid.json'), 'rb') release_file_content = io.BytesIO(b'corrupted_file') request_mock.side_effect = [ FakeGRequestResponse(200, b'', 'http://pypi.python.org/simple/pyramid/'), FakeGRequestResponse(200, json_response.read()), FakeGRequestResponse(200, release_file_content.read()), ] self.assertRaises(IOError, download_release_from_pypi, request.registry.settings, 'pyramid', '1.5') self.assertEqual(request_mock.call_count, 3) root = repository_root_factory(self.conn) self.assertNotIn('pyramid', root)