Inheritance in web.py?
Question: I am currently developing wep.py application. This is my web application which
is binded with web.py and wsgi.

root/main.py

    
    
    import web
    import sys
    import imp
    import os
    
    sys.path.append(os.path.dirname(__file__))
    
    #from module import module
    from exam import exam
    urls = (
        '/exam', 'exam'
    )
    
    application = web.application(urls, globals(), autoreload = True).wsgifunc()
    

My application has an abstract class called module in module.py in root
directory and its purpose is to be inherited by modules.

root/module.py

    
    
    class module:
        def fetchURL(self, url):
            # ...
            return content
    

The lower level module called "exam" would inherits module

root/exam/**init**.py

    
    
    from module import module
    
    class exam(module):
        def getResults(self):
            # error occurs here
            self.fetchURL('math.json')
    

When I call the parent method, web.py raises an exception

> WalkerError: ('unexpected node type', 339)

Environment: Python 2.5

How can I resolve the problem? Thanks

// EDIT 03 July 10:22 GMT+0

The stack trace is as follows

    
    
     mod_wsgi (pid=1028): Exception occurred processing WSGI script 'D:/py/labs_library/index.py'.
     Traceback (most recent call last):
       File "D:\csvn\Python25\lib\site-packages\web\application.py", line 277, in wsgi
         result = self.handle_with_processors()
       File "D:\csvn\Python25\lib\site-packages\web\application.py", line 247, in handle_with_processors
         return process(self.processors)
       File "D:\csvn\Python25\lib\site-packages\web\application.py", line 244, in process
         raise self.internalerror()
       File "D:\csvn\Python25\lib\site-packages\web\application.py", line 467, in internalerror
         return debugerror.debugerror()
       File "D:\csvn\Python25\lib\site-packages\web\debugerror.py", line 305, in debugerror
         return web._InternalError(djangoerror())
       File "D:\csvn\Python25\lib\site-packages\web\debugerror.py", line 290, in djangoerror
         djangoerror_r = Template(djangoerror_t, filename=__file__, filter=websafe)
       File "D:\csvn\Python25\lib\site-packages\web\template.py", line 845, in __init__
         code = self.compile_template(text, filename)
       File "D:\csvn\Python25\lib\site-packages\web\template.py", line 924, in compile_template
         ast = compiler.parse(code)
       File "D:\csvn\Python25\lib\compiler\transformer.py", line 51, in parse
         return Transformer().parsesuite(buf)
       File "D:\csvn\Python25\lib\compiler\transformer.py", line 128, in parsesuite
         return self.transform(parser.suite(text))
       File "D:\csvn\Python25\lib\compiler\transformer.py", line 124, in transform
         return self.compile_node(tree)
       File "D:\csvn\Python25\lib\compiler\transformer.py", line 167, in compile_node
         raise WalkerError, ('unexpected node type', n)
     WalkerError: ('unexpected node type', 339)
    

If it is possible I would like to turn off the template functionality as I use
python only for JSON output for mobile app.


Answer: if you create python module you should add `__init__.py` in top of your
hierarchy:

    
    
    dvedit/
      __init__.py
      clipview.py
      filters/
        __init__.py
    

it means that in every directory which will be imported via `from ... import
...` should have `__init__.py` file.

further info available: <http://wiki.cython.org/PackageHierarchy>

