示例#1
0
    def filter_list(self):
        conditions = and_()
        group_conditions = and_()
        # if "pro_info.view" in self.handler.current_user.get_current_perms():
        if not self.handler.current_user.imchecker:
            conditions.append(Pro_Info.user_id == self.handler.current_user.id)
            group_conditions.append(Pro_Info.user_id == self.handler.current_user.id)
        env = self.params.get("env")
        status = self.params.get("status")
        if env:
            conditions.append(Pro_Info.env_id == env)
        if status:
            conditions.append(Pro_Resource_Apply.status == status)
        projects = self.db.query(
            Pro_Info
        ).outerjoin(
            Pro_Resource_Apply, Pro_Info.last_apply_id == Pro_Resource_Apply.id
        ).filter(
            conditions
        ).order_by(
            Pro_Info.id.desc()
        ).all()
        # project_list = [i.as_dict() for i in projects]
        # logger.info("project_list %s" % project_list)
        # self.db.commit()
        # self.db.remove()
        projects_by_env = self.db.query(
            Env_Info.id, Env_Info.name, func.count(Pro_Info.id)
        ).outerjoin(
            Pro_Info, Env_Info.id == Pro_Info.env_id
        ).filter(
            group_conditions
        ).group_by(
            Env_Info.id
        ).all()
        logger.info(projects_by_env)

        projects_by_status = self.db.query(
            Pro_Resource_Apply.status, func.count(Pro_Info.id)
        ).outerjoin(
            Pro_Info, Pro_Resource_Apply.id == Pro_Info.last_apply_id
        ).filter(
            group_conditions
        ).group_by(
            Pro_Resource_Apply.status
        ).all()
        logger.info(projects_by_status)
        data = ObjectDict()
        data.projects = projects
        data.projects_by_env = projects_by_env
        data.projects_by_status = projects_by_status
        return self.success(data=data)