コード例 #1
0
ファイル: user.py プロジェクト: MarauderXtreme/sipa
 def has_user_db(self):
     return user_has_mysql_db(self.uid)
コード例 #2
0
ファイル: user.py プロジェクト: MarauderXtreme/sipa
    def get_information(self):
        """Executes select query for the username and returns a prepared dict.

        * Dormitory IDs in Mysql are from 1-11, so we map to 0-10 with "x-1".

        Returns "-1" if a query result was empty (None), else
        returns the prepared dict.
        """
        userinfo = {}
        user = sql_query(
            "SELECT nutzer_id, wheim_id, etage, zimmernr, status "
            "FROM nutzer "
            "WHERE unix_account = %s",
            (self.uid,)
        ).fetchone()

        if not user:
            raise DBQueryEmpty

        mysql_id = user['nutzer_id']
        userinfo.update(
            id=info_property(
                "{}-{}".format(mysql_id, calculate_userid_checksum(mysql_id))),
            address=info_property("{0} / {1} {2}".format(
                DORMITORIES[user['wheim_id'] - 1],
                user['etage'],
                user['zimmernr']
            )),
            # todo use more colors (yellow for finances etc.)
            status=info_property(status_string_from_id(user['status']),
                                 status_color=(STATUS_COLORS.GOOD
                                               if user['status'] is 1
                                               else None)),
        )

        computer = sql_query(
            "SELECT c_etheraddr, c_ip, c_hname, c_alias "
            "FROM computer "
            "WHERE nutzer_id = %s",
            (user['nutzer_id'])
        ).fetchone()

        if not computer:
            raise DBQueryEmpty

        userinfo.update(
            ip=info_property(computer['c_ip']),
            mail=info_property(self.mail, actions={ACTIONS.EDIT,
                                                   ACTIONS.DELETE}),
            mac=info_property(computer['c_etheraddr'].upper(),
                              actions={ACTIONS.EDIT}),
            # todo figure out where that's being used
            hostname=info_property(computer['c_hname']),
            hostalias=info_property(computer['c_alias'])
        )

        try:
            if user_has_mysql_db(self.uid):
                user_db_prop = info_property(
                    gettext("Aktiviert"),
                    status_color=STATUS_COLORS.GOOD,
                    actions={ACTIONS.EDIT}
                )
            else:
                user_db_prop = info_property(
                    gettext("Nicht aktiviert"),
                    status_color=STATUS_COLORS.INFO,
                    actions={ACTIONS.EDIT}
                )
        except OperationalError:
            logger.critical("User db unreachable")
            user_db_prop = info_property(gettext(
                "Datenbank nicht erreichbar"))
        finally:
            userinfo.update(userdb=user_db_prop)

        return userinfo