Jobs in Zope?

Django, Flask, Bottle, WSGI, CGI…
Benutzeravatar
dusselmann
User
Beiträge: 70
Registriert: Donnerstag 28. Juli 2005, 12:47
Kontaktdaten:

Jobs in Zope?

Beitragvon dusselmann » Donnerstag 13. Oktober 2005, 08:32

Moin :)

Um nicht 3 neue Threads aufzumachen (hab ja schon so viele), hier 3 Fragen:

    Kann ich in Zope Jobs einrichten, die zu bestimmten Zeiten ablaufen?
    Wie kann ich das implementieren, dass sich User über PageTemplates und nicht über dieses PopUp einloggen können? Gibts da Python-Methoden für?
    Kann ich Python-Scripte aus Python-Scripten heraus aufrufen? Wenn ja, wie?


Danke schon mal & Grüßle, Daniel
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Jobs in Zope?

Beitragvon gerold » Donnerstag 13. Oktober 2005, 14:09

dusselmann hat geschrieben:Kann ich in Zope Jobs einrichten, die zu bestimmten Zeiten ablaufen?

Hi Daniel!

Geplante Jobs sind nicht in Zope implementiert. Man kann aber betriebsystemeigene Mittel verwenden um Jobs aufzurufen. Unter Linux mit Cron und unter Windows als "geplanter Task". Du musst nur zu gewissen Zeiten eine vorher von dir definierte URL aufrufen, hinter der sich dein Skript verbirgt.

Der Aufruf einer Url lässt sich ziemlich einfach mit dem Kommandozeilenprogramm WGet (http://www.gnu.org/software/wget/wget.html) realisieren. Wenn du dafür ein Beispiel brauchst, dann sieh dir mal meine Beispiele zum Komprimieren der Zope-Datenbank (http://gerold.bcom.at/zope_plone/zope_anleitungen/komprimieren_einer_zope_datenbank/ und http://gerold.bcom.at/zope_plone/zope_anleitungen/zope_komprimieren_teil_2/) an.

Nehmen wir mal an, dass du direkt im Root ein Python-Skript mit dem Namen "mein_cronjob" hast, dann musst du nur die Url http://localhost:8080/mein_cronjob aufrufen -- schon wird dieses Skript ausgeführt. Idealerweise gibt dieses Skript einen Text zurück, der symbolisiert, ob der Job korrekt ausgeführt wurde.

Code: Alles auswählen

## mein_cronjob

# Hier wird der Job ausgeführt
if context.irgendein_job():
    retval = "Alles OK"
else:
    retval = "Sch..."
return retval

Damit nicht jeder diesen Job auslösen kann, solltest du das Recht zum Anzeigen nur dem Manager oder einem speziell dafür gedachten Benutzer zuweisen. Anmeldename und Passwort können als Parameter an WGet übergeben werden.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
dusselmann
User
Beiträge: 70
Registriert: Donnerstag 28. Juli 2005, 12:47
Kontaktdaten:

Beitragvon dusselmann » Donnerstag 13. Oktober 2005, 14:12

Ok, fein. Ich glaub der erste Abschnitt hätte gereicht. 8)

Danke schon mal!

Die anderen 2 Fragen?

Gruß, Daniel
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Jobs in Zope?

Beitragvon gerold » Donnerstag 13. Oktober 2005, 14:26

dusselmann hat geschrieben:Wie kann ich das implementieren, dass sich User über PageTemplates und nicht über dieses PopUp einloggen können? Gibts da Python-Methoden für?

Hi Daniel!

Hier die Antwort auf Frage 2:

