From 6abebde2fa43f0d26739eb35ab597344377c7a03 Mon Sep 17 00:00:00 2001 From: Boris Pavlovic Date: Fri, 17 May 2013 17:38:51 +0400 Subject: [PATCH] Remove usage of locals() for formatting from nova.api.* Using of locals() for formatting string is a nasty thing because: 1) It is not so clear as using explicit dicts 2) It could produce hidden errors during refactoring 3) Changing name of variable causes change in message 4) Creating a lot of unused variables fixes bug 1171936 Change-Id: I293d7ebb875f65cce322d4938d1ae323f3aded8d --- doc/ext/nova_todo.py | 8 ++++---- doc/source/devref/il8n.rst | 13 +++++-------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/doc/ext/nova_todo.py b/doc/ext/nova_todo.py index 979a176cf..6f66e2573 100644 --- a/doc/ext/nova_todo.py +++ b/doc/ext/nova_todo.py @@ -37,13 +37,13 @@ def process_todo_nodes(app, doctree, fromdocname): for todo_info in env.todo_all_todos: para = nodes.paragraph() - filename = env.doc2path(todo_info['docname'], base=None) - # Create a reference newnode = nodes.reference('', '') - line_info = todo_info['lineno'] - link = _('%(filename)s, line %(line_info)d') % locals() + filename = env.doc2path(todo_info['docname'], base=None) + link = (_('%(filename)s, line %(line_info)d') % + {'filename': filename, 'line_info': todo_info['lineno']}) + innernode = nodes.emphasis(link, link) newnode['refdocname'] = todo_info['docname'] diff --git a/doc/source/devref/il8n.rst b/doc/source/devref/il8n.rst index 900ea8a28..3b5ea65e9 100644 --- a/doc/source/devref/il8n.rst +++ b/doc/source/devref/il8n.rst @@ -9,14 +9,11 @@ in a ``_()`` function call. For example:: LOG.debug(_("block_device_mapping %s"), block_device_mapping) -If you have multiple arguments, the convention is to use named parameters. -It's common to use the ``locals()`` dict (which contains the names and values -of the local variables in the current scope) to do the string interpolation. -For example:: - - label = ... - sr_ref = ... - LOG.debug(_('Introduced %(label)s as %(sr_ref)s.') % locals()) +Do not use ``locals()`` for formatting messages because: +1. It is not as clear as using explicit dicts. +2. It could produce hidden errors during refactoring. +3. Changing the name of a variable causes a change in the message. +4. It creates a lot of otherwise unused variables. If you do not follow the project conventions, your code may cause the LocalizationTestCase.test_multiple_positional_format_placeholders test to fail