def iter_project_py_files(): root = os.path.dirname(get_module_dir(quodlibet)) skip = setup_cfg.exclude for path in iter_py_files(root): if any((path.startswith(s + os.sep) or s == path) for s in skip): continue yield path
def init_devices(): global devices load_pyc = util.is_windows() or util.is_osx() modules = load_dir_modules(util.get_module_dir(), package=__package__, load_compiled=load_pyc) for mod in modules: try: devices.extend(mod.devices) except AttributeError: print_w("%r doesn't contain any devices." % mod.__name__) devices.sort(key=lambda d: repr(d))
def init(): """Load/Import all formats. Before this is called loading a file and unpickling will not work. """ global mimes, loaders, types MinVersions.MUTAGEN.check(mutagen.version) base = util.get_module_dir() load_pyc = util.is_windows() or util.is_osx() formats = load_dir_modules(base, package=__package__, load_compiled=load_pyc) module_names = [] for format in formats: name = format.__name__ for ext in format.extensions: loaders[ext] = format.loader types.update(format.types) if format.extensions: for type_ in format.types: mimes.update(type_.mimes) module_names.append(name.split(".")[-1]) # Migrate pre-0.16 library, which was using an undocumented "feature". sys.modules[name.replace(".", "/")] = format # Migrate old layout if name.startswith("quodlibet."): sys.modules[name.split(".", 1)[1]] = format # This can be used for the quodlibet.desktop file desktop_mime_types = "MimeType=" + \ ";".join(sorted({m.split(";")[0] for m in mimes})) + ";" print_d(desktop_mime_types) s = ", ".join(sorted(module_names)) print_d("Supported formats: %s" % s) if not loaders: raise SystemExit("No formats found!")
def init(): global mimes, _infos, modules, names, _extensions import mutagen MinVersions.MUTAGEN.check(mutagen.version) base = util.get_module_dir() load_pyc = util.is_windows() or util.is_osx() formats = load_dir_modules(base, package=__package__, load_compiled=load_pyc) for format in formats: name = format.__name__ for ext in format.extensions: _infos[ext] = format.info types.extend(format.types) if format.extensions: for type_ in format.types: mimes.update(type_.mimes) names.append(type_.format) modules.append(name.split(".")[-1]) # Migrate pre-0.16 library, which was using an undocumented "feature". sys.modules[name.replace(".", "/")] = format # Migrate old layout if name.startswith("quodlibet."): sys.modules[name.split(".", 1)[1]] = format modules.sort() names.sort() # This can be used for the quodlibet.desktop file desktop_mime_types = "MimeType=" + \ ";".join(sorted({m.split(";")[0] for m in mimes})) + ";" print_d(desktop_mime_types) if not _infos: raise SystemExit("No formats found!") _extensions = tuple(_infos.keys())
def iter_py_paths(): """Iterates over all Python source files that are part of Quod Libet""" import quodlibet root = os.path.dirname(get_module_dir(quodlibet)) skip = [ os.path.join(root, "docs"), os.path.join(root, "quodlibet", "packages"), ] for dirpath, dirnames, filenames in os.walk(root): if any((dirpath.startswith(s + os.sep) or s == dirpath) for s in skip): continue for filename in filenames: if filename.endswith('.py'): yield os.path.join(dirpath, filename)
def parse_setup_cfg(): """Parses the flake8 config from the setup.cfg file in the root dir Returns: SetupConfig """ base_dir = os.path.dirname(get_module_dir(quodlibet)) cfg = os.path.join(base_dir, "setup.cfg") config = configparser.RawConfigParser() config.read(cfg) ignore = str(config.get("flake8", "ignore")).split(",") builtins = str(config.get("flake8", "builtins")).split(",") exclude = str(config.get("flake8", "exclude")).split(",") exclude = [ os.path.join(base_dir, e.replace("/", os.sep)) for e in exclude] return SetupConfig(ignore, builtins, exclude)
def init(): """Import all browsers from this package and from the user directory. After this is called the global `browsers` list will contain all classes sorted by priority. Can be called multiple times. """ global browsers, default # ignore double init (for the test suite) if browsers: return this_dir = util.get_module_dir() load_pyc = util.is_windows() or util.is_osx() modules = load_dir_modules(this_dir, package=__package__, load_compiled=load_pyc) for browser in modules: try: browsers.extend(browser.browsers) except AttributeError: util.print_w("%r doesn't contain any browsers." % browser.__name__) def is_browser(Kind): return isinstance(Kind, type) and issubclass(Kind, Browser) browsers = listfilter(is_browser, browsers) if not browsers: raise SystemExit("No browsers found!") browsers.sort(key=lambda Kind: Kind.priority) try: default = get("SearchBar") except ValueError: raise SystemExit("Default browser not found!")
def unit(run=[], filter_func=None, main=False, subdirs=None, strict=False, stop_first=False, no_network=False): global _NO_NETWORK path = util.get_module_dir() if subdirs is None: subdirs = [] _NO_NETWORK = no_network # make glib warnings fatal if strict: from gi.repository import GLib GLib.log_set_always_fatal( GLib.LogLevelFlags.LEVEL_CRITICAL | GLib.LogLevelFlags.LEVEL_ERROR | GLib.LogLevelFlags.LEVEL_WARNING) suites = [] def discover_tests(mod): for k in vars(mod): value = getattr(mod, k) if value is not TestCase and \ inspect.isclass(value) and issubclass(value, TestCase): suites.append(value) if main: for name in os.listdir(path): if fnmatch.fnmatch(name, "test_*.py"): mod = __import__(".".join([__name__, name[:-3]]), {}, {}, []) discover_tests(getattr(mod, name[:-3])) if main: # include plugin tests by default subdirs = (subdirs or []) + ["plugin"] for subdir in subdirs: sub_path = os.path.join(path, subdir) for name in os.listdir(sub_path): if fnmatch.fnmatch(name, "test_*.py"): mod = __import__( ".".join([__name__, subdir, name[:-3]]), {}, {}, []) discover_tests(getattr(getattr(mod, subdir), name[:-3])) runner = Runner() failures = errors = all_ = 0 use_suites = filter(filter_func, suites) for test in sorted(use_suites, key=repr): if (not run or test.__name__ in run or test.__module__[11:] in run): df, de, num = runner.run(test, failfast=stop_first) failures += df errors += de all_ += num if stop_first and (df or de): break return failures, errors, all_
def get_base_dir(): """The path to the quodlibet package""" return util.get_module_dir()
failUnlessAlmostEqual = assertAlmostEqual failIfAlmostEqual = assertNotAlmostEqual skip = unittest.skip skipUnless = unittest.skipUnless skipIf = unittest.skipIf def is_ci(): """Guesses if this is being run in (Travis, maybe other) CI. See https://docs.travis-ci.com/user/environment-variables """ return os.environ.get('CI', "").lower() == 'true' _DATA_DIR = os.path.join(util.get_module_dir(), "data") assert isinstance(_DATA_DIR, fsnative) _TEMP_DIR = None def get_data_path(filename): return os.path.join(_DATA_DIR, path2fsn(filename)) def _wrap_tempfile(func): def wrap(*args, **kwargs): if kwargs.get("dir") is None and _TEMP_DIR is not None: assert isinstance(_TEMP_DIR, fsnative) kwargs["dir"] = _TEMP_DIR return func(*args, **kwargs) return wrap
def test_other(self): path = util.get_module_dir(util) self.assertTrue(isinstance(path, fsnative)) self.assertTrue(os.path.exists(path))
init_fake_app, destroy_fake_app # Nasty hack to allow importing of plugins... PLUGIN_DIRS = [] root = os.path.join(quodlibet.__path__[0], "ext") for entry in os.listdir(root): if entry.startswith("_"): continue path = os.path.join(root, entry) if not os.path.isdir(path): continue PLUGIN_DIRS.append(path) PLUGIN_DIRS.append(os.path.join(util.get_module_dir(), "test_plugins")) ms = ModuleScanner(PLUGIN_DIRS) ms.rescan() # make sure plugins only raise expected errors for name, err in ms.failures.items(): exc = err.exception if PY3: # FIXME: PY3PORT continue assert issubclass(type(exc), (PluginImportException, ImportError)),\ "%s shouldn't have raised a %s, but it did (%r)."\ % (name, type(exc), exc)
failIfAlmostEqual = assertNotAlmostEqual skip = unittest.skip skipUnless = unittest.skipUnless skipIf = unittest.skipIf def is_ci(): """Guesses if this is being run in (Travis, maybe other) CI. See https://docs.travis-ci.com/user/environment-variables """ return os.environ.get('CI', "").lower() == 'true' _DATA_DIR = os.path.join(util.get_module_dir(), "data") assert isinstance(_DATA_DIR, fsnative) _TEMP_DIR = None def get_data_path(filename): return os.path.join(_DATA_DIR, path2fsn(filename)) def _wrap_tempfile(func): def wrap(*args, **kwargs): if kwargs.get("dir") is None and _TEMP_DIR is not None: assert isinstance(_TEMP_DIR, fsnative) kwargs["dir"] = _TEMP_DIR return func(*args, **kwargs)
# # 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; either version 2 of the License, or # (at your option) any later version. import os import subprocess from quodlibet.util.path import iscommand from quodlibet import util from tests import TestCase, mkstemp, skipUnless QLDATA_DIR = os.path.join(os.path.dirname(util.get_module_dir()), "data") class _TAppDataFileMixin(object): PATH = None def test_filename(self): self.assertTrue(self.PATH.endswith(".appdata.xml.in")) def test_validate(self): # strip translatable prefix from tags from xml.etree import ElementTree tree = ElementTree.parse(self.PATH) for x in tree.iter(): if x.tag.startswith("_"): x.tag = x.tag[1:]
import quodlibet from quodlibet import util from quodlibet.util import get_module_dir from quodlibet.util.modulescanner import ModuleScanner from quodlibet.plugins import list_plugins, Plugin, PluginImportException from quodlibet.compat import iteritems from tests import TestCase, init_fake_app, destroy_fake_app init_fake_app, destroy_fake_app # Nasty hack to allow importing of plugins... PLUGIN_DIRS = [] root = os.path.join(get_module_dir(quodlibet), "ext") for entry in os.listdir(root): if entry.startswith("_"): continue path = os.path.join(root, entry) if not os.path.isdir(path): continue PLUGIN_DIRS.append(path) PLUGIN_DIRS.append(os.path.join(util.get_module_dir(), "test_plugins")) ms = ModuleScanner(PLUGIN_DIRS) ms.rescan() # make sure plugins only raise expected errors
import os import re import pytest try: import polib except ImportError: polib = None import quodlibet from quodlibet.util import get_module_dir from quodlibet.util.string.titlecase import human_title from gdist import gettextutil QL_BASE_DIR = os.path.dirname(get_module_dir(quodlibet)) PODIR = os.path.join(QL_BASE_DIR, "po") def has_gettext_util(): try: gettextutil.check_version() except gettextutil.GettextError: return False return True class MissingTranslationsException(Exception): def __init__(self, missing): msg = ("No reference in POTFILES.in to: " + ", ".join(missing)) super(MissingTranslationsException, self).__init__(msg)
import os import re try: import polib except ImportError: polib = None import quodlibet from quodlibet.util import get_module_dir from quodlibet.util.path import iscommand from quodlibet.util.string.titlecase import human_title from gdist import gettextutil PODIR = os.path.join(os.path.dirname(get_module_dir(quodlibet)), "po") PODIR_WRITEABLE = os.access(PODIR, os.W_OK) class MissingTranslationsException(Exception): def __init__(self, missing): msg = ("No reference in POTFILES.in to: " + ", ".join(missing)) super(MissingTranslationsException, self).__init__(msg) class TPOTFILESIN(TestCase): def test_missing(self): try: gettextutil.check_version() except gettextutil.GettextError: return
import os import re try: import polib except ImportError: polib = None import quodlibet from quodlibet.util import get_module_dir from quodlibet.util.path import iscommand from quodlibet.util.string.titlecase import human_title from gdist import gettextutil PODIR = os.path.join(os.path.dirname(get_module_dir(quodlibet)), "po") class MissingTranslationsException(Exception): def __init__(self, missing): msg = ("No reference in POTFILES.in to: " + ", ".join(missing)) super(MissingTranslationsException, self).__init__(msg) class TPOTFILESIN(TestCase): def test_missing(self): try: gettextutil.check_version() except gettextutil.GettextError:
def test_self(self): path = util.get_module_dir() self.assertTrue(is_fsnative(path)) self.assertTrue(os.path.exists(path))
import os import re import pytest try: import polib except ImportError: polib = None import quodlibet from quodlibet.util import get_module_dir from quodlibet.util.string.titlecase import human_title from gdist import gettextutil QL_BASE_DIR = os.path.dirname(get_module_dir(quodlibet)) PODIR = os.path.join(QL_BASE_DIR, "po") def has_gettext_util(): try: gettextutil.check_version() except gettextutil.GettextError: return False return True class MissingTranslationsException(Exception): def __init__(self, missing): msg = ("No reference in POTFILES.in to: " + ", ".join(missing))
# -*- coding: utf-8 -*- # Copyright 2014 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import subprocess from quodlibet.util.path import iscommand from quodlibet import util from tests import TestCase, mkstemp, skipUnless QLDATA_DIR = os.path.join(os.path.dirname(util.get_module_dir()), "data") class _TAppDataFileMixin(object): PATH = None def test_filename(self): self.assertTrue(self.PATH.endswith(".appdata.xml.in")) def test_validate(self): # strip translatable prefix from tags from xml.etree import ElementTree tree = ElementTree.parse(self.PATH) for x in tree.iter(): if x.tag.startswith("_"): x.tag = x.tag[1:]