def get_user_with_rep(usr_id):
    user = persistence.get_user_with_rep(usr_id)
    util.convert_time_to_string(user, USR_STIME)
    util.switch_null_to_default(user, USR_DEFAULTS)
    if user:
        return user[0]
    return None
def get_answers_to_question(qstn_id):
    answers = persistence.get_answers_to_question(qstn_id)
    if answers:
        answers[0]['answers_number'] = len(answers)
    util.convert_time_to_string(answers, ANSW_STIME)
    util.switch_null_to_default(answers, ANSW_DEFAULTS, (ANSW_MATE, ))
    return answers
def get_answer(answ_id):
    answer = persistence.select_query(ANSW_TABLE,
                                      '*',
                                      where=(ANSW_ID, '=', (answ_id, )))
    util.convert_time_to_string(answer, ANSW_STIME)
    util.switch_null_to_default(answer, ANSW_DEFAULTS, (ANSW_MATE, ANSW_REP))
    if answer:
        return answer[0]
    return None
def get_comment(cmnt_id):
    comment = persistence.select_query(CMNT_TABLE,
                                       '*',
                                       where=(CMNT_ID, '=', (cmnt_id, )))
    util.convert_time_to_string(comment, CMNT_STIME)
    util.switch_null_to_default(comment, CMNT_DEFAULTS,
                                (CMNT_ANSW_ID, CMNT_QSTN_ID, CMNT_MATE))
    if comment:
        return comment[0]
    return None
def get_question(qstn_id):
    cols = [(QSTN_TABLE, header) for header in QSTN_HEADERS]
    cols.append('username')
    join_on_cols = [(QSTN_TABLE, QSTN_MATE), (USR_TABLE, USR_ID)]
    group_by = [(QSTN_TABLE, QSTN_ID), (USR_TABLE, USR_ID)]
    where = ((QSTN_TABLE, QSTN_ID), '=', (qstn_id, ))
    question = persistence.select_query(table=QSTN_TABLE,
                                        columns=cols,
                                        join_params=(USR_TABLE, join_on_cols,
                                                     'LEFT'),
                                        where=where,
                                        groups=group_by)
    util.convert_time_to_string(question, QSTN_STIME)
    util.switch_null_to_default(question, QSTN_DEFAULTS,
                                (QSTN_MATE, QSTN_A_ANSW, QSTN_REP))
    if question:
        return question[0]
    return None
def get_all_questions(limit=None, order_by=None):
    cols = [(QSTN_TABLE, header) for header in QSTN_HEADERS]
    cols.append(('COUNT', (ANSW_TABLE, ANSW_QSTN_ID), 'answers_number'))
    join_on_cols = [(QSTN_TABLE, QSTN_ID), ANSW_QSTN_ID]
    group_by = [(QSTN_TABLE, QSTN_ID)]
    if order_by is None:
        order_by = [(QSTN_STIME, DESC)]
    questions = persistence.select_query(table=QSTN_TABLE,
                                         columns=cols,
                                         join_params=(ANSW_TABLE, join_on_cols,
                                                      'LEFT'),
                                         groups=group_by,
                                         orders=order_by,
                                         limit=limit)
    util.convert_time_to_string(questions, QSTN_STIME)
    util.switch_null_to_default(questions, QSTN_DEFAULTS,
                                (QSTN_MATE, QSTN_A_ANSW, QSTN_REP))
    return questions
def get_comments_to_question_and_answers(qstn_id, answ_ids):
    cols = [(CMNT_TABLE, header) for header in CMNT_HEADERS]
    cols.append('username')
    join_on_cols = [(CMNT_TABLE, CMNT_MATE), (USR_TABLE, USR_ID)]
    group_by = [(CMNT_TABLE, CMNT_ID), (USR_TABLE, USR_ID)]

    if answ_ids:
        where = [[(CMNT_QSTN_ID, '=', (qstn_id, )),
                  (CMNT_ANSW_ID, 'IN', answ_ids)], ["OR"]]
    else:
        where = (CMNT_QSTN_ID, '=', (qstn_id, ))

    comments = persistence.select_query(table=CMNT_TABLE,
                                        columns=cols,
                                        join_params=(USR_TABLE, join_on_cols,
                                                     'LEFT'),
                                        where=where,
                                        groups=group_by,
                                        orders=[(CMNT_STIME, DESC)])
    util.convert_time_to_string(comments, CMNT_STIME)
    util.switch_null_to_default(comments, CMNT_DEFAULTS,
                                (CMNT_ANSW_ID, CMNT_QSTN_ID, CMNT_MATE))
    return comments