SF.net SVN: jython:[7266] trunk/jython

[email protected] Thu, 24 Mar 2011 20:12:46 +0000
Newsgroups gmane.comp.lang.jython.cvs
Message-ID <[email protected]>
Revision: 7266
          http://jython.svn.sourceforge.net/jython/?rev=7266&view=rev
Author:   pjenvey
Date:     2011-03-24 20:12:46 +0000 (Thu, 24 Mar 2011)

Log Message:
-----------
fix zipimporter subclasses not getting a __dict__
test from Yuji Yamano (thanks)

Modified Paths:
--------------
    trunk/jython/Lib/test/test_zipimport_jy.py
    trunk/jython/src/org/python/modules/zipimport/zipimporterDerived.java
    trunk/jython/src/templates/zipimporter.derived

Modified: trunk/jython/Lib/test/test_zipimport_jy.py
===================================================================
--- trunk/jython/Lib/test/test_zipimport_jy.py	2011-03-24 20:11:52 UTC (rev 7265)
+++ trunk/jython/Lib/test/test_zipimport_jy.py	2011-03-24 20:12:46 UTC (rev 7266)
@@ -1,8 +1,8 @@
 import unittest
 import sys
 import java.lang.Package
-
 from test import test_support
+from zipimport import zipimporter
 
 class SyspathZipimportTest(unittest.TestCase):
     def setUp(self):
@@ -10,7 +10,7 @@
         sys.path.insert(0, test_support.findfile("syspath_import.jar"))
 
         # TODO confirm that package is unloaded via a phantom ref or something like that
-        
+
     def tearDown(self):
         sys.path = self.orig_path
 
@@ -31,6 +31,17 @@
         from syspathpkg import module
         self.assertEquals(module.__name__, 'syspathpkg.module')
 
+    def test_zipimporter_subclass(self):
+        class MyJavaClass(zipimporter):
+           def __init__(self):
+               zipimporter.__init__(self, test_support.findfile('zipdir.zip'))
+               self.bar = "bar"
+
+        # Previously failed with AttributeError: 'MyJavaClass' object
+        # has no attribute 'bar'
+        obj = MyJavaClass()
+        self.assertTrue(isinstance(obj, zipimporter))
+
 def test_main():
     test_support.run_unittest(SyspathZipimportTest)
 

Modified: trunk/jython/src/org/python/modules/zipimport/zipimporterDerived.java
===================================================================
--- trunk/jython/src/org/python/modules/zipimport/zipimporterDerived.java	2011-03-24 20:11:52 UTC (rev 7265)
+++ trunk/jython/src/org/python/modules/zipimport/zipimporterDerived.java	2011-03-24 20:12:46 UTC (rev 7266)
@@ -16,9 +16,33 @@
 
     private PyObject[]slots;
 
+    private PyObject dict;
+
+    public PyObject fastGetDict() {
+        return dict;
+    }
+
+    public PyObject getDict() {
+        return dict;
+    }
+
+    public void setDict(PyObject newDict) {
+        if (newDict instanceof PyStringMap||newDict instanceof PyDictionary) {
+            dict=newDict;
+        } else {
+            throw Py.TypeError("__dict__ must be set to a Dictionary "+newDict.getClass().getName());
+        }
+    }
+
+    public void delDict() {
+        // deleting an object's instance dict makes it grow a new one
+        dict=new PyStringMap();
+    }
+
     public zipimporterDerived(PyType subtype) {
         super(subtype);
         slots=new PyObject[subtype.getNumSlots()];
+        dict=subtype.instDict();
     }
 
     public PyString __str__() {

Modified: trunk/jython/src/templates/zipimporter.derived
===================================================================
--- trunk/jython/src/templates/zipimporter.derived	2011-03-24 20:11:52 UTC (rev 7265)
+++ trunk/jython/src/templates/zipimporter.derived	2011-03-24 20:12:46 UTC (rev 7266)
@@ -1,4 +1,4 @@
 base_class: zipimporter
-want_dict: false
+want_dict: true
 ctr:
 incl: object


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

------------------------------------------------------------------------------
Enable your software for Intel(R) Active Management Technology to meet the
growing manageability and security demands of your customers. Businesses
are taking advantage of Intel(R) vPro (TM) technology - will your software 
be a part of the solution? Download the Intel(R) Manageability Checker 
today! http://p.sf.net/sfu/intel-dev2devmar