return str(obj)

Stefan Palme-2

return str(obj)

Reply Threaded More More options
Print post
Permalink
Hallo,

habe folgendes seltsame Phänomen (folderA ist ein ATFolder):

Script(Python):
obj = context.plone_site.folderA
return str(obj)

-->
2009-04-20T11:06:51 ERROR Zope.SiteErrorLog https://citymag2/.../komischer_bug
Traceback (innermost last):
  Module ZPublisher.Publish, line 118, in publish
  Module ZServer.HTTPResponse, line 262, in setBody
  Module ZPublisher.HTTPResponse, line 327, in setBody
  Module ZPublisher.HTTPResponse, line 648, in notFoundError
NotFound:   <h2>Site Error</h2>
  <p>An error was encountered while publishing this resource.
  </p>
  <p><strong>Resource not found</strong></p>

  Sorry, the requested resource does not exist.<p>Check the URL and try again.</p><p><b>Resource:</b> ATFolder at folderA</p>
  <hr noshade="noshade"/>

  <p>Troubleshooting Suggestions</p>

  <ul>
  <li>The URL may be incorrect.</li>
  <li>The parameters passed to this resource may be incorrect.</li>
  <li>A resource that this resource relies on may be
      encountering an error.</li>
  </ul>

  <p>For more detailed information about the error, please
  refer to the error log.
  </p>

  <p>If the error persists please contact the site maintainer.
  Thank you for your patience.
  </p>



Folgende Variante des Scripts funktioniert jedoch:
obj = context.plone_site.folderA
print str(obj)
return printed

-->
<ATFolder at folderA>


Das "str(obj)" selbst verursacht den Fehler also nicht, aber ich
kann es offensichtlich nicht direkt "return"en.

Es wird noch seltsamer:


obj = context.plone_site.folderA
return '%s' % obj
--> verursacht obigen Fehler


obj = context.plone_site.folderA
return "'%s'" % obj
--> funktioniert (liefert erwartungsgemäß '<ATFolder at folderA>')


Das ganze lässt sich auch nicht mit beliebigen Ordnern nachvollziehen,
sondern das passiert nur bei einem einzigen ganz bestimmten Ordner
(ATFolder) meiner Plone-Site.

Kann mir jemand nen Tipp gehen wo ich suchen muss?

Ich wollte mir gerade mal die Standard-Implementierung von __str__()
ansehen (die das <ATFolder at folderA> liefert), habe sie aber nicht
gefunden. Wo muss ich da suchen?

Danke und Grüße
-stefan-





_______________________________________________
zope mailing list
[hidden email]
https://mail.dzug.org/mailman/listinfo/zope
ajung

Re: return str(obj)

Reply Threaded More More options
Print post
Permalink
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 20.04.2009 11:13 Uhr, Stefan Palme wrote:
> Hallo,
>
> habe folgendes seltsame Phänomen (folderA ist ein ATFolder):
>
> Script(Python):
> obj = context.plone_site.folderA
> return str(obj)
>
>

Was soll der Code genau machen? Usecase?

Andreas
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAknsPPwACgkQCJIWIbr9KYx0QACeNCIkpYIfQKulvA0UTocr8lXB
tHkAnA5pwyp2iaradMoFoTHOybyGu11n
=4mal
-----END PGP SIGNATURE-----

[lists.vcf]

begin:vcard
fn:Andreas Jung
n:Jung;Andreas
org:ZOPYX Ltd. & Co. KG
adr;quoted-printable:;;Charlottenstr. 37/1;T=C3=BCbingen;;72070;Germany
email;internet:[hidden email]
title:CEO
tel;work:+49-7071-793376
tel;fax:+49-7071-7936840
tel;home:+49-7071-793257
x-mozilla-html:FALSE
url:www.zopyx.com
version:2.1
end:vcard





_______________________________________________
zope mailing list
[hidden email]
https://mail.dzug.org/mailman/listinfo/zope
Stefan Palme-2

Re: return str(obj)

Reply Threaded More More options
Print post
Permalink
> >
> > Script(Python):
> > obj = context.plone_site.folderA
> > return str(obj)
> >
> Was soll der Code genau machen? Usecase?

Nichts "produktives" - es geht nur um eine kleine Debug-Ausgabe,
um zu sehen, ob in "obj" das richtige Objekt drinsteht. Für den
eigentlichen Use-Case kann ich den Code auch anders schreiben,
trotzdem würde mich interessieren, was genau an dieser Stelle
schief geht.

-stefan-





_______________________________________________
zope mailing list
[hidden email]
https://mail.dzug.org/mailman/listinfo/zope
Stefan Palme-2

Re: return str(obj)

Reply Threaded More More options
Print post
Permalink
On Mon, 2009-04-20 at 11:18 +0200, Stefan Palme wrote:

