Beispiel #1
0
    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
Beispiel #2
0
    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', ])
Beispiel #3
0
    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
Beispiel #4
0
    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']
Beispiel #5
0
 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())
Beispiel #6
0
 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())
Beispiel #7
0
    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)
Beispiel #8
0
    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)
Beispiel #9
0
    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
Beispiel #10
0
    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')
Beispiel #11
0
    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
Beispiel #12
0
    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']
Beispiel #13
0
    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'
Beispiel #14
0
    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)
Beispiel #15
0
    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')
Beispiel #16
0
    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
Beispiel #17
0
    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)