euscanwww: big commit
- fix commands - import DataTables - initial category view Signed-off-by: Corentin Chary <corentincj@iksaif.net>
This commit is contained in:
		
							
								
								
									
										10
									
								
								euscanwww/euscan/management/commands/list-packages.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								euscanwww/euscan/management/commands/list-packages.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
from django.core.management.base import BaseCommand, CommandError
 | 
			
		||||
from euscanwww.euscan.models import Package
 | 
			
		||||
 | 
			
		||||
class Command(BaseCommand):
 | 
			
		||||
    _overlays = {}
 | 
			
		||||
    help = 'List packages'
 | 
			
		||||
 | 
			
		||||
    def handle(self, *args, **options):
 | 
			
		||||
        for pkg in Package.objects.all():
 | 
			
		||||
            self.stdout.write('%s/%s\n' % (pkg.category, pkg.name))
 | 
			
		||||
@@ -141,9 +141,14 @@ class Command(BaseCommand):
 | 
			
		||||
        obj, created = Version.objects.get_or_create(package=package, slot=slot,
 | 
			
		||||
                                                     revision=rev, version=ver,
 | 
			
		||||
                                                     overlay=overlay)
 | 
			
		||||
 | 
			
		||||
        if created or not package.n_packaged:
 | 
			
		||||
            package.n_packaged += 1
 | 
			
		||||
        if created:
 | 
			
		||||
            package.n_versions += 1
 | 
			
		||||
 | 
			
		||||
        package.save()
 | 
			
		||||
 | 
			
		||||
        obj.packaged = True
 | 
			
		||||
        obj.save()
 | 
			
		||||
 | 
			
		||||
        package.n_versions += 1
 | 
			
		||||
        package.n_packaged += 1
 | 
			
		||||
        package.save()
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ import sys
 | 
			
		||||
import os
 | 
			
		||||
import re
 | 
			
		||||
 | 
			
		||||
from StringIO import StringIO
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
from portage import versions
 | 
			
		||||
from optparse import make_option
 | 
			
		||||
@@ -21,11 +22,11 @@ class Command(BaseCommand):
 | 
			
		||||
            dest='all',
 | 
			
		||||
            default=False,
 | 
			
		||||
            help='Scan all packages'),
 | 
			
		||||
        make_option('--parallel',
 | 
			
		||||
        make_option('--feed',
 | 
			
		||||
            action='store_true',
 | 
			
		||||
            dest='parallel',
 | 
			
		||||
            dest='feed',
 | 
			
		||||
            default=False,
 | 
			
		||||
            help='Use GNU Parallel'),
 | 
			
		||||
            help='Read euscan output from stdin'),
 | 
			
		||||
        make_option('--quiet',
 | 
			
		||||
            action='store_true',
 | 
			
		||||
            dest='quiet',
 | 
			
		||||
@@ -36,9 +37,13 @@ class Command(BaseCommand):
 | 
			
		||||
    help = 'Scans metadata and fills database'
 | 
			
		||||
 | 
			
		||||
    def handle(self, *args, **options):
 | 
			
		||||
        if len(args) == 0 and options['all'] == False:
 | 
			
		||||
        if len(args) == 0 and options['all'] == False and options['feed'] == False:
 | 
			
		||||
            raise CommandError('You must specify a package or use --all')
 | 
			
		||||
 | 
			
		||||
        if options['feed']:
 | 
			
		||||
            self.parse_output(options, sys.stdin)
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        if not options['quiet']:
 | 
			
		||||
            self.stdout.write('Scanning upstream...\n')
 | 
			
		||||
 | 
			
		||||
@@ -57,22 +62,13 @@ class Command(BaseCommand):
 | 
			
		||||
 | 
			
		||||
    @commit_on_success
 | 
			
		||||
    def scan(self, options, packages=None):
 | 
			
		||||
        if options['parallel']:
 | 
			
		||||
            jobs = '\n'.join(packages)
 | 
			
		||||
            cmd = ['gparallel', '--jobs', '150%', 'euscan']
 | 
			
		||||
        for package in packages:
 | 
			
		||||
            cmd = ['euscan', package]
 | 
			
		||||
 | 
			
		||||
            fp = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
 | 
			
		||||
            output = fp.communicate(jobs)[0]
 | 
			
		||||
            fp = subprocess.Popen(cmd, stdout=subprocess.PIPE)
 | 
			
		||||
            output = StringIO(fp.communicate()[0])
 | 
			
		||||
 | 
			
		||||
            self.parse_output(options, output)
 | 
			
		||||
        else:
 | 
			
		||||
            for package in packages:
 | 
			
		||||
                cmd = ['euscan', package]
 | 
			
		||||
 | 
			
		||||
                fp = subprocess.Popen(cmd, stdout=subprocess.PIPE)
 | 
			
		||||
                output = fp.communicate()[0]
 | 
			
		||||
 | 
			
		||||
                self.parse_output(options, output)
 | 
			
		||||
 | 
			
		||||
    def parse_output(self, options, output):
 | 
			
		||||
        from portage.versions import _cp
 | 
			
		||||
@@ -83,7 +79,10 @@ class Command(BaseCommand):
 | 
			
		||||
        package = None
 | 
			
		||||
        log = ""
 | 
			
		||||
 | 
			
		||||
        for line in output.split('\n'):
 | 
			
		||||
        while True:
 | 
			
		||||
            line = output.readline()
 | 
			
		||||
            if line == '':
 | 
			
		||||
                break
 | 
			
		||||
            match = package_re.match(line)
 | 
			
		||||
            if match:
 | 
			
		||||
                if package:
 | 
			
		||||
@@ -143,5 +142,6 @@ class Command(BaseCommand):
 | 
			
		||||
            obj.packaged = False
 | 
			
		||||
            obj.save()
 | 
			
		||||
 | 
			
		||||
        package.n_versions += 1
 | 
			
		||||
        package.save()
 | 
			
		||||
        if created:
 | 
			
		||||
            package.n_versions += 1
 | 
			
		||||
            package.save()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										90
									
								
								euscanwww/euscan/management/commands/update-counters.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								euscanwww/euscan/management/commands/update-counters.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,90 @@
 | 
			
		||||
import datetime
 | 
			
		||||
 | 
			
		||||
from optparse import make_option
 | 
			
		||||
 | 
			
		||||
from django.db.models import Count, Sum
 | 
			
		||||
from django.db.transaction import commit_on_success
 | 
			
		||||
from django.core.management.base import BaseCommand, CommandError
 | 
			
		||||
from euscanwww.euscan.models import Package, HerdLog, MaintainerLog, CategoryLog, Herd, Maintainer, Version
 | 
			
		||||
 | 
			
		||||
class Command(BaseCommand):
 | 
			
		||||
    _overlays = {}
 | 
			
		||||
    help = 'Update counters'
 | 
			
		||||
 | 
			
		||||
    option_list = BaseCommand.option_list + (
 | 
			
		||||
        make_option('--quiet',
 | 
			
		||||
            action='store_true',
 | 
			
		||||
            dest='quiet',
 | 
			
		||||
            default=False,
 | 
			
		||||
            help='Be quiet'),
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    @commit_on_success
 | 
			
		||||
    def handle(self, *args, **options):
 | 
			
		||||
        now = datetime.datetime.now()
 | 
			
		||||
 | 
			
		||||
        categories = {}
 | 
			
		||||
        herds = {}
 | 
			
		||||
        maintainers = {}
 | 
			
		||||
 | 
			
		||||
        # Could be done using raw SQL queries, but I don't have time for that
 | 
			
		||||
        # right now ...
 | 
			
		||||
 | 
			
		||||
        for cat in Package.objects.values('category').distinct():
 | 
			
		||||
            clog = CategoryLog()
 | 
			
		||||
            clog.datetime = now
 | 
			
		||||
            clog.category = cat['category']
 | 
			
		||||
            categories[clog.category] = clog
 | 
			
		||||
 | 
			
		||||
        for herd in Herd.objects.all():
 | 
			
		||||
            hlog = HerdLog()
 | 
			
		||||
            hlog.datetime = now
 | 
			
		||||
            hlog.herd = herd
 | 
			
		||||
            herds[herd] = hlog
 | 
			
		||||
 | 
			
		||||
        for maintainer in Maintainer.objects.all():
 | 
			
		||||
            mlog = MaintainerLog()
 | 
			
		||||
            mlog.datetime = now
 | 
			
		||||
            mlog.maintainer = maintainer
 | 
			
		||||
            maintainers[maintainer] = mlog
 | 
			
		||||
 | 
			
		||||
        for package in Package.objects.all():
 | 
			
		||||
            # Should not be needed, but can't hurt
 | 
			
		||||
            package.n_versions = Version.objects.filter(package=package).count()
 | 
			
		||||
            package.n_packaged != Version.objects.filter(package=package,packaged=True).count()
 | 
			
		||||
            package.save()
 | 
			
		||||
 | 
			
		||||
            for herd in package.herds.all():
 | 
			
		||||
                herds[herd].n_packages += 1
 | 
			
		||||
                herds[herd].n_versions += package.n_versions
 | 
			
		||||
                herds[herd].n_packaged += package.n_packaged
 | 
			
		||||
 | 
			
		||||
            for maintainer in package.maintainers.all():
 | 
			
		||||
                maintainers[maintainer].n_packages += 1
 | 
			
		||||
                maintainers[maintainer].n_versions += package.n_versions
 | 
			
		||||
                maintainers[maintainer].n_packaged += package.n_packaged
 | 
			
		||||
 | 
			
		||||
            categories[package.category].n_packages += 1
 | 
			
		||||
            categories[package.category].n_versions += package.n_versions
 | 
			
		||||
            categories[package.category].n_packaged += package.n_packaged
 | 
			
		||||
 | 
			
		||||
        for clog in categories.values():
 | 
			
		||||
            if not options['quiet']:
 | 
			
		||||
                self.stdout.write('[c] %s - [%d, %d/%d]\n' %
 | 
			
		||||
                                  (clog.category, clog.n_packages,
 | 
			
		||||
                                   clog.n_packaged, clog.n_versions))
 | 
			
		||||
            clog.save()
 | 
			
		||||
 | 
			
		||||
        for hlog in herds.values():
 | 
			
		||||
            if not options['quiet']:
 | 
			
		||||
                self.stdout.write('[h] %s - [%d, %d/%d]\n' %
 | 
			
		||||
                                  (hlog.herd, hlog.n_packages,
 | 
			
		||||
                                   hlog.n_packaged, hlog.n_versions))
 | 
			
		||||
            hlog.save()
 | 
			
		||||
 | 
			
		||||
        for mlog in maintainers.values():
 | 
			
		||||
            if not options['quiet']:
 | 
			
		||||
                self.stdout.write('[m] %s - [%d, %d/%d]\n' %
 | 
			
		||||
                                  (mlog.maintainer, mlog.n_packages,
 | 
			
		||||
                                   mlog.n_packaged, mlog.n_versions))
 | 
			
		||||
            mlog.save()
 | 
			
		||||
		Reference in New Issue
	
	Block a user