示例#1
0
 def __init__(self):
     """
     Initialization
     """
     self._db_base = Base()
     self.engine = self._db_base.init(clear=False)
示例#2
0
class Helper:
    def __init__(self):
        """
        Initialization
        """
        self._db_base = Base()
        self.engine = self._db_base.init(clear=False)

    # -------------------------- Message db operation -------------------------------------------- #
    def add_message(self, values):
        field_name = [
            'message_id',
            'body',
            'from_id',
            'to_id',
            'notify',
            'participant_id',
            'is_out',
            'is_group',
            'is_media',
            'timestamp',
            'status'
        ]
        fields = dict(zip(field_name, values))
        self.add_query('Message', fields)

    def get_all_messages(self, current_id):
        sql = "select * from message left join contact on contact.id = message.participant_id where message.from_id = "+current_id
        count_sql = "select count(id) from message where from_id = "+current_id
        records = self.engine.execute(sql)
        count = self.engine.execute(count_sql).scalar()
        return {'records': records, 'count': count}

    def set_read(self, current_id):
        sql = "update message set status = 20 where from_id = "+current_id
        self.engine.execute(sql)

    # -------------------------- Profile db operation -------------------------------------------- #
    def get_credentials(self):
        sess = self._db_base.session()
        record = sess.query(Profile).first()
        sess.close()
        if record:
            return {'phone_number': str(record.country_code)+str(record.phone_number), 'password': record.password}
        else:
            return None

    # -------------------------- Contact db operation -------------------------------------------- #
    def get_jid_of_id(self, idx):
        sess = self._db_base.session()
        try:
            record = sess.query(Contact).filter_by(id=idx).one()
            sess.close()
            return record.jid
        except NoResultFound:
            return
        except MultipleResultsFound:
            record = sess.query(Contact).filter_by(id=idx).first()
            sess.close()
            return record.jid

    def updatePresence(self, jid, available=None, last=None):
        sess = self._db_base.session()
        try:
            record = sess.query(Contact).filter_by(jid=jid).one()
            record.is_online = "20" if available is None else "10"
            record.last_seen = record.last_seen if last is None else last
            sess.commit()
            sess.close()
        except NoResultFound:
            return
        except MultipleResultsFound:
            record = sess.query(Contact).filter_by(jid=jid).first()
            record.is_online = "20" if available is None else "10"
            record.last_seen = record.last_seen if last is None else last
            sess.commit()
            sess.close()
            return

    def get_contact_id(self, jid, notify, is_group=0):
        sess = self._db_base.session()
        if jid:
            try:
                record = sess.query(Contact).filter_by(jid=jid).one()
                sess.close()
                return record.id
            except NoResultFound:
                sess.close()
                self.add_contact([
                    jid,
                    notify,
                    "",
                    "",
                    "",
                    is_group,
                    10,
                    ""
                ])
                return self.get_contact_id(jid, notify)
            except MultipleResultsFound:
                record = sess.query(Contact).filter_by(jid=jid).first()
                sess.close()
                return record.id
        else:
            return jid

    def update_contact_id(self, jid, name):
        sess = self._db_base.session()
        if jid:
            try:
                record = sess.query(Contact).filter_by(jid=jid).one()
                record.name = name
                sess.commit()
                sess.close()
                return
            except NoResultFound:
                self.add_contact([
                    jid,
                    name,
                    "",
                    "",
                    "",
                    1,
                    10,
                    ""
                ])
                return
            except MultipleResultsFound:
                return
        else:
            return

    def check_contact_id(self, jid):
        sess = self._db_base.session()
        if jid:
            try:
                record = sess.query(Contact).filter_by(jid=jid).one()
                sess.close()
                return True
            except NoResultFound:
                sess.close()
                return False
            except MultipleResultsFound:
                record = sess.query(Contact).filter_by(jid=jid).first()
                sess.close()
                return True
        else:
            return False

    def get_contact_group(self, group=False):
        sql = "select id, jid from contact where is_group = 0"
        records = self.engine.execute(sql)
        return records

    def get_all_contact(self):
        sql = "select contact.id, contact.name, " \
              "(select count(message.id) from message " \
              "where message.from_id = contact.id and message.status = 10), " \
              "contact.status_message, contact.is_group, contact.is_online from contact " \
              "left join message as msg on msg.from_id = contact.id " \
              "group by contact.id order by msg.timestamp desc"
        count_sql = "select count(id) from contact"
        records = self.engine.execute(sql)
        count = self.engine.execute(count_sql).scalar()
        return {'records': records, 'count': count}

    def add_contact(self, values):
        field_name = [
            'jid',
            'name',
            'contact_image',
            'status_message',
            'status',
            'is_group',
            'is_online',
            'lastSeen'
        ]
        fields = dict(zip(field_name, values))
        self.add_query('Contact', fields)

    # -------------------------- Base db operation -------------------------------------------- #
    def add_query(self, model, values):
        sess = self._db_base.session()
        model = globals()[model]
        model = model()
        for name, value in values.items():
            setattr(model, name, value)
        sess.add(model)
        sess.commit()
        sess.close()