예제 #1
0
class Account(object):
    def __init__(self, db_update_fun=None, **kwargs):
        """
        id, passwd,
        id_card, email, phone,
        leader_id,
        bank, bank_address, bank_account, bank_name,
        wechat, alipay
        :param db_update_fun:
        :param kwargs:
        :return:
        """
        self.__dict__ = kwargs

        self.dfp = DirtyFlagProcess(self)
        self.db_update_fun = db_update_fun

    def update(self, curtime):
        dirty_db_dict = self.dfp.get_db_dirty_attr()
        if dirty_db_dict and self.db_update_fun:
            dirty_db_dict['id'] = self.id
            self.db_update_fun([dirty_db_dict])

    def __str__(self):
        return str(self.get_info_dic())

    def __eq__(self, other):
        return self.id == other.id

    def __get_key(self, key):
        return self.__dict__[key] if key in self.__dict__ else getattr(
            self, "attr_%s" % key, "")

    def get_info_dic(self):
        """
        获取所有信息
        :return:
        """
        return dict([(key, self.__get_key(key)) for key in KEY_SET])

    def view_info_dic(self):
        """
        允许别人来查看的信息
        :return:
        """
        return dict([(key, self.__get_key(key))
                     for key in KEY_SET - PRIVATE_KEY_SET])

    def update_data(self, data_dic):
        """
        数据更新
        :param data_dic: 需要更新的数据
        :return:
        """
        for k, v in data_dic.items():
            self.__dict__[k] = v
        self.dfp.add_db_flag_ls(data_dic.keys())

    # passwd
    @property
    def attr_passwd(self):
        return self.passwd

    @attr_passwd.setter
    def attr_passwd(self, new_passwd):
        if self.passwd == new_passwd or not new_passwd:
            return

        self.passwd = new_passwd
        self.dfp.add_db_flag("passwd")

    # stat
    @property
    def attr_stat(self):
        return self.stat

    @attr_stat.setter
    def attr_stat(self, new_stat):
        if self.stat == new_stat:
            return

        self.stat = new_stat
        self.dfp.add_db_flag("stat")
        self.attr_active_time = time.time()

    # login_time
    @property
    def attr_login_time(self):
        return self.login_time

    @attr_login_time.setter
    def attr_login_time(self, new_login_time):
        if self.login_time == new_login_time:
            return

        self.login_time = new_login_time
        self.dfp.add_db_flag("login_time")

    # active_time
    @property
    def attr_active_time(self):
        return self.active_time

    @attr_active_time.setter
    def attr_active_time(self, new_active_time):
        if self.active_time == new_active_time:
            return

        self.active_time = new_active_time
        self.dfp.add_db_flag("active_time")

    # level
    @property
    def attr_level(self):
        finished_orders = self.attr_finished_accept + self.attr_finished_apply

        cur_lvel_idx = 0
        for i, lvl_req in enumerate(LEV_REQ):
            if finished_orders > lvl_req:
                cur_lvel_idx = i
            else:
                break

        return LEVEL[cur_lvel_idx]

    @property
    def is_seal(self):
        """
        是否封号
        :return:
        """
        return self.attr_stat == SEALED

    @property
    def is_active(self):
        """
        是否激活
        :return:
        """
        return self.attr_stat == ACTIVED