PR review additions
This commit is contained in:
parent
357517278d
commit
2deb8c8cfa
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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__)
|
||||
|
|
|
@ -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, [])
|
||||
|
Loading…
Reference in New Issue