diff options
author | Mark Spruiell <mes@zeroc.com> | 2014-01-13 15:06:24 -0800 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2014-01-13 15:06:24 -0800 |
commit | 22d54b0839e49cf057de0e2962df5f3c037fd6d0 (patch) | |
tree | 05cea8c7aa112433c30c631f0f4d192d83d3c350 /cpp/src/slice2py/Main.cpp | |
parent | Fix for ICE-5481: stream startSize/endSize can't be nested (diff) | |
download | ice-22d54b0839e49cf057de0e2962df5f3c037fd6d0.tar.bz2 ice-22d54b0839e49cf057de0e2962df5f3c037fd6d0.tar.xz ice-22d54b0839e49cf057de0e2962df5f3c037fd6d0.zip |
ICE-5487 - nested module bug in Python
Diffstat (limited to 'cpp/src/slice2py/Main.cpp')
-rw-r--r-- | cpp/src/slice2py/Main.cpp | 33 |
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; } } |