cybertools/pyscript
helmutm 273a618a28 new package pyscript, derived from zope.app.PythonPage
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@1868 fd906abe-77d9-0310-91a1-e0d9ade77398
2007-08-02 20:49:44 +00:00
..
__init__.py new package pyscript, derived from zope.app.PythonPage 2007-08-02 20:19:39 +00:00
browser.py new package pyscript, derived from zope.app.PythonPage 2007-08-02 20:19:39 +00:00
configure.zcml new package pyscript, derived from zope.app.PythonPage 2007-08-02 20:19:39 +00:00
cybertools.pyscript-configure.zcml new package pyscript, derived from zope.app.PythonPage 2007-08-02 20:19:39 +00:00
edit.pt new package pyscript, derived from zope.app.PythonPage 2007-08-02 20:19:39 +00:00
interfaces.py new package pyscript, derived from zope.app.PythonPage 2007-08-02 20:49:44 +00:00
README.txt new package pyscript, derived from zope.app.PythonPage 2007-08-02 20:49:44 +00:00
script.py new package pyscript, derived from zope.app.PythonPage 2007-08-02 20:49:44 +00:00
tests.py new package pyscript, derived from zope.app.PythonPage 2007-08-02 20:49:44 +00:00

============
Python Pages
============

Persistent Python Page - Content Type

Examples:

  >>> from cybertools.pyscript.tests import Root
  >>> from cybertools.pyscript.script import PythonPage

  >>> pp = PythonPage()
  >>> pp.__parent__ = Root()
  >>> pp.__name__ = 'pp'
  >>> request = None

Test that can produce the correct filename

  >>> pp._PythonPage__filename()
  u'/pp'

A simple test that checks that any lone-standing triple-quotes are
being printed.

  >>> pp.setSource(u"'''<html>...</html>'''\nreturn printed")
  >>> pp(request)
  '<html>...</html>\n'

Make sure that strings with prefixes work.

  >>> pp.setSource(ur"ur'''test\r'''" + "\nreturn printed")
  >>> pp(request)
  'test\\r\n'

Make sure that Windows (\r\n) line ends also work.

  >>> pp.setSource(u"if 1 == 1:\r\n\r\n   '''<html>...</html>'''\nreturn printed")
  >>> pp(request)
  '<html>...</html>\n'

Make sure that unicode strings work as expected.

  >>> #pp.setSource(u"u'''\u0442\u0435\u0441\u0442'''")
  >>> #pp(request)

u'\u0442\u0435\u0441\u0442\n'

Make sure that multi-line strings work.

  >>> pp.setSource(u"u'''test\ntest\ntest'''\nreturn printed")
  >>> pp(request)
  'test\n...test\n...test\n'

Here you can see a simple Python command...

  >>> pp.setSource(u"print u'<html>...</html>'\nreturn printed")
  >>> pp(request)
  '<html>...</html>\n'

... and here a triple quote with some variable replacement.

  >>> pp.setSource(u"'''<html>%s</html>''' %x\nreturn printed")
  >>> pp(request, x='test')
  '<html>test</html>\n'

Make sure that the context of the page is available.

  >>> pp.setSource(u"'''<html>%s</html>''' %context.__name__\nreturn printed")
  >>> pp(request)
  '<html>root</html>\n'

Make sure that faulty syntax is interpreted correctly.

Note: We cannot just print the error directly, since there is a
'bug' in the Linux version of Python that does not display the filename
of the source correctly. So we construct an information string by hand.

  >>> def print_err(err):
  ...     print ('%(msg)s, %(filename)s, line %(lineno)i, offset %(offset)i'
  ...           % err.__dict__)
  ...
  >>> try:
  ...     pp.setSource(u"'''<html>...</html>") #'''"
  ... except SyntaxError, err:
  ...     print_err(err)
  EOF while scanning triple-quoted string, /pp, line 4, offset 47

  >>> try:
  ...     pp.setSource(u"prin 'hello'")
  ... except SyntaxError, err:
  ...     print_err(err)
  invalid syntax, /pp, line 3, offset 16