簡體   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