> > >
> > > Script(Python):
> > > obj = context.plone_site.folderA
> > > return str(obj)
> > >
> > Was soll der Code genau machen? Usecase?
>
> Nichts "produktives" - es geht nur um eine kleine Debug-Ausgabe,
> um zu sehen, ob in "obj" das richtige Objekt drinsteht. Für den
> eigentlichen Use-Case kann ich den Code auch anders schreiben,
> trotzdem würde mich interessieren, was genau an dieser Stelle
> schief geht.
Ok, scheinbar interessiert dieses Problem nur, wenn es um
"produktiven" Code geht ;-)

Habe nun aber einen TestCase, den ich wirklich interessant finde.
Habe ein Zope-2.9.x (in dem u.a. auch Plone-2.5.x installiert ist).

Ein Python-Script mit folgendem Inhalt:

  return '<ATFolder at en>'

funktioniert.



Ein Python-Script mit dem Inhalt

  return '<ATFolder at de>'

erzeugt immer die Fehlermeldung
  "Resource not found. Resource: ATFolder at de"


Und zwar unabhängig davon, ob ich das Script innerhalb der Plone-Site
aufrufe oder in der Zope-Wurzel...

An einer Erklärung wäre ich wirklich sehr interessiert - auch wenn
es keinen wirklichen Use-Case für "return '<ATFolder at de>'" gibt ;-)

Grüße
-stefan-





_______________________________________________
zope mailing list
[hidden email]
https://mail.dzug.org/mailman/listinfo/zope
Stefan Palme-2

Re: return str(obj)

Reply Threaded More More options
Print post
Permalink

Noch mehr interessante Testcases, und zwar in einem frisch installierten
Zope-2.9.10 ohne jegliche Zusatzprodukte. Auspacken, starten, unten
gezeigte Python-Scripts schreiben, testen...

Funktioniert:
  return '<de>'
  return '< cdex>'


Funktioniert nicht:
  return '< de>'
  return '< cdef>'


usw. usf. Habe viel ausprobiert, konnte aber keinerlei
Regelmäßigkeit erkennen... Langsam zweifle ich an der Logik
von Bits und Bytes.. ;-)

-stefan-





_______________________________________________
zope mailing list
[hidden email]
https://mail.dzug.org/mailman/listinfo/zope
Stefan Palme-2

Re: return str(obj) (SOLVED)

Reply Threaded More More options
Print post
Permalink
Schuld ist folgender Code in ZPublisher/HTTPResponse.py:

def setBody(self, body, title='', is_error=0,
            bogus_str_search=re.compile(" [a-fA-F0-9]+>$").search,
            ...):
  ...
  l = len(body)
  if ((l < 200) and
       body[:1] == '<' and
       body.find('>') == l-1 and
       bogus_str_search(body) is not None):
    self.notFoundError(body[1:-1])


Offensichtlich wird ein zurückzugebender Body auf Strings mit
dem Format "<IRGENDWAS HEX-WERT>" geprüft. Wird ein solcher String
gefunden, wird der NotFound-Error geworfen.

Darum funktionieren
  '<de>' (da fehlt das Leerzeichen vor dem "Hex-Wert" DE) und
  '< cdex>' (X ist keine gültige Hex-Ziffer),
während '< de>', '< cdef'> und '<ATFolder at de>' aussehen wie
oben beschriebenes Format und demzufolge mit NotFound quittiert
werden.

Weiß jemand, wie die Suche nach diesen "bogus body strings"
motiviert ist?

Da wir viel mit AJAX arbeiten, könnte es bei uns durchaus vorkommen,
dass ein HTTP-Response aus einem sehr kurzen String besteht, der
zufällig genau diesem Format entspricht.

Grüße
-stefan-





_______________________________________________
zope mailing list
[hidden email]
https://mail.dzug.org/mailman/listinfo/zope
Raphael Ritz

Re: return str(obj)

Reply Threaded More More options
Print post
Permalink
In reply to this post by Stefan Palme-2
Stefan Palme wrote:
> Noch mehr interessante Testcases, und zwar in einem frisch installierten
> Zope-2.9.10 ohne jegliche Zusatzprodukte. Auspacken, starten, unten
> gezeigte Python-Scripts schreiben, testen...

FWIW: das passiert auch in Zope-2.10.6

Raphael


>
> Funktioniert:
>   return '<de>'
>   return '< cdex>'
>
>
> Funktioniert nicht:
>   return '< de>'
>   return '< cdef>'
>
>
> usw. usf. Habe viel ausprobiert, konnte aber keinerlei
> Regelmäßigkeit erkennen... Langsam zweifle ich an der Logik
> von Bits und Bytes.. ;-)
>
> -stefan-
>
>
>
>
> ------------------------------------------------------------------------
>
>
>
> _______________________________________________
> zope mailing list
> [hidden email]
> https://mail.dzug.org/mailman/listinfo/zope



_______________________________________________
zope mailing list
[hidden email]
https://mail.dzug.org/mailman/listinfo/zope