vmesel/PyJobs

View on GitHub
pyjobs/core/managers.py

Summary

Maintainability
A
1 hr
Test Coverage
A
100%
from datetime import datetime, timedelta
from django.db import models


class PublicQuerySet(models.QuerySet):
    def public(self):
        return self.filter(public=True)

    def premium(self):
        return self.public().filter(premium=True)

    def not_premium(self):
        return self.public().filter(premium=False)

    def created_in_the_last(self, days, premium=False):
        if premium:
            return self.filter(
                premium_at__gt=datetime.today() - timedelta(days=days),
                premium_at__lte=datetime.today(),
            )
        return self.filter(
            created_at__gt=datetime.today() - timedelta(days=days),
            created_at__lte=datetime.today(),
        )

    def search(self, term):
        if not term:
            return self

        params = (
            models.Q(title__icontains=term)
            | models.Q(workplace__icontains=term)
            | models.Q(description__icontains=term)
            | models.Q(requirements__icontains=term)
        )
        return self.filter(params)


class ProfilingQuerySet(models.QuerySet):
    def grade(self, skills, job_skills):
        if not skills or not job_skills:
            return 0

        intersect = set(skills) & set(job_skills)
        return (len(intersect) / len(job_skills)) * 100