project-config/jenkins/scripts/get-modulename.py
Akihiro Motoki 2ce411f7f6 Translation job scripts support multiple python modules
At now, horizon repo has two python modules and we have
special handling in the translation job scripts.
This commit handles multiple python modules per repository
and locale directory will be prepared per python module.

After this we no longer need to have dedicated functions
for horizon.

Change-Id: Id32fbf37489c0056e5d7722fc3e7c71a95213e08
2016-02-22 15:00:17 +09:00

114 lines
3.2 KiB
Python
Executable File

#!/usr/bin/env python
# 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 __future__ import print_function
import argparse
import ConfigParser as configparser
import os
import sys
DJANGO_PROJECT_SUFFIXES = (
'-dashboard',
'horizon', # to match horizon and *-horizon
'-ui',
'django_openstack_auth',
)
def get_args():
parser = argparse.ArgumentParser(
description='Find module names in a repository.')
parser.add_argument('-p', '--project', required=True)
parser.add_argument('-t', '--target',
choices=['python', 'django'],
default='python',
help='Type of modules to search (default: python).')
parser.add_argument('-f', '--file', default='setup.cfg',
help='Path of setup.cfg file.')
return parser.parse_args()
def split_multiline(value):
value = [element for element in
(line.strip() for line in value.split('\n'))
if element]
return value
def read_config(path):
parser = configparser.SafeConfigParser()
parser.read(path)
config = {}
for section in parser.sections():
config[section] = dict(parser.items(section))
return config
def get_option(config, section, option, multiline=False):
if section not in config:
return
value = config[section].get(option)
if not value:
return
if multiline:
value = split_multiline(value)
return value
def get_translate_options(config, target):
translate_options = {}
for key, value in config['openstack_translations'].items():
values = split_multiline(value)
if values:
translate_options[key] = values
return translate_options.get('%s_modules' % target, [])
def get_valid_modules(config, project, target):
is_django = any(project.endswith(suffix)
for suffix in DJANGO_PROJECT_SUFFIXES)
if is_django != (target == 'django'):
return []
modules = get_option(config, 'files', 'packages', multiline=True)
# If setup.cfg does not contain [files] packages entry,
# let's assume the project name as a module name.
if not modules:
print('[files] packages entry not found in setup.cfg. '
'Use project name "%s" as a module name.' % project,
file=sys.stderr)
modules = [project]
return modules
def main():
args = get_args()
config = read_config(args.file)
if 'openstack_translations' in config:
translate_options = get_translate_options(config, args.target)
print(' '.join(translate_options))
return
modules = get_valid_modules(config, args.project, args.target)
if modules:
print(' '.join(modules))
if __name__ == '__main__':
main()