Import-Fehler - no attribute - nach mv kein Fehler

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
ttze
User
Beiträge: 9
Registriert: Montag 9. November 2009, 21:47

Okay. Sorry für meinen Ton - Abschlussarbeiten in der Endphase nerven.
@ ice2k3: Danke für die Links. Wieder etwas dazu gelernt. :)

Also ich versuche mal in 2-3 Sätzen zusammen zu fassen, was ich gemacht habe.

Es ist eine internetbasierte Anwendung geworden, bei dem verschiedene Themen aus Python3 behandelt werden, ähnlich zum Tutorial evtl. Soweit bin ich noch nicht, aber da steckt schon Wissen aus der Didaktik drin. Zu jeder dieser Einheiten, gibt es eine Aufgabenstellung, bei der der Benutzer irgendwas selber machen muss und die Anwendung das ganze auswertet.

Ich habe also einen Strauß voller Probleme: Django 2.6 <-> Anwendercode 3.x., Überhaupt der Anwendercode an sich, auf einem Server :)

Umsetzung bisher: Ich schreibe aus Django heraus den Code in ein File und habe in Python3 ein Tool, was das ganze auswertet. Dabei startet Django einen subprocess und wartet auf das Tool.
Erstmal versuche ich einen AST zu bilden, den ich wiederum nach unerlaubten builtins etc. durchsuche. (Ich hab hier schon gelesen, dass es da ganz fiese Möglichkeiten gibt, trotzdem Böse dinge zu tun)

Wenn der AST i.O. ist, dann versuche ich den Code auszuwerten. In dem Code vom Ausgangsposting geschieht das, durch Prüfen des Rückgabewertes. Aber ich merke, wenn da jemand return 45 schreibt, weil ich den AST nach Schlüsselwörtern durchsuche, wie "For" z.B. :)

Wenn das Auswerten fertig ist, wird ein XML-File zurück geschrieben, in dem die Fehler etc. drin stehen.

Das ist so ganz grob umrissen der jetzige Entwurf. Da stecken einige Probleme drin, aber dafür machen wir das ja, um so was zu lernen.

Und nicht wieder drauf hauen. ;)
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

ttze hat geschrieben:Erstmal versuche ich einen AST zu bilden, den ich wiederum nach unerlaubten builtins etc. durchsuche. (Ich hab hier schon gelesen, dass es da ganz fiese Möglichkeiten gibt, trotzdem Böse dinge zu tun)

Wenn der AST i.O. ist, dann versuche ich den Code auszuwerten. In dem Code vom Ausgangsposting geschieht das, durch Prüfen des Rückgabewertes. Aber ich merke, wenn da jemand return 45 schreibt, weil ich den AST nach Schlüsselwörtern durchsuche, wie "For" z.B. :)
Diese Beschreibung hört sich so an, als würdest du NICHT das ``ast`` Modul verwenden, oder täusche ich mich da? Falls nicht, noch einmal der Hinweis auf meinen Funktionsparser, der enthält schon die Grundlagen für dein Vorhaben. Kann dir (wie gesagt) auch die neue Version geben, diese kann neben dem Evaluieren auch LaTeX-Strings der math. Funktion erstellen und enthält besseres Exception-Handling, außerdem habe ich noch eine Test-Klasse dazu.

Wie schon angedeutet würde ich in dem Fall folgenden Weg gehen:
Benutzereingabe (Django 2.6) --> IPC --> Evaluieren der Eingabe mit ``ast`` (Python 3).
Sehr komfortabel für IPC unter Python finde ich außerdem das Modul "Pyro" (Python Remote Objects - http://pyro.sourceforge.net/ ). Weiß allerdings nicht mit welchen Python-Versionen das kompatibel ist, auf der Seite findet sich auf den ersten Blick leider auch nichts. Von mir persönlich unter 2.3 und 2.6 erfolgreich getestet.
ttze
User
Beiträge: 9
Registriert: Montag 9. November 2009, 21:47

Danke für dein Angebot, darauf komme ich evtl zurück. Allerdings ist bald Abgabe und von daher ist der point-of-no-return schon überschritten. :)

Doch doch, ich benutze das Modul ast. Zum einen um diesem mit eine Vistor nach unerwünschten Nodes zu durchsuchen und andererseits um an die einzelnen Elemente heranzukommen, um diese zu evaluieren. Wenn der Code allerdings nicht in einen AST überführt werden, weil ein compile() einen Syntaxfehler wirft, muss ich derzeit per Hand ran und die Fehler analysieren. Ein vergessener ":" z.B. ist kein Problem.

Pyro schau ich mir aber nochmal an. Danke:)
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

ttze hat geschrieben:Pyro schau ich mir aber nochmal an. Danke:)
Dazu reicht eigentlich fast ein Blick auf das Minimal-Beispiel:
http://pyro.sourceforge.net/manual/8-example.html
Da siehst du auch, dass das wirklich sehr schnell umgesetzt ist ;)
(Pyro braucht außerdem nicht installiert werden, wenn du den Ordner zu deinem Modul packst, funktioniert das auch)
Antworten