Mercurial > p > roundup > code
comparison roundup/configuration.py @ 6356:c26b9ce33ae3
issue2551123 - validate indexer_language in configuration.py
Was validated in backends/indexer_xapian.py which would throw
an error on access rather than on start.
Added validator function to CoreConfig class that runs after
config.ini is read. At this time we have access to the indexer setting
so can determine if xapian is actually going to be used.
Moved test into test/test_config.py and pulled validation code from
indexer_xapian.py and test/test_indexer.py.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Mon, 29 Mar 2021 22:47:54 -0400 |
| parents | ac5a6ffa377b |
| children | 42db48c30d31 |
comparison
equal
deleted
inserted
replaced
| 6355:ac5a6ffa377b | 6356:c26b9ce33ae3 |
|---|---|
| 18 import roundup.date | 18 import roundup.date |
| 19 | 19 |
| 20 from roundup.anypy.strings import b2s | 20 from roundup.anypy.strings import b2s |
| 21 import roundup.anypy.random_ as random_ | 21 import roundup.anypy.random_ as random_ |
| 22 import binascii | 22 import binascii |
| 23 from roundup.i18n import _ | |
| 23 | 24 |
| 24 from roundup.backends import list_backends | 25 from roundup.backends import list_backends |
| 25 | 26 |
| 26 if sys.version_info[0] > 2: | 27 if sys.version_info[0] > 2: |
| 27 import configparser # Python 3 | 28 import configparser # Python 3 |
| 1842 h.close() | 1843 h.close() |
| 1843 logger.removeHandler(hdlr) | 1844 logger.removeHandler(hdlr) |
| 1844 logger.handlers = [hdlr] | 1845 logger.handlers = [hdlr] |
| 1845 logger.setLevel(self["LOGGING_LEVEL"] or "ERROR") | 1846 logger.setLevel(self["LOGGING_LEVEL"] or "ERROR") |
| 1846 | 1847 |
| 1848 def validator(self, options): | |
| 1849 """ Validate options once all options are loaded. | |
| 1850 | |
| 1851 Used to validate settings when options are dependent | |
| 1852 on each other. E.G. indexer_language can only be | |
| 1853 validated if xapian indexer is used. | |
| 1854 """ | |
| 1855 if options['INDEXER']._value in ("", "xapian"): | |
| 1856 try: | |
| 1857 import xapian | |
| 1858 except ImportError: | |
| 1859 # indexer is probably '' and xapian isn't present | |
| 1860 # so just return at end of method | |
| 1861 pass | |
| 1862 else: | |
| 1863 try: | |
| 1864 lang = options["INDEXER_LANGUAGE"]._value | |
| 1865 xapian.Stem(lang) | |
| 1866 except xapian.InvalidArgumentError: | |
| 1867 import textwrap | |
| 1868 lang_avail = b2s(xapian.Stem.get_available_languages()) | |
| 1869 languages = textwrap.fill(_("Valid languages: ") + | |
| 1870 lang_avail, 75, | |
| 1871 subsequent_indent=" ") | |
| 1872 raise ValueError( | |
| 1873 _("Invalid indexer_language '%(lang)s' in config.ini for xapian indexer\n\n" | |
| 1874 "%(valid)s") % { | |
| 1875 "lang": lang, | |
| 1876 "valid": languages | |
| 1877 } | |
| 1878 ) | |
| 1879 | |
| 1847 def load(self, home_dir): | 1880 def load(self, home_dir): |
| 1848 """Load configuration from path designated by home_dir argument""" | 1881 """Load configuration from path designated by home_dir argument""" |
| 1849 if os.path.isfile(os.path.join(home_dir, self.INI_FILE)): | 1882 if os.path.isfile(os.path.join(home_dir, self.INI_FILE)): |
| 1850 self.load_ini(home_dir) | 1883 self.load_ini(home_dir) |
| 1851 else: | 1884 else: |
| 1852 raise NoConfigError(home_dir) | 1885 raise NoConfigError(home_dir) |
| 1886 | |
| 1887 # validator does inter-setting validation checks. | |
| 1888 # when there are dependencies between options. | |
| 1889 self.validator(self.options) | |
| 1890 | |
| 1853 self.init_logging() | 1891 self.init_logging() |
| 1854 self.ext = UserConfig(os.path.join(home_dir, "extensions")) | 1892 self.ext = UserConfig(os.path.join(home_dir, "extensions")) |
| 1855 self.detectors = UserConfig(os.path.join(home_dir, "detectors")) | 1893 self.detectors = UserConfig(os.path.join(home_dir, "detectors")) |
| 1856 | 1894 |
| 1857 def load_ini(self, home_dir, defaults=None): | 1895 def load_ini(self, home_dir, defaults=None): |
