From 3005293691ac30ba11e99d8a13fa2c4b524b91dd Mon Sep 17 00:00:00 2001 From: gongzt Date: Tue, 15 Sep 2020 10:18:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BE=9D=E8=B5=96=E5=85=B3=E7=B3=BB=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84=E6=96=87=E4=BB=B6=E6=B7=BB=E5=8A=A0=EF=BC=8C?= =?UTF-8?q?=E5=8D=95=E5=9B=BE=E7=9B=B8=E5=85=B3=E7=9A=84=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=A2=9E=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../packageship/application/app_global.py | 8 +- .../packageship/application/apps/__init__.py | 4 +- .../application/apps/dependinfo/__init__.py | 28 +++++++ .../apps/dependinfo/function/__init__.py | 0 .../apps/dependinfo/function/graphcache.py | 14 ++++ .../function/singlegraph.py | 81 +++++++++++++++++-- .../application/apps/dependinfo/url.py | 16 ++++ .../application/apps/dependinfo/view.py | 12 +++ packageship/setup.py | 4 + 9 files changed, 159 insertions(+), 8 deletions(-) create mode 100644 packageship/packageship/application/apps/dependinfo/__init__.py create mode 100644 packageship/packageship/application/apps/dependinfo/function/__init__.py create mode 100644 packageship/packageship/application/apps/dependinfo/function/graphcache.py rename packageship/packageship/application/apps/{package => dependinfo}/function/singlegraph.py (67%) create mode 100644 packageship/packageship/application/apps/dependinfo/url.py create mode 100644 packageship/packageship/application/apps/dependinfo/view.py diff --git a/packageship/packageship/application/app_global.py b/packageship/packageship/application/app_global.py index 611f309e..0e74a7fd 100644 --- a/packageship/packageship/application/app_global.py +++ b/packageship/packageship/application/app_global.py @@ -4,11 +4,15 @@ Description: Interception before request """ from flask import request from packageship import application -from packageship.application.apps.package.url import urls +from packageship.application.apps.package.url import urls as package_urls +from packageship.application.apps.lifecycle.url import urls as lifecycle_urls +from packageship.application.apps.dependinfo.url import urls as dependinfo_urls __all__ = ['identity_verification'] +URLS = package_urls + lifecycle_urls + dependinfo_urls + def identity_verification(): """ @@ -19,7 +23,7 @@ def identity_verification(): """ if request.url_rule: url_rule = request.url_rule.rule - for _view, url, authentication in urls: + for _view, url, authentication in URLS: if url.lower() == url_rule.lower() and application.OPERATION in authentication.keys(): if request.method not in authentication.get(application.OPERATION): return False diff --git a/packageship/packageship/application/apps/__init__.py b/packageship/packageship/application/apps/__init__.py index e1d108ef..01356ef6 100644 --- a/packageship/packageship/application/apps/__init__.py +++ b/packageship/packageship/application/apps/__init__.py @@ -4,10 +4,12 @@ Blueprint collection trying to page """ from packageship.application.apps import package from packageship.application.apps import lifecycle +from packageship.application.apps import dependinfo blue_point = [ # pylint: disable=invalid-name (package.package, package.api), - (lifecycle.lifecycle, lifecycle.api) + (lifecycle.lifecycle, lifecycle.api), + (dependinfo.dependinfo, dependinfo.api) ] __all__ = ['blue_point'] diff --git a/packageship/packageship/application/apps/dependinfo/__init__.py b/packageship/packageship/application/apps/dependinfo/__init__.py new file mode 100644 index 00000000..c5460486 --- /dev/null +++ b/packageship/packageship/application/apps/dependinfo/__init__.py @@ -0,0 +1,28 @@ +#!/usr/bin/python3 +# ****************************************************************************** +# Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. +# licensed under the Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +# PURPOSE. +# See the Mulan PSL v2 for more details. +# ******************************************************************************/ +from flask.blueprints import Blueprint +from flask_restful import Api +from packageship import application +from .url import urls + +dependinfo = Blueprint('dependinfo', __name__) + +# init restapi +api = Api() + +for view, url, operation in urls: + if application.OPERATION and application.OPERATION in operation.keys(): + api.add_resource(view, url) + + +__all__ = ['dependinfo', 'api'] diff --git a/packageship/packageship/application/apps/dependinfo/function/__init__.py b/packageship/packageship/application/apps/dependinfo/function/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/packageship/packageship/application/apps/dependinfo/function/graphcache.py b/packageship/packageship/application/apps/dependinfo/function/graphcache.py new file mode 100644 index 00000000..a28871b0 --- /dev/null +++ b/packageship/packageship/application/apps/dependinfo/function/graphcache.py @@ -0,0 +1,14 @@ +#!/usr/bin/python3 +# ****************************************************************************** +# Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. +# licensed under the Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +# PURPOSE. +# See the Mulan PSL v2 for more details. +# ******************************************************************************/ +# Use redis cache to install dependencies, compile dependencies +# be dependent, and self-compile dependencies diff --git a/packageship/packageship/application/apps/package/function/singlegraph.py b/packageship/packageship/application/apps/dependinfo/function/singlegraph.py similarity index 67% rename from packageship/packageship/application/apps/package/function/singlegraph.py rename to packageship/packageship/application/apps/dependinfo/function/singlegraph.py index 6814cd74..bb9ce8a6 100644 --- a/packageship/packageship/application/apps/package/function/singlegraph.py +++ b/packageship/packageship/application/apps/dependinfo/function/singlegraph.py @@ -12,11 +12,14 @@ # ******************************************************************************/ """ Data analysis of dependency graph - """ import random -from ..serialize import BeDependSchema, BuildDependSchema, InstallDependSchema, SelfDependSchema - +from packageship.application.apps.package.function.searchdb import db_priority +from packageship.application.apps.package.function.constants import ResponseCode +from packageship.application.apps.package.serialize import BeDependSchema +from packageship.application.apps.package.serialize import BuildDependSchema +from packageship.application.apps.package.serialize import InstallDependSchema +from packageship.application.apps.package.serialize import SelfDependSchema LEVEL = 2 LEVEL_RADIUS = 120 @@ -37,6 +40,9 @@ class SelfBuildDep: 'selfbuild': self.graph.selfbuild, 'withsubpack': self.graph.withsubpack } + self.nodes = dict() + self.edges = dict() + self.depend_package = [] def _validate(self): depend = SelfDependSchema().validate(self.query_parameter) @@ -44,9 +50,43 @@ class SelfBuildDep: return False return True - def __call__(self): + def query_depend_relation(self): + """ + Query dependency data + """ + pass + + def _binary_packages(self): + """ + Data analysis of binary package + """ pass + def _source_packages(self): + """ + Data analysis of source code package + """ + pass + + def _parse_depend_graph(self): + """ + Resolve the data in the dependency graph + """ + if self.graph.packtype == 'binary': + self._binary_packages() + if self.graph.packtype == 'source': + self._source_packages() + + def __call__(self): + if not self._validate(): + return ResponseCode.PARAM_ERROR + database_error = self.graph._database_priority() + if database_error: + return database_error + + self.query_depend_relation() + return None + class InstallDep: """ @@ -67,7 +107,12 @@ class InstallDep: return True def __call__(self): - pass + if not self._validate(): + return ResponseCode.PARAM_ERROR + database_error = self.graph._database_priority() + if database_error: + return database_error + return None class BuildDep: @@ -139,6 +184,12 @@ class BaseGraph: 'The query parameter type is wrong, and normal', ' dependent data analysis cannot be completed') self.graph = depend_graph(self) + self._color = ['#4f19c7'] + + @property + def color(self): + """rgb random color value acquisition""" + return self._color[random.randint(0, len(self._color))] @staticmethod def dynamic_coordinate(level, upper_layer=True): @@ -170,6 +221,26 @@ class BaseGraph: min_value, max_value) * (1 - level / 6 * 1.0) return node_size + def _database_priority(self): + + databases = db_priority() + if not databases: + return ResponseCode.FILE_NOT_FIND_ERROR + self.dbname = self.dbname if self.dbname else databases + + if any(filter(lambda db_name: db_name not in databases, self.dbname)): + return ResponseCode.DB_NAME_ERROR + return None + + @staticmethod + def create_dict(**kwargs): + """ + Create dictionary data + """ + if isinstance(kwargs, dict): + return kwargs + return dict() + def parse_depend_graph(self): """Analyze the data that the graph depends on""" self.graph() diff --git a/packageship/packageship/application/apps/dependinfo/url.py b/packageship/packageship/application/apps/dependinfo/url.py new file mode 100644 index 00000000..57ad7d4d --- /dev/null +++ b/packageship/packageship/application/apps/dependinfo/url.py @@ -0,0 +1,16 @@ +#!/usr/bin/python3 +# ****************************************************************************** +# Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. +# licensed under the Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +# PURPOSE. +# See the Mulan PSL v2 for more details. +# ******************************************************************************/ + +from . import view + +urls = [] diff --git a/packageship/packageship/application/apps/dependinfo/view.py b/packageship/packageship/application/apps/dependinfo/view.py new file mode 100644 index 00000000..68510328 --- /dev/null +++ b/packageship/packageship/application/apps/dependinfo/view.py @@ -0,0 +1,12 @@ +#!/usr/bin/python3 +# ****************************************************************************** +# Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. +# licensed under the Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +# PURPOSE. +# See the Mulan PSL v2 for more details. +# ******************************************************************************/ diff --git a/packageship/setup.py b/packageship/setup.py index 4ef2d481..0c7084ee 100644 --- a/packageship/setup.py +++ b/packageship/setup.py @@ -31,6 +31,10 @@ setup( 'packageship.application.apps.lifecycle.serialize', 'packageship.application.apps.lifecycle.url', 'packageship.application.apps.lifecycle.view', + 'packageship.application.apps.dependinfo.function.singlegraph', + 'packageship.application.apps.dependinfo.function.graphcache', + 'packageship.application.apps.dependinfo.url', + 'packageship.application.apps.dependinfo.view', 'packageship.application.initsystem.data_import', 'packageship.application.models.package', 'packageship.application.settings', -- Gitee