euscanwww: Added category description, overlay description, homepage and path
Minor changes: - Fixed broken tests (alive field was still there) - Added plural to Category model Signed-off-by: volpino <fox91@anche.no>
This commit is contained in:
		@@ -2,14 +2,20 @@ import subprocess
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
from os.path import join
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
import portage
 | 
			
		||||
 | 
			
		||||
from gentoolkit.metadata import MetaData
 | 
			
		||||
 | 
			
		||||
from layman import Layman
 | 
			
		||||
 | 
			
		||||
from xml.etree.ElementTree import iterparse, ParseError
 | 
			
		||||
 | 
			
		||||
from django.db.transaction import commit_on_success
 | 
			
		||||
from django.db import models
 | 
			
		||||
from django.core.management.color import color_style
 | 
			
		||||
from django.conf import settings
 | 
			
		||||
 | 
			
		||||
from euscan.version import get_version_type
 | 
			
		||||
 | 
			
		||||
@@ -365,23 +371,36 @@ class ScanPortage(object):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def populate_categories(logger):
 | 
			
		||||
    # Populate Category and Overlay
 | 
			
		||||
    # TODO: - use portage.settings.categories()
 | 
			
		||||
    #       - read metadata.xml to add description
 | 
			
		||||
    for cat in Package.objects.values('category').distinct():
 | 
			
		||||
        obj, created = Category.objects.get_or_create(name=cat["category"])
 | 
			
		||||
    portdir = portage.settings["PORTDIR"]
 | 
			
		||||
    for cat in portage.settings.categories:
 | 
			
		||||
        try:
 | 
			
		||||
            meta = MetaData(join(portdir, cat, "metadata.xml"))
 | 
			
		||||
            desc = meta.descriptions()[0]
 | 
			
		||||
        except (IOError, IndexError):
 | 
			
		||||
            desc = ""
 | 
			
		||||
        obj, created = Category.objects.get_or_create(name=cat)
 | 
			
		||||
        obj.description = desc.strip()
 | 
			
		||||
        obj.save()
 | 
			
		||||
        if created:
 | 
			
		||||
            logger.info("+ [c] %s", cat["category"])
 | 
			
		||||
            logger.info("+ [c] %s", cat)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def populate_overlays(logger):
 | 
			
		||||
    # TODO: - get informations from layman and portage (path, url)
 | 
			
		||||
    for overlay in Version.objects.values('overlay').distinct():
 | 
			
		||||
        if not overlay["overlay"]:
 | 
			
		||||
    l = Layman(stderr=sys.__stderr__, stdin=sys.__stdin__,
 | 
			
		||||
               stdout=sys.__stdout__, config=settings.LAYMAN_CONFIG, root="/")
 | 
			
		||||
    installed_overlays = l.get_installed()
 | 
			
		||||
    info = l.get_all_info(installed_overlays)
 | 
			
		||||
    for overlay in installed_overlays:
 | 
			
		||||
        if not overlay:
 | 
			
		||||
            continue
 | 
			
		||||
        obj, created = Overlay.objects.get_or_create(name=overlay["overlay"])
 | 
			
		||||
        obj, created = Overlay.objects.get_or_create(name=overlay)
 | 
			
		||||
        if overlay in info:
 | 
			
		||||
            obj.description = info[overlay]["description"]
 | 
			
		||||
            obj.homepage = info[overlay]["homepage"]
 | 
			
		||||
        obj.overlay_path = join(l.config['storage'], overlay)
 | 
			
		||||
        obj.save()
 | 
			
		||||
        if created:
 | 
			
		||||
            logger.info("+ [o] %s", overlay["overlay"])
 | 
			
		||||
            logger.info("+ [o] %s", overlay)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@commit_on_success
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user