Beispiel #1
0
def update_packages():
    """Update package information for all packages"""
    logging.info('Updated packages')
    for package in models.Package.objects.filter(is_local=False):
        logging.info('Updating package %s', package.name)
        get_package_data(package.name, package)
    logging.info('Complete')
Beispiel #2
0
    def get(self, request, slug, version=None):
        condition = Q()
        for name in get_search_names(slug):
            condition |= Q(name__iexact=name)

        try:
            package = models.Package.objects.get(condition)
        except ObjectDoesNotExist:
            package = get_package_data(slug)

        if package is None:
            raise Http404

        # Redirect if slug is not an exact match
        if slug != package.name:
            url = reverse('packages-simple:simple_detail', kwargs={
                'slug': package.name, 'version': version
            })
            return redirect(url)

        releases = package.releases
        if version and not package.is_local:
            releases = releases.filter(version=version)

            # Perhaps this version is new, refresh data
            if releases.count() == 0:
                get_package_data(slug, package)

        self.object = package
        context = self.get_context_data(
            object=self.object,
            releases=list(releases.all()))
        return self.render_to_response(context)
Beispiel #3
0
    def get(self, request, slug, version=None):
        try:
            package = models.Package.objects.get(name__iexact=slug)
        except ObjectDoesNotExist:
            package = get_package_data(slug)

        releases = package.releases
        if version:
            # check if the version requested is higher than the version pinned to this package.
            if version > package.version:
                # requested package version is higher than what is allowed, do nothing.
                releases = releases.filter(version=package.version)
            else:
                # requested version is allowable, so look for releases.
                releases = releases.filter(version=version)

            # Perhaps this version is new, refresh data
            if releases.count() == 0:
                get_package_data(slug, package)

        self.object = package
        context = self.get_context_data(
            object=self.object,
            releases=list(releases.all()))
        return self.render_to_response(context)
Beispiel #4
0
    def get(self, request, slug, version=None):
        condition = Q()
        for name in get_search_names(slug):
            condition |= Q(name__iexact=name)

        try:
            package = models.Package.objects.get(condition)
        except ObjectDoesNotExist:
            package = get_package_data(slug)

        if package is None:
            raise Http404

        # Redirect if slug is not an exact match
        if slug != package.name:
            url = reverse('packages-simple:simple_detail', kwargs={
                'slug': package.name, 'version': version
            })
            return redirect(url)

        releases = package.releases
        if version and not package.is_local:
            releases = releases.filter(version=version)

            # Perhaps this version is new, refresh data
            if releases.count() == 0:
                get_package_data(slug, package)

        self.object = package
        context = self.get_context_data(
            object=self.object,
            releases=list(releases.all()))
        return self.render_to_response(context)
Beispiel #5
0
def refresh(request, name):
    try:
        package = models.Package.objects.get(name__iexact=name)
    except ObjectDoesNotExist:
        package = None
    package = get_package_data(name, package)
    return redirect(package)
Beispiel #6
0
    def get(self, request, slug, version=None):
        try:
            package = models.Package.objects.get(name__iexact=slug)
        except ObjectDoesNotExist:
            package = get_package_data(slug)

        releases = package.releases
        if version:
            releases = releases.filter(version=version)

            # Perhaps this version is new, refresh data
            if releases.count() == 0:
                get_package_data(slug, package)

        self.object = package
        context = self.get_context_data(
            object=self.object,
            releases=list(releases.all()))
        return self.render_to_response(context)
Beispiel #7
0
    def test_get_package_data_wrong_case(self):
        from localshop.apps.packages.pypi import get_package_data

        with mock.patch('xmlrpclib.ServerProxy') as mock_obj:
            mock_obj.return_value = client = mock.Mock()

            def se_package_releases(name, show_hidden=False):
                """side_effect for package_releases"""
                if name == 'localshop':
                    return ['0.1']
                return []

            client.package_releases.side_effect = se_package_releases

            client.search.return_value = [{'name': 'localshop'}]

            client.release_data.return_value = {
                'maintainer': None,
                'requires_python': None,
                'maintainer_email': None,
                'cheesecake_code_kwalitee_id': None,
                'keywords': None,
                'package_url': 'http://pypi.python.org/pypi/localshop',
                'author': 'Michael van Tellingen',
                'author_email': '*****@*****.**',
                'download_url': 'UNKNOWN',
                'platform': 'UNKNOWN',
                'version': '0.1',
                'cheesecake_documentation_id': None,
                '_pypi_hidden': False,
                'description': "the-description",
                'release_url': 'http://pypi.python.org/pypi/localshop/0.1',
                '_pypi_ordering': 12,
                'classifiers': [],
                'name': 'django-cofingo',
                'bugtrack_url': None,
                'license': 'BSD',
                'summary': 'Short summary',
                'home_page': 'http://github.com/mvantellingen/localshop',
                'stable_version': None,
                'cheesecake_installability_id': None
            }

            client.package_urls.return_value = [{
                'comment_text':
                '',
                'downloads':
                1,
                'filename':
                'localshop-0.1.tar.gz',
                'has_sig':
                True,
                'md5_digest':
                '7ddf32e17a6ac5ce04a8ecbf782ca509',
                'packagetype':
                'sdist',
                'python_version':
                'source',
                'size':
                23232,
                'upload_time':
                datetime.datetime(2012, 2, 2, 11, 32, 00),
                'url':
                'http://pypi.python.org/packages/source/r/'
                'localshop/localshop-0.1.tar.gz'
            }]

            package = get_package_data('Localshop')

            client.search.called_with({'name': 'Localshop'})

        package = models.Package.objects.get(pk=package.pk)
        self.assertEqual(package.releases.count(), 1)
