From 4e154f0018e30e8c8982a05e25369cbc27134425 Mon Sep 17 00:00:00 2001
From: Jeffrey Zhang <zhang.lei.fly@gmail.com>
Date: Tue, 19 Jan 2016 10:53:32 +0800
Subject: [PATCH] Introduce the hacking module to kolla

Implements: blueprint add-hacking

Change-Id: Ia24a263555b9c1eb11e61b9d3fe89612a89daed6
---
 kolla/hacking/__init__.py |  0
 kolla/hacking/checks.py   | 26 ++++++++++++++++++++++++++
 tox.ini                   |  3 +++
 3 files changed, 29 insertions(+)
 create mode 100644 kolla/hacking/__init__.py
 create mode 100644 kolla/hacking/checks.py

diff --git a/kolla/hacking/__init__.py b/kolla/hacking/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/kolla/hacking/checks.py b/kolla/hacking/checks.py
new file mode 100644
index 0000000000..5a86fe5716
--- /dev/null
+++ b/kolla/hacking/checks.py
@@ -0,0 +1,26 @@
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import re
+
+
+mutable_default_args = re.compile(r"^\s*def .+\((.+=\{\}|.+=\[\])")
+
+
+def no_mutable_default_args(logical_line):
+    msg = "N301: Method's default argument shouldn't be mutable!"
+    if mutable_default_args.match(logical_line):
+        yield (0, msg)
+
+
+def factory(register):
+    register(no_mutable_default_args)
diff --git a/tox.ini b/tox.ini
index 828cf2961e..1f0c237e5a 100644
--- a/tox.ini
+++ b/tox.ini
@@ -130,3 +130,6 @@ commands=
 [flake8]
 show-source = True
 exclude=.eggs,.git,.tox,doc
+
+[hacking]
+local-check-factory = kolla.hacking.checks.factory
-- 
GitLab