summaryrefslogtreecommitdiffstats
path: root/pym/portage_compat_namespace.py
diff options
context:
space:
mode:
authorMarius Mauch <genone@gentoo.org>2007-02-17 13:11:28 +0000
committerMarius Mauch <genone@gentoo.org>2007-02-17 13:11:28 +0000
commit344c94a32baf1fec5ac650aa7475adc643887915 (patch)
tree277a78549b214fda290fca7ae18c3a9de7d29dc2 /pym/portage_compat_namespace.py
parent68773e9cf59e167574cbb8c12f2e1a44055b5ce0 (diff)
downloadportage-344c94a32baf1fec5ac650aa7475adc643887915.tar.gz
portage-344c94a32baf1fec5ac650aa7475adc643887915.tar.bz2
portage-344c94a32baf1fec5ac650aa7475adc643887915.zip
Replace compat symlinks with a new compat module as the symlink solution prevents reuse of state information (requested by ferringb)
svn path=/main/trunk/; revision=5981
Diffstat (limited to 'pym/portage_compat_namespace.py')
-rw-r--r--pym/portage_compat_namespace.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/pym/portage_compat_namespace.py b/pym/portage_compat_namespace.py
new file mode 100644
index 000000000..9e5e691a9
--- /dev/null
+++ b/pym/portage_compat_namespace.py
@@ -0,0 +1,35 @@
+# 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)
+
+warnings.warn("DEPRECATION NOTICE: The %s module was replaced by %s" % (__oldname, __newname))
+sys.modules[__oldname] = __realmodule