Beispiel #8
0
    def test_get_package_data_new(self):
        from localshop.apps.packages.pypi import get_package_data

        with mock.patch('xmlrpclib.ServerProxy') as mock_obj:
            mock_obj.return_value = client = mock.Mock()
            client.package_releases.return_value = ['0.1', '0.2']

            def package_urls_side_effect(name, version):
                return [{
                    'comment_text':
                    '',
                    'downloads':
                    1,
                    'filename':
                    'localshop-%s.tar.gz' % version,
                    'has_sig':
                    True,
                    'md5_digest':
                    '7ddf32e17a6ac5ce04a8ecbf782ca509',
                    'packagetype':
                    'sdist',
                    'python_version':
                    'source',
                    'size':
                    23232,
                    'upload_time':
                    datetime.datetime(2012, 2, 2, 11, 32, 00),
                    'url':
                    'http://pypi.python.org/packages/source/r/'
                    'localshop/localshop-%s.tar.gz' % version
                }]

            client.package_urls.side_effect = package_urls_side_effect

            def release_data_side_effect(name, version):
                return {
                    'maintainer': None,
                    'requires_python': None,
                    'maintainer_email': None,
                    'cheesecake_code_kwalitee_id': None,
                    'keywords': None,
                    'package_url': 'http://pypi.python.org/pypi/localshop',
                    'author': 'Michael van Tellingen',
                    'author_email': '*****@*****.**',
                    'download_url': 'UNKNOWN',
                    'platform': 'UNKNOWN',
                    'version': version,
                    'cheesecake_documentation_id': None,
                    '_pypi_hidden': False,
                    'description': "the-description",
                    'release_url':
                    'http://pypi.python.org/pypi/localshop/%s' % version,
                    '_pypi_ordering': 12,
                    'classifiers': [],
                    'name': 'localshop',
                    'bugtrack_url': None,
                    'license': 'BSD',
                    'summary': 'Short summary',
                    'home_page': 'http://github.com/mvantellingen/localshop',
                    'stable_version': None,
                    'cheesecake_installability_id': None
                }

            client.release_data.side_effect = release_data_side_effect

            package = get_package_data('localshop')

        package = models.Package.objects.get(pk=package.pk)

        self.assertEqual(package.releases.count(), 2)
        self.assertTrue(package.releases.get(version='0.1'))
        self.assertTrue(package.releases.get(version='0.2'))

        self.assertEqual(package.releases.get(version='0.1').files.count(), 1)
        self.assertEqual(package.releases.get(version='0.2').files.count(), 1)

        info = package.releases.get(version='0.1').files.all()[0]
        self.assertEqual(info.filename, 'localshop-0.1.tar.gz')
        self.assertEqual(info.filetype, 'sdist')
        self.assertEqual(info.python_version, 'source')
        self.assertEqual(info.md5_digest, '7ddf32e17a6ac5ce04a8ecbf782ca509')
        self.assertEqual(info.size, 23232)
        self.assertEqual(
            info.url, 'http://pypi.python.org/packages/source/r/'
            'localshop/localshop-0.1.tar.gz')
Beispiel #9
0
    def test_get_package_data_wrong_case(self):
        from localshop.apps.packages.pypi import get_package_data

        with mock.patch('xmlrpclib.ServerProxy') as mock_obj:
            mock_obj.return_value = client = mock.Mock()

            def se_package_releases(name, show_hidden=False):
                """side_effect for package_releases"""
                if name == 'localshop':
                    return ['0.1']
                return []
            client.package_releases.side_effect = se_package_releases

            client.search.return_value = [
                {'name': 'localshop'}
            ]

            client.release_data.return_value = {
                'maintainer': None,
                'requires_python': None,
                'maintainer_email': None,
                'cheesecake_code_kwalitee_id': None,
                'keywords': None,
                'package_url': 'http://pypi.python.org/pypi/localshop',
                'author': 'Michael van Tellingen',
                'author_email': '*****@*****.**',
                'download_url': 'UNKNOWN',
                'platform': 'UNKNOWN',
                'version': '0.1',
                'cheesecake_documentation_id': None,
                '_pypi_hidden': False,
                'description': "the-description",
                'release_url': 'http://pypi.python.org/pypi/localshop/0.1',
                '_pypi_ordering': 12,
                'classifiers': [],
                'name': 'django-cofingo',
                'bugtrack_url': None,
                'license': 'BSD',
                'summary': 'Short summary',
                'home_page': 'http://github.com/mvantellingen/localshop',
                'stable_version': None,
                'cheesecake_installability_id': None
            }

            client.package_urls.return_value = [{
                    'comment_text': '',
                    'downloads': 1,
                    'filename': 'localshop-0.1.tar.gz',
                    'has_sig': True,
                    'md5_digest': '7ddf32e17a6ac5ce04a8ecbf782ca509',
                    'packagetype': 'sdist',
                    'python_version': 'source',
                    'size': 23232,
                    'upload_time': datetime.datetime(2012, 2, 2, 11, 32, 00),
                    'url': 'http://pypi.python.org/packages/source/r/'
                        'localshop/localshop-0.1.tar.gz'
                }]

            package = get_package_data('Localshop')

            client.search.called_with({'name': 'Localshop'})

        package = models.Package.objects.get(pk=package.pk)
        self.assertEqual(package.releases.count(), 1)
Beispiel #10
0
    def test_get_package_data_new(self):
        from localshop.apps.packages.pypi import get_package_data

        with mock.patch('xmlrpclib.ServerProxy') as mock_obj:
            mock_obj.return_value = client = mock.Mock()
            client.package_releases.return_value = ['0.1', '0.2']

            def package_urls_side_effect(name, version):
                return [{
                    'comment_text': '',
                    'downloads': 1,
                    'filename': 'localshop-%s.tar.gz' % version,
                    'has_sig': True,
                    'md5_digest': '7ddf32e17a6ac5ce04a8ecbf782ca509',
                    'packagetype': 'sdist',
                    'python_version': 'source',
                    'size': 23232,
                    'upload_time': datetime.datetime(2012, 2, 2, 11, 32, 00),
                    'url': 'http://pypi.python.org/packages/source/r/'
                        'localshop/localshop-%s.tar.gz' % version
                }]
            client.package_urls.side_effect = package_urls_side_effect

            def release_data_side_effect(name, version):
                return  {
                    'maintainer': None,
                    'requires_python': None,
                    'maintainer_email': None,
                    'cheesecake_code_kwalitee_id': None,
                    'keywords': None,
                    'package_url': 'http://pypi.python.org/pypi/localshop',
                    'author': 'Michael van Tellingen',
                    'author_email': '*****@*****.**',
                    'download_url': 'UNKNOWN',
                    'platform': 'UNKNOWN',
                    'version': version,
                    'cheesecake_documentation_id': None,
                    '_pypi_hidden': False,
                    'description': "the-description",
                    'release_url': 'http://pypi.python.org/pypi/localshop/%s'
                        % version,
                    '_pypi_ordering': 12,
                    'classifiers': [],
                    'name': 'localshop',
                    'bugtrack_url': None,
                    'license': 'BSD',
                    'summary': 'Short summary',
                    'home_page': 'http://github.com/mvantellingen/localshop',
                    'stable_version': None,
                    'cheesecake_installability_id': None
                }
            client.release_data.side_effect = release_data_side_effect

            package = get_package_data('localshop')

        package = models.Package.objects.get(pk=package.pk)

        self.assertEqual(package.releases.count(), 2)
        self.assertTrue(package.releases.get(version='0.1'))
        self.assertTrue(package.releases.get(version='0.2'))

        self.assertEqual(package.releases.get(version='0.1').files.count(), 1)
        self.assertEqual(package.releases.get(version='0.2').files.count(), 1)

        info = package.releases.get(version='0.1').files.all()[0]
        self.assertEqual(info.filename, 'localshop-0.1.tar.gz')
        self.assertEqual(info.filetype, 'sdist')
        self.assertEqual(info.python_version, 'source')
        self.assertEqual(info.md5_digest, '7ddf32e17a6ac5ce04a8ecbf782ca509')
        self.assertEqual(info.size, 23232)
        self.assertEqual(info.url, 'http://pypi.python.org/packages/source/r/'
            'localshop/localshop-0.1.tar.gz')