ohtu2021-kvantti/WebMark

View on GitHub
WebCLI/misc/helpers.py

Summary

Maintainability
A
0 mins
Test Coverage
from WebCLI.models import Algorithm_version, Metrics
from django.db.models.expressions import RawSQL


def to_positive_int_or_none(value):
    if not value:
        return None
    try:
        int_value = int(value)
        return int_value if int_value > 0 else None
    except ValueError:
        return None


def get_versions(algorithm):
    query = Algorithm_version.objects.filter(algorithm_id=algorithm)
    query = query.annotate(version_number=RawSQL("ROW_NUMBER() OVER(ORDER BY timestamp)", []))
    query = query.order_by('-timestamp')
    return query


def get_selected_version(params, param_key, versions):
    if params[param_key]:
        try:
            return Algorithm_version.objects.get(pk=params[param_key])
        except Algorithm_version.DoesNotExist:
            return None
    else:
        params[param_key] = versions[0].pk
        return versions[0]


def get_metrics(version_id, versions):
    if version_id:
        return Metrics.objects.filter(algorithm_version__pk=version_id)
    else:
        return Metrics.objects.filter(algorithm_version=versions[0])


def get_selected_metrics(params, param_key, metrics):
    metric_id = params[param_key]
    if metric_id and any(metric.pk == metric_id for metric in metrics):
        return Metrics.objects.get(pk=metric_id)

    if len(metrics) > 0:
        params[param_key] = metrics[0].pk
        return metrics[0]
    return None


def get_transformation_options():
    t = ['jordan_wigner',
         'bravyi_kitaev',
         'bravyi_kitaev_tree',
         'symmetry_conserving_bravyi_kitaev']
    return t