summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYuriy Taraday <yorik.sar@gmail.com>2012-03-11 19:04:26 +0400
committerYuriy Taraday <yorik.sar@gmail.com>2012-04-09 18:00:40 +0400
commitf7a6c58d920cc4310132d4e0cb06838202de407b (patch)
tree753b24eec5e0b82d9b11aaea2e350230f5550e56
parent21dbbaa3861b277b98ba8642a85b1f4f2722866f (diff)
HACKING fixes, sqlalchemy fix.
Add exceptions to hacking.py make sqlalchemy stuff legal and prevent clutter. Change-Id: I44b100b4c0c4dfcec81beea7aba2d8598d5a08d0
-rw-r--r--HACKING.rst10
-rwxr-xr-xtools/hacking.py17
2 files changed, 21 insertions, 6 deletions
diff --git a/HACKING.rst b/HACKING.rst
index e1fc99fd9..467248e0e 100644
--- a/HACKING.rst
+++ b/HACKING.rst
@@ -28,12 +28,18 @@ General
Imports
-------
-- Do not import objects, only modules
-- Do not import more than one module per line
+- Do not import objects, only modules (*)
+- Do not import more than one module per line (*)
- Do not make relative imports
- Order your imports by the full module path
- Organize your imports according to the following template
+(*) exceptions are:
+
+- imports from ``migrate`` package
+- imports from ``sqlalchemy`` package
+- imports from ``nova.db.sqlalchemy.session`` module
+
Example::
# vim: tabstop=4 shiftwidth=4 softtabstop=4
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: