Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Raise if we see incorrect keyword args "condition" or "methods"
Fixes bug 927879 We crawl the AST of the set of modules that make routing calls, looking for keyword arguments called "condition" (should be "conditions") or "methods" (should be "method"), and raise if we see any. Change-Id: I32aa140967b80d83a10db898df28e41189675d77
- Loading branch information
David Ripton
committed
Oct 10, 2012
1 parent
3ec3c7a
commit fa98220
Showing
1 changed file
with
52 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
# vim: tabstop=4 shiftwidth=4 softtabstop=4 | ||
|
||
# Copyright 2012 Red Hat, Inc. | ||
# | ||
# 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 ast | ||
|
||
from keystone.contrib.admin_crud import core as admin_crud_core | ||
from keystone.contrib.ec2 import core as ec2_core | ||
from keystone.contrib.s3 import core as s3_core | ||
from keystone.contrib.stats import core as stats_core | ||
from keystone.contrib.user_crud import core as user_crud_core | ||
from keystone.identity import core as identity_core | ||
from keystone import service | ||
|
||
|
||
class TestSingularPlural(object): | ||
def test_keyword_arg_condition_or_methods(self): | ||
"""Raise if we see a keyword arg called 'condition' or 'methods'""" | ||
modules = [admin_crud_core, ec2_core, s3_core, stats_core, | ||
user_crud_core, identity_core, service] | ||
for module in modules: | ||
filename = module.__file__ | ||
if filename.endswith(".pyc"): | ||
# In Python 2, the .py and .pyc files are in the same dir. | ||
filename = filename[:-1] | ||
with open(filename) as fil: | ||
source = fil.read() | ||
module = ast.parse(source, filename) | ||
last_stmt_or_expr = None | ||
for node in ast.walk(module): | ||
if isinstance(node, ast.stmt) or isinstance(node, ast.expr): | ||
# keyword nodes don't have line numbers, so we need to | ||
# get that information from the parent stmt or expr. | ||
last_stmt_or_expr = node | ||
elif isinstance(node, ast.keyword): | ||
for bad_word in ["condition", "methods"]: | ||
if node.arg == bad_word: | ||
raise AssertionError( | ||
"Suspicious name '%s' at %s line %s" % | ||
(bad_word, filename, last_stmt_or_expr.lineno)) |