blob: 736b67833535b4374c8706cf9d47b1b2f21aae9f [file] [log] [blame]
# portage_compat_namespace.py -- provide compability layer with new namespace
# Copyright 2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
"""
This module checks the name under which it is imported and attempts to load
the corresponding module of the new portage namespace, inserting it into the
loaded modules list.
It also issues a warning to the caller to migrate to the new namespace.
Note that this module should never be used with it's true name, but only by
links pointing to it. Also it is limited to portage_foo -> portage.foo
translations, however existing subpackages shouldn't use it anyway to maintain
compability with 3rd party modules (like elog or cache plugins), and they
shouldn't be directly imported by external consumers.
This module is based on an idea by Brian Harring.
"""
import sys, warnings
__oldname = __name__
if __name__.startswith("portage_"):
__newname = __name__.replace("_", ".")
else:
__newname = "portage."+__name__
try:
__package = __import__(__newname, globals(), locals())
__realmodule = getattr(__package, __newname[8:])
except (ImportError, AttributeError):
raise ImportError("No module named %s" % __oldname)
def _showwarning(message, category, filename, lineno, file=None, line=None):
if file is None:
import sys
file = sys.stderr
try:
file.write("%s:%s: %s: %s\n" % (filename, lineno, category.__name__, message))
except IOError:
pass
warnings.showwarning = _showwarning
warnings.warn("DEPRECATION NOTICE: The %s module was replaced by %s" % (__oldname, __newname), DeprecationWarning)
sys.modules[__oldname] = __realmodule