diff --git a/application/database.py b/application/database.py index 7a7143f4..991678fd 100644 --- a/application/database.py +++ b/application/database.py @@ -174,7 +174,7 @@ class bsdd_validation_task(validation_task): } class schema_validation_task(validation_task): - results = relationship("schema_result") + results = relationship("schema_result", order_by='schema_result.constraint_type.asc(),schema_result.attribute.asc()') __mapper_args__ = { "polymorphic_identity": "schema_validation_task", @@ -283,7 +283,10 @@ class schema_result(Base, Serializable): id = Column(Integer, primary_key=True) task_id = Column(Integer, ForeignKey('validation_tasks.id')) msg = Column(String, default="msg") - + constraint_type = Column(Enum("uncategorized", 'schema', 'global_rule', 'simpletype_rule', 'entity_rule', name='schema_constraint_types'), default="uncategorized") + attribute = Column(String) + instance_id = Column(Integer, ForeignKey('instances.id')) + def __init__(self, task_id): self.task_id = task_id @@ -294,6 +297,9 @@ class syntax_result(Base, Serializable): id = Column(Integer, primary_key=True) task_id = Column(Integer, ForeignKey('validation_tasks.id')) msg = Column(String, default="msg") + error_type = Column(Enum("uncategorized", 'unexpected_token', 'unexpected_character', 'duplicate_name', name='syntax_error_types'), default="uncategorized") + lineno = Column(Integer) + column = Column(Integer) def __init__(self, task_id): self.task_id = task_id diff --git a/application/main.py b/application/main.py index 8b59ac36..487235bb 100644 --- a/application/main.py +++ b/application/main.py @@ -648,6 +648,33 @@ def __eq__(self, other): (self.validation_constraints == other.validation_constraints) and \ (self.validation_results == other.validation_results) +@application.route('/api/report_schema/') +@login_required +def report_schema(user_data, start, end, code): + with database.Session as session: + session = database.Session() + + model = session.query(database.model).filter( + database.model.code == code).all()[0] + + schema_task_results = [task.results for task in model.tasks if task.task_type == 'schema_validation_task'][0] + constraint_types = [str(c[0]) for c in session.query(database.schema_result.constraint_type).distinct().all()] + results = {'constraint_types': [str(c[0]) for c in session.query(database.schema_result.constraint_type).distinct().all()], + 'values': { + }} + + def get_values_count(constraint_type): + values = [r.serialize() for r in schema_task_results if r.constraint_type == constraint_type][slice(int(start), int(end))] + count = len(values) + return {'v': values, 'c': count} + + for constraint_type in constraint_types: + results['values'][constraint_type] = { + 'saved_values' : get_values_count(constraint_type)['v'], + 'saved_count' : get_values_count(constraint_type)['c'] + } + + return jsonify(results)