summaryrefslogtreecommitdiff
path: root/cpp/src/slice2py
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2014-01-13 15:06:24 -0800
committerMark Spruiell <mes@zeroc.com>2014-01-13 15:06:24 -0800
commit22d54b0839e49cf057de0e2962df5f3c037fd6d0 (patch)
tree05cea8c7aa112433c30c631f0f4d192d83d3c350 /cpp/src/slice2py
parentFix for ICE-5481: stream startSize/endSize can't be nested (diff)
downloadice-22d54b0839e49cf057de0e2962df5f3c037fd6d0.tar.bz2
ice-22d54b0839e49cf057de0e2962df5f3c037fd6d0.tar.xz
ice-22d54b0839e49cf057de0e2962df5f3c037fd6d0.zip
ICE-5487 - nested module bug in Python
Diffstat (limited to 'cpp/src/slice2py')
-rw-r--r--cpp/src/slice2py/Main.cpp33
1 files changed, 32 insertions, 1 deletions
diff --git a/cpp/src/slice2py/Main.cpp b/cpp/src/slice2py/Main.cpp
index 0bb4efe29b6..cd37d026490 100644
--- a/cpp/src/slice2py/Main.cpp
+++ b/cpp/src/slice2py/Main.cpp
@@ -306,9 +306,40 @@ PackageVisitor::readInit(const string& dir, StringList& modules, StringList& sub
}
else
{
+ //
+ // This case occurs in old (Ice <= 3.5.1) code that used implicit
+ // relative imports, such as:
+ //
+ // File: outer/__init__.py
+ //
+ // import inner
+ //
+ // These aren't supported in Python 3. We'll translate these into
+ // explicit relative imports:
+ //
+ // from . import inner
+ //
submodules.push_back(name);
}
}
+ else if(s.find("from . import") == 0)
+ {
+ if(state != InSubmodules)
+ {
+ ostringstream os;
+ os << "invalid line `" << s << "' in `" << initPath << "'";
+ throw os.str();
+ }
+
+ if(s.size() < 15)
+ {
+ ostringstream os;
+ os << "invalid line `" << s << "' in `" << initPath << "'";
+ throw os.str();
+ }
+
+ submodules.push_back(s.substr(14));
+ }
}
if(state != InSubmodules)
@@ -351,7 +382,7 @@ PackageVisitor::writeInit(const string& dir, const string& name, const StringLis
os << _submoduleTag << endl;
for(StringList::const_iterator p = submodules.begin(); p != submodules.end(); ++p)
{
- os << "import " << *p << endl;
+ os << "from . import " << *p << endl;
}
}