Commit a975ba98 by aagusti

append csv penanganan boolean field

1 parent c0957fa0
import csv
import logging import logging
import os import os
import sys
import csv
from collections import defaultdict
import transaction
import subprocess import subprocess
import sys
from getpass import getpass from getpass import getpass
from sqlalchemy import (engine_from_config, select, Table, )
from sqlalchemy.schema import CreateSchema
from ziggurat_foundations.models.services.user import UserService
from pyramid.paster import (get_appsettings, setup_logging, )
from opensipkd.models.handlers import LogDBSession import transaction
from opensipkd.models import ( from opensipkd.models import (
init_model, DBSession, Base, Group, UserGroup, Permission, GroupPermission, init_model, DBSession, Base, Group, UserGroup, Permission, GroupPermission,
User, Route, Eselon, Jabatan, ResProvinsi, ResDati2, ResKecamatan, ResDesa, User, Route, Eselon, Jabatan, ResProvinsi, ResDati2, ResKecamatan, ResDesa,
Menus, Pangkat) Menus, Pangkat)
from opensipkd.models.handlers import LogDBSession
from sqlalchemy.dialects import oracle from pyramid.paster import (get_appsettings, setup_logging, )
from sqlalchemy import (engine_from_config, select, Table, inspect)
from sqlalchemy.sql.sqltypes import BOOLEAN
from sqlalchemy import text from sqlalchemy import text
from sqlalchemy.dialects import oracle
from sqlalchemy.schema import CreateSchema
from ziggurat_foundations.models.services.user import UserService
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
# , mssql # , mssql
# from .tools import mkdir # from .tools import mkdir
...@@ -140,6 +139,14 @@ def restore_csv(table, filename, get_file_func=get_file, db_session=DBSession): ...@@ -140,6 +139,14 @@ def restore_csv(table, filename, get_file_func=get_file, db_session=DBSession):
# 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, update_exist=False, delimiter=","): db_session=DBSession, update_exist=False, delimiter=","):
insp = inspect(DBSession.connection())
columns_table = insp.get_columns(table.__tablename__)
fields = {}
for c in columns_table:
fields[c["name"]] = c["type"]
with get_file_func(filename) as f: with get_file_func(filename) as f:
reader = csv.DictReader(f, delimiter=delimiter) reader = csv.DictReader(f, delimiter=delimiter)
filter_ = dict() filter_ = dict()
...@@ -156,7 +163,7 @@ def append_csv(table, filename, keys, get_file_func=get_file, ...@@ -156,7 +163,7 @@ def append_csv(table, filename, keys, get_file_func=get_file,
try: try:
t = fname.split('/') t = fname.split('/')
except Exception as e: except Exception as e:
print(fname, cf.keys()) log.debug(fname, cf.keys())
raise e raise e
fname_orig = t[0] fname_orig = t[0]
...@@ -218,6 +225,8 @@ def append_csv(table, filename, keys, get_file_func=get_file, ...@@ -218,6 +225,8 @@ def append_csv(table, filename, keys, get_file_func=get_file,
user = True user = True
password = val password = val
else: else:
if fname_orig in fields and type(fields[fname_orig]) is BOOLEAN:
val = (val == 'true' or val == '1' or val == 1) and True or False
setattr(row, fname_orig, val) setattr(row, fname_orig, val)
db_session.add(row) db_session.add(row)
...@@ -248,7 +257,7 @@ def reset_sequence_(cls, seq): ...@@ -248,7 +257,7 @@ def reset_sequence_(cls, seq):
if not q.first(): if not q.first():
sql = "SELECT setval('{}', 1, false)".format(seq) sql = "SELECT setval('{}', 1, false)".format(seq)
# DBSession.bind.execute(sql) # DBSession.bind.execute(sql)
#sqlalchemy 2 # sqlalchemy 2
DBSession.execute(text(sql)) DBSession.execute(text(sql))
...@@ -262,8 +271,8 @@ def alembic_run(ini_file, name=None): ...@@ -262,8 +271,8 @@ def alembic_run(ini_file, name=None):
alembic_bin = os.path.join(bin_path, 'alembic') alembic_bin = os.path.join(bin_path, 'alembic')
if not name: if not name:
command = ( command = (
alembic_bin, '-c', ini_file, '-n', 'alembic_ziggurat', 'upgrade', alembic_bin, '-c', ini_file, '-n', 'alembic_ziggurat', 'upgrade',
'head') 'head')
if subprocess.call(command) != 0: if subprocess.call(command) != 0:
sys.exit() sys.exit()
else: else:
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!