101 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""
 | 
						|
djeuscan.helpers
 | 
						|
"""
 | 
						|
 | 
						|
from distutils.version import StrictVersion, LooseVersion
 | 
						|
from django.shortcuts import get_object_or_404
 | 
						|
from django.conf import settings
 | 
						|
 | 
						|
from layman import Layman
 | 
						|
 | 
						|
from portage.util import getconfig
 | 
						|
 | 
						|
 | 
						|
def xint(i):
 | 
						|
    """
 | 
						|
    Tries to cast to int, fallbacks to 0
 | 
						|
    """
 | 
						|
    try:
 | 
						|
        return int(i)
 | 
						|
    except Exception:
 | 
						|
        return 0
 | 
						|
 | 
						|
 | 
						|
def select_related_last_versions(queryset):
 | 
						|
    queryset = queryset.select_related(
 | 
						|
        'last_version_gentoo',
 | 
						|
        'last_version_overlay',
 | 
						|
        'last_version_upstream'
 | 
						|
    )
 | 
						|
 | 
						|
 | 
						|
def version_key(version):
 | 
						|
    version = version.version
 | 
						|
    try:
 | 
						|
        return StrictVersion(version)
 | 
						|
    # in case of abnormal version number, fall back to LooseVersion
 | 
						|
    except ValueError:
 | 
						|
        return LooseVersion(version)
 | 
						|
 | 
						|
 | 
						|
def packages_from_names(data):
 | 
						|
    """
 | 
						|
    Returns a list of Package objects from a string of names
 | 
						|
    """
 | 
						|
 | 
						|
    from djeuscan.models import Package
 | 
						|
 | 
						|
    packages = []
 | 
						|
    data = data.replace("\r", "")
 | 
						|
 | 
						|
    for pkg in data.split('\n'):
 | 
						|
        if pkg.count('/') == 1:
 | 
						|
            cat, pkg = pkg.split('/')
 | 
						|
            packages.extend(Package.objects.filter(category=cat, name=pkg))
 | 
						|
        else:
 | 
						|
            packages.extend(Package.objects.filter(name=pkg))
 | 
						|
    return packages
 | 
						|
 | 
						|
 | 
						|
def rename_fields(vqs, fields):
 | 
						|
    ret = []
 | 
						|
    for n in vqs:
 | 
						|
        for tr in fields:
 | 
						|
            if tr[0] in n:
 | 
						|
                n[tr[1]] = n[tr[0]]
 | 
						|
                del n[tr[0]]
 | 
						|
        ret.append(n)
 | 
						|
    return ret
 | 
						|
 | 
						|
 | 
						|
class catch_and_return(object):
 | 
						|
    def __init__(self, err, response):
 | 
						|
        self.err = err
 | 
						|
        self.response = response
 | 
						|
 | 
						|
    def __call__(self, fn):
 | 
						|
        def wrapper(*args, **kwargs):
 | 
						|
            try:
 | 
						|
                return fn(*args, **kwargs)
 | 
						|
            except self.err:
 | 
						|
                return self.response
 | 
						|
        return wrapper
 | 
						|
 | 
						|
 | 
						|
def get_maintainer_or_404(id=None, email=None):
 | 
						|
    from djeuscan.models import Maintainer
 | 
						|
    if id:
 | 
						|
        return get_object_or_404(Maintainer, pk=id)
 | 
						|
    else:
 | 
						|
        return get_object_or_404(Maintainer, email=email)
 | 
						|
 | 
						|
 | 
						|
def get_make_conf():
 | 
						|
    return getconfig(settings.MAKE_CONF, tolerant=1, allow_sourcing=True)
 | 
						|
 | 
						|
 | 
						|
def get_layman_repos():
 | 
						|
    lay = Layman(config=settings.LAYMAN_CONFIG)
 | 
						|
    installed_overlays = lay.get_installed()
 | 
						|
    return lay.get_all_info(installed_overlays)
 |