PR review additions

This commit is contained in:
Daniel Ternyak 2019-01-29 16:21:06 -06:00
parent 357517278d
commit 2deb8c8cfa
No known key found for this signature in database
GPG Key ID: DF212D2DC5D0E245
6 changed files with 65 additions and 12 deletions

View File

@ -1,16 +1,39 @@
from datetime import datetime
from grant.extensions import db
def proposal_reminder(task):
from grant.proposal.models import Proposal
proposal = Proposal.query.filter_by(id=task.blob["proposal_id"]).first()
# TODO - replace with email
print(proposal)
task.completed = True
db.session.add(task)
db.session.commit()
class ProposalReminder:
JOB_TYPE = 1
def __init__(self, proposal_id):
self.proposal_id = proposal_id
def blobify(self):
return {"proposal_id": self.proposal_id}
def make_task(self):
from .models import Task
task = Task(
job_type=self.JOB_TYPE,
blob=self.blobify(),
execute_after=datetime.now()
)
db.session.add(task)
db.session.commit()
@staticmethod
def process_task(task):
assert task.job_type == 1, "Job type: {} is incorrect for ProposalReminder".format(task.job_type)
from grant.proposal.models import Proposal
proposal = Proposal.query.filter_by(id=task.blob["proposal_id"]).first()
# TODO - replace with email
print(proposal)
task.completed = True
db.session.add(task)
db.session.commit()
JOBS = {
1: proposal_reminder
1: ProposalReminder.process_task
}

View File

@ -2,6 +2,7 @@ import json
from grant.extensions import ma, db
from sqlalchemy.ext import mutable
from .jobs import JOBS
@ -34,12 +35,11 @@ class Task(db.Model):
execute_after = db.Column(db.DateTime, nullable=False)
completed = db.Column(db.Boolean, default=False)
def __init__(self, job_type, blob, execute_after, completed=False):
def __init__(self, job_type, blob, execute_after):
assert job_type in list(JOBS.keys()), "Not a valid job"
self.job_type = job_type
self.blob = blob
self.execute_after = execute_after
self.completed = completed
class TaskSchema(ma.Schema):

View File

@ -9,7 +9,7 @@ blueprint = Blueprint("task", __name__, url_prefix="/api/v1/task")
@blueprint.route("/", methods=["GET"])
def task():
tasks = Task.query.filter(Task.execute_after <= datetime.now()).all()
tasks = Task.query.filter(Task.execute_after <= datetime.now()).filter_by(completed=False).all()
for each_task in tasks:
try:
JOBS[each_task.job_type](each_task)

View File

@ -3,6 +3,7 @@ import json
from flask_testing import TestCase
from grant.app import create_app
from grant.proposal.models import Proposal
from grant.task.jobs import ProposalReminder
from grant.user.models import User, SocialMedia, db, Avatar
from .test_data import test_user, test_other_user, test_proposal
@ -139,3 +140,9 @@ class BaseProposalCreatorConfig(BaseUserConfig):
@property
def other_proposal(self):
return Proposal.query.filter_by(id=self._other_proposal_id).first()
def make_proposal_reminder_task(self):
proposal_reminder = ProposalReminder(self.proposal.id)
proposal_reminder.make_task()
from grant.task.models import Task
print(Task.query.all()[0].__dict__)

View File

View File

@ -0,0 +1,23 @@
from datetime import datetime
from grant.task.models import Task
from ..config import BaseProposalCreatorConfig
class TestTaskAPI(BaseProposalCreatorConfig):
def test_proposal_reminder_task_is_created(self):
tasks = Task.query.filter(Task.execute_after <= datetime.now()).filter_by(completed=False).all()
self.assertEqual(tasks, [])
self.make_proposal_reminder_task()
self.assertEqual(len(tasks), 1)
def test_proposal_reminder_task_is_marked_completed_after_call(self):
self.make_proposal_reminder_task()
tasks = Task.query.filter(Task.execute_after <= datetime.now()).filter_by(completed=False).all()
self.assertEqual(len(tasks), 1)
self.app.get("/api/v1/task")
tasks = Task.query.filter(Task.execute_after <= datetime.now()).filter_by(completed=False).all()
self.assertEqual(tasks, [])