Пример #1
0
    def test_request_parser_remove_argument(self):
        req = Request.from_values("/bubble?foo=baz")
        parser = RequestParser()
        parser.add_argument("foo", type=int)
        parser_copy = parser.copy()
        parser_copy.remove_argument("foo")

        args = parser_copy.parse_args(req)
        self.assertEquals(args, {})
    def test_request_parser_remove_argument(self):
        req = Request.from_values("/bubble?foo=baz")
        parser = RequestParser()
        parser.add_argument('foo', type=int)
        parser_copy = parser.copy()
        parser_copy.remove_argument('foo')

        args = parser_copy.parse_args(req)
        self.assertEquals(args, {})
Пример #3
0
    def test_request_parser_replace_argument(self):
        req = Request.from_values("/bubble?foo=baz")
        parser = RequestParser()
        parser.add_argument('foo', type=int)
        parser_copy = parser.copy()
        parser_copy.replace_argument('foo', type=str)

        args = parser_copy.parse_args(req)
        self.assertEquals(args['foo'], u'baz')
Пример #4
0
    def test_request_parser_copy(self):
        req = Request.from_values("/bubble?foo=101&bar=baz")
        parser = RequestParser()
        parser.add_argument("foo", type=int)
        parser_copy = parser.copy()
        parser_copy.add_argument("bar", type=str)

        args = parser_copy.parse_args(req)
        self.assertEquals(args["foo"], 101)
        self.assertEquals(args["bar"], u"baz")
Пример #5
0
    def test_request_parser_copy(self):
        req = Request.from_values("/bubble?foo=101&bar=baz")
        parser = RequestParser()
        parser.add_argument('foo', type=int)
        parser_copy = parser.copy()
        parser_copy.add_argument('bar', type=str)

        args = parser_copy.parse_args(req)
        self.assertEquals(args['foo'], 101)
        self.assertEquals(args['bar'], u'baz')
    def test_request_parser_copy(self):
        req = Request.from_values("/bubble?foo=101&bar=baz")
        parser = RequestParser()
        foo_arg = Argument('foo', type=int)
        parser.args.append(foo_arg)
        parser_copy = parser.copy()

        # Deepcopy should create a clone of the argument object instead of
        # copying a reference to the new args list
        self.assertFalse(foo_arg in parser_copy.args)

        # Args added to new parser should not be added to the original
        bar_arg = Argument('bar')
        parser_copy.args.append(bar_arg)
        self.assertFalse(bar_arg in parser.args)

        args = parser_copy.parse_args(req)
        self.assertEquals(args['foo'], 101)
        self.assertEquals(args['bar'], u'baz')
Пример #7
0
    def test_request_parser_copy(self):
        req = Request.from_values("/bubble?foo=101&bar=baz")
        parser = RequestParser()
        foo_arg = Argument('foo', type=int)
        parser.args.append(foo_arg)
        parser_copy = parser.copy()

        # Deepcopy should create a clone of the argument object instead of
        # copying a reference to the new args list
        self.assertFalse(foo_arg in parser_copy.args)

        # Args added to new parser should not be added to the original
        bar_arg = Argument('bar')
        parser_copy.args.append(bar_arg)
        self.assertFalse(bar_arg in parser.args)

        args = parser_copy.parse_args(req)
        self.assertEquals(args['foo'], 101)
        self.assertEquals(args['bar'], u'baz')
Пример #8
0
"""

from flask_restful import Resource
from flask_restful.reqparse import RequestParser
from flask_restful.inputs import date, boolean
from bson import ObjectId
from application import mongo
from common.utils import validate_id


item_put_parser = RequestParser()
item_put_parser.add_argument("text", type=str, location="json")
item_put_parser.add_argument("dueDate", type=date, location="json")
item_put_parser.add_argument("finished", type=boolean, location="json")

item_post_parser = item_put_parser.copy()
for arg in item_post_parser.args:
    arg.required = True

db = mongo.db.todo


class TodoItem(Resource):
    """
    Provides methods for updating and deleting todo items.

    Usage::
    For updating todo item:
        curl -X PUT http://127.0.0.1:5000/todolists/<list_id>/items/<item_id> \
        -H "Content-Type: application/json" \
        -d '{"text": "sometext", "due_date": "2019-2-12", "finished": "true" }'
    def test_request_parse_copy_including_settings(self):
        parser = RequestParser(trim=True, bundle_errors=True)
        parser_copy = parser.copy()

        self.assertEqual(parser.trim, parser_copy.trim)
        self.assertEqual(parser.bundle_errors, parser_copy.bundle_errors)
