Apache Mod-Python - Created: (MODPYTHON-73) Using objects to create an explicit hierarchy.

This is Interesting: Free IT Magazines  
Home > Archive > Apache Mod-Python > August 2005 > Created: (MODPYTHON-73) Using objects to create an explicit hierarchy.





You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

Author Created: (MODPYTHON-73) Using objects to create an explicit hierarchy.
Graham Dumpleton (JIRA)

2005-08-12, 8:46 pm

Using objects to create an explicit hierarchy.
----------------------------------------------

Key: MODPYTHON-73
URL: http://issues.apache.org/jira/browse/MODPYTHON-73
Project: mod_python
Type: Improvement
Components: publisher
Versions: 3.2.0
Reporter: Graham Dumpleton
Priority: Minor


Cut and paste of idea presented on mailing list. See:

http://www.mail-archive.com/python-...g/msg00294.html

Have a strange patch here for consideration.

In CherryPy, one can manually construct the page hierarchy by writing:

cpg.root.onepage = OnePage()
cpg.root.otherpage = OtherPage()

cpg.root.some = Page()
cpg.root.some.page = Page()

The closest equivalent to this in mod_python is the publisher handler,
whereby a URL will be mapped to attributes and member functions of a
class. One generally though has to create an actual class to encapsulate
all the bits together.

One can to a degree with publisher create a mapping without creating a
proper class by using:

class _Mapping:
pass

def _method1():
return "_method1"

def _method2():
return "_method2"

object = _Mapping()
object.onepage = _method1
object.otherpage = _method2

What isn't possible though without creating a real class is have a
normal function which is called when the dummy mapping object itself
is the target. Ie., following does not work:

object.__call__ = _method1

This is because util.apply_fs_data() assumes that __call__() is always
an object method.

I know this is sort of an abuse of __call__(), but it does actually
work in Python itself, just not in mod_python when URLs are mapped to
object.
[vbcol=seagreen]
.... pass
....[vbcol=seagreen]
.... return "method"
....[vbcol=seagreen]
'method'

Anyway, I have attached a patch which would allow this sort of thing to
actually work within mod_python.

I feel it could be a useful way of quickly constructing special object
hierarchies from other functions, objects and attributes without having
to actually create real classes.

For example:

def _method():
return "method"

class _Mapping:
pass

_subdir1 = _Mapping()
_subdir1.__call__ = _method # .../root/subdir1
_subdir1.page1 = _method # .../root/subdir1/page1
_subdir1.page2 = _method # .../root/subdir1/page2

root = _Mapping()
root.__call__ = _method # .../root
root.page1 = _method # .../root/page1
root.subdir1 = _subdir1


Sponsored Links






Free braindumps | Software forum | Database administration forum

Copyright 2003 - 2008 webservertalk.com