class Rows(Resource):
    method_decorators = [auth_admin(False)]

    @marshal_with(rows_fields)
    def get(self, idTable, rows_id):
        ret = models.Insert.query.filter_by(id=rows_id).first()
        if ret is not None:
            if idTable != ret.idTable:
                return ret, HTTP_Bad_Request
            return ret, HTTP_OK
        else:
            return {}, HTTP_NotFound

    def delete(self, idTable, rows_id):
        ret = models.Insert.query.filter_by(id=rows_id).first()
        if ret is not None:
            if ret.idTable != idTable:
                return get_common_error_dic(
                    'table id not match rows id'), HTTP_Bad_Request
            schema = ret.Table.Schema
            db.session.delete(ret)
            db.session.commit()
            update_result(schema)
            return {}, HTTP_OK
        else:
            return {}, HTTP_NotFound
示例#2
0
class RowsList(Resource):
    method_decorators = [auth_admin(inject=False)]

    def get(self, idTable):
        rows = models.Insert.query.filter_by(idTable=idTable)
        data = [marshal(row, rows_fields) for row in rows]
        table = models.Table.query.get(idTable)
        schema = table.Schema
        ret = {}
        if schema is not None:
            conn = sqlite3.connect(schema.path)
            c = conn.cursor()
            try:
                c.execute('select * from ' + table.name)
                ret = c.fetchall()
                print(c.fetchall())
            except Exception as e:
                return get_common_error_dic(str(e)), HTTP_Bad_Request
            finally:
                conn.close()

        return {'data': data, 'detail': ret}, HTTP_OK

    # DONE need to update answer result
    def post(self, idTable):
        row = models.Insert()
        row.idTable = idTable
        row.sql = request.json.get('sql')
        data = request.json.get('data')
        # print(str(tuple(data)))
        table = models.Table.query.get(idTable)
        if data is not None and row.sql is None:
            row.sql = 'INSERT INTO ' + table.name + ' VALUES' + str(
                tuple(data))[:-2] + ")"
            print(row.sql)
        schema = table.Schema
        if schema is not None and row.sql is not None:
            conn = sqlite3.connect(schema.path)
            c = conn.cursor()
            try:
                c.execute(row.sql)
                conn.commit()
            except Exception as e:
                return get_common_error_dic(str(e)), HTTP_Bad_Request
            finally:
                conn.close()
            db.session.add(row)
            db.session.commit()
            update_result(schema)
            return {}, HTTP_Created
        else:
            return get_shortage_error_dic('idTable or sql'), HTTP_Bad_Request
示例#3
0
class Students(Resource):

    method_decorators = [auth_admin(False)]

    @marshal_with(student_fields)
    def get(self, student_id):
        ret = models.Student.query.filter_by(id=student_id).first()
        if ret is not None:
            return ret, HTTP_OK
        else:
            return {}, HTTP_NotFound

    def delete(self, student_id):
        ret = models.Student.query.filter_by(id=student_id).first()
        if ret is not None:
            db.session.delete(ret)
            db.session.commit()
            return {}, HTTP_OK
        else:
            return {}, HTTP_NotFound

    def put(self, student_id):
        ret = models.Student.query.filter_by(id=student_id).first()
        if ret is not None:
            ret.password = request.json['password']
            ret.name = request.json['name']
            try:
                db.session.commit()
            except Exception as e:
                return get_except_error(e)
            return {}, HTTP_OK
        else:
            return {}, HTTP_NotFound

    def patch(self, student_id):
        ret = models.Student.query.filter_by(id=student_id).first()
        if ret is not None:
            ret.password = ret.password if request.json[
                'password'] is None else request.json['password']
            ret.name = ret.name if request.json[
                'name'] is None else request.json['name']
            try:
                db.session.commit()
            except Exception as e:
                return get_except_error(e)
            return {}, HTTP_OK
        else:
            return {}, HTTP_NotFound
示例#4
0
class Table(Resource):
    method_decorators = [auth_admin(False)]

    @marshal_with(table_fields)
    def get(self, idSchema, table_id):
        ret = models.Table.query.filter_by(id=table_id).first()
        if ret is not None:
            if idSchema != ret.idSchema:
                return ret, HTTP_Bad_Request
            return ret, HTTP_OK
        else:
            return {}, HTTP_NotFound

    def delete(self, idSchema, table_id):
        ret = models.Table.query.filter_by(id=table_id).first()

        if ret is not None:
            # delete table in sqlite
            recover_schema(ret.Schema)
            conn = sqlite3.connect(ret.Schema.path)
            cur = conn.cursor()
            try:
                cur.execute('DROP TABLE IF EXISTS {}'.format(ret.name))
            except Exception as e:
                return get_common_error_dic(str(e)), HTTP_Server_Error
            finally:
                cur.close()
                conn.close()

            if ret.idSchema != idSchema:
                return get_common_error_dic(
                    'schema id not match table id'), HTTP_Bad_Request
            db.session.delete(ret)
            db.session.commit()
            return {}, HTTP_OK
        else:
            return {}, HTTP_NotFound