import sys from configparser import ConfigParser from argparse import ArgumentParser from sqlalchemy import ( create_engine, or_, ) from sqlalchemy.orm import sessionmaker from opensipkd.base.models import User from opensipkd.hosting.models import TaskModel STATUS = dict( draft=1, analisa=2, design=2, development=3, qc=4, implementation=5, selesai=6) STATUS_LIST = list(STATUS.keys()) KET_STATUS = [ '', 'Draft', 'Analisa & Design', 'Development', 'QC', 'Implementation', 'Selesai'] pars = ArgumentParser() pars.add_argument('conf') pars.add_argument('--search', required=True) option = pars.parse_args(sys.argv[1:]) conf = ConfigParser() conf.read(option.conf) db_url = conf.get('main', 'db_url') engine = create_engine(db_url) session_factory = sessionmaker(bind=engine) DBSession = session_factory() q = DBSession.query(TaskModel, User).\ outerjoin(User, TaskModel.cu_id == User.id) tokens = option.search.lower().split() for token in tokens: if token in STATUS_LIST: status_id = STATUS[token] q = q.filter(TaskModel.status == status_id) else: q = q.filter(or_( User.user_name.ilike(f'%{token}%'), TaskModel.nama.ilike(f'%{token}%'), TaskModel.notes.ilike(f'%{token}%'))) no = 0 for task, user in q.order_by(TaskModel.id): no += 1 ket_status = KET_STATUS[task.status] print('-' * 50) print(f'#{no} {task.id} {ket_status}, {user.user_name}, {task.nama}') print(task.notes)