Ich habe es noch nie selber ausprobiert, aber der CookieCrumbler (http://hathawaymix.org/Software/CookieCrumbler) kann den Anmeldeprozess kontrollieren. Wie das so funktionieren soll, erklärt, glaube ich, der letzte Beitrag auf dieser Seite recht gut: http://www.dzug.org/mailinglisten/zope/archive/2005/2005-10/1128521109200/index_html?fullMode=1#1128768233655

Wenn es damit nicht funktioniert, dann musst du wohl bei der DZUG vorbeischauen und dort diese Frage stellen.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Jobs in Zope?

Beitragvon gerold » Donnerstag 13. Oktober 2005, 14:37

dusselmann hat geschrieben:Kann ich Python-Scripte aus Python-Scripten heraus aufrufen? Wenn ja, wie?

Hi Daniel!

Und hier die Nummer 3:

Wenn das auszuführende Skript im gleichen Ordner wie das aufrufende Skript steht -- oder das auszuführende Skript über Akquisition erreichbar ist, dann kannst du dieses Skript über "context" oder "container" aufrufen.

Code: Alles auswählen

## aufrufendes Skript

retval = context.auszufuehrendes_skript()


Soll das Skript nur dann aufgerufen werden, wenn es auch wirklich im gleichen Ordner steht, dann könnte der Aufruf so aussehen:

Code: Alles auswählen

## aufrufendes Skript

try:
    retval = container["Name des auszuf. Skripts"]()
except:
    retval = "Nicht gefunden"

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
dusselmann
User
Beiträge: 70
Registriert: Donnerstag 28. Juli 2005, 12:47
Kontaktdaten:

Beitragvon dusselmann » Freitag 14. Oktober 2005, 07:10

Hi Gerold,

Nr. 2 ist keine befriedigende Lösung.. Aber sie ist es Wert, sie auszuprobieren.

Dank für alle 3!

Ist es eigentlich möglich über eine Maske in der Anwendung das Passwort eines Users zu ändern??

Gruß, Daniel
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 14. Oktober 2005, 09:48

dusselmann hat geschrieben: Ist es eigentlich möglich über eine Maske in der Anwendung das Passwort eines Users zu ändern??

Hi Daniel!

Ja, das ist möglich, aber ohne mein zdir2 (http://gerold.bcom.at/zope_plone/zope_anleitungen/zope_dir/) und ein wenig suchen im Quellcode wäre ich wahrscheinlich nicht so schnell darauf gekommen.

Code: Alles auswählen

username = "testuser"
password = "testpasswort"
roles = []
domains = []

# Benutzer anlegen
context.acl_users.userFolderAddUser(username, password, roles, domains)
print "Benutzer '%s' wurde angelegt" % username

# Benutzerdaten auslesen
user = context.acl_users.getUserById(username)
roles = user.getRoles()
domains = user.getDomains()

# Benutzer aendern
new_password = "neuespasswort"
context.acl_users.userFolderEditUser(username, new_password, roles, domains)
print "Benutzer '%s' wurde editiert." % username
print

print username
print roles
print domains

return printed


lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
dusselmann
User
Beiträge: 70
Registriert: Donnerstag 28. Juli 2005, 12:47
Kontaktdaten:

Beitragvon dusselmann » Freitag 14. Oktober 2005, 10:19

cool, danke.

Aber genauso einfach muss doch auch ein Login möglich sein... *grübel*

Daniel
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 14. Oktober 2005, 11:04

dusselmann hat geschrieben:Aber genauso einfach muss doch auch ein Login möglich sein... *grübel*

Hi Daniel!

Der CookieCrumbler fängt, laut Beschreibung in dem oben erwähnten Link, die Login-Aufforderung ab und kann sie an eine eigens dafür vorbereitete Seite weiterleiten.

Schau dir mal den Quellcode zum CookieCrumbler an, da findest du ziemlich sicher eine Lösung für dein Problem. Wie eine Login-Seite aufgebaut sein kann und wie diese Daten an Zope übergeben werden damit man eingelogt wird, findest du wahrscheinlich heraus, wenn du dir den Quellcode der Plone-Login-Seite ansiehst (ich glaube sie heisst "login_form"). Evt. gibt es so eine Login-Seite auch im CookieCrumbler.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder