Refactor append_csv function to accept Base as a parameter and improve foreign k…

…ey error handling in initializedb.py
1 parent 59807d70
...@@ -198,7 +198,7 @@ def restore_csv(table, filename, get_file_func=get_file, db_session=DBSession): ...@@ -198,7 +198,7 @@ def restore_csv(table, filename, get_file_func=get_file, db_session=DBSession):
# masih memungkinkan update yg sudah ada dgn syarat is value dari keys masih sama # masih memungkinkan update yg sudah ada dgn syarat is value dari keys masih sama
# sperti salah route url asalkan kode msh sama # sperti salah route url asalkan kode msh sama
def append_csv(table, filename, keys, get_file_func=get_file, def append_csv(table, filename, keys, get_file_func=get_file,
db_session=DBSession, **args): db_session=DBSession, base=Base, **args):
eng = db_session.get_bind() eng = db_session.get_bind()
update_exist = args.get("update_exist") update_exist = args.get("update_exist")
...@@ -213,7 +213,7 @@ def append_csv(table, filename, keys, get_file_func=get_file, ...@@ -213,7 +213,7 @@ def append_csv(table, filename, keys, get_file_func=get_file,
delimiter = "\t" delimiter = "\t"
# log.debug(f"Delimiter: {delimiter}") # log.debug(f"Delimiter: {delimiter}")
insp = inspect(DBSession.connection()) insp = inspect(db_session.connection())
# print(dir(table.__table__)) # print(dir(table.__table__))
# print("____") # print("____")
schema = hasattr( schema = hasattr(
...@@ -255,7 +255,7 @@ def append_csv(table, filename, keys, get_file_func=get_file, ...@@ -255,7 +255,7 @@ def append_csv(table, filename, keys, get_file_func=get_file,
foreign_table = t_array[1] foreign_table = t_array[1]
foreign_field = t_array[2] foreign_field = t_array[2]
foreign_table = Table(foreign_table, Base.metadata, foreign_table = Table(foreign_table, base.metadata,
# autoload=True, # merubah v1.4 ke v.2 # autoload=True, # merubah v1.4 ke v.2
autoload_with=eng, autoload_with=eng,
schema=schema) schema=schema)
...@@ -285,6 +285,8 @@ def append_csv(table, filename, keys, get_file_func=get_file, ...@@ -285,6 +285,8 @@ def append_csv(table, filename, keys, get_file_func=get_file,
with eng.connect() as conn: with eng.connect() as conn:
q = conn.execute(sql) q = conn.execute(sql)
row = q.fetchone() row = q.fetchone()
if not row:
raise Exception(f"Foreign key value '{value}' not found in table '{foreign_table.name}' for field '{fname}'")
value = row and row.id or None value = row and row.id or None
q.close() q.close()
# connection.close() # connection.close()
......
...@@ -22,7 +22,7 @@ from opensipkd.tools.buttons import ( ...@@ -22,7 +22,7 @@ from opensipkd.tools.buttons import (
from opensipkd.tools.report import csv_response, file_response from opensipkd.tools.report import csv_response, file_response
from pyramid.request import Response from pyramid.request import Response
from .common import DataTables from .common import DataTables
from ..models import DBSession, Partner from ..models import DBSession, Partner, Base
# , get_params, get_urls # , get_params, get_urls
from ..scripts.initializedb import append_csv from ..scripts.initializedb import append_csv
from ..tools import obj2json from ..tools import obj2json
...@@ -58,6 +58,7 @@ class BaseView(object): ...@@ -58,6 +58,7 @@ class BaseView(object):
self.req = request self.req = request
self.ses = self.req.session self.ses = self.req.session
self.db_session = DBSession self.db_session = DBSession
self.base = Base
self.params = self.req.params self.params = self.req.params
self.settings = get_settings() self.settings = get_settings()
self.tahun = None self.tahun = None
...@@ -763,8 +764,10 @@ class BaseView(object): ...@@ -763,8 +764,10 @@ class BaseView(object):
return open(filename) return open(filename)
def save_upload(self, file_name, **args): def save_upload(self, file_name, **args):
args.pop("table", None)
return append_csv(self.table, file_name, self.upload_keys, return append_csv(self.table, file_name, self.upload_keys,
get_file_func=self.get_file, update_exist=True, get_file_func=self.get_file, update_exist=True,
db_session=self.db_session, base=self.base,
**args) **args)
def before_add(self): def before_add(self):
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!