openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #19623
[Merge] lp:~googol/openlp/short-lines into lp:openlp
Andreas Preikschat has proposed merging lp:~googol/openlp/short-lines into lp:openlp.
Requested reviews:
Raoul Snyman (raoul-snyman)
For more details, see:
https://code.launchpad.net/~googol/openlp/short-lines/+merge/150787
Hello,
- renamed a few variables
- fixed same short lines
- merged get_files method from SettingsManager into AppLocation
- added get_files test
- fixed actionList test (I was somewhat confused by the _is_shortcut_available method (line 315). It didn't really make sense to me and I hope that it is correct now.)
[andreas@andylaptop short-lines]$ nosetests2 tests/functional/
.......................................................................
----------------------------------------------------------------------
Ran 71 tests in 0.214s
OK
[andreas@andylaptop short-lines]$ nosetests2 tests/interfaces/
........
----------------------------------------------------------------------
Ran 8 tests in 0.281s
OK
[andreas@andylaptop short-lines]$
--
https://code.launchpad.net/~googol/openlp/short-lines/+merge/150787
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/core/lib/__init__.py'
--- openlp/core/lib/__init__.py 2013-02-16 06:48:52 +0000
+++ openlp/core/lib/__init__.py 2013-02-27 13:04:22 +0000
@@ -393,7 +393,6 @@
from listwidgetwithdnd import ListWidgetWithDnD
from formattingtags import FormattingTags
from spelltextedit import SpellTextEdit
-from settingsmanager import SettingsManager
from plugin import PluginStatus, StringContent, Plugin
from pluginmanager import PluginManager
from settingstab import SettingsTab
=== removed file 'openlp/core/lib/settingsmanager.py'
--- openlp/core/lib/settingsmanager.py 2013-02-01 19:58:18 +0000
+++ openlp/core/lib/settingsmanager.py 1970-01-01 00:00:00 +0000
@@ -1,66 +0,0 @@
-# -*- coding: utf-8 -*-
-# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
-
-###############################################################################
-# OpenLP - Open Source Lyrics Projection #
-# --------------------------------------------------------------------------- #
-# Copyright (c) 2008-2013 Raoul Snyman #
-# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
-# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
-# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
-# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
-# Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, #
-# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Dave Warnock, #
-# Frode Woldsund, Martin Zibricky, Patrick Zimmermann #
-# --------------------------------------------------------------------------- #
-# This program is free software; you can redistribute it and/or modify it #
-# under the terms of the GNU General Public License as published by the Free #
-# Software Foundation; version 2 of the License. #
-# #
-# This program is distributed in the hope that it will be useful, but WITHOUT #
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
-# more details. #
-# #
-# You should have received a copy of the GNU General Public License along #
-# with this program; if not, write to the Free Software Foundation, Inc., 59 #
-# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
-###############################################################################
-"""
-Provide handling for persisting OpenLP settings. OpenLP uses QSettings to manage settings persistence. QSettings
-provides a single API for saving and retrieving settings from the application but writes to disk in an OS dependant
-format.
-"""
-import os
-
-from openlp.core.utils import AppLocation
-
-
-class SettingsManager(object):
- """
- Class to provide helper functions for the loading and saving of application settings.
- """
-
- @staticmethod
- def get_files(section=None, extension=None):
- """
- Get a list of files from the data files path.
-
- ``section``
- Defaults to *None*. The section of code getting the files - used to load from a section's data subdirectory.
-
- ``extension``
- Defaults to *None*. The extension to search for.
- """
- path = AppLocation.get_data_path()
- if section:
- path = os.path.join(path, section)
- try:
- files = os.listdir(path)
- except OSError:
- return []
- if extension:
- return [filename for filename in files if extension == os.path.splitext(filename)[1]]
- else:
- # no filtering required
- return files
=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py 2013-02-21 21:26:24 +0000
+++ openlp/core/ui/slidecontroller.py 2013-02-27 13:04:22 +0000
@@ -399,19 +399,19 @@
verse_type = sender_name[15:] if sender_name[:15] == u'shortcutAction_' else u''
if SONGS_PLUGIN_AVAILABLE:
if verse_type == u'V':
- self.current_shortcut = VerseType.TranslatedTags[VerseType.Verse]
+ self.current_shortcut = VerseType.translated_tags[VerseType.Verse]
elif verse_type == u'C':
- self.current_shortcut = VerseType.TranslatedTags[VerseType.Chorus]
+ self.current_shortcut = VerseType.translated_tags[VerseType.Chorus]
elif verse_type == u'B':
- self.current_shortcut = VerseType.TranslatedTags[VerseType.Bridge]
+ self.current_shortcut = VerseType.translated_tags[VerseType.Bridge]
elif verse_type == u'P':
- self.current_shortcut = VerseType.TranslatedTags[VerseType.PreChorus]
+ self.current_shortcut = VerseType.translated_tags[VerseType.PreChorus]
elif verse_type == u'I':
- self.current_shortcut = VerseType.TranslatedTags[VerseType.Intro]
+ self.current_shortcut = VerseType.translated_tags[VerseType.Intro]
elif verse_type == u'E':
- self.current_shortcut = VerseType.TranslatedTags[VerseType.Ending]
+ self.current_shortcut = VerseType.translated_tags[VerseType.Ending]
elif verse_type == u'O':
- self.current_shortcut = VerseType.TranslatedTags[VerseType.Other]
+ self.current_shortcut = VerseType.translated_tags[VerseType.Other]
elif verse_type.isnumeric():
self.current_shortcut += verse_type
self.current_shortcut = self.current_shortcut.upper()
=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py 2013-02-16 13:24:56 +0000
+++ openlp/core/ui/thememanager.py 2013-02-27 13:04:22 +0000
@@ -38,9 +38,8 @@
from xml.etree.ElementTree import ElementTree, XML
from PyQt4 import QtCore, QtGui
-from openlp.core.lib import ImageSource, OpenLPToolbar, Registry, SettingsManager, Settings, UiStrings, \
- get_text_file_string, build_icon, translate, check_item_selected, check_directory_exists, create_thumb, \
- validate_thumb
+from openlp.core.lib import ImageSource, OpenLPToolbar, Registry, Settings, UiStrings, get_text_file_string, \
+ build_icon, translate, check_item_selected, check_directory_exists, create_thumb, validate_thumb
from openlp.core.lib.theme import ThemeXML, BackgroundType, VerticalType, BackgroundGradientType
from openlp.core.lib.ui import critical_error_message_box, create_widget_action
from openlp.core.theme import Theme
@@ -150,7 +149,7 @@
Import new themes downloaded by the first time wizard
"""
self.application.set_busy_cursor()
- files = SettingsManager.get_files(self.settingsSection, u'.otz')
+ files = AppLocation.get_files(self.settingsSection, u'.otz')
for theme_file in files:
theme_file = os.path.join(self.path, theme_file)
self.unzip_theme(theme_file, self.path)
@@ -419,10 +418,10 @@
log.debug(u'Load themes from dir')
self.theme_list = []
self.theme_list_widget.clear()
- files = SettingsManager.get_files(self.settingsSection, u'.png')
+ files = AppLocation.get_files(self.settingsSection, u'.png')
if first_time:
self.first_time()
- files = SettingsManager.get_files(self.settingsSection, u'.png')
+ files = AppLocation.get_files(self.settingsSection, u'.png')
# No themes have been found so create one
if not files:
theme = ThemeXML()
@@ -430,7 +429,7 @@
self._write_theme(theme, None, None)
Settings().setValue(self.settingsSection + u'/global theme', theme.theme_name)
self.config_updated()
- files = SettingsManager.get_files(self.settingsSection, u'.png')
+ files = AppLocation.get_files(self.settingsSection, u'.png')
# Sort the themes by its name considering language specific
files.sort(key=lambda file_name: unicode(file_name), cmp=locale_compare)
# now process the file list of png files
=== modified file 'openlp/core/utils/__init__.py'
--- openlp/core/utils/__init__.py 2013-02-07 10:16:08 +0000
+++ openlp/core/utils/__init__.py 2013-02-27 13:04:22 +0000
@@ -39,9 +39,10 @@
import sys
import urllib2
+from PyQt4 import QtGui, QtCore
+
from openlp.core.lib import Registry, Settings
-from PyQt4 import QtGui, QtCore
if sys.platform != u'win32' and sys.platform != u'darwin':
try:
@@ -50,8 +51,7 @@
except ImportError:
XDG_BASE_AVAILABLE = False
-import openlp
-from openlp.core.lib import translate, check_directory_exists
+from openlp.core.lib import translate
log = logging.getLogger(__name__)
APPLICATION_VERSION = {}
@@ -78,107 +78,6 @@
if LooseVersion(str(version)) > LooseVersion(str(app_version[u'full'])):
Registry().execute(u'openlp_version_check', u'%s' % version)
-class AppLocation(object):
- """
- The :class:`AppLocation` class is a static class which retrieves a
- directory based on the directory type.
- """
- AppDir = 1
- ConfigDir = 2
- DataDir = 3
- PluginsDir = 4
- VersionDir = 5
- CacheDir = 6
- LanguageDir = 7
-
- # Base path where data/config/cache dir is located
- BaseDir = None
-
- @staticmethod
- def get_directory(dir_type=1):
- """
- Return the appropriate directory according to the directory type.
-
- ``dir_type``
- The directory type you want, for instance the data directory.
- """
- if dir_type == AppLocation.AppDir:
- return _get_frozen_path(os.path.abspath(os.path.split(sys.argv[0])[0]), os.path.split(openlp.__file__)[0])
- elif dir_type == AppLocation.PluginsDir:
- app_path = os.path.abspath(os.path.split(sys.argv[0])[0])
- return _get_frozen_path(os.path.join(app_path, u'plugins'),
- os.path.join(os.path.split(openlp.__file__)[0], u'plugins'))
- elif dir_type == AppLocation.VersionDir:
- return _get_frozen_path(os.path.abspath(os.path.split(sys.argv[0])[0]), os.path.split(openlp.__file__)[0])
- elif dir_type == AppLocation.LanguageDir:
- app_path = _get_frozen_path(os.path.abspath(os.path.split(sys.argv[0])[0]), _get_os_dir_path(dir_type))
- return os.path.join(app_path, u'i18n')
- elif dir_type == AppLocation.DataDir and AppLocation.BaseDir:
- return os.path.join(AppLocation.BaseDir, 'data')
- else:
- return _get_os_dir_path(dir_type)
-
- @staticmethod
- def get_data_path():
- """
- Return the path OpenLP stores all its data under.
- """
- # Check if we have a different data location.
- if Settings().contains(u'advanced/data path'):
- path = Settings().value(u'advanced/data path')
- else:
- path = AppLocation.get_directory(AppLocation.DataDir)
- check_directory_exists(path)
- return os.path.normpath(path)
-
- @staticmethod
- def get_section_data_path(section):
- """
- Return the path a particular module stores its data under.
- """
- data_path = AppLocation.get_data_path()
- path = os.path.join(data_path, section)
- check_directory_exists(path)
- return path
-
-
-def _get_os_dir_path(dir_type):
- """
- Return a path based on which OS and environment we are running in.
- """
- encoding = sys.getfilesystemencoding()
- if sys.platform == u'win32':
- if dir_type == AppLocation.DataDir:
- return os.path.join(unicode(os.getenv(u'APPDATA'), encoding), u'openlp', u'data')
- elif dir_type == AppLocation.LanguageDir:
- return os.path.split(openlp.__file__)[0]
- return os.path.join(unicode(os.getenv(u'APPDATA'), encoding), u'openlp')
- elif sys.platform == u'darwin':
- if dir_type == AppLocation.DataDir:
- return os.path.join(unicode(os.getenv(u'HOME'), encoding),
- u'Library', u'Application Support', u'openlp', u'Data')
- elif dir_type == AppLocation.LanguageDir:
- return os.path.split(openlp.__file__)[0]
- return os.path.join(unicode(os.getenv(u'HOME'), encoding), u'Library', u'Application Support', u'openlp')
- else:
- if dir_type == AppLocation.LanguageDir:
- prefixes = [u'/usr/local', u'/usr']
- for prefix in prefixes:
- directory = os.path.join(prefix, u'share', u'openlp')
- if os.path.exists(directory):
- return directory
- return os.path.join(u'/usr', u'share', u'openlp')
- if XDG_BASE_AVAILABLE:
- if dir_type == AppLocation.ConfigDir:
- return os.path.join(unicode(BaseDirectory.xdg_config_home, encoding), u'openlp')
- elif dir_type == AppLocation.DataDir:
- return os.path.join(unicode(BaseDirectory.xdg_data_home, encoding), u'openlp')
- elif dir_type == AppLocation.CacheDir:
- return os.path.join(unicode(BaseDirectory.xdg_cache_home, encoding), u'openlp')
- if dir_type == AppLocation.DataDir:
- return os.path.join(unicode(os.getenv(u'HOME'), encoding), u'.openlp', u'data')
- return os.path.join(unicode(os.getenv(u'HOME'), encoding), u'.openlp')
-
def _get_frozen_path(frozen_option, non_frozen_option):
"""
@@ -497,9 +396,11 @@
locale_direct_compare = locale.strcoll
+from applocation import AppLocation
from languagemanager import LanguageManager
from actions import ActionList
+
__all__ = [u'AppLocation', u'ActionList', u'LanguageManager', u'get_application_version', u'check_latest_version',
u'add_actions', u'get_filesystem_encoding', u'get_web_page', u'get_uno_command', u'get_uno_instance',
u'delete_file', u'clean_filename', u'format_time', u'locale_compare', u'locale_direct_compare']
=== modified file 'openlp/core/utils/actions.py'
--- openlp/core/utils/actions.py 2013-02-20 08:15:34 +0000
+++ openlp/core/utils/actions.py 2013-02-27 13:04:22 +0000
@@ -411,7 +411,7 @@
for existing_action in existing_actions:
if action is existing_action:
continue
- if not global_context or existing_action in affected_actions:
+ if existing_action in affected_actions:
return False
if existing_action.shortcutContext() in [QtCore.Qt.WindowShortcut, QtCore.Qt.ApplicationShortcut]:
return False
=== added file 'openlp/core/utils/applocation.py'
--- openlp/core/utils/applocation.py 1970-01-01 00:00:00 +0000
+++ openlp/core/utils/applocation.py 2013-02-27 13:04:22 +0000
@@ -0,0 +1,180 @@
+# -*- coding: utf-8 -*-
+# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
+
+###############################################################################
+# OpenLP - Open Source Lyrics Projection #
+# --------------------------------------------------------------------------- #
+# Copyright (c) 2008-2013 Raoul Snyman #
+# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
+# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
+# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
+# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
+# Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, #
+# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Dave Warnock, #
+# Frode Woldsund, Martin Zibricky, Patrick Zimmermann #
+# --------------------------------------------------------------------------- #
+# This program is free software; you can redistribute it and/or modify it #
+# under the terms of the GNU General Public License as published by the Free #
+# Software Foundation; version 2 of the License. #
+# #
+# This program is distributed in the hope that it will be useful, but WITHOUT #
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
+# more details. #
+# #
+# You should have received a copy of the GNU General Public License along #
+# with this program; if not, write to the Free Software Foundation, Inc., 59 #
+# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
+###############################################################################
+"""
+The :mod:`openlp.core.utils.applocation` module provides an utility for OpenLP receiving the data path etc.
+"""
+import logging
+import os
+import sys
+
+from openlp.core.lib import Settings
+from openlp.core.utils import _get_frozen_path
+
+
+if sys.platform != u'win32' and sys.platform != u'darwin':
+ try:
+ from xdg import BaseDirectory
+ XDG_BASE_AVAILABLE = True
+ except ImportError:
+ XDG_BASE_AVAILABLE = False
+
+import openlp
+from openlp.core.lib import check_directory_exists
+
+
+log = logging.getLogger(__name__)
+
+
+class AppLocation(object):
+ """
+ The :class:`AppLocation` class is a static class which retrieves a
+ directory based on the directory type.
+ """
+ AppDir = 1
+ ConfigDir = 2
+ DataDir = 3
+ PluginsDir = 4
+ VersionDir = 5
+ CacheDir = 6
+ LanguageDir = 7
+
+ # Base path where data/config/cache dir is located
+ BaseDir = None
+
+ @staticmethod
+ def get_directory(dir_type=1):
+ """
+ Return the appropriate directory according to the directory type.
+
+ ``dir_type``
+ The directory type you want, for instance the data directory.
+ """
+ if dir_type == AppLocation.AppDir:
+ return _get_frozen_path(os.path.abspath(os.path.split(sys.argv[0])[0]), os.path.split(openlp.__file__)[0])
+ elif dir_type == AppLocation.PluginsDir:
+ app_path = os.path.abspath(os.path.split(sys.argv[0])[0])
+ return _get_frozen_path(os.path.join(app_path, u'plugins'),
+ os.path.join(os.path.split(openlp.__file__)[0], u'plugins'))
+ elif dir_type == AppLocation.VersionDir:
+ return _get_frozen_path(os.path.abspath(os.path.split(sys.argv[0])[0]), os.path.split(openlp.__file__)[0])
+ elif dir_type == AppLocation.LanguageDir:
+ app_path = _get_frozen_path(os.path.abspath(os.path.split(sys.argv[0])[0]), _get_os_dir_path(dir_type))
+ return os.path.join(app_path, u'i18n')
+ elif dir_type == AppLocation.DataDir and AppLocation.BaseDir:
+ return os.path.join(AppLocation.BaseDir, 'data')
+ else:
+ return _get_os_dir_path(dir_type)
+
+ @staticmethod
+ def get_data_path():
+ """
+ Return the path OpenLP stores all its data under.
+ """
+ # Check if we have a different data location.
+ if Settings().contains(u'advanced/data path'):
+ path = Settings().value(u'advanced/data path')
+ else:
+ path = AppLocation.get_directory(AppLocation.DataDir)
+ check_directory_exists(path)
+ return os.path.normpath(path)
+
+ @staticmethod
+ def get_files(section=None, extension=None):
+ """
+ Get a list of files from the data files path.
+
+ ``section``
+ Defaults to *None*. The section of code getting the files - used to load from a section's data subdirectory.
+
+ ``extension``
+ Defaults to *None*. The extension to search for. For example::
+
+ u'.png'
+ """
+ path = AppLocation.get_data_path()
+ if section:
+ path = os.path.join(path, section)
+ try:
+ files = os.listdir(path)
+ except OSError:
+ return []
+ if extension:
+ return [filename for filename in files if extension == os.path.splitext(filename)[1]]
+ else:
+ # no filtering required
+ return files
+
+ @staticmethod
+ def get_section_data_path(section):
+ """
+ Return the path a particular module stores its data under.
+ """
+ data_path = AppLocation.get_data_path()
+ path = os.path.join(data_path, section)
+ check_directory_exists(path)
+ return path
+
+
+def _get_os_dir_path(dir_type):
+ """
+ Return a path based on which OS and environment we are running in.
+ """
+ encoding = sys.getfilesystemencoding()
+ if sys.platform == u'win32':
+ if dir_type == AppLocation.DataDir:
+ return os.path.join(unicode(os.getenv(u'APPDATA'), encoding), u'openlp', u'data')
+ elif dir_type == AppLocation.LanguageDir:
+ return os.path.split(openlp.__file__)[0]
+ return os.path.join(unicode(os.getenv(u'APPDATA'), encoding), u'openlp')
+ elif sys.platform == u'darwin':
+ if dir_type == AppLocation.DataDir:
+ return os.path.join(unicode(os.getenv(u'HOME'), encoding),
+ u'Library', u'Application Support', u'openlp', u'Data')
+ elif dir_type == AppLocation.LanguageDir:
+ return os.path.split(openlp.__file__)[0]
+ return os.path.join(unicode(os.getenv(u'HOME'), encoding), u'Library', u'Application Support', u'openlp')
+ else:
+ if dir_type == AppLocation.LanguageDir:
+ prefixes = [u'/usr/local', u'/usr']
+ for prefix in prefixes:
+ directory = os.path.join(prefix, u'share', u'openlp')
+ if os.path.exists(directory):
+ return directory
+ return os.path.join(u'/usr', u'share', u'openlp')
+ if XDG_BASE_AVAILABLE:
+ if dir_type == AppLocation.ConfigDir:
+ return os.path.join(unicode(BaseDirectory.xdg_config_home, encoding), u'openlp')
+ elif dir_type == AppLocation.DataDir:
+ return os.path.join(unicode(BaseDirectory.xdg_data_home, encoding), u'openlp')
+ elif dir_type == AppLocation.CacheDir:
+ return os.path.join(unicode(BaseDirectory.xdg_cache_home, encoding), u'openlp')
+ if dir_type == AppLocation.DataDir:
+ return os.path.join(unicode(os.getenv(u'HOME'), encoding), u'.openlp', u'data')
+ return os.path.join(unicode(os.getenv(u'HOME'), encoding), u'.openlp')
+
=== modified file 'openlp/plugins/bibles/lib/manager.py'
--- openlp/plugins/bibles/lib/manager.py 2013-02-07 07:17:19 +0000
+++ openlp/plugins/bibles/lib/manager.py 2013-02-27 13:04:22 +0000
@@ -30,7 +30,7 @@
import logging
import os
-from openlp.core.lib import Registry, SettingsManager, Settings, translate
+from openlp.core.lib import Registry, Settings, translate
from openlp.core.utils import AppLocation, delete_file
from openlp.plugins.bibles.lib import parse_reference, get_reference_separator, LanguageSelection
from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta
@@ -137,7 +137,7 @@
BibleDB class.
"""
log.debug(u'Reload bibles')
- files = SettingsManager.get_files(self.settingsSection, self.suffix)
+ files = AppLocation.get_files(self.settingsSection, self.suffix)
if u'alternative_book_names.sqlite' in files:
files.remove(u'alternative_book_names.sqlite')
log.debug(u'Bible Files %s', files)
=== modified file 'openlp/plugins/songs/forms/editsongform.py'
--- openlp/plugins/songs/forms/editsongform.py 2013-02-16 06:50:28 +0000
+++ openlp/plugins/songs/forms/editsongform.py 2013-02-27 13:04:22 +0000
@@ -291,7 +291,7 @@
verse_tags_translated = True
if index is None:
index = VerseType.from_tag(verse_tag)
- verse[0][u'type'] = VerseType.Tags[index]
+ verse[0][u'type'] = VerseType.tags[index]
if verse[0][u'label'] == u'':
verse[0][u'label'] = u'1'
verse_def = u'%s%s' % (verse[0][u'type'], verse[0][u'label'])
@@ -303,7 +303,7 @@
for count, verse in enumerate(verses):
self.verseListWidget.setRowCount(self.verseListWidget.rowCount() + 1)
item = QtGui.QTableWidgetItem(verse)
- verse_def = u'%s%s' % (VerseType.Tags[VerseType.Verse], unicode(count + 1))
+ verse_def = u'%s%s' % (VerseType.tags[VerseType.Verse], unicode(count + 1))
item.setData(QtCore.Qt.UserRole, verse_def)
self.verseListWidget.setItem(count, 0, item)
if self.song.verse_order:
@@ -315,7 +315,7 @@
verse_index = VerseType.from_translated_tag(verse_def[0], None)
if verse_index is None:
verse_index = VerseType.from_tag(verse_def[0])
- verse_tag = VerseType.TranslatedTags[verse_index].upper()
+ verse_tag = VerseType.translated_tags[verse_index].upper()
translated.append(u'%s%s' % (verse_tag, verse_def[1:]))
self.verseOrderEdit.setText(u' '.join(translated))
else:
@@ -547,7 +547,7 @@
verse_name = parts
verse_num = u'1'
verse_index = VerseType.from_loose_input(verse_name)
- verse_tag = VerseType.Tags[verse_index]
+ verse_tag = VerseType.tags[verse_index]
# Later we need to handle v1a as well.
#regex = re.compile(r'(\d+\w.)')
regex = re.compile(r'\D*(\d+)\D*')
@@ -599,7 +599,7 @@
if len(item) == 1:
verse_index = VerseType.from_translated_tag(item, None)
if verse_index is not None:
- order.append(VerseType.Tags[verse_index] + u'1')
+ order.append(VerseType.tags[verse_index] + u'1')
else:
# it matches no verses anyway
order.append(u'')
@@ -609,7 +609,7 @@
# it matches no verses anyway
order.append(u'')
else:
- verse_tag = VerseType.Tags[verse_index]
+ verse_tag = VerseType.tags[verse_index]
verse_num = item[1:].lower()
order.append(verse_tag + verse_num)
return order
@@ -831,7 +831,7 @@
ordertext = self.verseOrderEdit.text()
order = []
for item in ordertext.split():
- verse_tag = VerseType.Tags[VerseType.from_translated_tag(item[0])]
+ verse_tag = VerseType.tags[VerseType.from_translated_tag(item[0])]
verse_num = item[1:].lower()
order.append(u'%s%s' % (verse_tag, verse_num))
self.song.verse_order = u' '.join(order)
=== modified file 'openlp/plugins/songs/forms/editversedialog.py'
--- openlp/plugins/songs/forms/editversedialog.py 2013-02-05 08:05:28 +0000
+++ openlp/plugins/songs/forms/editversedialog.py 2013-02-27 13:04:22 +0000
@@ -74,13 +74,13 @@
def retranslateUi(self, editVerseDialog):
editVerseDialog.setWindowTitle(translate('SongsPlugin.EditVerseForm', 'Edit Verse'))
self.verseTypeLabel.setText(translate('SongsPlugin.EditVerseForm', '&Verse type:'))
- self.verseTypeComboBox.setItemText(VerseType.Verse, VerseType.TranslatedNames[VerseType.Verse])
- self.verseTypeComboBox.setItemText(VerseType.Chorus, VerseType.TranslatedNames[VerseType.Chorus])
- self.verseTypeComboBox.setItemText(VerseType.Bridge, VerseType.TranslatedNames[VerseType.Bridge])
- self.verseTypeComboBox.setItemText(VerseType.PreChorus, VerseType.TranslatedNames[VerseType.PreChorus])
- self.verseTypeComboBox.setItemText(VerseType.Intro, VerseType.TranslatedNames[VerseType.Intro])
- self.verseTypeComboBox.setItemText(VerseType.Ending, VerseType.TranslatedNames[VerseType.Ending])
- self.verseTypeComboBox.setItemText(VerseType.Other, VerseType.TranslatedNames[VerseType.Other])
+ self.verseTypeComboBox.setItemText(VerseType.Verse, VerseType.translated_names[VerseType.Verse])
+ self.verseTypeComboBox.setItemText(VerseType.Chorus, VerseType.translated_names[VerseType.Chorus])
+ self.verseTypeComboBox.setItemText(VerseType.Bridge, VerseType.translated_names[VerseType.Bridge])
+ self.verseTypeComboBox.setItemText(VerseType.PreChorus, VerseType.translated_names[VerseType.PreChorus])
+ self.verseTypeComboBox.setItemText(VerseType.Intro, VerseType.translated_names[VerseType.Intro])
+ self.verseTypeComboBox.setItemText(VerseType.Ending, VerseType.translated_names[VerseType.Ending])
+ self.verseTypeComboBox.setItemText(VerseType.Other, VerseType.translated_names[VerseType.Other])
self.splitButton.setText(UiStrings().Split)
self.splitButton.setToolTip(UiStrings().SplitToolTip)
self.insertButton.setText(translate('SongsPlugin.EditVerseForm', '&Insert'))
=== modified file 'openlp/plugins/songs/forms/editverseform.py'
--- openlp/plugins/songs/forms/editverseform.py 2013-02-04 21:22:12 +0000
+++ openlp/plugins/songs/forms/editverseform.py 2013-02-27 13:04:22 +0000
@@ -82,8 +82,7 @@
def onInsertButtonClicked(self):
verse_type_index = self.verseTypeComboBox.currentIndex()
- self.insertVerse(VerseType.Tags[verse_type_index],
- self.verseNumberBox.value())
+ self.insertVerse(VerseType.tags[verse_type_index], self.verseNumberBox.value())
def onVerseTypeComboBoxChanged(self):
self.updateSuggestedVerseNumber()
@@ -93,12 +92,11 @@
def updateSuggestedVerseNumber(self):
"""
- Adjusts the verse number SpinBox in regard to the selected verse type
- and the cursor's position.
+ Adjusts the verse number SpinBox in regard to the selected verse type and the cursor's position.
"""
position = self.verseTextEdit.textCursor().position()
text = self.verseTextEdit.toPlainText()
- verse_name = VerseType.TranslatedNames[
+ verse_name = VerseType.translated_names[
self.verseTypeComboBox.currentIndex()]
if not text:
return
@@ -120,8 +118,7 @@
verse_num = 1
self.verseNumberBox.setValue(verse_num)
- def setVerse(self, text, single=False,
- tag=u'%s1' % VerseType.Tags[VerseType.Verse]):
+ def setVerse(self, text, single=False, tag=u'%s1' % VerseType.tags[VerseType.Verse]):
self.hasSingleVerse = single
if single:
verse_type_index = VerseType.from_tag(tag[0], None)
@@ -132,7 +129,7 @@
self.insertButton.setVisible(False)
else:
if not text:
- text = u'---[%s:1]---\n' % VerseType.TranslatedNames[VerseType.Verse]
+ text = u'---[%s:1]---\n' % VerseType.translated_names[VerseType.Verse]
self.verseTypeComboBox.setCurrentIndex(0)
self.verseNumberBox.setValue(1)
self.insertButton.setVisible(True)
@@ -141,12 +138,12 @@
self.verseTextEdit.moveCursor(QtGui.QTextCursor.End)
def getVerse(self):
- return self.verseTextEdit.toPlainText(), VerseType.Tags[self.verseTypeComboBox.currentIndex()], \
+ return self.verseTextEdit.toPlainText(), VerseType.tags[self.verseTypeComboBox.currentIndex()], \
unicode(self.verseNumberBox.value())
def getVerseAll(self):
text = self.verseTextEdit.toPlainText()
if not text.startswith(u'---['):
- text = u'---[%s:1]---\n%s' % (VerseType.TranslatedNames[VerseType.Verse], text)
+ text = u'---[%s:1]---\n%s' % (VerseType.translated_names[VerseType.Verse], text)
return text
=== modified file 'openlp/plugins/songs/lib/__init__.py'
--- openlp/plugins/songs/lib/__init__.py 2013-02-04 17:47:02 +0000
+++ openlp/plugins/songs/lib/__init__.py 2013-02-27 13:04:22 +0000
@@ -37,8 +37,7 @@
WHITESPACE = re.compile(r'[\W_]+', re.UNICODE)
APOSTROPHE = re.compile(u'[\'`’ʻ′]', re.UNICODE)
-PATTERN = re.compile(r"\\([a-z]{1,32})(-?\d{1,10})?[ ]?|\\'"
- r"([0-9a-f]{2})|\\([^a-z])|([{}])|[\r\n]+|(.)", re.I)
+PATTERN = re.compile(r"\\([a-z]{1,32})(-?\d{1,10})?[ ]?|\\'([0-9a-f]{2})|\\([^a-z])|([{}])|[\r\n]+|(.)", re.I)
# RTF control words which specify a "destination" to be ignored.
DESTINATIONS = frozenset((
u'aftncn', u'aftnsep', u'aftnsepc', u'annotation', u'atnauthor',
@@ -138,8 +137,7 @@
class VerseType(object):
"""
- VerseType provides an enumeration for the tags that may be associated
- with verses in songs.
+ VerseType provides an enumeration for the tags that may be associated with verses in songs.
"""
Verse = 0
Chorus = 1
@@ -149,7 +147,7 @@
Ending = 5
Other = 6
- Names = [
+ names = [
u'Verse',
u'Chorus',
u'Bridge',
@@ -157,9 +155,9 @@
u'Intro',
u'Ending',
u'Other']
- Tags = [name[0].lower() for name in Names]
+ tags = [name[0].lower() for name in names]
- TranslatedNames = [
+ translated_names = [
translate('SongsPlugin.VerseType', 'Verse'),
translate('SongsPlugin.VerseType', 'Chorus'),
translate('SongsPlugin.VerseType', 'Bridge'),
@@ -167,13 +165,12 @@
translate('SongsPlugin.VerseType', 'Intro'),
translate('SongsPlugin.VerseType', 'Ending'),
translate('SongsPlugin.VerseType', 'Other')]
- TranslatedTags = [name[0].lower() for name in TranslatedNames]
+ translated_tags = [name[0].lower() for name in translated_names]
@staticmethod
def translated_tag(verse_tag, default=Other):
"""
- Return the translated UPPERCASE tag for a given tag,
- used to show translated verse tags in UI
+ Return the translated UPPERCASE tag for a given tag, used to show translated verse tags in UI
``verse_tag``
The string to return a VerseType for
@@ -182,11 +179,11 @@
Default return value if no matching tag is found
"""
verse_tag = verse_tag[0].lower()
- for num, tag in enumerate(VerseType.Tags):
+ for num, tag in enumerate(VerseType.tags):
if verse_tag == tag:
- return VerseType.TranslatedTags[num].upper()
- if default in VerseType.TranslatedTags:
- return VerseType.TranslatedTags[default].upper()
+ return VerseType.translated_tags[num].upper()
+ if default in VerseType.translated_tags:
+ return VerseType.translated_tags[default].upper()
@staticmethod
def translated_name(verse_tag, default=Other):
@@ -200,11 +197,11 @@
Default return value if no matching tag is found
"""
verse_tag = verse_tag[0].lower()
- for num, tag in enumerate(VerseType.Tags):
+ for num, tag in enumerate(VerseType.tags):
if verse_tag == tag:
- return VerseType.TranslatedNames[num]
- if default in VerseType.TranslatedNames:
- return VerseType.TranslatedNames[default]
+ return VerseType.translated_names[num]
+ if default in VerseType.translated_names:
+ return VerseType.translated_names[default]
@staticmethod
def from_tag(verse_tag, default=Other):
@@ -218,7 +215,7 @@
Default return value if no matching tag is found
"""
verse_tag = verse_tag[0].lower()
- for num, tag in enumerate(VerseType.Tags):
+ for num, tag in enumerate(VerseType.tags):
if verse_tag == tag:
return num
return default
@@ -235,7 +232,7 @@
Default return value if no matching tag is found
"""
verse_tag = verse_tag[0].lower()
- for num, tag in enumerate(VerseType.TranslatedTags):
+ for num, tag in enumerate(VerseType.translated_tags):
if verse_tag == tag:
return num
return default
@@ -252,7 +249,7 @@
Default return value if no matching tag is found
"""
verse_name = verse_name.lower()
- for num, name in enumerate(VerseType.Names):
+ for num, name in enumerate(VerseType.names):
if verse_name == name.lower():
return num
return default
@@ -266,7 +263,7 @@
The string to return a VerseType for
"""
verse_name = verse_name.lower()
- for num, translation in enumerate(VerseType.TranslatedNames):
+ for num, translation in enumerate(VerseType.translated_names):
if verse_name == translation.lower():
return num
@@ -296,13 +293,11 @@
def retrieve_windows_encoding(recommendation=None):
"""
- Determines which encoding to use on an information source. The process uses
- both automated detection, which is passed to this method as a
- recommendation, and user confirmation to return an encoding.
+ Determines which encoding to use on an information source. The process uses both automated detection, which is
+ passed to this method as a recommendation, and user confirmation to return an encoding.
``recommendation``
- A recommended encoding discovered programmatically for the user to
- confirm.
+ A recommended encoding discovered programmatically for the user to confirm.
"""
# map chardet result to compatible windows standard code page
codepage_mapping = {'IBM866': u'cp866', 'TIS-620': u'cp874',
@@ -355,24 +350,22 @@
def clean_string(string):
"""
- Strips punctuation from the passed string to assist searching
+ Strips punctuation from the passed string to assist searching.
"""
return WHITESPACE.sub(u' ', APOSTROPHE.sub(u'', string)).lower()
def clean_title(title):
"""
- Cleans the song title by removing Unicode control chars groups C0 & C1,
- as well as any trailing spaces
+ Cleans the song title by removing Unicode control chars groups C0 & C1, as well as any trailing spaces.
"""
return CONTROL_CHARS.sub(u'', title).rstrip()
def clean_song(manager, song):
"""
- Cleans the search title, rebuilds the search lyrics, adds a default author
- if the song does not have one and other clean ups. This should always
- called when a new song is added or changed.
+ Cleans the search title, rebuilds the search lyrics, adds a default author if the song does not have one and other
+ clean ups. This should always called when a new song is added or changed.
``manager``
The song's manager.
@@ -397,21 +390,20 @@
song.search_title = clean_string(song.title) + u'@' + clean_string(song.alternate_title)
# Only do this, if we the song is a 1.9.4 song (or older).
if song.lyrics.find(u'<lyrics language="en">') != -1:
- # Remove the old "language" attribute from lyrics tag (prior to 1.9.5).
- # This is not very important, but this keeps the database clean. This
- # can be removed when everybody has cleaned his songs.
+ # Remove the old "language" attribute from lyrics tag (prior to 1.9.5). This is not very important, but this
+ # keeps the database clean. This can be removed when everybody has cleaned his songs.
song.lyrics = song.lyrics.replace(u'<lyrics language="en">', u'<lyrics>')
verses = SongXML().get_verses(song.lyrics)
song.search_lyrics = u' '.join([clean_string(verse[1])
for verse in verses])
# We need a new and clean SongXML instance.
sxml = SongXML()
- # Rebuild the song's verses, to remove any wrong verse names (for
- # example translated ones), which might have been added prior to 1.9.5.
+ # Rebuild the song's verses, to remove any wrong verse names (for example translated ones), which might have
+ # been added prior to 1.9.5.
# List for later comparison.
compare_order = []
for verse in verses:
- verse_type = VerseType.Tags[VerseType.from_loose_input(verse[0][u'type'])]
+ verse_type = VerseType.tags[VerseType.from_loose_input(verse[0][u'type'])]
sxml.add_verse_to_lyrics(
verse_type,
verse[0][u'label'],
@@ -422,15 +414,14 @@
if verse[0][u'label'] == u'1':
compare_order.append(verse_type.upper())
song.lyrics = unicode(sxml.extract_xml(), u'utf-8')
- # Rebuild the verse order, to convert translated verse tags, which might
- # have been added prior to 1.9.5.
+ # Rebuild the verse order, to convert translated verse tags, which might have been added prior to 1.9.5.
if song.verse_order:
order = CONTROL_CHARS.sub(u'', song.verse_order).strip().split()
else:
order = []
new_order = []
for verse_def in order:
- verse_type = VerseType.Tags[
+ verse_type = VerseType.tags[
VerseType.from_loose_input(verse_def[0])]
if len(verse_def) > 1:
new_order.append((u'%s%s' % (verse_type, verse_def[1:])).upper())
@@ -463,16 +454,16 @@
Finds an encoding to use. Asks user, if necessary.
``font``
- The number of currently active font.
+ The number of currently active font.
``font_table``
- Dictionary of fonts and respective encodings.
+ Dictionary of fonts and respective encodings.
``default_encoding``
- The default encoding to use when font_table is empty or no font is used.
+ The default encoding to use when font_table is empty or no font is used.
``failed``
- A boolean indicating whether the previous encoding didn't work.
+ A boolean indicating whether the previous encoding didn't work.
"""
encoding = None
if font in font_table:
@@ -494,10 +485,10 @@
http://stackoverflow.com/questions/188545
``text``
- RTF-encoded text, a string.
+ RTF-encoded text, a string.
``default_encoding``
- Default encoding to use when no encoding is specified.
+ Default encoding to use when no encoding is specified.
"""
# Current font is the font tag we last met.
font = u''
@@ -589,8 +580,7 @@
def natcmp(a, b):
"""
- Natural string comparison which mimics the behaviour of Python's internal
- cmp function.
+ Natural string comparison which mimics the behaviour of Python's internal cmp function.
"""
if len(a) <= len(b):
for i, key in enumerate(a):
=== modified file 'openlp/plugins/songs/lib/cclifileimport.py'
--- openlp/plugins/songs/lib/cclifileimport.py 2013-02-07 11:33:47 +0000
+++ openlp/plugins/songs/lib/cclifileimport.py 2013-02-27 13:04:22 +0000
@@ -188,13 +188,13 @@
words_list = song_words.split(u'/t')
for counter in range(len(field_list)):
if field_list[counter].startswith(u'Ver'):
- verse_type = VerseType.Tags[VerseType.Verse]
+ verse_type = VerseType.tags[VerseType.Verse]
elif field_list[counter].startswith(u'Ch'):
- verse_type = VerseType.Tags[VerseType.Chorus]
+ verse_type = VerseType.tags[VerseType.Chorus]
elif field_list[counter].startswith(u'Br'):
- verse_type = VerseType.Tags[VerseType.Bridge]
+ verse_type = VerseType.tags[VerseType.Bridge]
else:
- verse_type = VerseType.Tags[VerseType.Other]
+ verse_type = VerseType.tags[VerseType.Other]
check_first_verse_line = True
verse_text = unicode(words_list[counter])
verse_text = verse_text.replace(u'/n', u'\n')
@@ -202,15 +202,15 @@
verse_lines = verse_text.split(u'\n', 1)
if check_first_verse_line:
if verse_lines[0].startswith(u'(PRE-CHORUS'):
- verse_type = VerseType.Tags[VerseType.PreChorus]
+ verse_type = VerseType.tags[VerseType.PreChorus]
log.debug(u'USR verse PRE-CHORUS: %s', verse_lines[0])
verse_text = verse_lines[1]
elif verse_lines[0].startswith(u'(BRIDGE'):
- verse_type = VerseType.Tags[VerseType.Bridge]
+ verse_type = VerseType.tags[VerseType.Bridge]
log.debug(u'USR verse BRIDGE')
verse_text = verse_lines[1]
elif verse_lines[0].startswith(u'('):
- verse_type = VerseType.Tags[VerseType.Other]
+ verse_type = VerseType.tags[VerseType.Other]
verse_text = verse_lines[1]
if verse_text:
self.addVerse(verse_text, verse_type)
@@ -292,31 +292,31 @@
verse_desc_parts = clean_line.split(u' ')
if len(verse_desc_parts) == 2:
if verse_desc_parts[0].startswith(u'Ver'):
- verse_type = VerseType.Tags[VerseType.Verse]
+ verse_type = VerseType.tags[VerseType.Verse]
elif verse_desc_parts[0].startswith(u'Ch'):
- verse_type = VerseType.Tags[VerseType.Chorus]
+ verse_type = VerseType.tags[VerseType.Chorus]
elif verse_desc_parts[0].startswith(u'Br'):
- verse_type = VerseType.Tags[VerseType.Bridge]
+ verse_type = VerseType.tags[VerseType.Bridge]
else:
# we need to analyse the next line for
# verse type, so set flag
- verse_type = VerseType.Tags[VerseType.Other]
+ verse_type = VerseType.tags[VerseType.Other]
check_first_verse_line = True
verse_number = verse_desc_parts[1]
else:
- verse_type = VerseType.Tags[VerseType.Other]
+ verse_type = VerseType.tags[VerseType.Other]
verse_number = 1
verse_start = True
else:
# check first line for verse type
if check_first_verse_line:
if line.startswith(u'(PRE-CHORUS'):
- verse_type = VerseType.Tags[VerseType.PreChorus]
+ verse_type = VerseType.tags[VerseType.PreChorus]
elif line.startswith(u'(BRIDGE'):
- verse_type = VerseType.Tags[VerseType.Bridge]
+ verse_type = VerseType.tags[VerseType.Bridge]
# Handle all other misc types
elif line.startswith(u'('):
- verse_type = VerseType.Tags[VerseType.Other]
+ verse_type = VerseType.tags[VerseType.Other]
else:
verse_text = verse_text + line
check_first_verse_line = False
=== modified file 'openlp/plugins/songs/lib/easyslidesimport.py'
--- openlp/plugins/songs/lib/easyslidesimport.py 2013-02-07 11:33:47 +0000
+++ openlp/plugins/songs/lib/easyslidesimport.py 2013-02-27 13:04:22 +0000
@@ -175,12 +175,12 @@
# if the regions are inside verses
regionsInVerses = (regions and regionlines[regionlines.keys()[0]] > 1)
MarkTypes = {
- u'CHORUS': VerseType.Tags[VerseType.Chorus],
- u'VERSE': VerseType.Tags[VerseType.Verse],
- u'INTRO': VerseType.Tags[VerseType.Intro],
- u'ENDING': VerseType.Tags[VerseType.Ending],
- u'BRIDGE': VerseType.Tags[VerseType.Bridge],
- u'PRECHORUS': VerseType.Tags[VerseType.PreChorus]
+ u'CHORUS': VerseType.tags[VerseType.Chorus],
+ u'VERSE': VerseType.tags[VerseType.Verse],
+ u'INTRO': VerseType.tags[VerseType.Intro],
+ u'ENDING': VerseType.tags[VerseType.Ending],
+ u'BRIDGE': VerseType.tags[VerseType.Bridge],
+ u'PRECHORUS': VerseType.tags[VerseType.PreChorus]
}
verses = {}
# list as [region, versetype, versenum, instance]
=== modified file 'openlp/plugins/songs/lib/ewimport.py'
--- openlp/plugins/songs/lib/ewimport.py 2013-02-07 11:33:47 +0000
+++ openlp/plugins/songs/lib/ewimport.py 2013-02-27 13:04:22 +0000
@@ -178,7 +178,7 @@
if result is None:
return
words, self.encoding = result
- verse_type = VerseType.Tags[VerseType.Verse]
+ verse_type = VerseType.tags[VerseType.Verse]
for verse in SLIDE_BREAK_REGEX.split(words):
verse = verse.strip()
if not verse:
@@ -187,17 +187,17 @@
first_line_is_tag = False
# EW tags: verse, chorus, pre-chorus, bridge, tag,
# intro, ending, slide
- for type in VerseType.Names+[u'tag', u'slide']:
- type = type.lower()
+ for tag in VerseType.tags + [u'tag', u'slide']:
+ tag = tag.lower()
ew_tag = verse_split[0].strip().lower()
- if ew_tag.startswith(type):
- verse_type = type[0]
- if type == u'tag' or type == u'slide':
- verse_type = VerseType.Tags[VerseType.Other]
+ if ew_tag.startswith(tag):
+ verse_type = tag[0]
+ if tag == u'tag' or tag == u'slide':
+ verse_type = VerseType.tags[VerseType.Other]
first_line_is_tag = True
number_found = False
# check if tag is followed by number and/or note
- if len(ew_tag) > len(type):
+ if len(ew_tag) > len(tag):
match = NUMBER_REGEX.search(ew_tag)
if match:
number = match.group()
@@ -209,10 +209,7 @@
if not number_found:
verse_type += u'1'
break
- self.addVerse(
- verse_split[-1].strip() \
- if first_line_is_tag else verse,
- verse_type)
+ self.addVerse(verse_split[-1].strip() if first_line_is_tag else verse, verse_type)
if len(self.comments) > 5:
self.comments += unicode(translate('SongsPlugin.EasyWorshipSongImport',
'\n[above are Song Tags with notes imported from EasyWorship]'))
@@ -224,8 +221,7 @@
self.memoFile.close()
def findField(self, field_name):
- return [i for i, x in enumerate(self.fieldDescs)
- if x.name == field_name][0]
+ return [i for i, x in enumerate(self.fieldDescs) if x.name == field_name][0]
def setRecordStruct(self, field_descs):
# Begin with empty field struct list
=== modified file 'openlp/plugins/songs/lib/foilpresenterimport.py'
--- openlp/plugins/songs/lib/foilpresenterimport.py 2013-02-07 11:33:47 +0000
+++ openlp/plugins/songs/lib/foilpresenterimport.py 2013-02-27 13:04:22 +0000
@@ -412,13 +412,13 @@
temp_sortnr_backup = 1
temp_sortnr_liste = []
verse_count = {
- VerseType.Tags[VerseType.Verse]: 1,
- VerseType.Tags[VerseType.Chorus]: 1,
- VerseType.Tags[VerseType.Bridge]: 1,
- VerseType.Tags[VerseType.Ending]: 1,
- VerseType.Tags[VerseType.Other]: 1,
- VerseType.Tags[VerseType.Intro]: 1,
- VerseType.Tags[VerseType.PreChorus]: 1
+ VerseType.tags[VerseType.Verse]: 1,
+ VerseType.tags[VerseType.Chorus]: 1,
+ VerseType.tags[VerseType.Bridge]: 1,
+ VerseType.tags[VerseType.Ending]: 1,
+ VerseType.tags[VerseType.Other]: 1,
+ VerseType.tags[VerseType.Intro]: 1,
+ VerseType.tags[VerseType.PreChorus]: 1
}
for strophe in foilpresenterfolie.strophen.strophe:
text = self._child(strophe.text_) if hasattr(strophe, u'text_') else u''
@@ -438,25 +438,25 @@
temp_verse_name = re.compile(u'[0-9].*').sub(u'', verse_name)
temp_verse_name = temp_verse_name[:3].lower()
if temp_verse_name == u'ref':
- verse_type = VerseType.Tags[VerseType.Chorus]
+ verse_type = VerseType.tags[VerseType.Chorus]
elif temp_verse_name == u'r':
- verse_type = VerseType.Tags[VerseType.Chorus]
+ verse_type = VerseType.tags[VerseType.Chorus]
elif temp_verse_name == u'':
- verse_type = VerseType.Tags[VerseType.Verse]
+ verse_type = VerseType.tags[VerseType.Verse]
elif temp_verse_name == u'v':
- verse_type = VerseType.Tags[VerseType.Verse]
+ verse_type = VerseType.tags[VerseType.Verse]
elif temp_verse_name == u'bri':
- verse_type = VerseType.Tags[VerseType.Bridge]
+ verse_type = VerseType.tags[VerseType.Bridge]
elif temp_verse_name == u'cod':
- verse_type = VerseType.Tags[VerseType.Ending]
+ verse_type = VerseType.tags[VerseType.Ending]
elif temp_verse_name == u'sch':
- verse_type = VerseType.Tags[VerseType.Ending]
+ verse_type = VerseType.tags[VerseType.Ending]
elif temp_verse_name == u'pre':
- verse_type = VerseType.Tags[VerseType.PreChorus]
+ verse_type = VerseType.tags[VerseType.PreChorus]
elif temp_verse_name == u'int':
- verse_type = VerseType.Tags[VerseType.Intro]
+ verse_type = VerseType.tags[VerseType.Intro]
else:
- verse_type = VerseType.Tags[VerseType.Other]
+ verse_type = VerseType.tags[VerseType.Other]
verse_number = re.compile(u'[a-zA-Z.+-_ ]*').sub(u'', verse_name)
# Foilpresenter allows e. g. "C", but we need "C1".
if not verse_number:
@@ -469,7 +469,7 @@
if value == u''.join((verse_type, verse_number)):
verse_number = unicode(int(verse_number) + 1)
verse_type_index = VerseType.from_tag(verse_type[0])
- verse_type = VerseType.Names[verse_type_index]
+ verse_type = VerseType.tags[verse_type_index]
temp_verse_order[verse_sortnr] = u''.join((verse_type[0],
verse_number))
temp_verse_order_backup.append(u''.join((verse_type[0],
=== modified file 'openlp/plugins/songs/lib/mediaitem.py'
--- openlp/plugins/songs/lib/mediaitem.py 2013-02-12 21:27:43 +0000
+++ openlp/plugins/songs/lib/mediaitem.py 2013-02-27 13:04:22 +0000
@@ -430,7 +430,7 @@
verse_index = VerseType.from_string(verse_tag, None)
if verse_index is None:
verse_index = VerseType.from_tag(verse_tag)
- verse_tag = VerseType.TranslatedTags[verse_index].upper()
+ verse_tag = VerseType.translated_tags[verse_index].upper()
verse_def = u'%s%s' % (verse_tag, verse[0][u'label'])
service_item.add_from_text(unicode(verse[1]), verse_def)
else:
@@ -445,7 +445,7 @@
verse_index = VerseType.from_translated_tag(verse[0][u'type'])
else:
verse_index = VerseType.from_tag(verse[0][u'type'])
- verse_tag = VerseType.TranslatedTags[verse_index]
+ verse_tag = VerseType.translated_tags[verse_index]
verse_def = u'%s%s' % (verse_tag, verse[0][u'label'])
service_item.add_from_text(verse[1], verse_def)
else:
=== modified file 'openlp/plugins/songs/lib/opensongimport.py'
--- openlp/plugins/songs/lib/opensongimport.py 2013-02-07 11:33:47 +0000
+++ openlp/plugins/songs/lib/opensongimport.py 2013-02-27 13:04:22 +0000
@@ -160,7 +160,7 @@
# keep track of verses appearance order
our_verse_order = []
# default verse
- verse_tag = VerseType.Tags[VerseType.Verse]
+ verse_tag = VerseType.tags[VerseType.Verse]
verse_num = u'1'
# for the case where song has several sections with same marker
inst = 1
@@ -184,21 +184,18 @@
# drop the square brackets
right_bracket = this_line.find(u']')
content = this_line[1:right_bracket].lower()
- # have we got any digits?
- # If so, verse number is everything from the digits
- # to the end (openlp does not have concept of part verses, so
- # just ignore any non integers on the end (including floats))
+ # have we got any digits? If so, verse number is everything from the digits to the end (openlp does not
+ # have concept of part verses, so just ignore any non integers on the end (including floats))
match = re.match(u'(\D*)(\d+)', content)
if match is not None:
verse_tag = match.group(1)
verse_num = match.group(2)
else:
- # otherwise we assume number 1 and take the whole prefix as
- # the verse tag
+ # otherwise we assume number 1 and take the whole prefix as the verse tag
verse_tag = content
verse_num = u'1'
verse_index = VerseType.from_loose_input(verse_tag) if verse_tag else 0
- verse_tag = VerseType.Tags[verse_index]
+ verse_tag = VerseType.tags[verse_index]
inst = 1
if [verse_tag, verse_num, inst] in our_verse_order and verse_num in verses.get(verse_tag, {}):
inst = len(verses[verse_tag][verse_num]) + 1
@@ -236,8 +233,8 @@
# figure out the presentation order, if present
if u'presentation' in fields and root.presentation:
order = unicode(root.presentation)
- # We make all the tags in the lyrics lower case, so match that here
- # and then split into a list on the whitespace
+ # We make all the tags in the lyrics lower case, so match that here and then split into a list on the
+ # whitespace.
order = order.lower().split()
for verse_def in order:
match = re.match(u'(\D*)(\d+.*)', verse_def)
@@ -245,7 +242,7 @@
verse_tag = match.group(1)
verse_num = match.group(2)
if not verse_tag:
- verse_tag = VerseType.Tags[VerseType.Verse]
+ verse_tag = VerseType.tags[VerseType.Verse]
else:
# Assume it's no.1 if there are no digits
verse_tag = verse_def
=== modified file 'openlp/plugins/songs/lib/songbeamerimport.py'
--- openlp/plugins/songs/lib/songbeamerimport.py 2013-02-07 11:33:47 +0000
+++ openlp/plugins/songs/lib/songbeamerimport.py 2013-02-27 13:04:22 +0000
@@ -27,8 +27,7 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
"""
-The :mod:`songbeamerimport` module provides the functionality for importing
- SongBeamer songs into the OpenLP database.
+The :mod:`songbeamerimport` module provides the functionality for importing SongBeamer songs into the OpenLP database.
"""
import chardet
import codecs
@@ -43,32 +42,31 @@
class SongBeamerTypes(object):
MarkTypes = {
- u'Refrain': VerseType.Tags[VerseType.Chorus],
- u'Chorus': VerseType.Tags[VerseType.Chorus],
- u'Vers': VerseType.Tags[VerseType.Verse],
- u'Verse': VerseType.Tags[VerseType.Verse],
- u'Strophe': VerseType.Tags[VerseType.Verse],
- u'Intro': VerseType.Tags[VerseType.Intro],
- u'Coda': VerseType.Tags[VerseType.Ending],
- u'Ending': VerseType.Tags[VerseType.Ending],
- u'Bridge': VerseType.Tags[VerseType.Bridge],
- u'Interlude': VerseType.Tags[VerseType.Bridge],
- u'Zwischenspiel': VerseType.Tags[VerseType.Bridge],
- u'Pre-Chorus': VerseType.Tags[VerseType.PreChorus],
- u'Pre-Refrain': VerseType.Tags[VerseType.PreChorus],
- u'Pre-Bridge': VerseType.Tags[VerseType.Other],
- u'Pre-Coda': VerseType.Tags[VerseType.Other],
- u'Unbekannt': VerseType.Tags[VerseType.Other],
- u'Unknown': VerseType.Tags[VerseType.Other],
- u'Unbenannt': VerseType.Tags[VerseType.Other]
+ u'Refrain': VerseType.tags[VerseType.Chorus],
+ u'Chorus': VerseType.tags[VerseType.Chorus],
+ u'Vers': VerseType.tags[VerseType.Verse],
+ u'Verse': VerseType.tags[VerseType.Verse],
+ u'Strophe': VerseType.tags[VerseType.Verse],
+ u'Intro': VerseType.tags[VerseType.Intro],
+ u'Coda': VerseType.tags[VerseType.Ending],
+ u'Ending': VerseType.tags[VerseType.Ending],
+ u'Bridge': VerseType.tags[VerseType.Bridge],
+ u'Interlude': VerseType.tags[VerseType.Bridge],
+ u'Zwischenspiel': VerseType.tags[VerseType.Bridge],
+ u'Pre-Chorus': VerseType.tags[VerseType.PreChorus],
+ u'Pre-Refrain': VerseType.tags[VerseType.PreChorus],
+ u'Pre-Bridge': VerseType.tags[VerseType.Other],
+ u'Pre-Coda': VerseType.tags[VerseType.Other],
+ u'Unbekannt': VerseType.tags[VerseType.Other],
+ u'Unknown': VerseType.tags[VerseType.Other],
+ u'Unbenannt': VerseType.tags[VerseType.Other]
}
class SongBeamerImport(SongImport):
"""
- Import Song Beamer files(s)
- Song Beamer file format is text based
- in the beginning are one or more control tags written
+ Import Song Beamer files(s). Song Beamer file format is text based in the beginning are one or more control tags
+ written.
"""
HTML_TAG_PAIRS = [
(re.compile(u'<b>'), u'{st}'),
@@ -113,7 +111,7 @@
return
self.setDefaults()
self.currentVerse = u''
- self.currentVerseType = VerseType.Tags[VerseType.Verse]
+ self.currentVerseType = VerseType.tags[VerseType.Verse]
read_verses = False
file_name = os.path.split(file)[1]
if os.path.isfile(file):
@@ -137,7 +135,7 @@
self.replaceHtmlTags()
self.addVerse(self.currentVerse, self.currentVerseType)
self.currentVerse = u''
- self.currentVerseType = VerseType.Tags[VerseType.Verse]
+ self.currentVerseType = VerseType.tags[VerseType.Verse]
read_verses = True
verse_start = True
elif read_verses:
@@ -155,8 +153,7 @@
def replaceHtmlTags(self):
"""
- This can be called to replace SongBeamer's specific (html) tags with
- OpenLP's specific (html) tags.
+ This can be called to replace SongBeamer's specific (html) tags with OpenLP's specific (html) tags.
"""
for pair in SongBeamerImport.HTML_TAG_PAIRS:
self.currentVerse = pair[0].sub(pair[1], self.currentVerse)
@@ -166,8 +163,7 @@
Parses a meta data line.
``line``
- The line in the file. It should consist of a tag and a value
- for this tag (unicode)::
+ The line in the file. It should consist of a tag and a value for this tag (unicode)::
u'#Title=Nearer my God to Thee'
"""
@@ -272,8 +268,8 @@
def checkVerseMarks(self, line):
"""
- Check and add the verse's MarkType. Returns ``True`` if the given line
- contains a correct verse mark otherwise ``False``.
+ Check and add the verse's MarkType. Returns ``True`` if the given linE contains a correct verse mark otherwise
+ ``False``.
``line``
The line to check for marks (unicode).
=== modified file 'openlp/plugins/songs/lib/songimport.py'
--- openlp/plugins/songs/lib/songimport.py 2013-02-07 11:33:47 +0000
+++ openlp/plugins/songs/lib/songimport.py 2013-02-27 13:04:22 +0000
@@ -303,13 +303,13 @@
sxml = SongXML()
other_count = 1
for (verse_def, verse_text, lang) in self.verses:
- if verse_def[0].lower() in VerseType.Tags:
+ if verse_def[0].lower() in VerseType.tags:
verse_tag = verse_def[0].lower()
else:
- new_verse_def = u'%s%d' % (VerseType.Tags[VerseType.Other], other_count)
+ new_verse_def = u'%s%d' % (VerseType.tags[VerseType.Other], other_count)
verses_changed_to_other[verse_def] = new_verse_def
other_count += 1
- verse_tag = VerseType.Tags[VerseType.Other]
+ verse_tag = VerseType.tags[VerseType.Other]
log.info(u'Versetype %s changing to %s', verse_def, new_verse_def)
verse_def = new_verse_def
sxml.add_verse_to_lyrics(verse_tag, verse_def[1:], verse_text, lang)
=== modified file 'openlp/plugins/songs/lib/songshowplusimport.py'
--- openlp/plugins/songs/lib/songshowplusimport.py 2013-02-07 11:33:47 +0000
+++ openlp/plugins/songs/lib/songshowplusimport.py 2013-02-27 13:04:22 +0000
@@ -152,11 +152,11 @@
elif block_key == CCLI_NO:
self.ccliNumber = int(data)
elif block_key == VERSE:
- self.addVerse(unicode(data, u'cp1252'), "%s%s" % (VerseType.Tags[VerseType.Verse], verse_no))
+ self.addVerse(unicode(data, u'cp1252'), "%s%s" % (VerseType.tags[VerseType.Verse], verse_no))
elif block_key == CHORUS:
- self.addVerse(unicode(data, u'cp1252'), "%s%s" % (VerseType.Tags[VerseType.Chorus], verse_no))
+ self.addVerse(unicode(data, u'cp1252'), "%s%s" % (VerseType.tags[VerseType.Chorus], verse_no))
elif block_key == BRIDGE:
- self.addVerse(unicode(data, u'cp1252'), "%s%s" % (VerseType.Tags[VerseType.Bridge], verse_no))
+ self.addVerse(unicode(data, u'cp1252'), "%s%s" % (VerseType.tags[VerseType.Bridge], verse_no))
elif block_key == TOPIC:
self.topics.append(unicode(data, u'cp1252'))
elif block_key == COMMENTS:
@@ -192,19 +192,19 @@
verse_number = "1"
verse_type = verse_type.lower()
if verse_type == "verse":
- verse_tag = VerseType.Tags[VerseType.Verse]
+ verse_tag = VerseType.tags[VerseType.Verse]
elif verse_type == "chorus":
- verse_tag = VerseType.Tags[VerseType.Chorus]
+ verse_tag = VerseType.tags[VerseType.Chorus]
elif verse_type == "bridge":
- verse_tag = VerseType.Tags[VerseType.Bridge]
+ verse_tag = VerseType.tags[VerseType.Bridge]
elif verse_type == "pre-chorus":
- verse_tag = VerseType.Tags[VerseType.PreChorus]
+ verse_tag = VerseType.tags[VerseType.PreChorus]
else:
if verse_name not in self.otherList:
if ignore_unique:
return None
self.otherCount += 1
self.otherList[verse_name] = str(self.otherCount)
- verse_tag = VerseType.Tags[VerseType.Other]
+ verse_tag = VerseType.tags[VerseType.Other]
verse_number = self.otherList[verse_name]
return verse_tag + verse_number
=== modified file 'openlp/plugins/songs/lib/sundayplusimport.py'
--- openlp/plugins/songs/lib/sundayplusimport.py 2013-02-07 11:33:47 +0000
+++ openlp/plugins/songs/lib/sundayplusimport.py 2013-02-27 13:04:22 +0000
@@ -52,8 +52,7 @@
"""
Import Sunday Plus songs
- The format examples can be found attached to bug report at
- <http://support.openlp.org/issues/395>
+ The format examples can be found attached to bug report at <http://support.openlp.org/issues/395>
"""
def __init__(self, manager, **kwargs):
@@ -90,7 +89,7 @@
self.logError(u'File is malformed')
return False
i = 1
- verse_type = VerseType.Tags[VerseType.Verse]
+ verse_type = VerseType.tags[VerseType.Verse]
while i < len(data):
# Data is held as #name: value pairs inside groups marked as [].
# Now we are looking for the name.
@@ -137,8 +136,7 @@
if name == 'MARKER_NAME':
value = value.strip()
if len(value):
- verse_type = VerseType.Tags[
- VerseType.from_loose_input(value[0])]
+ verse_type = VerseType.tags[VerseType.from_loose_input(value[0])]
if len(value) >= 2 and value[-1] in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']:
verse_type = "%s%s" % (verse_type, value[-1])
elif name == 'Hotkey':
@@ -168,8 +166,7 @@
self.copyright = u'Public Domain'
continue
processed_lines.append(line)
- self.addVerse('\n'.join(processed_lines).strip(),
- verse_type)
+ self.addVerse('\n'.join(processed_lines).strip(), verse_type)
if end == -1:
break
i = end + 1
=== modified file 'openlp/plugins/songs/lib/xml.py'
--- openlp/plugins/songs/lib/xml.py 2013-02-05 08:05:28 +0000
+++ openlp/plugins/songs/lib/xml.py 2013-02-27 13:04:22 +0000
@@ -97,10 +97,8 @@
Add a verse to the ``<lyrics>`` tag.
``type``
- A string denoting the type of verse. Possible values are *v*,
- *c*, *b*, *p*, *i*, *e* and *o*.
- Any other type is **not** allowed, this also includes translated
- types.
+ A string denoting the type of verse. Possible values are *v*, *c*, *b*, *p*, *i*, *e* and *o*. Any other
+ type is **not** allowed, this also includes translated types.
``number``
An integer denoting the number of the item, for example: verse 1.
@@ -109,8 +107,7 @@
The actual text of the verse to be stored.
``lang``
- The verse's language code (ISO-639). This is not required, but
- should be added if available.
+ The verse's language code (ISO-639). This is not required, but should be added if available.
"""
verse = etree.Element(u'verse', type=unicode(type),
label=unicode(number))
@@ -128,24 +125,21 @@
def get_verses(self, xml):
"""
- Iterates through the verses in the XML and returns a list of verses
- and their attributes.
+ Iterates through the verses in the XML and returns a list of verses and their attributes.
``xml``
The XML of the song to be parsed.
The returned list has the following format::
- [[{'type': 'v', 'label': '1'},
- u"optional slide split 1[---]optional slide split 2"],
+ [[{'type': 'v', 'label': '1'}, u"optional slide split 1[---]optional slide split 2"],
[{'lang': 'en', 'type': 'c', 'label': '1'}, u"English chorus"]]
"""
self.song_xml = None
verse_list = []
if not xml.startswith(u'<?xml') and not xml.startswith(u'<song'):
- # This is an old style song, without XML. Let's handle it correctly
- # by iterating through the verses, and then recreating the internal
- # xml object as well.
+ # This is an old style song, without XML. Let's handle it correctly by iterating through the verses, and
+ # then recreating the internal xml object as well.
self.song_xml = objectify.fromstring(u'<song version="1.0" />')
self.lyrics = etree.SubElement(self.song_xml, u'lyrics')
verses = xml.split(u'\n\n')
@@ -176,11 +170,10 @@
class OpenLyrics(object):
"""
- This class represents the converter for OpenLyrics XML (version 0.8)
- to/from a song.
+ This class represents the converter for OpenLyrics XML (version 0.8) to/from a song.
- As OpenLyrics has a rich set of different features, we cannot support them
- all. The following features are supported by the :class:`OpenLyrics` class:
+ As OpenLyrics has a rich set of different features, we cannot support them all. The following features are
+ supported by the :class:`OpenLyrics` class:
``<authors>``
OpenLP does not support the attribute *type* and *lang*.
@@ -189,8 +182,7 @@
This property is not supported.
``<comments>``
- The ``<comments>`` property is fully supported. But comments in lyrics
- are not supported.
+ The ``<comments>`` property is fully supported. But comments in lyrics are not supported.
``<copyright>``
This property is fully supported.
@@ -208,23 +200,20 @@
This property is not supported.
``<lines>``
- The attribute *part* is not supported. The *break* attribute is
- supported.
+ The attribute *part* is not supported. The *break* attribute is supported.
``<publisher>``
This property is not supported.
``<songbooks>``
- As OpenLP does only support one songbook, we cannot consider more than
- one songbook.
+ As OpenLP does only support one songbook, we cannot consider more than one songbook.
``<tempo>``
This property is not supported.
``<themes>``
- Topics, as they are called in OpenLP, are fully supported, whereby only
- the topic text (e. g. Grace) is considered, but neither the *id* nor
- *lang*.
+ Topics, as they are called in OpenLP, are fully supported, whereby only the topic text (e. g. Grace) is
+ considered, but neither the *id* nor *lang*.
``<transposition>``
This property is not supported.
@@ -233,9 +222,8 @@
This property is not supported.
``<verse name="v1a" lang="he" translit="en">``
- The attribute *translit* is not supported. Note, the attribute *lang* is
- considered, but there is not further functionality implemented yet. The
- following verse "types" are supported by OpenLP:
+ The attribute *translit* is not supported. Note, the attribute *lang* is considered, but there is not further
+ functionality implemented yet. The following verse "types" are supported by OpenLP:
* v
* c
@@ -245,13 +233,10 @@
* e
* o
- The verse "types" stand for *Verse*, *Chorus*, *Bridge*, *Pre-Chorus*,
- *Intro*, *Ending* and *Other*. Any numeric value is allowed after the
- verse type. The complete verse name in OpenLP always consists of the
- verse type and the verse number. If not number is present *1* is
- assumed.
- OpenLP will merge verses which are split up by appending a letter to the
- verse name, such as *v1a*.
+ The verse "types" stand for *Verse*, *Chorus*, *Bridge*, *Pre-Chorus*, *Intro*, *Ending* and *Other*. Any
+ numeric value is allowed after the verse type. The complete verse name in OpenLP always consists of the verse
+ type and the verse number. If not number is present *1* is assumed. OpenLP will merge verses which are split
+ up by appending a letter to the verse name, such as *v1a*.
``<verseOrder>``
OpenLP supports this property.
@@ -359,17 +344,14 @@
def _get_missing_tags(self, text):
"""
- Tests the given text for not closed formatting tags and returns a tuple
- consisting of two unicode strings::
+ Tests the given text for not closed formatting tags and returns a tuple consisting of two unicode strings::
(u'{st}{r}', u'{/r}{/st}')
- The first unicode string are the start tags (for the next slide). The
- second unicode string are the end tags.
+ The first unicode string are the start tags (for the next slide). The second unicode string are the end tags.
``text``
- The text to test. The text must **not** contain html tags, only
- OpenLP formatting tags are allowed::
+ The text to test. The text must **not** contain html tags, only OpenLP formatting tags are allowed::
{st}{r}Text text text
"""
@@ -379,9 +361,8 @@
continue
if text.count(tag[u'start tag']) != text.count(tag[u'end tag']):
tags.append((text.find(tag[u'start tag']), tag[u'start tag'], tag[u'end tag']))
- # Sort the lists, so that the tags which were opened first on the first
- # slide (the text we are checking) will be opened first on the next
- # slide as well.
+ # Sort the lists, so that the tags which were opened first on the first slide (the text we are checking) will
+ # be opened first on the next slide as well.
tags.sort(key=lambda tag: tag[0])
end_tags = []
start_tags = []
@@ -393,16 +374,15 @@
def xml_to_song(self, xml, parse_and_temporary_save=False):
"""
- Create and save a song from OpenLyrics format xml to the database. Since
- we also export XML from external sources (e. g. OpenLyrics import), we
- cannot ensure, that it completely conforms to the OpenLyrics standard.
+ Create and save a song from OpenLyrics format xml to the database. Since we also export XML from external
+ sources (e. g. OpenLyrics import), we cannot ensure, that it completely conforms to the OpenLyrics standard.
``xml``
The XML to parse (unicode).
``parse_and_temporary_save``
- Switch to skip processing the whole song and storing the songs in
- the database with a temporary flag. Defaults to ``False``.
+ Switch to skip processing the whole song and storing the songs in the database with a temporary flag.
+ Defaults to ``False``.
"""
# No xml get out of here.
if not xml:
@@ -448,8 +428,7 @@
def _add_tag_to_formatting(self, tag_name, tags_element):
"""
- Add new formatting tag to the element ``<format>`` if the tag is not
- present yet.
+ Add new formatting tag to the element ``<format>`` if the tag is not present yet.
"""
available_tags = FormattingTags.get_html_tags()
start_tag = '{%s}' % tag_name
@@ -469,8 +448,7 @@
def _add_text_with_tags_to_lines(self, verse_element, text, tags_element):
"""
- Convert text with formatting tags from OpenLP format to OpenLyrics
- format and append it to element ``<lines>``.
+ Convert text with formatting tags from OpenLP format to OpenLyrics format and append it to element ``<lines>``.
"""
start_tags = OpenLyrics.START_TAGS_REGEX.findall(text)
end_tags = OpenLyrics.END_TAGS_REGEX.findall(text)
@@ -478,8 +456,7 @@
for tag in start_tags:
# Tags already converted to xml structure.
xml_tags = tags_element.xpath(u'tag/attribute::name')
- # Some formatting tag has only starting part e.g. <br>.
- # Handle this case.
+ # Some formatting tag has only starting part e.g. <br>. Handle this case.
if tag in end_tags:
text = text.replace(u'{%s}' % tag, u'<tag name="%s">' % tag)
else:
@@ -586,8 +563,8 @@
def _process_formatting_tags(self, song_xml, temporary):
"""
- Process the formatting tags from the song and either add missing tags
- temporary or permanently to the formatting tag list.
+ Process the formatting tags from the song and either add missing tags temporary or permanently to the
+ formatting tag list.
"""
if not hasattr(song_xml, u'format'):
return
@@ -608,8 +585,8 @@
u'end html': tag.close.text if hasattr(tag, 'close') else u'',
u'protected': False,
}
- # Add 'temporary' key in case the formatting tag should not be
- # saved otherwise it is supposed that formatting tag is permanent.
+ # Add 'temporary' key in case the formatting tag should not be saved otherwise it is supposed that
+ # formatting tag is permanent.
if temporary:
openlp_tag[u'temporary'] = temporary
found_tags.append(openlp_tag)
@@ -620,15 +597,14 @@
def _process_lines_mixed_content(self, element, newlines=True):
"""
- Converts the xml text with mixed content to OpenLP representation.
- Chords are skipped and formatting tags are converted.
+ Converts the xml text with mixed content to OpenLP representation. Chords are skipped and formatting tags are
+ converted.
``element``
The property object (lxml.etree.Element).
``newlines``
- The switch to enable/disable processing of line breaks <br/>.
- The <br/> is used since OpenLyrics 0.8.
+ The switch to enable/disable processing of line breaks <br/>. The <br/> is used since OpenLyrics 0.8.
"""
text = u''
use_endtag = True
@@ -684,12 +660,10 @@
lines = etree.tostring(lines)
element = etree.XML(lines)
- # OpenLyrics 0.8 uses <br/> for new lines.
- # Append text from "lines" element to verse text.
+ # OpenLyrics 0.8 uses <br/> for new lines. Append text from "lines" element to verse text.
if version > '0.7':
text = self._process_lines_mixed_content(element)
- # OpenLyrics version <= 0.7 contais <line> elements to represent lines.
- # First child element is tested.
+ # OpenLyrics version <= 0.7 contais <line> elements to represent lines. First child element is tested.
else:
# Loop over the "line" elements removing comments and chords.
for line in element:
@@ -742,16 +716,15 @@
text += u'\n[---]'
verse_def = verse.get(u'name', u' ').lower()
verse_tag, verse_number, verse_part = OpenLyrics.VERSE_TAG_SPLITTER.search(verse_def).groups()
- if verse_tag not in VerseType.Tags:
- verse_tag = VerseType.Tags[VerseType.Other]
- # OpenLyrics allows e. g. "c", but we need "c1". However, this does
- # not correct the verse order.
+ if verse_tag not in VerseType.tags:
+ verse_tag = VerseType.tags[VerseType.Other]
+ # OpenLyrics allows e. g. "c", but we need "c1". However, this does not correct the verse order.
if not verse_number:
verse_number = u'1'
lang = verse.get(u'lang')
translit = verse.get(u'translit')
- # In OpenLP 1.9.6 we used v1a, v1b ... to represent visual slide
- # breaks. In OpenLyrics 0.7 an attribute has been added.
+ # In OpenLP 1.9.6 we used v1a, v1b ... to represent visual slide breaks. In OpenLyrics 0.7 an attribute has
+ # been added.
if song_xml.get(u'modifiedIn') in (u'1.9.6', u'OpenLP 1.9.6') and \
song_xml.get(u'version') == u'0.7' and (verse_tag, verse_number, lang, translit) in verses:
verses[(verse_tag, verse_number, lang, translit, None)] += u'\n[---]\n' + text
=== modified file 'tests/functional/openlp_core_utils/test_applocation.py'
--- tests/functional/openlp_core_utils/test_applocation.py 2013-01-30 18:42:22 +0000
+++ tests/functional/openlp_core_utils/test_applocation.py 2013-02-27 13:04:22 +0000
@@ -1,12 +1,17 @@
"""
Functional tests to test the AppLocation class and related methods.
"""
+import copy
from unittest import TestCase
from mock import patch
from openlp.core.utils import AppLocation
+
+FILE_LIST = [u'file1', u'file2', u'file3.txt', u'file4.txt', u'file5.mp3', u'file6.mp3']
+
+
class TestAppLocation(TestCase):
"""
A test suite to test out various methods around the AppLocation class.
@@ -15,10 +20,10 @@
"""
Test the AppLocation.get_data_path() method
"""
- with patch(u'openlp.core.utils.Settings') as mocked_class, \
- patch(u'openlp.core.utils.AppLocation.get_directory') as mocked_get_directory, \
- patch(u'openlp.core.utils.check_directory_exists') as mocked_check_directory_exists, \
- patch(u'openlp.core.utils.os') as mocked_os:
+ with patch(u'openlp.core.utils.applocation.Settings') as mocked_class, \
+ patch(u'openlp.core.utils.AppLocation.get_directory') as mocked_get_directory, \
+ patch(u'openlp.core.utils.applocation.check_directory_exists') as mocked_check_directory_exists, \
+ patch(u'openlp.core.utils.applocation.os') as mocked_os:
# GIVEN: A mocked out Settings class and a mocked out AppLocation.get_directory()
mocked_settings = mocked_class.return_value
mocked_settings.contains.return_value = False
@@ -37,8 +42,8 @@
"""
Test the AppLocation.get_data_path() method when a custom location is set in the settings
"""
- with patch(u'openlp.core.utils.Settings') as mocked_class,\
- patch(u'openlp.core.utils.os') as mocked_os:
+ with patch(u'openlp.core.utils.applocation.Settings') as mocked_class,\
+ patch(u'openlp.core.utils.applocation.os') as mocked_os:
# GIVEN: A mocked out Settings class which returns a custom data location
mocked_settings = mocked_class.return_value
mocked_settings.contains.return_value = True
@@ -51,12 +56,44 @@
mocked_settings.value.assert_called_with(u'advanced/data path')
assert data_path == u'custom/dir', u'Result should be "custom/dir"'
+ def get_files_no_section_no_extension_test(self):
+ """
+ Test the AppLocation.get_files() method with no parameters passed.
+ """
+ with patch(u'openlp.core.utils.AppLocation.get_data_path') as mocked_get_data_path, \
+ patch(u'openlp.core.utils.applocation.os.listdir') as mocked_listdir:
+ # GIVEN: Our mocked modules/methods.
+ mocked_get_data_path.return_value = u'test/dir'
+ mocked_listdir.return_value = copy.deepcopy(FILE_LIST)
+
+ # When: Get the list of files.
+ result = AppLocation.get_files()
+
+ # Then: check if the file lists are identically.
+ assert result == FILE_LIST, u'The file lists should be identically.'
+
+ def get_files_test(self):
+ """
+ Test the AppLocation.get_files() method with all parameters passed.
+ """
+ with patch(u'openlp.core.utils.AppLocation.get_data_path') as mocked_get_data_path, \
+ patch(u'openlp.core.utils.applocation.os.listdir') as mocked_listdir:
+ # GIVEN: Our mocked modules/methods.
+ mocked_get_data_path.return_value = u'test/dir'
+ mocked_listdir.return_value = copy.deepcopy(FILE_LIST)
+
+ # When: Get the list of files.
+ result = AppLocation.get_files(u'section', u'.mp3')
+
+ # Then: check if the file lists are identically.
+ assert result == [u'file5.mp3', u'file6.mp3'], u'The file lists should be identically.'
+
def get_section_data_path_test(self):
"""
Test the AppLocation.get_section_data_path() method
"""
with patch(u'openlp.core.utils.AppLocation.get_data_path') as mocked_get_data_path, \
- patch(u'openlp.core.utils.check_directory_exists') as mocked_check_directory_exists:
+ patch(u'openlp.core.utils.applocation.check_directory_exists') as mocked_check_directory_exists:
# GIVEN: A mocked out AppLocation.get_data_path()
mocked_get_data_path.return_value = u'test/dir'
mocked_check_directory_exists.return_value = True
@@ -70,7 +107,7 @@
"""
Test the AppLocation.get_directory() method for AppLocation.AppDir
"""
- with patch(u'openlp.core.utils._get_frozen_path') as mocked_get_frozen_path:
+ with patch(u'openlp.core.utils.applocation._get_frozen_path') as mocked_get_frozen_path:
mocked_get_frozen_path.return_value = u'app/dir'
# WHEN: We call AppLocation.get_directory
directory = AppLocation.get_directory(AppLocation.AppDir)
@@ -81,10 +118,10 @@
"""
Test the AppLocation.get_directory() method for AppLocation.PluginsDir
"""
- with patch(u'openlp.core.utils._get_frozen_path') as mocked_get_frozen_path, \
- patch(u'openlp.core.utils.os.path.abspath') as mocked_abspath, \
- patch(u'openlp.core.utils.os.path.split') as mocked_split, \
- patch(u'openlp.core.utils.sys') as mocked_sys:
+ with patch(u'openlp.core.utils.applocation._get_frozen_path') as mocked_get_frozen_path, \
+ patch(u'openlp.core.utils.applocation.os.path.abspath') as mocked_abspath, \
+ patch(u'openlp.core.utils.applocation.os.path.split') as mocked_split, \
+ patch(u'openlp.core.utils.applocation.sys') as mocked_sys:
mocked_abspath.return_value = u'plugins/dir'
mocked_split.return_value = [u'openlp']
mocked_get_frozen_path.return_value = u'plugins/dir'
Follow ups