[Checkins] SVN: zope.app.applicationcontrol/trunk/ Bugfix: AttributeError: 'module' object has no attribute '__file__'
Marius Gedminas
marius at pov.lt
Sat Dec 18 12:18:27 EST 2010
Log message for revision 118999:
Bugfix: AttributeError: 'module' object has no attribute '__file__'
when you used ``pip install`` instead of ``easy_install``.
That's because namespace packages created by pip have no __file__.
It makes no sense to look at zope.app.__file__ in the modern eggified world
anyway; remove that legacy code and make IZopeVersion utility return
"Meaningless".
Changed:
U zope.app.applicationcontrol/trunk/CHANGES.txt
U zope.app.applicationcontrol/trunk/src/zope/app/applicationcontrol/tests/test_zopeversion.py
U zope.app.applicationcontrol/trunk/src/zope/app/applicationcontrol/zopeversion.py
-=-
Modified: zope.app.applicationcontrol/trunk/CHANGES.txt
===================================================================
--- zope.app.applicationcontrol/trunk/CHANGES.txt 2010-12-18 01:26:36 UTC (rev 118998)
+++ zope.app.applicationcontrol/trunk/CHANGES.txt 2010-12-18 17:18:26 UTC (rev 118999)
@@ -5,7 +5,13 @@
3.5.9 (unreleased)
------------------
+- Bugfix: AttributeError: 'module' object has no attribute '__file__'
+ when you used ``pip install`` instead of ``easy_install``.
+ The IZopeVersion utility now returns "Meaningless", since there's no
+ monolithic Zope 3 in the modern eggified world.
+
+
3.5.8 (2010-09-17)
------------------
Modified: zope.app.applicationcontrol/trunk/src/zope/app/applicationcontrol/tests/test_zopeversion.py
===================================================================
--- zope.app.applicationcontrol/trunk/src/zope/app/applicationcontrol/tests/test_zopeversion.py 2010-12-18 01:26:36 UTC (rev 118998)
+++ zope.app.applicationcontrol/trunk/src/zope/app/applicationcontrol/tests/test_zopeversion.py 2010-12-18 17:18:26 UTC (rev 118999)
@@ -16,6 +16,7 @@
$Id$
"""
import os
+import sys
import shutil
import subprocess
import tempfile
@@ -135,6 +136,10 @@
# check that we don't get a 'Development/Unknown' version
self.assert_(zv.result.startswith('Development/Revision: '))
+ def test_ZopeVersion_no_path_specified(self):
+ zopeVersion = ZopeVersion(None)
+ self.assertEqual(zopeVersion.result, "Meaningless")
+
def test_suite():
return unittest.makeSuite(Test)
Modified: zope.app.applicationcontrol/trunk/src/zope/app/applicationcontrol/zopeversion.py
===================================================================
--- zope.app.applicationcontrol/trunk/src/zope/app/applicationcontrol/zopeversion.py 2010-12-18 01:26:36 UTC (rev 118998)
+++ zope.app.applicationcontrol/trunk/src/zope/app/applicationcontrol/zopeversion.py 2010-12-18 17:18:26 UTC (rev 118999)
@@ -21,7 +21,6 @@
import re
import subprocess
-import zope.app
from zope.applicationcontrol.interfaces import IZopeVersion
from zope.interface import implements
@@ -34,9 +33,17 @@
def __init__(self, path=None):
if path is None:
- path = os.path.dirname(os.path.abspath(zope.app.__file__))
- self.path = path
- self.result = None
+ # This used to look at zope.app.__file__. But zope.app is a
+ # namespace package these days.
+ # easy_install makes zope.app.__file__ be something random, like
+ # /path/to/zope.app.renderer-x.y.z-py2.x.egg/zope/app/__init__.pyc
+ # pip install makes zope.app have no __file__ at all, breaking
+ # the old code.
+ self.path = None
+ self.result = "Meaningless"
+ else:
+ self.path = path
+ self.result = None
def getZopeVersion(self):
"""See zope.app.applicationcontrol.interfaces.IZopeVersion"""
More information about the checkins
mailing list