Пример #10
0
new_assignment_parser.add_argument('compare_start', default=None)
new_assignment_parser.add_argument('compare_end', default=None)
new_assignment_parser.add_argument('file_id', default=None)
new_assignment_parser.add_argument('students_can_reply', type=bool, default=False)
new_assignment_parser.add_argument('number_of_comparisons', type=int, required=True)
new_assignment_parser.add_argument('enable_self_evaluation', type=int, default=None)
new_assignment_parser.add_argument('pairing_algorithm', default=None)
new_assignment_parser.add_argument('rank_display_limit', type=int, default=None)
new_assignment_parser.add_argument('educators_can_compare', type=bool, default=False)
# has to add location parameter, otherwise MultiDict will screw up the list
new_assignment_parser.add_argument('criteria', type=list, default=[], location='json')
new_assignment_parser.add_argument('answer_grade_weight', type=int, default=1)
new_assignment_parser.add_argument('comparison_grade_weight', type=int, default=1)
new_assignment_parser.add_argument('self_evaluation_grade_weight', type=int, default=1)

existing_assignment_parser = new_assignment_parser.copy()
existing_assignment_parser.add_argument('id', required=True, help="Assignment id is required.")

assignment_users_comparison_list_parser = pagination_parser.copy()
assignment_users_comparison_list_parser.add_argument('group', required=False, default=None)
assignment_users_comparison_list_parser.add_argument('author', required=False, default=None)

# events
on_assignment_modified = event.signal('ASSIGNMENT_MODIFIED')
on_assignment_get = event.signal('ASSIGNMENT_GET')
on_assignment_list_get = event.signal('ASSIGNMENT_LIST_GET')
on_assignment_create = event.signal('ASSIGNMENT_CREATE')
on_assignment_delete = event.signal('ASSIGNMENT_DELETE')
on_assignment_list_get_status = event.signal('ASSIGNMENT_LIST_GET_STATUS')
on_assignment_get_status = event.signal('ASSIGNMENT_GET_STATUS')
on_assignment_user_comparisons_get = event.signal('ASSIGNMENT_USER_COMPARISONS_GET')
Пример #11
0
from sqlalchemy.orm import joinedload, undefer_group, load_only

from . import dataformat
from compair.core import db, event, abort
from compair.authorization import allow, require
from compair.models import Assignment, Course, Answer, ComparisonExample
from .util import new_restful_api, get_model_changes

comparison_example_api = Blueprint('comparison_example_api', __name__)
api = new_restful_api(comparison_example_api)

new_comparison_example_parser = RequestParser()
new_comparison_example_parser.add_argument('answer1_id', required=True, nullable=False)
new_comparison_example_parser.add_argument('answer2_id', required=True, nullable=False)

existing_comparison_example_parser = new_comparison_example_parser.copy()
existing_comparison_example_parser.add_argument('id', required=True, nullable=False)

# events
on_comparison_example_modified = event.signal('COMPARISON_EXAMPLE_MODIFIED')
on_comparison_example_list_get = event.signal('COMPARISON_EXAMPLE_LIST_GET')
on_comparison_example_create = event.signal('COMPARISON_EXAMPLE_CREATE')
on_comparison_example_delete = event.signal('COMPARISON_EXAMPLE_DELETE')

# /id
class ComparisonExampleIdAPI(Resource):
    @login_required
    def post(self, course_uuid, assignment_uuid, comparison_example_uuid):
        course = Course.get_active_by_uuid_or_404(course_uuid)
        assignment = Assignment.get_active_by_uuid_or_404(assignment_uuid)
        comparison_example = ComparisonExample.get_active_by_uuid_or_404(comparison_example_uuid)
Пример #12
0
from .util import new_restful_api, get_model_changes, pagination_parser

answer_comment_api = Blueprint('answer_comment_api', __name__)
api = new_restful_api(answer_comment_api)

new_answer_comment_parser = RequestParser()
new_answer_comment_parser.add_argument('user_id', default=None)
new_answer_comment_parser.add_argument('content')
new_answer_comment_parser.add_argument('comment_type', required=True, nullable=False)
new_answer_comment_parser.add_argument('draft', type=bool, default=False)
new_answer_comment_parser.add_argument('evaluation_number', type=int, default=None)
new_answer_comment_parser.add_argument('attempt_uuid', default=None)
new_answer_comment_parser.add_argument('attempt_started', default=None)
new_answer_comment_parser.add_argument('attempt_ended', default=None)

existing_answer_comment_parser = new_answer_comment_parser.copy()
existing_answer_comment_parser.add_argument('id', required=True, help="Comment id is required.")

answer_comment_list_parser = pagination_parser.copy()
answer_comment_list_parser.add_argument('self_evaluation', required=False, default='true')
answer_comment_list_parser.add_argument('evaluation', required=False, default='true')
answer_comment_list_parser.add_argument('draft', required=False, default='false')
answer_comment_list_parser.add_argument('ids', required=False, default=None)
answer_comment_list_parser.add_argument('answer_ids', required=False, default=None)
answer_comment_list_parser.add_argument('assignment_id', required=False, default=None)
answer_comment_list_parser.add_argument('user_ids', required=False, default=None)

# events
on_answer_comment_modified = event.signal('ANSWER_COMMENT_MODIFIED')
on_answer_comment_get = event.signal('ANSWER_COMMENT_GET')
on_answer_comment_list_get = event.signal('ANSWER_COMMENT_LIST_GET')
Пример #13
0
utility_add_par = RequestParser()
utility_add_par.add_argument('name',
                             type=str,
                             required=True,
                             help='Enum name. (Required)')
utility_add_par.add_argument('utility_main_group_id',
                             type=int,
                             required=True,
                             help='Utility main group ID. (Required)')
utility_add_par.add_argument('utility_sub_group_id',
                             type=int,
                             required=True,
                             help='Utility sub group ID. (Required)')
utility_add_par.add_argument('description', type=str, help='Note.')
# put
utility_put_par = utility_add_par.copy()
utility_put_par.replace_argument('name', type=str, help='Enum name.')
utility_put_par.replace_argument('utility_main_group_id',
                                 type=int,
                                 help='Utility main group ID.')
utility_put_par.replace_argument('utility_sub_group_id',
                                 type=int,
                                 help='Utility sub group ID.')
utility_put_par.replace_argument('description', type=str, help='Note.')
# get
utility_get_par = CommonFilterParser()  # page, ids, disabled
utility_get_par.add_argument('id', type=int, help='ID = ?')
utility_get_par.add_argument('name', type=str, help='name = ?(str)')
utility_get_par.add_argument('utility_main_group_name',
                             type=str,
                             help='Utility main group Name.')
Пример #14
0
answers_api = Blueprint('answers_api', __name__)
api = new_restful_api(answers_api)

new_answer_parser = RequestParser()
new_answer_parser.add_argument('user_id', default=None)
new_answer_parser.add_argument('group_id', default=None)
new_answer_parser.add_argument('comparable', type=bool, default=True)
new_answer_parser.add_argument('content', default=None)
new_answer_parser.add_argument('file_id', default=None)
new_answer_parser.add_argument('draft', type=bool, default=False)
new_answer_parser.add_argument('attempt_uuid', default=None)
new_answer_parser.add_argument('attempt_started', default=None)
new_answer_parser.add_argument('attempt_ended', default=None)

existing_answer_parser = new_answer_parser.copy()
existing_answer_parser.add_argument('id', required=True, help="Answer id is required.")

answer_list_parser = pagination_parser.copy()
answer_list_parser.add_argument('group', required=False, default=None)
answer_list_parser.add_argument('author', required=False, default=None)
answer_list_parser.add_argument('orderBy', required=False, default=None)
answer_list_parser.add_argument('top', type=bool, required=False, default=None)
answer_list_parser.add_argument('ids', required=False, default=None)

user_answer_list_parser = RequestParser()
user_answer_list_parser.add_argument('draft', type=bool, required=False, default=False)

