Commit d5a27f71 authored by Sarah Abrishami's avatar Sarah Abrishami

debugged problems

parent 65cc9786
...@@ -39,6 +39,7 @@ class TestingConfig(Config): ...@@ -39,6 +39,7 @@ class TestingConfig(Config):
class LocalConfig(Config): class LocalConfig(Config):
SQLALCHEMY_DATABASE_URI = 'postgresql+psycopg2://postgres:postgres@localhost:5432/dbdq_test'
IO = 'http://localhost:5300' IO = 'http://localhost:5300'
DEBUG = True DEBUG = True
AUTO_UPDATE = False AUTO_UPDATE = False
......
...@@ -6,5 +6,5 @@ main = Blueprint('main', __name__) ...@@ -6,5 +6,5 @@ main = Blueprint('main', __name__)
CORS(main) CORS(main)
from app.main import errors from app.main import errors
from app.main.views import life_check, validate from app.main.views import life_check, validate, rulegroup, ruleset
from app import db from app import db
...@@ -5,11 +5,11 @@ import numpy as np ...@@ -5,11 +5,11 @@ import numpy as np
import pandas as pd import pandas as pd
from app.errors import * from app.errors import *
import gc import gc
from rulemall.utils.rule_builder import rule_builder
from app import db from app import db
from app.models import Validation from app.models import Validation
import yaml import yaml
import requests import requests
from app.main.utils.db_util import return_rg
def response_message(data=None, status=200): def response_message(data=None, status=200):
...@@ -60,26 +60,50 @@ def convert(o): ...@@ -60,26 +60,50 @@ def convert(o):
json.dumps(o) json.dumps(o)
def read_data(ds=None, uid=None, cols=[]): def read_data(puid=None, ruleset=None, cols=[], path=None):
if ds: if puid:
req = requests.post(f'{current_app.config["IO"]}/r/data/{ds}/{uid}', json={'columns': cols}) if ruleset:
ruleset.data['type'] = 'rp'
uid = ruleset.data['uid']
else:
uid = puid
if cols:
req = requests.post(f'{current_app.config["IO"]}/get_data/{uid}', json={'columns': cols})
else:
req = requests.post(f'{current_app.config["IO"]}/get_data/{uid}', json={'form_code': 'all'})
return pd.DataFrame(req.json()['data']) return pd.DataFrame(req.json()['data'])
else: else:
return pd.read_excel('app/main/static/sample_data.xlsx') if not path:
path = 'app/main/static/sample_data.xlsx'
return pd.read_excel(path)
def read_rules(): def read_rules(rsid=None, rgid=None, where='file', path=None):
path = 'app/main/static/rule_config.yml' if where == 'db':
return yaml.load(open(path), Loader=yaml.FullLoader) if rgid:
return return_rg(rsid, rgid)
else:
if not path:
path = 'app/main/static/rule_config.yml'
return yaml.load(open(path), Loader=yaml.FullLoader), None
def write_validations(data): def write_validations(data, where='file', path=None):
try: if where == 'db':
data = data.loc[~data['validation']] try:
obj = [] # data = data.loc[~data['validation']]
data.apply(lambda x: obj.append(Validation(rid=x['rid'], rgid=x['rgid'], modified_date=x['modified_date'], obj = []
responsible=x['responsible'], created_date=x['created_date'])), axis=1) data.apply(lambda x: obj.append(Validation(rid=x['rid'], rgid=x['rgid'], modified_date=x['modified_date'],
db.session.bulk_save_objects(obj) responsible=x['responsible'], created_date=x['created_date'])), axis=1)
except Exception as e: db.session.bulk_save_objects(obj)
return str(e) db.session.commit()
except Exception as e:
return str(e)
else:
try:
if not path:
path = 'validation.xlsx'
data.to_excel(path)
except Exception as e:
return str(e)
return 'success' return 'success'
from app import db from app import db
from app.models import Ruleset from app.models import Ruleset, RuleGroup
def add_rs(config):
rs = Ruleset()
rs.from_dict(config)
db.session.add(rs)
db.session.commit()
return str(rs.uid)
def add_rg(rsid, rg): def add_rg(rsid, rg):
rs = db.session.query(Ruleset).filter(Ruleset.uid == rsid).one() rs = db.session.query(Ruleset).filter(Ruleset.uid == rsid).one()
l = len(rs.rulegroups)
rs.add_rulegroup(rg) rs.add_rulegroup(rg)
db.session.add(rs) db.session.add(rs)
db.session.commit() db.session.commit()
return True return str(rs.rulegroups[l].uid)
def return_rg(rsid, rgid=None): def return_rg(rsid, rgid=None):
rs = db.session.query(Ruleset).filter(Ruleset.uid == rsid).one() rs = db.session.query(Ruleset).filter(Ruleset.uid == rsid).one()
rules = rs.return_rulegroups() rgs = rs.return_rulegroups()
if rgid: if rgid:
rules = list(filter(lambda x: x.uid == rgid, rules)) try:
return rules rule = db.session.query(RuleGroup).filter(RuleGroup.uid == rgid, RuleGroup.rsid == rsid).one()
except Exception:
raise Exception('rulegroup not found')
rgs = {'name': rule.name, 'rules': rule.rules}
return rgs, rs
def rm_rg(rsid, rgid=None): def rm_rg(rsid, rgid=None):
......
...@@ -3,18 +3,19 @@ from app.main.utils.common import response_message ...@@ -3,18 +3,19 @@ from app.main.utils.common import response_message
from flask import request from flask import request
from rulemall import RulesGroup from rulemall import RulesGroup
from app.main.utils.db_util import add_rg, return_rg, rm_rg from app.main.utils.db_util import add_rg, return_rg, rm_rg
from datetime import datetime
@main.post('/rg/<uuid:rsid>') @main.post('/rg/<uuid:rsid>')
def create_rg(rsid): def create_rg(rsid):
req = request.get_json() req = request.get_json()
try: try:
configs = {'name': req['name'], 'rules': req['rules']} configs = {'name': req['name'], 'rules': req['rules'], 'created_date': str(datetime.now()),
'modified_date': str(datetime.now())}
rg = RulesGroup().from_dict(configs) rg = RulesGroup().from_dict(configs)
add_rg(rsid, configs) return response_message(add_rg(rsid, configs))
except Exception as e: except Exception as e:
return response_message(str(e), 500) return response_message(str(e), 500)
return response_message()
@main.get('/rg/<uuid:rsid>') @main.get('/rg/<uuid:rsid>')
...@@ -36,6 +37,7 @@ def read_rg(rsid, rgid): ...@@ -36,6 +37,7 @@ def read_rg(rsid, rgid):
return response_message(rgs) return response_message(rgs)
# TODO
@main.put('/rg') @main.put('/rg')
def update_rg(): def update_rg():
req = request.get_json() req = request.get_json()
...@@ -44,7 +46,7 @@ def update_rg(): ...@@ -44,7 +46,7 @@ def update_rg():
@main.delete('/rg/<uuid:rsid>') @main.delete('/rg/<uuid:rsid>')
def delete_rg(rsid): def delete_rg_all(rsid):
try: try:
rgs = rm_rg(rsid) rgs = rm_rg(rsid)
except Exception as e: except Exception as e:
......
from app.main import main
from app.main.utils.common import response_message
from flask import request
from app.main.utils.db_util import add_rs
from datetime import datetime
@main.post('/rs')
def create_rs():
req = request.get_json()
try:
req['created_date'] = datetime.now()
req['modified_date'] = datetime.now()
return response_message(add_rs(req))
except Exception as e:
return response_message(str(e), 500)
...@@ -5,18 +5,19 @@ import pandas as pd ...@@ -5,18 +5,19 @@ import pandas as pd
from datetime import datetime from datetime import datetime
@main.route('/validate/<ds>/<uid>', methods=['GET', 'POST']) @main.route('/validate/<rsid>/<rgid>', methods=['GET', 'POST'])
def validate(ds, uid): def validate(rsid, rgid):
configs = read_rules() configs, rs = read_rules(rsid, rgid, where='db')
rg = RulesGroup().from_dict(configs) rg = RulesGroup().from_dict(configs)
cols = rg.get_target() # TODO fix get target
data = read_data(ds, uid, cols) # cols = rg.get_target()
data = read_data(rsid, rs)
rg.reset_data(data) rg.reset_data(data)
validation, responsible = rg.validate() validation, responsible = rg.validate()
validation = pd.concat([validation.rename('validation'), responsible], axis=1) validation = pd.concat([validation.rename('validation'), responsible], axis=1)
validation = validation.reset_index().rename(columns={'index': 'rid'}) validation = validation.reset_index().rename(columns={'index': 'rid'})
# TODO return rule group id # TODO return rule group id
validation['rgid'] = rg.id validation['rgid'] = rgid
validation['created_date'] = datetime.now() validation['created_date'] = datetime.now()
validation['modified_date'] = datetime.now() validation['modified_date'] = datetime.now()
result = write_validations(validation) result = write_validations(validation)
......
...@@ -15,7 +15,7 @@ class Ruleset(db.Model): ...@@ -15,7 +15,7 @@ class Ruleset(db.Model):
return f'<Ruleset {self.uid}>' return f'<Ruleset {self.uid}>'
def from_dict(self, dct): def from_dict(self, dct):
for field in ['uid', 'created_date', 'modified_date', 'query', 'connection_string']: for field in ['data', 'created_date', 'modified_date']:
if field in dct: if field in dct:
setattr(self, field, dct[field]) setattr(self, field, dct[field])
if 'rulegroups' in dct: if 'rulegroups' in dct:
...@@ -63,9 +63,10 @@ class RuleGroup(db.Model): ...@@ -63,9 +63,10 @@ class RuleGroup(db.Model):
return f'<RuleGroup {self.uid}>' return f'<RuleGroup {self.uid}>'
def from_dict(self, dct): def from_dict(self, dct):
for field in ['name', 'rules']: for field in ['name', 'rules', 'created_date', 'modified_date']:
if field in dct: if field in dct:
setattr(self, field, dct[field]) setattr(self, field, dct[field])
return self
def to_dict(self): def to_dict(self):
dct = {'uid': self.uid, 'rsid': self.rsid, 'name': self.name, 'created_date': self.created_date, dct = {'uid': self.uid, 'rsid': self.rsid, 'name': self.name, 'created_date': self.created_date,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment