class ToDoListOptions(Schema): project = fields.CoalesceField( [fields.Integer(), fields.Text()], default=None, required=False) tag = custom_fields.StringIdentifiedField(models.Tag, default=None, required=False) query = fields.Text(default='') all_tasks = fields.Bool(default=False) flat = fields.Bool(default=False) limit = fields.Integer(default=25) ignore_priority = fields.Bool(default=False) minimum_priority = fields.CoalesceField( [fields.Integer(), fields.Text()], default=None, required=False) state = fields.Enum(models.State, soft_match=True, required=False, default=None) order_by = fields.List( fields.MultiChoiceField( { 'created_at', 'finished_at', 'state', 'priority', 'project', }, soft_match=True, ), required=False, default=None, )
class CreateTodoSchema(Schema): tags = fields.List( fields.CoalesceField([ fields.Integer(), fields.Text(min=1, max=127, pattern=re.compile(r'\w+')), ]), default=(), ) project = fields.CoalesceField( [ fields.Integer(), fields.Text(min=1, max=127, pattern=re.compile(r'\w+')), ], required=False, ) parents = fields.List( fields.CoalesceField([ fields.Integer(), fields.Text(), ]), default=(), ) priority = fields.CoalesceField( [ fields.Integer(), fields.Text(min=1, max=127, pattern=re.compile(r'\w+')), ], required=False, )
class StatsOptionsSchema(Schema): project = fields.CoalesceField( [fields.Integer(), fields.Text()], default=None, required=False) tag = custom_fields.StringIdentifiedField(models.Tag, default=None, required=False) top_level_only = fields.Bool(default=True) ignore_priority = fields.Bool(default=False) minimum_priority = fields.CoalesceField( [fields.Integer(), fields.Text()], default=None, required=False) last_n_days = fields.Integer(default=128)
class CommentSchema(Schema): target = fields.CoalesceField([fields.Integer(), fields.Text()]) project = custom_fields.StringIdentifiedField(models.Project, default=None) comment = fields.Text()
class TaggedSchema(Schema[models.Tagged]): todo_target = fields.CoalesceField([fields.Integer(), fields.Text()]) tag_target = custom_fields.StringIdentifiedField(models.Tag) project = custom_fields.StringIdentifiedField(models.Project, default=None) recursive = fields.Bool(default=False, write_only=True)
class ModifyToDoSchema(Schema): target = fields.CoalesceField([fields.Integer(), fields.Text()]) project = custom_fields.StringIdentifiedField(models.Project, default=None) description = fields.Text()
class ModifyPrioritySchema(Schema[models.Tagged]): todo = fields.CoalesceField([fields.Integer(), fields.Text()]) project = custom_fields.StringIdentifiedField(models.Project, default=None) priority = fields.CoalesceField([fields.Integer(), fields.Text()]) recursive = fields.Bool(default=False, write_only=True)
class AlarmListOptions(Schema): limit = fields.Integer(default=25) query = fields.CoalesceField( [fields.Integer(), fields.Text()], default=None, required=False)
SC.session.commit() except IntegrityError: SC.session.rollback() return 'Project already exists', status.HTTP_400_BAD_REQUEST return schema.serialize(project) @todo_project_views.route('/project/', methods = ['PATCH']) @inject_schema( Schema( { 'project': StringIdentifiedField(models.Project), 'default_priority_filter': fields.CoalesceField( [fields.Integer(), fields.Text()], default = None, required = False, ), } ), use_args = False, ) def modify_project(project: models.Project, default_priority_filter: t.Union[int, str, None]): if default_priority_filter is not None: default_priority_filter = get_priority_level(SC.session, default_priority_filter, project) project.default_priority_filter = default_priority_filter SC.session.commit() return schemas.ProjectSchema().serialize(project) @todo_project_views.route('/project/', methods = ['GET'])