top_answer_parser = RequestParser()
top_answer_parser.add_argument(
    'top_answer', type=bool, required=True, nullable=False,
Пример #15
0
    def test_request_parse_copy_including_settings(self):
        parser = RequestParser(trim=True, bundle_errors=True)
        parser_copy = parser.copy()

        self.assertEqual(parser.trim, parser_copy.trim)
        self.assertEqual(parser.bundle_errors, parser_copy.bundle_errors)
Пример #16
0
from flask_restful.reqparse import RequestParser
from werkzeug.datastructures import FileStorage

from App.extensions import scheduler
from App.models.jobs import JobData, JobStatus
from App.models.logs import ModLog
from App.setting import *
from App.utils import (set_model_value, job_handler, get_next_time, save_job_data, save_job_status, up_job_status,
                       save_mod_log, cron_to_dict, up_job_data, del_job, rm_empty_kw, FileHandler, gen_cmd, to_lower
                       )

# Request 解析参数。自动去除值两边空格
parser_jobs = RequestParser(trim=True)

# 继承parser_job
parser_actions = parser_jobs.copy()
# 继承 parser_job
parser_put = parser_jobs.copy()
# ============================================== [ parser_job ] ==============================================
parser_jobs.add_argument("timeStyle", dest="time_style", type=str, required=True, choices=[f"{TRIGGER_TYPE_CRON}", ],
                         help=f"请输入时间风格, [{TRIGGER_TYPE_CRON}|{TRIGGER_TYPE_DATE}|{TRIGGER_TYPE_INTERVAL}]")

parser_jobs.add_argument("timeData", dest="time_data", type=str, required=True, help="请输入执行时间,如 0 5 * * *")
parser_jobs.add_argument("jobType", dest="job_type", type=str, required=True,
                         choices=[f"{JOB_TYPE_CLI}", f"{JOB_TYPE_SCRIPT}"],
                         help=f"请输入正确的任务类型,[{JOB_TYPE_CLI}|{JOB_TYPE_SCRIPT}]")

parser_jobs.add_argument("jobCmd", dest="job_cmd", type=str, help="请输入任务运行命令, 如 python test.py")
parser_jobs.add_argument("createdBy", dest="created_by", type=str, required=True, help="请输入任务创建人姓名")
parser_jobs.add_argument("category", dest="category", type=str, required=True,
                         help="请输入任务所属业务,[mes|erp|warranty|radar|pms|stopcard|...]")
Пример #17
0
program_add_par.add_argument('utility_id',
                             type=int,
                             required=True,
                             help='Utility ID. (Required)')
program_add_par.add_argument('version',
                             type=str,
                             required=True,
                             help='version str like "0.0.1". (Required)')
program_add_par.add_argument('provider_employee_id',
                             type=int,
                             nullable=True,
                             help='provider employee ID.')
program_add_par.add_argument('description', type=str, help='description.')

# put
program_put_par = program_add_par.copy()
program_put_par.replace_argument('utility_id', type=int, help='Utility ID.')
program_put_par.replace_argument('version',
                                 type=str,
                                 help='version str like "0.0.1".')
program_put_par.replace_argument('provider_employee_id',
                                 type=int,
                                 store_missing=False,
                                 help='provider employee ID.')
# get
program_get_par = CommonFilterParser()  # page_*, ids, disabled
program_get_par.add_argument('name', type=str, help='Name = ?')

# delete & disable
program_dd_par = CommonDisableParser()  # id, ids, desc
Пример #18
0
from flask_restful import Resource, abort, fields, marshal
from flask_restful.reqparse import RequestParser

from App.api.api_constant import *
from App.ext import cache
from App.models.model_utils import get_movie_user
from App.models.user import MovieUser
from App.utils import gen_token_movie_user

parser_base = RequestParser()
parser_base.add_argument("password", type=str, required=True, help="请输入密码")
parser_base.add_argument("action", type=str, required=True, help="请输入要进行的事项")

# 注册用args
parser_register = parser_base.copy()
parser_register.add_argument("username",
                             type=str,
                             required=True,
                             help="请输入用户名")
parser_register.add_argument("phone", type=str, required=True, help="请输入手机号")

# 登录用args, 区别在于username和phone字段中去掉了required=True
parser_login = parser_base.copy()
parser_login.add_argument("username", type=str, help="请输入用户名")
parser_login.add_argument("phone", type=str, help="请输入手机号")

# Response 中使用的模板
base_user_fields = {"username": fields.String, "phone": fields.String}

user_fields = {
Пример #19
0
answers_api = Blueprint('answers_api', __name__)
api = new_restful_api(answers_api)

new_answer_parser = RequestParser()
new_answer_parser.add_argument('user_id', default=None)
new_answer_parser.add_argument('group_id', default=None)
new_answer_parser.add_argument('comparable', type=bool, default=True)
new_answer_parser.add_argument('content', default=None)
new_answer_parser.add_argument('file_id', default=None)
new_answer_parser.add_argument('draft', type=bool, default=False)
new_answer_parser.add_argument('attempt_uuid', default=None)
new_answer_parser.add_argument('attempt_started', default=None)
new_answer_parser.add_argument('attempt_ended', default=None)

existing_answer_parser = new_answer_parser.copy()
existing_answer_parser.add_argument('id',
                                    required=True,
                                    help="Answer id is required.")

answer_list_parser = pagination_parser.copy()
answer_list_parser.add_argument('group', required=False, default=None)
answer_list_parser.add_argument('author', required=False, default=None)
answer_list_parser.add_argument('orderBy', required=False, default=None)
answer_list_parser.add_argument('top', type=bool, required=False, default=None)
answer_list_parser.add_argument('ids', required=False, default=None)

user_answer_list_parser = RequestParser()
user_answer_list_parser.add_argument('draft',
                                     type=bool,
                                     required=False,
Пример #20
0
new_assignment_parser.add_argument('self_eval_instructions', type=non_blank_text, default=None)
new_assignment_parser.add_argument('file_id', default=None)
new_assignment_parser.add_argument('students_can_reply', type=bool, default=False)
new_assignment_parser.add_argument('number_of_comparisons', type=int, required=True, nullable=False)
new_assignment_parser.add_argument('enable_self_evaluation', type=bool, default=False)
new_assignment_parser.add_argument('enable_group_answers', type=bool, default=False)
new_assignment_parser.add_argument('pairing_algorithm', default=None)
new_assignment_parser.add_argument('rank_display_limit', type=int, default=None)
new_assignment_parser.add_argument('educators_can_compare', type=bool, default=False)
# has to add location parameter, otherwise MultiDict will screw up the list
new_assignment_parser.add_argument('criteria', type=list, default=[], location='json')
new_assignment_parser.add_argument('answer_grade_weight', type=int, default=1)
new_assignment_parser.add_argument('comparison_grade_weight', type=int, default=1)
new_assignment_parser.add_argument('self_evaluation_grade_weight', type=int, default=1)

existing_assignment_parser = new_assignment_parser.copy()
existing_assignment_parser.add_argument('id', required=True, nullable=False, help="Assignment id is required.")

assignment_users_comparison_list_parser = pagination_parser.copy()
assignment_users_comparison_list_parser.add_argument('group', required=False, default=None)
assignment_users_comparison_list_parser.add_argument('author', required=False, default=None)

# events
on_assignment_modified = event.signal('ASSIGNMENT_MODIFIED')
on_assignment_get = event.signal('ASSIGNMENT_GET')
on_assignment_list_get = event.signal('ASSIGNMENT_LIST_GET')
on_assignment_create = event.signal('ASSIGNMENT_CREATE')
on_assignment_delete = event.signal('ASSIGNMENT_DELETE')
on_assignment_list_get_status = event.signal('ASSIGNMENT_LIST_GET_STATUS')
on_assignment_get_status = event.signal('ASSIGNMENT_GET_STATUS')
on_assignment_user_comparisons_get = event.signal('ASSIGNMENT_USER_COMPARISONS_GET')
Пример #21
0
dict_add_par = RequestParser()
dict_add_par.add_argument("category",
                          type=str,
                          required=True,
                          help="Name of a group of Enum values. (Required)")
dict_add_par.add_argument("name",
                          type=str,
                          required=True,
                          help="Enum name. (Required)")
dict_add_par.add_argument("disabled",
                          type=int,
                          choices=[0, 1],
                          default=0,
                          help=("disabled status, value choice. "
                                "1: disabled; 0: enabled;"))
dict_add_par.add_argument("note", type=str, help="Enum note.")
# put
dict_put_par = dict_add_par.copy()
dict_put_par.replace_argument("category",
                              type=str,
                              help="Name of a group of Enum values.")
dict_put_par.replace_argument("name", type=str, help="Enum name.")
# get
dict_get_par = CommonFilterParser()
dict_get_par.add_argument("id", type=int, help="ID = ?")
dict_get_par.add_argument("category", type=str, help="category = ?")
dict_get_par.add_argument("name", type=str, help="name = ?")

# del & dis
dict_dd_par = CommonDisableParser()
Пример #22
0
from sqlalchemy import and_, or_

from . import dataformat
from compair.authorization import require
from compair.core import db, event, abort
from compair.models import UserCourse, User, Course, CourseRole, \
    ThirdPartyUser, ThirdPartyType, Group, Answer
from .util import new_restful_api, get_model_changes

group_api = Blueprint('group_api', __name__)
api = new_restful_api(group_api)

new_group_parser = RequestParser()
new_group_parser.add_argument('name', required=True, nullable=False, help="Group name is required.")

existing_group_parser = new_group_parser.copy()
existing_group_parser.add_argument('id', required=True, nullable=False, help="Group id is required.")

# events
on_group_create = event.signal('GROUP_CREATE')
on_group_edit = event.signal('GROUP_EDIT')
on_group_get = event.signal('GROUP_GET')
on_group_delete = event.signal('GROUP_DELETE')

# /
class GroupRootAPI(Resource):
    @login_required
    def post(self, course_uuid):
        course = Course.get_active_by_uuid_or_404(course_uuid)
        new_group = Group(course_id=course.id)