From f7a6c58d920cc4310132d4e0cb06838202de407b Mon Sep 17 00:00:00 2001 From: Yuriy Taraday Date: Sun, 11 Mar 2012 19:04:26 +0400 Subject: HACKING fixes, sqlalchemy fix. Add exceptions to hacking.py make sqlalchemy stuff legal and prevent clutter. Change-Id: I44b100b4c0c4dfcec81beea7aba2d8598d5a08d0 --- tools/hacking.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'tools') diff --git a/tools/hacking.py b/tools/hacking.py index 7aa756bb5..c3c1d7156 100755 --- a/tools/hacking.py +++ b/tools/hacking.py @@ -36,6 +36,13 @@ import pep8 #N5xx dictionaries/lists #N6xx Calling methods +IMPORT_EXCEPTIONS = ['sqlalchemy', 'migrate', 'nova.db.sqlalchemy.session'] + + +def is_import_exception(mod): + return mod in IMPORT_EXCEPTIONS or \ + any(mod.startswith(m + '.') for m in IMPORT_EXCEPTIONS) + def nova_todo_format(physical_line): """ @@ -77,13 +84,13 @@ def nova_one_import_per_line(logical_line): Examples: BAD: from nova.rpc.common import RemoteError, LOG - BAD: from sqlalchemy import MetaData, Table N301 """ pos = logical_line.find(',') - if (pos > -1 and (logical_line.startswith("import ") or - (logical_line.startswith("from ") and - logical_line.split()[2] == "import"))): + parts = logical_line.split() + if pos > -1 and (parts[0] == "import" or + parts[0] == "from" and parts[2] == "import") and \ + not is_import_exception(parts[1]): return pos, "NOVA N301: one import per line" @@ -104,6 +111,8 @@ def nova_import_module_only(logical_line): try: valid = True if parent: + if is_import_exception(parent): + return parent_mod = __import__(parent, globals(), locals(), [mod], -1) valid = inspect.ismodule(getattr(parent_mod, mod)) else: -- cgit