Extract configs-related code to the configs helper
* two helpers has been added for getting single and multiple values; * several simple tests has been added to check helpers. Change-Id: Icaebf1737660a1cd7c24d16dcbff900e79904584
This commit is contained in:
parent
38927b7c8f
commit
f2dc92a68d
48
hacking/config.py
Normal file
48
hacking/config.py
Normal file
@ -0,0 +1,48 @@
|
||||
# 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.
|
||||
|
||||
from six import moves
|
||||
|
||||
|
||||
class Config(object):
|
||||
def __init__(self, default_section=None, tox_file='tox.ini'):
|
||||
conf = moves.configparser.RawConfigParser()
|
||||
conf.read(tox_file)
|
||||
|
||||
self.conf = conf
|
||||
self.default_section = default_section
|
||||
|
||||
def get(self, option, section=None, default=None):
|
||||
section = section or self.default_section
|
||||
|
||||
if not self.conf.has_section(section):
|
||||
return default
|
||||
|
||||
if self.conf.has_option(section, option):
|
||||
return self.conf.get(section, option).strip()
|
||||
|
||||
return default
|
||||
|
||||
def get_multiple(self, option, section=None, default=None):
|
||||
section = section or self.default_section
|
||||
|
||||
values = self.get(option, section)
|
||||
if not values:
|
||||
return default
|
||||
|
||||
values = [v.strip() for v in values.split('\n') if v.strip()]
|
||||
result = []
|
||||
for vals in values:
|
||||
result.extend([v.strip() for v in vals.split(',') if v.strip()])
|
||||
|
||||
return result
|
@ -21,7 +21,6 @@
|
||||
Built as a sets of pep8 checks using flake8.
|
||||
"""
|
||||
|
||||
import ConfigParser
|
||||
import gettext
|
||||
import imp
|
||||
import logging
|
||||
@ -35,6 +34,8 @@ import traceback
|
||||
import d2to1.util
|
||||
import pep8
|
||||
|
||||
from hacking import config
|
||||
|
||||
# Don't need this for testing
|
||||
logging.disable('LOG')
|
||||
|
||||
@ -60,6 +61,10 @@ def flake8ext(f):
|
||||
#H8xx git commit messages
|
||||
#H9xx other
|
||||
|
||||
|
||||
CONF = config.Config('hacking')
|
||||
|
||||
|
||||
IMPORT_EXCEPTIONS = ['sqlalchemy', 'migrate', 'nova.db.sqlalchemy.session',
|
||||
'nova.db.sqlalchemy.migration.versioning_api']
|
||||
# Paste is missing a __init__ in top level directory
|
||||
@ -887,25 +892,19 @@ class ProxyChecks(GlobalCheck):
|
||||
|
||||
@classmethod
|
||||
def add_options(cls, parser):
|
||||
# Abusing this method because of when it gets called
|
||||
if not os.path.exists('tox.ini'):
|
||||
return
|
||||
tox_ini = ConfigParser.RawConfigParser()
|
||||
tox_ini.read('tox.ini')
|
||||
if not tox_ini.has_section('hacking'):
|
||||
return
|
||||
|
||||
# We're looking for local checks, so we need to include the local
|
||||
# dir in the search path
|
||||
sys.path.append('.')
|
||||
if tox_ini.has_option('hacking', 'local-check'):
|
||||
for check_path in set(
|
||||
tox_ini.get('hacking', 'local-check').split(",")):
|
||||
if check_path.strip():
|
||||
checker = d2to1.util.resolve_name(check_path)
|
||||
pep8.register_check(checker)
|
||||
if tox_ini.has_option('hacking', 'local-check-factory'):
|
||||
factory = d2to1.util.resolve_name(
|
||||
tox_ini.get('hacking', 'local-check-factory'))
|
||||
|
||||
local_check = CONF.get_multiple('local-check', default=[])
|
||||
for check_path in set(local_check):
|
||||
if check_path.strip():
|
||||
checker = d2to1.util.resolve_name(check_path)
|
||||
pep8.register_check(checker)
|
||||
|
||||
local_check_fact = CONF.get('local-check-factory')
|
||||
if local_check_fact:
|
||||
factory = d2to1.util.resolve_name(local_check_fact)
|
||||
factory(pep8.register_check)
|
||||
|
||||
sys.path.pop()
|
||||
|
57
hacking/tests/test_config.py
Normal file
57
hacking/tests/test_config.py
Normal file
@ -0,0 +1,57 @@
|
||||
# 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 fixtures
|
||||
import os
|
||||
|
||||
from hacking import config
|
||||
from hacking import tests
|
||||
|
||||
|
||||
TEST_TOX_INI = """[hacking]
|
||||
option_1 = val_1
|
||||
option_2 =
|
||||
val_2
|
||||
option_3 =
|
||||
val_1,val_2, val_3,
|
||||
val_4 , val_5 , val_6,
|
||||
val_7
|
||||
,
|
||||
val_8
|
||||
val_9
|
||||
"""
|
||||
|
||||
|
||||
class ConfigTest(tests.TestCase):
|
||||
def setUp(self):
|
||||
tox_ini_path = os.path.join(self.useFixture(fixtures.TempDir()).path,
|
||||
'tox.ini')
|
||||
|
||||
with open(tox_ini_path, 'w') as tox_ini:
|
||||
tox_ini.write(TEST_TOX_INI)
|
||||
self.conf = config.Config('hacking', tox_ini_path)
|
||||
super(ConfigTest, self).setUp()
|
||||
|
||||
def test_get(self):
|
||||
self.assertEqual('val_1', self.conf.get('option_1'))
|
||||
self.assertEqual('val_2', self.conf.get('option_2'))
|
||||
self.assertEqual('val_3', self.conf.get('option_4', default='val_3'))
|
||||
|
||||
def test_get_multiple(self):
|
||||
self.assertEqual(['val_1', 'val_2', 'val_3', 'val_4', 'val_5', 'val_6',
|
||||
'val_7', 'val_8', 'val_9'],
|
||||
self.conf.get_multiple('option_3'))
|
||||
|
||||
self.assertEqual(['val_1', 'val_2'],
|
||||
self.conf.get_multiple('option_4',
|
||||
default=['val_1', 'val_2']))
|
@ -4,3 +4,5 @@ pbr>=0.5.10,<0.6
|
||||
pep8==1.4.5
|
||||
pyflakes==0.7.2
|
||||
flake8==2.0
|
||||
|
||||
six
|
||||
|
Loading…
Reference in New Issue
Block a user