def put(self, quiz_id):
        session = authorize(request.headers["Authorization"])
        put_request = Quiz.quiz_from_dict(put_parser.parse_args())

        criteria = {
            "createdBy": session.get('user').get('login'),
            "_id": int(quiz_id)
        }
        quiz = Quiz.quiz_from_dict(mongo.db.quiz.find_one_or_404(criteria))

        for qst in put_request.questions:
            self.add_question(qst, quiz)

        return {"message": "modified % s" % quiz_id}, 200
    def post(self, quiz_id, contact_group=None):
        session = authorize(request.headers["Authorization"])

        if contact_group is None: contact_group = "default"

        contacts = self.get_contacts(contact_group, session.get("user").get("login"))

        if contacts is None:
            return {"message": "no contact to send"}, 400

        criteria = {"createdBy": session.get('user').get('login'), "_id": int(quiz_id)}
        quiz = Quiz.quiz_from_dict(mongo.db.quiz.find_one_or_404(criteria))

        for contact in contacts:
            c = Contact.contact_from_dict(contact)
            p = Publication()
            p._id = get_id("publication")
            p.creationDate = datetime.now()
            p.hash = hashlib.sha256("%d.%s" % (p._id, str(p.creationDate))).hexdigest()
            p.by = session.get('user').get('login')
            p.quiz = quiz
            p.to = c
            mongo.db.publications.insert(p.format())
            self.send_email(quiz.title, p.hash, c.email, c.language)

        return {"message": "quiz %s published to %d contacts" % (quiz.title, len(contacts))}, 200
    def patch(self, quiz_id):
        session = authorize(request.headers["Authorization"])
        patch_request = Quiz.quiz_from_dict(
            patch_parser.parse_args()).format_patch()

        if len(patch_request) == 0:
            abort(400)

        criteria = {
            "createdBy": session.get('user').get('login'),
            "_id": int(quiz_id)
        }
        mongo.db.quiz.find_one_or_404(criteria)
        mongo.db.quiz.update(criteria, {"$set": patch_request})

        return {"message": "modified % s" % quiz_id}, 200
    def post(self):
        session = authorize(request.headers["Authorization"])

        quiz_input = creation_parser.parse_args()
        quiz = Quiz.quiz_from_dict(quiz_input)
        quiz.creationDate = datetime.now()
        quiz.createdBy = session.get('user').get('login')
        """ we create the quiz first """
        quiz._id = int(get_id("quiz"))
        print "\n", quiz.format()
        mongo.db.quiz.insert(quiz.format())
        """ we create questions as objects and we embbed them into the quiz"""
        for qst in quiz.questions:
            self.add_question(qst, quiz)

        return {"quiz_id": "%s" % (quiz._id)}, 201
 def get_single_quiz(self, quiz_id):
     res = mongo.db.quiz.find_one_or_404({"_id": int(quiz_id)})
     quiz = Quiz.quiz_from_dict(res)
     return quiz