catalog_next.py 2.4 KB
# coding=utf-8
#author:        4N
#createtime:    2021/3/9
#email:         nheweijun@sina.com


from ..models import ServiceCatalog,db,Service,ServiceEngine
from app.util.component.StructurePrint import StructurePrint
from app.util.component.ApiTemplate import ApiTemplate
from app.util.component.ModelVisitor import ModelVisitor
import requests
class Api(ApiTemplate):
    api_name = "下一级目录"
    def process(self):

        # 返回结果
        res = {}
        try:
            # 业务逻辑

            res["data"] = []
            catalogs = ServiceCatalog.query.filter_by(pguid=self.para.get("catalog_guid")).all()

            # 获取全部影像服务
            image_engines = ServiceEngine.query.filter_by(type="ImageServer").all()
            image_services = []
            for ie in image_engines:
                try:
                    url = "{}/API/Service/List".format(ie.url)
                    response:requests.Response = requests.post(url,{"page_size":1000})
                    if not response.json().get("result"):
                        raise Exception("获取影像服务List失败!")
                    else:
                        image_services.extend(response.json()["data"]["list"])
                except:
                    StructurePrint().print("{}访问失败".format(ie.url))

            for cata in catalogs:
                catalog_guids = [c.guid for c in ServiceCatalog.query.filter(ServiceCatalog.path.like("%" + cata.guid + "%")).all()]
                service_count = Service.query.filter(Service.catalog_guid.in_(catalog_guids)).count()
                cata_json = ModelVisitor.object_to_json(cata)

                image_service_count = len([igs for igs in image_services if igs["catalog_guid"] in catalog_guids])

                cata_json["service_count"]=service_count+image_service_count
                res["data"].append(cata_json)

            res["result"] = True
        except Exception as e:
            raise e
        return res

    api_doc={

    "tags":["服务目录接口"],
    "parameters":[
        {"name": "catalog_guid",
         "in": "formData",
         "type": "string",
         "description":"目录guid","required": "true"},
    ],
    "responses":{
        200:{
            "schema":{
                "properties":{
                }
            }
            }
        }
    }