繁体   English   中英

导入错误,从另一个文件导入函数时

[英]import error, when importing a function from another file

我在从文件导入函数时遇到问题,只是在这个文件中出现错误,如果我在其他文件上导入相同的函数,它会起作用,因为我已经在其他文件上使用它了。

--dev_ma
  -__init__.py
  -roles.py
  -user.py
  -audit.py
  -active_directory.py

问题是当我在audit.py时,如果我这样做: from dev_maintenance.roles import check_if_user_has_permissions我得到一个错误:

Traceback (most recent call last):
  File "/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/__init__.py", line 21, in <module>
    import dev_maintenance.active_directory
  File "/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/active_directory.py", line 6, in <module>
    from dev_maintenance.audit import audit_action
  File "/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/audit.py", line 5, in <module>
    from dev_maintenance.roles import check_if_user_has_permissions
  File "/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/roles.py", line 6, in <module>
    from dev_maintenance.audit import audit_action
ImportError: cannot import name 'audit_action' from 'dev_maintenance.audit' (/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/audit.py)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/pjose/Project/venv/lib/python3.7/site-packages/flask/cli.py", line 325, in __call__
    self._flush_bg_loading_exception()
  File "/Users/pjose/Project/venv/lib/python3.7/site-packages/flask/cli.py", line 313, in _flush_bg_loading_exception
    reraise(*exc_info)
  File "/Users/pjose/Project/venv/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/Users/pjose/Project/venv/lib/python3.7/site-packages/flask/cli.py", line 302, in _load_app
    self._load_unlocked()
  File "/Users/pjose/Project/venv/lib/python3.7/site-packages/flask/cli.py", line 317, in _load_unlocked
    self._app = rv = self.loader()
  File "/Users/pjose/Project/venv/lib/python3.7/site-packages/flask/cli.py", line 372, in load_app
    app = locate_app(self, import_name, name)
  File "/Users/pjose/Project/venv/lib/python3.7/site-packages/flask/cli.py", line 242, in locate_app
    '\n\n{tb}'.format(name=module_name, tb=traceback.format_exc())
flask.cli.NoAppException: While importing "dev_maintenance", an ImportError was raised:

Traceback (most recent call last):
  File "/Users/pjose/Project/venv/lib/python3.7/site-packages/flask/cli.py", line 235, in locate_app
    __import__(module_name)
  File "/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/__init__.py", line 21, in <module>
    import dev_maintenance.active_directory
  File "/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/active_directory.py", line 6, in <module>
    from dev_maintenance.audit import audit_action
  File "/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/audit.py", line 5, in <module>
    from dev_maintenance.roles import check_if_user_has_permissions
  File "/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/roles.py", line 6, in <module>
    from dev_maintenance.audit import audit_action
ImportError: cannot import name 'audit_action' from 'dev_maintenance.audit' (/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/audit.py)

这是我的初始化文件:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS
from flasgger import Swagger
from flask_caching import Cache




app = Flask(__name__)
app.debug = True
app.config.from_object('dev_maintenance.yaml_config_loader')
cache = Cache(app)
db = SQLAlchemy(app)
cors = CORS(app, resources={r"/*": {"origins": "*"}})
swagger = Swagger(app)


import dev_maintenance.mesos_callback
import dev_maintenance.db_model
import dev_maintenance.active_directory
import dev_maintenance.user_list
import dev_maintenance.audit
import dev_maintenance.machines
import dev_maintenance.yaml_config_loader
import dev_maintenance.roles
import dev_maintenance.user_details





if __name__ == '__main__':
    app.run(debug=True)

这是我的审计文件:

from dev_maintenance import app, db
import json
from flask_jwt_extended import jwt_required
from dev_maintenance.db_model import ActionLog
from dev_maintenance.roles import check_if_user_has_permissions

def audit_action(user, action_type, action_parameters):
    req = ActionLog(
        user=user,
        action_type=action_type,
        action_parameters=action_parameters
    )
    db.session.add(req)
    db.session.commit()


@app.route("/api/audit", methods=["GET"])
@jwt_required
def get_audit_log():

    data = []
    for run in db.session.query(ActionLog).order_by(ActionLog.date.desc()).limit(100):
        run_tmp = {}
        run_tmp["date"] = str(run.date)
        run_tmp["user"] = run.user
        run_tmp["action_type"] = run.action_type
        run_tmp["action_parameters"] = run.action_parameters
        data.append(run_tmp)
    response = app.response_class(
        response=json.dumps(data), status=200, mimetype="application/json"
    )
    return response

我无法弄清楚为什么会发生这种情况,不仅仅是这个函数,其他文件中的其他函数也会触发 audit.py 中的错误。

经过一段时间的搜索,我发现了这个问题,它被称为循环依赖。

基本上我需要在我的函数中进行导入:

@app.route("/api/audit", methods=["GET"])
@jwt_required
def get_audit_log():

    from dev_maintenance.roles import check_if_user_has_permissions

    data = []
    user = get_jwt_identity()
    permission = check_if_user_has_permissions(user=user, resource="audit", action="GET_INFO")
    for run in db.session.query(ActionLog).order_by(ActionLog.date.desc()).limit(100):
        run_tmp = {}
        run_tmp["date"] = str(run.date)
        run_tmp["user"] = run.user
        run_tmp["action_type"] = run.action_type
        run_tmp["action_parameters"] = run.action_parameters
        data.append(run_tmp)
    if permission:
        response = app.response_class(
            response=json.dumps(data), status=200, mimetype="application/json"
        )
        return response
    else:
        response = jsonify("No Permission")
        return response, 401

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM