From chris.arndt at web.de Sun Jan 7 18:55:30 2007 From: chris.arndt at web.de (Christopher Arndt) Date: Sun, 07 Jan 2007 18:55:30 +0100 Subject: [Python-de] =?iso-8859-1?q?=5BAnk=FCndigung=5D_N=E4chstes_Treffen?= =?iso-8859-1?q?_von_pyCologne_am_10=2E01=2E2007?= Message-ID: <45A13412.60902@web.de> Hallo allerseits und auch ein Frohes Neues Jahr noch! Das nächste Treffen von pyCologne, der Python User Group Köln, findet statt am: Datum: 10.01.2007 Uhrzeit: 18:30 Uhr c.t. Ort: Pool 0.14, Benutzerrechenzentrum (RRZK-B) der Universität Köln, Berrenrather Str. 136, 50937 Köln Nähere Informationen (Programm, Wegbeschreibung, etc.) findet man hier: http://wiki.python.de/User_Group_K%C3%B6ln#Termine Wir laden alle Python-Begeisterten aus der Umgebung ein, ob Entwickler, Anwender oder einfach nur neugierig, zu diesem Treffen zu kommen! Es freut sich auf Euer zahlreiches Kommen Christopher Arndt From mmueller at python-academy.de Sun Jan 7 22:20:35 2007 From: mmueller at python-academy.de (Mike =?iso-8859-1?Q?M=FCller?=) Date: Sun, 07 Jan 2007 22:20:35 +0100 Subject: [Python-de] Python-Stammtisch in Leipzig, 09.01.07, 20:00 Uhr Message-ID: <7.0.1.0.0.20070107221720.01c56680@python-academy.de> ========================= Leipzig Python User Group ========================= Stammtisch am 09.01.2007 ------------------------- Wir treffen uns am 09.01.2007 um 20:00 Uhr wieder im im Schulungszentrum der Python Academy in Leipzig (http://www.python-academy.de/Schulungszentrum/anfahrt.html). Unser Thema ist diesmal Trac (http://trac.edgewall.org). Stefan Schwarzer wird die Nutzung von Trac mit Beispielen erläutern. Für das leibliche Wohl wird gesorgt. Wir bitten um kurze Anmeldung per e-mail an: info at python-academy.de An den Treffen der Python Anwendergruppe kann jeder teilnehmen, der Interesse an Python hat, die Sprache bereits nutzt oder nutzen möchte. Die Arbeitssprachen des Treffens ist Deutsch. Englisch sprechende Python-Enthusiasten sind trotzdem herzlich eingeladen. Wir übersetzen gern. Aktuelle Informationen zu den Treffen sind immer unter http://www.python-academy.de/User-Group/index.html zu finden. From m.gehling at gmx.de Tue Jan 16 21:33:58 2007 From: m.gehling at gmx.de (M.Gehling) Date: Tue, 16 Jan 2007 21:33:58 +0100 Subject: [Python-de] =?iso-8859-15?q?ODBC_f=FCr_Mac_os_x?= Message-ID: <45AD36B6.9040409@gmx.de> Hallo, habe inzwischen viel ausprobiert, aber leider hat bisher nichts funktioniert. Und inzwischen bin ich auch etwas verwirrt. habe mit mx.odbc den iodbc-driver gebaut. Der "import mx.ODBC.iODBC" geht, nur bekomme ich den " mx.ODBC.iODBC.DriverConnect('DSN=XXX',UID='YYY';PWD='ZZZ')" nicht hin. Wie hängt der odbc-administrator dazwischen? Was ist mit der .odbc.ini ? From foxx at php4you.de Wed Jan 17 22:00:35 2007 From: foxx at php4you.de (foxx) Date: Wed, 17 Jan 2007 22:00:35 +0100 Subject: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? Message-ID: <45AE8E73.3010704@php4you.de> Hallo, ich habe mich vor wenigen Minuten bei dieser Maillingliste angemeldet. Ich habe vor einigen Monaten mit der Python-Programmierung begonnen und mich in der Zeit davor besonders mit PHP berschäftigt. Mit Python habe ich nicht vor hauptsächlich Webseiten zu schreiben (Wie mit PHP), sondern eher grafische Applikationen mit PyGTK/Glade oder vielleicht auch wxPython zu erstellen. Vielleicht hab ich dann ja demnächst die ein oder andere Frage ;) PS: Die Bestätigungsmail nach abbonieren der Liste enthielt den folgenden Inhalt: >> Hallo, herzlich willkommen auf der größten, schönsten und einzigen >> deutschen Python Liste ;-) Dabei wundert mich, dass diese Liste nicht die einzige deutsche Python-Liste seien kann. Auf GoogleGroups gibt es eine Python-Gruppe: http://groups.google.com/group/de.comp.lang.python Naja... vielleicht kann das ja als Usenet durchgehen da die Mailfunktion nicht im Vordergrund steht ;) Gruß, Janek -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : signature.asc Dateityp : application/pgp-signature Dateigröße : 252 bytes Beschreibung: OpenPGP digital signature URL : http://python.net/pipermail/python-de/attachments/20070117/3496751d/attachment.pgp From chris.arndt at web.de Wed Jan 17 22:55:14 2007 From: chris.arndt at web.de (Christopher Arndt) Date: Wed, 17 Jan 2007 22:55:14 +0100 Subject: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? In-Reply-To: <45AE8E73.3010704@php4you.de> References: <45AE8E73.3010704@php4you.de> Message-ID: <45AE9B42.6000403@web.de> foxx schrieb: >>> Hallo, herzlich willkommen auf der größten, schönsten und einzigen >>> deutschen Python Liste ;-) Das ist wohl stark übertrieben. Diese Liste ist seit einigen Monaten so gut wie scheintot und ich frage mich, ob man sie nicht einfach abschaffen sollte. Viel mehr ist auf der von dir genannten Newsgroup los, die man durch Google Groups ja auch als Mailingliste beziehen kann. Durch Google Groups und Gmane verschwimmen die Grenzen zwischen ML und Newsgruppen ja sowieso stark. Außerdem gibt es noch: http://wiki.python.de/ und http://forum.python.de Gruß, Chris From pythonmailing at web.de Thu Jan 18 14:15:27 2007 From: pythonmailing at web.de (Marek Kubica) Date: Thu, 18 Jan 2007 14:15:27 +0100 Subject: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? In-Reply-To: <45AE9B42.6000403@web.de> References: <45AE8E73.3010704@php4you.de> <45AE9B42.6000403@web.de> Message-ID: <20070118141527.4f16e72a@localhost> Hallo! On Wed, 17 Jan 2007 22:55:14 +0100 Christopher Arndt wrote: > Das ist wohl stark übertrieben. Diese Liste ist seit einigen Monaten > so gut wie scheintot Ja, stimmt. > Viel mehr ist auf der von dir genannten Newsgroup los, Nein, so viel mehr ist da auch nicht los. Da ist etwa so viel los, wie hier, als es noch keine Newsgroup gab. Vielleicht auch weniger. Die Bemerkung in der Mail wurde warscheinlich auch noch "in jenen Tagen" geschrieben, damals hat das ja auch noch gestimmt. grüße, Marek From chris.arndt at web.de Thu Jan 18 15:31:58 2007 From: chris.arndt at web.de (Christopher Arndt) Date: Thu, 18 Jan 2007 15:31:58 +0100 Subject: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? In-Reply-To: <20070118141527.4f16e72a@localhost> References: <45AE8E73.3010704@php4you.de> <45AE9B42.6000403@web.de> <20070118141527.4f16e72a@localhost> Message-ID: <45AF84DE.1090207@web.de> Marek Kubica schrieb: > On Wed, 17 Jan 2007 22:55:14 +0100 > Christopher Arndt wrote: >> Viel mehr ist auf der von dir genannten Newsgroup los, > Nein, so viel mehr ist da auch nicht los. Da ist etwa so viel los, wie > hier, als es noch keine Newsgroup gab. Vielleicht auch weniger. Naja, immerhin bereits ca. 100 Nachrichten im Januar: http://groups.google.com/group/de.comp.lang.python/about Chris From basti.wiesner at gmx.net Thu Jan 18 16:03:40 2007 From: basti.wiesner at gmx.net (Sebastian Wiesner) Date: Thu, 18 Jan 2007 16:03:40 +0100 Subject: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? In-Reply-To: <45AF84DE.1090207@web.de> References: <45AE8E73.3010704@php4you.de> <20070118141527.4f16e72a@localhost> <45AF84DE.1090207@web.de> Message-ID: <200701181603.50679.basti.wiesner@gmx.net> Christopher Arndt hackte folgendes: > Marek Kubica schrieb: > > On Wed, 17 Jan 2007 22:55:14 +0100 > > > > Christopher Arndt wrote: > >> Viel mehr ist auf der von dir genannten Newsgroup los, > > > > Nein, so viel mehr ist da auch nicht los. Da ist etwa so viel los, wie > > hier, als es noch keine Newsgroup gab. Vielleicht auch weniger. > > Naja, immerhin bereits ca. 100 Nachrichten im Januar: So viel gibt es auf de.comp.os.unix.linux.misc oftmals an einem einzigen Tag... -- Freiheit ist immer die Freiheit der Andersdenkenden. (Rosa Luxemburg) -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : nicht verfügbar Dateityp : application/pgp-signature Dateigröße : 189 bytes Beschreibung: nicht verfügbar URL : http://python.net/pipermail/python-de/attachments/20070118/213751e8/attachment.pgp From Helm.volker at gmx.de Thu Jan 18 16:55:35 2007 From: Helm.volker at gmx.de (Volker Helm) Date: Thu, 18 Jan 2007 16:55:35 +0100 Subject: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? - Datenbankabfrage TreeView In-Reply-To: <200701181603.50679.basti.wiesner@gmx.net> References: <45AE8E73.3010704@php4you.de> <20070118141527.4f16e72a@localhost> <45AF84DE.1090207@web.de> <200701181603.50679.basti.wiesner@gmx.net> Message-ID: <20070118155535.211100@gmx.net> Nicht die Quantität ist immer entscheidend, außerdem gibt es mehr Leute, die Linux verwenden als python. Apropos, beschäftige mich gerade mit pygtk und wollte eine Datenbankabfrage in ein gtk.ListStore und gtk.TreeView automatisiert erstellen. Habt ihr Idee, wie die Strukturierung laufen soll? Über cur.execute(...) kann ich anschließend mit cur.description die Tabellenköpfe und Typen auslesen. Anhand diese Daten kann das gtk.ListStore und gtk.TreeView erstellt werden. Frage ist allerdings, wie mache ich das späte mit dem Lesen der einzelnen Sätze, der SQL wird auch häufiger neu aufgebaut, wobei allerdings der Struktur (Model + Header) gleich bleiben. Danke schon mal, Volker -------- Original-Nachricht -------- Datum: Thu, 18 Jan 2007 16:03:40 +0100 Von: Sebastian Wiesner An: python-de at python.net Betreff: Re: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? > Christopher Arndt hackte folgendes: > > Marek Kubica schrieb: > > > On Wed, 17 Jan 2007 22:55:14 +0100 > > > > > > Christopher Arndt wrote: > > >> Viel mehr ist auf der von dir genannten Newsgroup los, > > > > > > Nein, so viel mehr ist da auch nicht los. Da ist etwa so viel los, wie > > > hier, als es noch keine Newsgroup gab. Vielleicht auch weniger. > > > > Naja, immerhin bereits ca. 100 Nachrichten im Januar: > > So viel gibt es auf de.comp.os.unix.linux.misc oftmals an einem einzigen > Tag... > -- > Freiheit ist immer die Freiheit der Andersdenkenden. > (Rosa Luxemburg) -- "Feel free" - 10 GB Mailbox, 100 FreeSMS/Monat ... Jetzt GMX TopMail testen: http://www.gmx.net/de/go/topmail From basti.wiesner at gmx.net Thu Jan 18 17:07:35 2007 From: basti.wiesner at gmx.net (Sebastian Wiesner) Date: Thu, 18 Jan 2007 17:07:35 +0100 Subject: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? - Datenbankabfrage TreeView In-Reply-To: <20070118155535.211100@gmx.net> References: <45AE8E73.3010704@php4you.de> <200701181603.50679.basti.wiesner@gmx.net> <20070118155535.211100@gmx.net> Message-ID: <200701181707.40051.basti.wiesner@gmx.net> Volker Helm hackte folgendes: > Nicht die Quantität ist immer entscheidend, außerdem gibt es mehr Leute, > die Linux verwenden als python. Nun, ich habe weder das eine noch das andere behauptet. Ich wollte lediglich darauf hinaus, dass "viel los" ein relativer Begriff ist. In der Python Newsgroup vermisse ich manchmal den Traffic, es braucht eben doch öfter mal etwas länger, bis eine Antwort da ist. Die Linux-Newsgroup leidet dagegen unter dem Traffic. Da ist viel Schrott dabei und man verbringt eine Menge Zeit nur mit dem Filtern der Nachrichten... -- Freiheit ist immer die Freiheit der Andersdenkenden. (Rosa Luxemburg) -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : nicht verfügbar Dateityp : application/pgp-signature Dateigröße : 189 bytes Beschreibung: nicht verfügbar URL : http://python.net/pipermail/python-de/attachments/20070118/0a69cb46/attachment.pgp From diesch at spamfence.net Sat Jan 27 01:00:18 2007 From: diesch at spamfence.net (Florian Diesch) Date: Sat, 27 Jan 2007 01:00:18 +0100 Subject: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? - Datenbankabfrage TreeView In-Reply-To: <20070118155535.211100@gmx.net> (Volker Helm's message of "Thu, 18 Jan 2007 16:55:35 +0100") References: <45AE8E73.3010704@php4you.de> <20070118141527.4f16e72a@localhost> <45AF84DE.1090207@web.de> <200701181603.50679.basti.wiesner@gmx.net> <20070118155535.211100@gmx.net> Message-ID: <877iv9l4od.fsf@spamfence.net> "Volker Helm" wrote: > Apropos, beschäftige mich gerade mit pygtk und wollte eine > Datenbankabfrage in ein gtk.ListStore und gtk.TreeView automatisiert > erstellen. > > Habt ihr Idee, wie die Strukturierung laufen soll? > > Über cur.execute(...) kann ich anschließend mit cur.description die > Tabellenköpfe und Typen auslesen. Anhand diese Daten kann das > gtk.ListStore und gtk.TreeView erstellt werden. Frage ist allerdings, > wie mache ich das späte mit dem Lesen der einzelnen Sätze, der SQL > wird auch häufiger neu aufgebaut, wobei allerdings der Struktur (Model > + Header) gleich bleiben. Mir ist nicht so ganz klar, wo dein Problem liegt. Solange die Struktur der Daten sich nicht ändert, musst du doch nur mit append(), prepend() o.ä. die Datensätze in den ListStore einfügen, ihn mit clear() leeren usw. Florian -- From stephan.diehl at gmx.net Mon Jan 29 18:17:33 2007 From: stephan.diehl at gmx.net (Stephan Diehl) Date: Mon, 29 Jan 2007 18:17:33 +0100 Subject: [Python-de] Berlin Python Treffen am 2.2. um 19 Uhr Message-ID: <45BE2C2D.1050404@gmx.net> Liebe Berliner Pythonistas, nach langer Pause wollen wir uns wieder treffen. Zeitpunkt: Fr, 2.2., 19 Uhr Ort: Cafe & Restaurant UNENDLICH Boetzowstrasse 14 10407 Berlin (Prenzlauer Berg "Boetzowviertel") Das ist etwa 100m vom "Filmtheater am Friedrichhain" entfernt. In der Naehe fahren die Tram M4 und der 200er Bus. Diesmal werden keine Vortraege gehalten, aber es wird getrunken, gegessen und vielleicht auch ueber Python geredet :-) In Zunkunft soll es auch wieder Vortraege geben. Wer noch nicht auf der berliner python mailingliste (http://starship.python.net/cgi-bin/mailman/listinfo/python-berlin) eingetragen ist, sollte dies noch tun, da dort evtl. weitere Informationen verbreitet werden. Am besten schickt jeder, der kommen will, eine kleine Nachricht an die Liste, damit ich den Ueberblick behalte, wieviel in etwa kommen. Bis Freitag Stephan From stephan.diehl at gmx.net Mon Jan 29 18:35:01 2007 From: stephan.diehl at gmx.net (Stephan Diehl) Date: Mon, 29 Jan 2007 18:35:01 +0100 Subject: [Python-de] Berlin Python Treffen am 2.2. um 19 Uhr In-Reply-To: <45BE2C2D.1050404@gmx.net> References: <45BE2C2D.1050404@gmx.net> Message-ID: <45BE3045.4010705@gmx.net> Stephan Diehl wrote: sorry, falsche adresse: > (http://starship.python.net/cgi-bin/mailman/listinfo/python-berlin) die richtige ist http://starship.python.net/mailman/listinfo/python-berlin From foxx at php4you.de Mon Jan 29 19:10:30 2007 From: foxx at php4you.de (foxx) Date: Mon, 29 Jan 2007 19:10:30 +0100 Subject: [Python-de] Berlin Python Treffen am 2.2. um 19 Uhr In-Reply-To: <45BE3045.4010705@gmx.net> References: <45BE2C2D.1050404@gmx.net> <45BE3045.4010705@gmx.net> Message-ID: <45BE3896.90907@php4you.de> Hallo, das Abbonieren dieser Liste scheint nicht zu funktionieren - ich bekomme immer eine 404 :-( Gruß, Janek Stephan Diehl schrieb: > Stephan Diehl wrote: > > sorry, falsche adresse: > > >> (http://starship.python.net/cgi-bin/mailman/listinfo/python-berlin) >> > > die richtige ist > http://starship.python.net/mailman/listinfo/python-berlin > > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de > > From stephan.diehl at gmx.net Tue Jan 30 12:02:47 2007 From: stephan.diehl at gmx.net (Stephan Diehl) Date: Tue, 30 Jan 2007 12:02:47 +0100 Subject: [Python-de] Berlin Python Treffen am 2.2. um 19 Uhr In-Reply-To: <45BE3896.90907@php4you.de> References: <45BE2C2D.1050404@gmx.net> <45BE3045.4010705@gmx.net> <45BE3896.90907@php4you.de> Message-ID: <45BF25D7.1070403@gmx.net> das Abbonieren funktioniert jetzt wieder dank des selbstlosen Einsatzes von Stefan Drees. foxx wrote: > Hallo, > > das Abbonieren dieser Liste scheint nicht zu funktionieren - ich bekomme > immer eine 404 :-( > > Gruß, > Janek > > Stephan Diehl schrieb: >> Stephan Diehl wrote: >> >> sorry, falsche adresse: >> >> >>> (http://starship.python.net/cgi-bin/mailman/listinfo/python-berlin) >>> >> die richtige ist >> http://starship.python.net/mailman/listinfo/python-berlin >> >> >> _______________________________________________ >> python-de maillist - python-de at python.net >> http://python.net/mailman/listinfo/python-de >> >> > > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de > From foxx at php4you.de Tue Jan 30 22:12:13 2007 From: foxx at php4you.de (foxx) Date: Tue, 30 Jan 2007 22:12:13 +0100 Subject: [Python-de] Berlin Python Treffen am 2.2. um 19 Uhr In-Reply-To: <45BF25D7.1070403@gmx.net> References: <45BE2C2D.1050404@gmx.net> <45BE3045.4010705@gmx.net> <45BE3896.90907@php4you.de> <45BF25D7.1070403@gmx.net> Message-ID: <45BFB4AD.9040209@php4you.de> Danke! Ich bin nun auch dabei :) Stephan Diehl schrieb: > das Abbonieren funktioniert jetzt wieder dank des selbstlosen > Einsatzes von Stefan Drees. > > foxx wrote: >> Hallo, >> >> das Abbonieren dieser Liste scheint nicht zu funktionieren - ich >> bekomme immer eine 404 :-( >> >> Gruß, >> Janek >> >> Stephan Diehl schrieb: >>> Stephan Diehl wrote: >>> >>> sorry, falsche adresse: >>> >>> >>>> (http://starship.python.net/cgi-bin/mailman/listinfo/python-berlin) >>>> >>> die richtige ist >>> http://starship.python.net/mailman/listinfo/python-berlin >>> >>> >>> _______________________________________________ >>> python-de maillist - python-de at python.net >>> http://python.net/mailman/listinfo/python-de >>> >>> >> >> >> _______________________________________________ >> python-de maillist - python-de at python.net >> http://python.net/mailman/listinfo/python-de >> > -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : signature.asc Dateityp : application/pgp-signature Dateigröße : 252 bytes Beschreibung: OpenPGP digital signature URL : http://python.net/pipermail/python-de/attachments/20070130/cb551ad2/attachment.pgp From Helm.volker at gmx.de Fri Feb 2 13:27:18 2007 From: Helm.volker at gmx.de (Volker Helm) Date: Fri, 02 Feb 2007 13:27:18 +0100 Subject: [Python-de] Maskierung von % Message-ID: <20070202122718.275410@gmx.net> Hi, wollte gerade einen String zur Ausgabe erstellen: s = "prozentuale Spanne %.2f %" % 15.23 Ergebnis sollte seind: prozentuale Spanne 15.23 % Leider wirft das System einen "ValueError: incomplete format" aus. Gibt es eine Möglichkeit das %-Zeichen zu maskieren, dass es nicht nach einer weiteren Variablen sucht? "\%" funktioniert leider nicht. Bis dann, Volker -- "Feel free" - 5 GB Mailbox, 50 FreeSMS/Monat ... Jetzt GMX ProMail testen: http://www.gmx.net/de/go/promail?ac=OM.GX.GX003K11711T4781a From hpj at urpla.net Fri Feb 2 13:33:37 2007 From: hpj at urpla.net (Hans-Peter Jansen) Date: Fri, 2 Feb 2007 13:33:37 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <20070202122718.275410@gmx.net> References: <20070202122718.275410@gmx.net> Message-ID: <200702021333.37389.hpj@urpla.net> Am Freitag, 2. Februar 2007 schrieb Volker Helm: > Hi, > > wollte gerade einen String zur Ausgabe erstellen: > > s = "prozentuale Spanne %.2f %" % 15.23 Probier doch mal: s = "prozentuale Spanne %.2f%%" % 15.23 Pete From Helm.volker at gmx.de Fri Feb 2 14:07:30 2007 From: Helm.volker at gmx.de (Volker Helm) Date: Fri, 02 Feb 2007 14:07:30 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <200702021333.37389.hpj@urpla.net> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> Message-ID: <20070202130730.245650@gmx.net> Gute Idee, funktioniert leider nicht generell: "% %.2f" % 15.23 -> Fehlermeldung "% %.2f%" % 15.23 -> Fehlermeldung "%.2f% %" % 15.23 -> "15,23%" Leerzeichen fehlt und wird immer entfernt Schade, nicht schlecht, leider kein genereller Ansatz. Bis dann, Volker -------- Original-Nachricht -------- Datum: Fri, 2 Feb 2007 13:33:37 +0100 Von: Hans-Peter Jansen An: python-de at python.net CC: Betreff: Re: [Python-de] Maskierung von % > Am Freitag, 2. Februar 2007 schrieb Volker Helm: > > Hi, > > > > wollte gerade einen String zur Ausgabe erstellen: > > > > s = "prozentuale Spanne %.2f %" % 15.23 > > Probier doch mal: > s = "prozentuale Spanne %.2f%%" % 15.23 > > Pete > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de -- "Feel free" - 10 GB Mailbox, 100 FreeSMS/Monat ... Jetzt GMX TopMail testen: http://www.gmx.net/de/go/topmail?ac=OM.GX.GX003K11713T4783a From Helm.volker at gmx.de Fri Feb 2 14:09:13 2007 From: Helm.volker at gmx.de (Volker Helm) Date: Fri, 02 Feb 2007 14:09:13 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <45C33276.2060001@novareto.de> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> Message-ID: <20070202130913.275410@gmx.net> Gerade das wollte ich vermeiden, lese nämlich einen kompletten SQL ein und wollte diesen mit nur einer/mehreren Zeilen erweitern. Da im Text häufiger ein "wert like '%suchbegriff%'" steht, müsste ich immer dieses Sonderzeichen eintragen, das ist mühsam und unleserlich :( Bis dann, Volker -------- Original-Nachricht -------- Datum: Fri, 02 Feb 2007 13:45:42 +0100 Von: Christian Klinger An: Volker Helm CC: Betreff: Re: [Python-de] Maskierung von % > Volker Helm schrieb: > > Hi, > > > > wollte gerade einen String zur Ausgabe erstellen: > > > > s = "prozentuale Spanne %.2f %" % 15.23 > > > > Ergebnis sollte seind: > > > > prozentuale Spanne 15.23 % > > > > Leider wirft das System einen "ValueError: incomplete format" aus. > > > > Gibt es eine Möglichkeit das %-Zeichen zu maskieren, dass es nicht nach > einer weiteren Variablen sucht? "\%" funktioniert leider nicht. > > > > Bis dann, > > > > Volker > > > Hallo > > vielleicht so: > > Python 2.3.5 (#1, Aug 22 2005, 22:13:23) > [GCC 3.3 20030304 (Apple Computer, Inc. build 1809)] on darwin > Type "help", "copyright", "credits" or "license" for more information. > >>> a="%.2f %s" %(12.2,'%') > >>> a > '12.20 %' > >>> > > mfg Chrisitan -- "Feel free" - 10 GB Mailbox, 100 FreeSMS/Monat ... Jetzt GMX TopMail testen: http://www.gmx.net/de/go/topmail?ac=OM.GX.GX003K11713T4783a From sschwarzer at sschwarzer.net Fri Feb 2 14:44:37 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Fri, 02 Feb 2007 14:44:37 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <20070202130730.245650@gmx.net> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> Message-ID: <45C34045.7060503@sschwarzer.net> Hallo Volker, On 2007-02-02 14:07, Volker Helm wrote: > > Gute Idee, funktioniert leider nicht generell: > > > > "% %.2f" % 15.23 -> Fehlermeldung > > "% %.2f%" % 15.23 -> Fehlermeldung > > "%.2f% %" % 15.23 -> "15,23%" Leerzeichen fehlt und wird immer entfernt > > > > Schade, nicht schlecht, leider kein genereller Ansatz. doch ein genereller Ansatz, - wenn man es richtig macht. ;-) Schreibe an der Stelle, wo das Prozentzeichen stehen soll, zwei Prozentzeichen direkt hintereinander: >>> >>> "%.2f %%" % 15.23456 '15.23 %' Beschrieben ist das unter http://docs.python.org/lib/typesseq-strings.html . Viele Grüße Stefan From chris.arndt at web.de Fri Feb 2 14:52:15 2007 From: chris.arndt at web.de (Christopher Arndt) Date: Fri, 02 Feb 2007 14:52:15 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <20070202130913.275410@gmx.net> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> Message-ID: <45C3420F.1090000@web.de> Volker Helm schrieb: > Gerade das wollte ich vermeiden, lese nämlich einen kompletten SQL ein und wollte diesen mit nur einer/mehreren Zeilen erweitern. Was heißt erweitern? Anhängen oder irgendwo zwischen drin einfügen? Wenn ersteres: x = 15.23 s = sqlstring + "prozentuale Spanne %.2f %%" % x Wenn letzteres, dann musst du es ja wohl entweder manuell machen, oder du hast dafür auch einen Algorithmus (z.B. regular expressions), dann machst du die string substitution halt bevor du die Zeilen einfügst: import re sqlstring = u"Irgendein Text der Prozentzeichen (%) enthält. ${PLATZHALTER}. Noch mehr Text" sqlstring = re.sub(r'\$\{PLATZHALTER\}', "prozentuale Spanne %.2f %%" % x, sqlstring) > Da im Text häufiger ein "wert like '%suchbegriff%'" steht, müsste ich immer dieses Sonderzeichen eintragen, das ist mühsam und unleserlich :( Da kann dir Python helfen: s = s.replace('%', '%%') natürlich, bevor du Platzhalter wie %s usw. einfügst. Chris From sschwarzer at sschwarzer.net Fri Feb 2 15:02:39 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Fri, 02 Feb 2007 15:02:39 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <20070202130913.275410@gmx.net> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> Message-ID: <45C3447F.9060109@sschwarzer.net> Hi Volker, On 2007-02-02 14:09, Volker Helm wrote: > Da im Text häufiger ein "wert like '%suchbegriff%'" steht, > müsste ich immer dieses Sonderzeichen eintragen, das ist mühsam > und unleserlich :( dazu noch ein Hinweis: Setze den Suchbegriff als Argument in cursor.execute ein. Dadurch werden Zeichen, die in SQL Sonderzeichen sind (vor allem ' , bei manchen SQL-Dialekten auch \), richtig maskiert. Also nicht suchtext = "Python's Prozentzeichen" cursor.execute( "SELECT text FROM table WHERE text LIKE '%%%s%%'" % suchtext) # selbst eingesetzt - unsicher sondern suchtext = "Python's Prozentzeichen" cursor.execute( "SELECT text FROM table WHERE text LIKE '%%(suchtext)s%'", {'suchtext': suchtext}) # vom DB-Adapter eingesetzt - besser Beachte, dass hier der execute-Methode zwei Argumente übergeben werden. Außerdem musst du die Prozentzeichen am Anfang und Ende des Strings nicht verdoppeln (wenn der Datenbankadapter sauber programmiert ist). Wie einzusetzende Zeichenketten zu formatieren sind und wie das zweite Argument von cursor.execute aussehen muss, hängt vom konkreten Datenbankadapter ab. Näheres in der DB-API 2.0, an die sich alle neueren Adapter halten sollten, http://www.python.org/dev/peps/pep-0249/ , und der Doku zum von dir verwendeten Datenbankadapter. Viele Grüße Stefan From LightLan at lightlan.de Fri Feb 2 15:31:04 2007 From: LightLan at lightlan.de (Paul Rauch) Date: Fri, 02 Feb 2007 15:31:04 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <20070202130730.245650@gmx.net> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> Message-ID: <45C34B28.2040806@lightlan.de> Hallo, würde gerne wissen welche funktion es in python gibt um gefährliche zeichen, wie ' in mysql zu escapen, damit mir keiner nen inject bastelt mfg Light Lan From tbender at cl.uni-heidelberg.de Fri Feb 2 15:46:23 2007 From: tbender at cl.uni-heidelberg.de (Tobias Bender) Date: Fri, 2 Feb 2007 15:46:23 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C34B28.2040806@lightlan.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> Message-ID: <1078A154-8008-4B0A-A261-098B95547E6D@cl.uni-heidelberg.de> Man könnte unerwünschte Zeichen mit re.sub einfach rauslöschen oder mit re.match testen und bei Bedarf eine exception werfen. 02.02.2007, at 15:31, Paul Rauch wrote: > Hallo, > > würde gerne wissen welche funktion es in python gibt um gefährliche > zeichen, wie ' in mysql zu escapen, damit mir keiner nen inject > bastelt > > mfg Light Lan > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de > From deets at web.de Fri Feb 2 15:58:49 2007 From: deets at web.de (Diez B. Roggisch) Date: Fri, 02 Feb 2007 15:58:49 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <1078A154-8008-4B0A-A261-098B95547E6D@cl.uni-heidelberg.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> <1078A154-8008-4B0A-A261-098B95547E6D@cl.uni-heidelberg.de> Message-ID: <45C351A9.2070009@web.de> Tobias Bender schrieb: > Man könnte unerwünschte Zeichen mit re.sub einfach rauslöschen oder > mit re.match testen und bei Bedarf eine exception werfen. Das ist gefaehrlicher Unfug!!! Dabei kann einem viel zu viel passieren. Stattdessen verwendet man die parametrisierte Form von cursor.execute, etwa so: cursore.execute("select * from some_table where some_column = %s", some_column_parameter) Mfg Diez From mathias.uebel at meeloon.de Fri Feb 2 16:40:09 2007 From: mathias.uebel at meeloon.de (Mathias Uebel) Date: Fri, 02 Feb 2007 16:40:09 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C351A9.2070009@web.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> <1078A154-8008-4B0A-A261-098B95547E6D@cl.uni-heidelberg.de> <45C351A9.2070009@web.de> Message-ID: <45C35B59.5030308@meeloon.de> Diez B. Roggisch schrieb: > Tobias Bender schrieb: >> Man könnte unerwünschte Zeichen mit re.sub einfach rauslöschen oder >> mit re.match testen und bei Bedarf eine exception werfen. > > Das ist gefaehrlicher Unfug!!! Dabei kann einem viel zu viel passieren. > > Stattdessen verwendet man die parametrisierte Form von cursor.execute, > etwa so: > > cursore.execute("select * from some_table where some_column = %s", > some_column_parameter) > Das ist bekannt. Aber eventuell hatte der Frager etwas anders im Sinn: In PHP gibt es, um derlei Angriffe auszuschließen, eine gesonderte Funktion: mysql_escape_string Naja, schönes Wochenende an Alle. From apaku at gmx.de Fri Feb 2 16:58:35 2007 From: apaku at gmx.de (Andreas Pakulat) Date: Fri, 2 Feb 2007 16:58:35 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C35B59.5030308@meeloon.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> <1078A154-8008-4B0A-A261-098B95547E6D@cl.uni-heidelberg.de> <45C351A9.2070009@web.de> <45C35B59.5030308@meeloon.de> Message-ID: <20070202155835.GB24075@morpheus.apaku.dnsalias.org> On 02.02.07 16:40:09, Mathias Uebel wrote: > Diez B. Roggisch schrieb: > > Tobias Bender schrieb: > >> Man könnte unerwünschte Zeichen mit re.sub einfach rauslöschen oder > >> mit re.match testen und bei Bedarf eine exception werfen. > > > > Das ist gefaehrlicher Unfug!!! Dabei kann einem viel zu viel passieren. > > > > Stattdessen verwendet man die parametrisierte Form von cursor.execute, > > etwa so: > > > > cursore.execute("select * from some_table where some_column = %s", > > some_column_parameter) > > > Das ist bekannt. Das ist gut. > Aber eventuell hatte der Frager etwas anders im Sinn: > In PHP gibt es, um derlei Angriffe auszuschließen, eine gesonderte > Funktion: mysql_escape_string Aehm in PHP gibts auch keine parametrisierte Funktion zum Ausfuehren von Anfragen, deswegen braucht man diese spezielle Funktion. Viel angenehmer ist es IMHO aber mit parametrisierten query-Funktionen zu arbeiten, weil ich dann nicht selbst aufpassen muss das alle Eingaben korrekt escaped werden. Andreas -- Make a wish, it might come true. From sschwarzer at sschwarzer.net Fri Feb 2 17:25:54 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Fri, 02 Feb 2007 17:25:54 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C34B28.2040806@lightlan.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> Message-ID: <45C36612.1050304@sschwarzer.net> Hallo Paul, On 2007-02-02 15:31, Paul Rauch wrote: > würde gerne wissen welche funktion es in python gibt um gefährliche > zeichen, wie ' in mysql zu escapen, damit mir keiner nen inject bastelt siehe meine Antwort in diesem Thread um 15:02 Uhr. Und wie Andreas Pakulat richtig sagte: die escape-Funktion braucht man nicht. Der zusätzliche Parameter für cursor.execute ist die "richtige", sauberere, Lösung. Viele Grüße Stefan From LightLan at lightlan.de Fri Feb 2 17:32:25 2007 From: LightLan at lightlan.de (Paul Rauch) Date: Fri, 02 Feb 2007 17:32:25 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C3677B.90604@lightlan.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> <1078A154-8008-4B0A-A261-098B95547E6D@cl.uni-heidelberg.de> <45C351A9.2070009@web.de> <45C35B59.5030308@meeloon.de> <45C3677B.90604@lightlan.de> Message-ID: <45C36799.2040008@lightlan.de> Paul Rauch schrieb: > Mathias Uebel schrieb: >> Diez B. Roggisch schrieb: >>> Tobias Bender schrieb: >>>> Man könnte unerwünschte Zeichen mit re.sub einfach rauslöschen oder >>>> mit re.match testen und bei Bedarf eine exception werfen. >>> Das ist gefaehrlicher Unfug!!! Dabei kann einem viel zu viel passieren. >>> >>> Stattdessen verwendet man die parametrisierte Form von cursor.execute, >>> etwa so: >>> >>> cursore.execute("select * from some_table where some_column = %s", >>> some_column_parameter) >>> >> Das ist bekannt. >> >> Aber eventuell hatte der Frager etwas anders im Sinn: >> In PHP gibt es, um derlei Angriffe auszuschließen, eine gesonderte >> Funktion: mysql_escape_string >> >> Naja, schönes Wochenende an Alle. >> >> _______________________________________________ >> python-de maillist - python-de at python.net >> http://python.net/mailman/listinfo/python-de >> > ja, sowas in der art meinte ich. > > und mit whitelists werde ich nicht ohne weiteres fertig, wegem dem, was > ich plane. > das nutze ich für php. ich hätte gerne etwas mit gleicher funktion in > python. > > //benötigt für make_safe > function strip_gpc_slashes ($input){ > if ( !get_magic_quotes_gpc() || ( !is_string($input) && > !is_array($input) ) ){ > return $input; > } > if ( is_string($input) ){ > $output = stripslashes($input); > } elseif ( is_array($input) ) { > $output = array(); > foreach ($input as $key => $val) { > $new_key = stripslashes($key); > $new_val = strip_gpc_slashes($val); > $output[$new_key] = $new_val; > } > } > return $output; > } > // String ueberprufen und sicher machen fuer MySQL-Abfragen > function make_safe($variable) { > $variable = strip_gpc_slashes($variable); > $variable = addslashes(trim($variable)); > return $variable; > } > From LightLan at lightlan.de Fri Feb 2 17:54:16 2007 From: LightLan at lightlan.de (Paul Rauch) Date: Fri, 02 Feb 2007 17:54:16 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C36612.1050304@sschwarzer.net> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> <45C36612.1050304@sschwarzer.net> Message-ID: <45C36CB8.1060900@lightlan.de> Stefan Schwarzer schrieb: > Hallo Paul, > > On 2007-02-02 15:31, Paul Rauch wrote: >> würde gerne wissen welche funktion es in python gibt um gefährliche >> zeichen, wie ' in mysql zu escapen, damit mir keiner nen inject bastelt > > siehe meine Antwort in diesem Thread um 15:02 Uhr. Und wie > Andreas Pakulat richtig sagte: die escape-Funktion braucht > man nicht. Der zusätzliche Parameter für cursor.execute > ist die "richtige", sauberere, Lösung. > > Viele Grüße > Stefan > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de > uhm, das verstehe ich nicht wirklich.. ich nehme von diesem programm, dass ich schreiben will nutzerangaben an. sagen wir mal diese sind in der variable nutzerangaben gespeichert. und dann will ich halt ein mysql.cursor.execute('UPDATE db.table SET x =\'Nutzerangeben\' WHERE y = \'bla\' LIMIT 1') und dabei verhindern, dass er weitere ' reinschmuggelt und dadurch ne mysqlinjection durchkriegt und wie funktioniert dieser zusätzliche parameter, was macht der? versteh das nicht.. mfg Light Lan From sschwarzer at sschwarzer.net Fri Feb 2 18:23:13 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Fri, 02 Feb 2007 18:23:13 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C36CB8.1060900@lightlan.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> <45C36612.1050304@sschwarzer.net> <45C36CB8.1060900@lightlan.de> Message-ID: <45C37381.6080107@sschwarzer.net> Hallo Paul, On 2007-02-02 17:54, Paul Rauch wrote: > Stefan Schwarzer schrieb: >> On 2007-02-02 15:31, Paul Rauch wrote: >>> würde gerne wissen welche funktion es in python gibt um gefährliche >>> zeichen, wie ' in mysql zu escapen, damit mir keiner nen inject bastelt >> siehe meine Antwort in diesem Thread um 15:02 Uhr. Und wie >> Andreas Pakulat richtig sagte: die escape-Funktion braucht >> man nicht. Der zusätzliche Parameter für cursor.execute >> ist die "richtige", sauberere, Lösung. > > uhm, das verstehe ich nicht wirklich.. > ich nehme von diesem programm, dass ich schreiben will nutzerangaben an. > sagen wir mal diese sind in der variable nutzerangaben gespeichert. > > und dann will ich halt ein > mysql.cursor.execute('UPDATE db.table SET x =\'Nutzerangeben\' WHERE y = > \'bla\' LIMIT 1') > und dabei verhindern, dass er weitere ' reinschmuggelt und dadurch ne > mysqlinjection durchkriegt > > und wie funktioniert dieser zusätzliche parameter, was macht der? > versteh das nicht.. damit ich weiß, wie weit ich ausholen muss: Wie weit hast du meine Mail an die Liste (2007-02-02 15:02:39) verstanden oder nicht? Am besten antwortest du auf jene Mail und wir diskutieren dort im Thread weiter. Viele Grüße Stefan From LightLan at lightlan.de Fri Feb 2 18:48:52 2007 From: LightLan at lightlan.de (Paul Rauch) Date: Fri, 02 Feb 2007 18:48:52 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <45C3447F.9060109@sschwarzer.net> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> <45C3447F.9060109@sschwarzer.net> Message-ID: <45C37984.9080207@lightlan.de> Stefan Schwarzer schrieb: > Hi Volker, > > On 2007-02-02 14:09, Volker Helm wrote: >> Da im Text häufiger ein "wert like '%suchbegriff%'" steht, >> müsste ich immer dieses Sonderzeichen eintragen, das ist mühsam >> und unleserlich :( > > dazu noch ein Hinweis: Setze den Suchbegriff als Argument > in cursor.execute ein. Dadurch werden Zeichen, die in SQL > Sonderzeichen sind (vor allem ' , bei manchen SQL-Dialekten > auch \), richtig maskiert. > > Also nicht > > suchtext = "Python's Prozentzeichen" > cursor.execute( > "SELECT text FROM table WHERE text LIKE '%%%s%%'" % > suchtext) # selbst eingesetzt - unsicher > > sondern > > suchtext = "Python's Prozentzeichen" > cursor.execute( > "SELECT text FROM table WHERE text LIKE '%%(suchtext)s%'", > {'suchtext': suchtext}) # vom DB-Adapter eingesetzt - besser > > Beachte, dass hier der execute-Methode zwei Argumente übergeben > werden. Außerdem musst du die Prozentzeichen am Anfang und Ende > des Strings nicht verdoppeln (wenn der Datenbankadapter sauber > programmiert ist). Wie einzusetzende Zeichenketten zu formatieren > sind und wie das zweite Argument von cursor.execute aussehen > muss, hängt vom konkreten Datenbankadapter ab. Näheres in der > DB-API 2.0, an die sich alle neueren Adapter halten sollten, > http://www.python.org/dev/peps/pep-0249/ , und der Doku zum von > dir verwendeten Datenbankadapter. > > Viele Grüße > Stefan > hm.. dass verstehe ich ehrlich gesagt nicht. ich will doch nicht das ganze query escapen, sondern nur bestimmte einzelne eingaben von usern. mfg Light Lan From sschwarzer at sschwarzer.net Fri Feb 2 21:06:02 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Fri, 02 Feb 2007 21:06:02 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <45C37984.9080207@lightlan.de> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> <45C3447F.9060109@sschwarzer.net> <45C37984.9080207@lightlan.de> Message-ID: <45C399AA.9080608@sschwarzer.net> Hallo Paul, On 2007-02-02 18:48, Paul Rauch wrote: > Stefan Schwarzer schrieb: >> dazu noch ein Hinweis: Setze den Suchbegriff als Argument >> in cursor.execute ein. Dadurch werden Zeichen, die in SQL >> Sonderzeichen sind (vor allem ' , bei manchen SQL-Dialekten >> auch \), richtig maskiert. >> >> Also nicht >> >> suchtext = "Python's Prozentzeichen" >> cursor.execute( >> "SELECT text FROM table WHERE text LIKE '%%%s%%'" % >> suchtext) # selbst eingesetzt - unsicher >> >> sondern >> >> suchtext = "Python's Prozentzeichen" >> cursor.execute( >> "SELECT text FROM table WHERE text LIKE '%%(suchtext)s%'", >> {'suchtext': suchtext}) # vom DB-Adapter eingesetzt - besser >> >> Beachte, dass hier der execute-Methode zwei Argumente übergeben >> werden. Außerdem musst du die Prozentzeichen am Anfang und Ende >> des Strings nicht verdoppeln (wenn der Datenbankadapter sauber >> programmiert ist). Wie einzusetzende Zeichenketten zu formatieren >> sind und wie das zweite Argument von cursor.execute aussehen >> muss, hängt vom konkreten Datenbankadapter ab. Näheres in der >> DB-API 2.0, an die sich alle neueren Adapter halten sollten, >> http://www.python.org/dev/peps/pep-0249/ , und der Doku zum von >> dir verwendeten Datenbankadapter. >> > dass verstehe ich ehrlich gesagt nicht. > ich will doch nicht das ganze query escapen, sondern nur bestimmte > einzelne eingaben von usern. bei der Variante mit dem zweiten Parameter werden alle Query- Parameter angegeben, die das SQL-Statement enthält. Dazu gehören "normale" Daten wie Zeichenketten, Zahlen und Datums- werte, nicht jedoch z. B. ein Tabellenname hinter FROM. Andererseits holt man die sich ja normalerweise nicht von einem Benutzer der Webschnittstelle. :-) Für dein Beispiel aus dem anderen Unter-Thread sähe die SQL- Ausführung so aus (ungetestet): # von irgendwoher, bspw. Webschnittstelle x = "Nutzereingabe" # ggf. mit Sonderzeichen y = "Bla" # ggf. mit Sonderzeichen cursor.execute( # nach dem SQL-Query steht ein Komma, kein %, d. h. # der Datenbankadapter übernimmt das Einsetzen der # Parameter - richtig maskiert "UPDATE db.table SET x='%(neu)s' WHERE y='%(kriterium)s' LIMIT 1", {'neu': x, 'kriterium': y}) Eine Bemerkung am Rande: Wenn du den LIMIT-Zusatz wirklich brauchst, hast du eine recht ungewöhnliche Anwendung. ;-) Viele Grüße Stefan From deets at web.de Fri Feb 2 21:41:37 2007 From: deets at web.de (Diez B. Roggisch) Date: Fri, 02 Feb 2007 21:41:37 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C36CB8.1060900@lightlan.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> <45C36612.1050304@sschwarzer.net> <45C36CB8.1060900@lightlan.de> Message-ID: <45C3A201.8050104@web.de> > > und dann will ich halt ein > mysql.cursor.execute('UPDATE db.table SET x =\'Nutzerangeben\' WHERE y = > \'bla\' LIMIT 1') > und dabei verhindern, dass er weitere ' reinschmuggelt und dadurch ne > mysqlinjection durchkriegt > > und wie funktioniert dieser zusätzliche parameter, was macht der? > versteh das nicht.. Statt einen SQL-String zusammenzubauen, der auch Benutzerdaten enthaelt, baust du einen von folgender Form: sql = "update db.table set x = %s where y = %s limit 1" Das ist der SQL-String. Und den verwendest du dann wie folgt: cursor.execute(sql, nutzerangaben, bla) Damit sorgt der Treiber dafuer, das alles richtig escaped wird, bzw. besser noch das obiges statement auf db-seite gecached wird und parametrisiert. Die %s in dem String sind Platzhalter - aber nicht _du_ fuellst die aus, sondern der Treiber. Das ist dadurch sicher. Diez From LightLan at lightlan.de Fri Feb 2 22:17:51 2007 From: LightLan at lightlan.de (Paul Rauch) Date: Fri, 02 Feb 2007 22:17:51 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <45C399AA.9080608@sschwarzer.net> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> <45C3447F.9060109@sschwarzer.net> <45C37984.9080207@lightlan.de> <45C399AA.9080608@sschwarzer.net> Message-ID: <45C3AA7F.8000901@lightlan.de> Stefan Schwarzer schrieb: > Hallo Paul, > > On 2007-02-02 18:48, Paul Rauch wrote: >> Stefan Schwarzer schrieb: >>> dazu noch ein Hinweis: Setze den Suchbegriff als Argument >>> in cursor.execute ein. Dadurch werden Zeichen, die in SQL >>> Sonderzeichen sind (vor allem ' , bei manchen SQL-Dialekten >>> auch \), richtig maskiert. >>> >>> Also nicht >>> >>> suchtext = "Python's Prozentzeichen" >>> cursor.execute( >>> "SELECT text FROM table WHERE text LIKE '%%%s%%'" % >>> suchtext) # selbst eingesetzt - unsicher >>> >>> sondern >>> >>> suchtext = "Python's Prozentzeichen" >>> cursor.execute( >>> "SELECT text FROM table WHERE text LIKE '%%(suchtext)s%'", >>> {'suchtext': suchtext}) # vom DB-Adapter eingesetzt - besser >>> >>> Beachte, dass hier der execute-Methode zwei Argumente übergeben >>> werden. Außerdem musst du die Prozentzeichen am Anfang und Ende >>> des Strings nicht verdoppeln (wenn der Datenbankadapter sauber >>> programmiert ist). Wie einzusetzende Zeichenketten zu formatieren >>> sind und wie das zweite Argument von cursor.execute aussehen >>> muss, hängt vom konkreten Datenbankadapter ab. Näheres in der >>> DB-API 2.0, an die sich alle neueren Adapter halten sollten, >>> http://www.python.org/dev/peps/pep-0249/ , und der Doku zum von >>> dir verwendeten Datenbankadapter. >>> >> dass verstehe ich ehrlich gesagt nicht. >> ich will doch nicht das ganze query escapen, sondern nur bestimmte >> einzelne eingaben von usern. > > bei der Variante mit dem zweiten Parameter werden alle Query- > Parameter angegeben, die das SQL-Statement enthält. Dazu > gehören "normale" Daten wie Zeichenketten, Zahlen und Datums- > werte, nicht jedoch z. B. ein Tabellenname hinter FROM. > Andererseits holt man die sich ja normalerweise nicht von > einem Benutzer der Webschnittstelle. :-) > > Für dein Beispiel aus dem anderen Unter-Thread sähe die SQL- > Ausführung so aus (ungetestet): > > # von irgendwoher, bspw. Webschnittstelle > x = "Nutzereingabe" # ggf. mit Sonderzeichen > y = "Bla" # ggf. mit Sonderzeichen > > cursor.execute( > # nach dem SQL-Query steht ein Komma, kein %, d. h. > # der Datenbankadapter übernimmt das Einsetzen der > # Parameter - richtig maskiert > "UPDATE db.table SET x='%(neu)s' WHERE y='%(kriterium)s' LIMIT 1", > {'neu': x, 'kriterium': y}) > > Eine Bemerkung am Rande: Wenn du den LIMIT-Zusatz wirklich > brauchst, hast du eine recht ungewöhnliche Anwendung. ;-) > > Viele Grüße > Stefan > den LIMIT zusatz mache ich nur aus Gewohnheit, kommt nicht gut, wenn ein update ohne WHERE und LIMIT durchrutscht... und danke, jetzt hab ichs verstanden :) >>> email = 'LightLan at lightlan.de' >>> name = 'Vorname\'\' \n Nachname' >>> cursor.execute('INSERT INTO test.entry(name,email) VALUES(%(name)s,%(email)s)',{'name':name,'email':email}) geht einwandfrei :) mfg Light Lan From martin at v.loewis.de Sat Feb 3 13:08:50 2007 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Sat, 03 Feb 2007 13:08:50 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C36CB8.1060900@lightlan.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> <45C36612.1050304@sschwarzer.net> <45C36CB8.1060900@lightlan.de> Message-ID: <45C47B52.7070204@v.loewis.de> Paul Rauch schrieb: > uhm, das verstehe ich nicht wirklich.. > ich nehme von diesem programm, dass ich schreiben will nutzerangaben an. > sagen wir mal diese sind in der variable nutzerangaben gespeichert. > > und dann will ich halt ein > mysql.cursor.execute('UPDATE db.table SET x =\'Nutzerangeben\' WHERE y = > \'bla\' LIMIT 1') > und dabei verhindern, dass er weitere ' reinschmuggelt und dadurch ne > mysqlinjection durchkriegt So, wie Du das geschrieben hast, wird einfach der Text 'Nutzerangeben' (fest) in die Tabelle eingefügt. Ich dachte, Du wolltest den Text eingeben, der in der Variable nutzerangaben steht? Das schreibt man so mysql.cursor.execute("UPDATE db.table SET x =%s WHERE y ='bla' LIMIT 1", nutzerangaben) Das verhindert bereits, dass ' reingeschmuggelt wird. > und wie funktioniert dieser zusätzliche parameter, was macht der? > versteh das nicht.. Die Parameter für execute funktionieren so ähnlich wie bei der %-Ersetzung, aber nicht ganz genau so. Vielmehr wird cursor.execute alle Parameter *automatisch* richtig escapen. Du musst nur an die Stelle, wo Du den Wert haben willst, im SQL %s schreiben (ohne Anführungszeichen - die macht .execute selber rein). Ciao, Martin From Helm.volker at gmx.de Mon Feb 5 09:13:52 2007 From: Helm.volker at gmx.de (Volker Helm) Date: Mon, 05 Feb 2007 09:13:52 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <45C3401B.9090309@sschwarzer.net> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C3401B.9090309@sschwarzer.net> Message-ID: <20070205081352.282660@gmx.net> Spitze, das war es. Bin blind und habe die letzte Zeile brav überlesen :( Danke nochmals, Volker -------- Original-Nachricht -------- Datum: Fri, 02 Feb 2007 14:43:55 +0100 Von: Stefan Schwarzer An: Volker Helm CC: Betreff: Re: [Python-de] Maskierung von % > Hallo Volker, > > On 2007-02-02 14:07, Volker Helm wrote: > > Gute Idee, funktioniert leider nicht generell: > > > > "% %.2f" % 15.23 -> Fehlermeldung > > "% %.2f%" % 15.23 -> Fehlermeldung > > "%.2f% %" % 15.23 -> "15,23%" Leerzeichen fehlt und wird immer entfernt > > > > Schade, nicht schlecht, leider kein genereller Ansatz. > > doch ein genereller Ansatz, - wenn man es richtig macht. ;-) > > Schreibe an der Stelle, wo das Prozentzeichen stehen soll, > zwei Prozentzeichen direkt hintereinander: > > >>> "%.2f %%" % 15.23456 > '15.23 %' > > Beschrieben ist das unter > http://docs.python.org/lib/typesseq-strings.html . > > Viele Grüße > Stefan -- "Feel free" - 10 GB Mailbox, 100 FreeSMS/Monat ... Jetzt GMX TopMail testen: http://www.gmx.net/de/go/topmail?ac=OM.GX.GX003K11713T4783a From Helm.volker at gmx.de Mon Feb 5 09:21:28 2007 From: Helm.volker at gmx.de (Volker Helm) Date: Mon, 05 Feb 2007 09:21:28 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <45C3447F.9060109@sschwarzer.net> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> <45C3447F.9060109@sschwarzer.net> Message-ID: <20070205082128.282650@gmx.net> Hi Stefan, gute Idee, allerdings ist es bei mir wohl kein Problem der Sicherheit. Erstens wird das Script nur intern verwendet, zweitens wird der SQL fest definiert, nur um die entsprechenden Einschränkungen erweitert, so kann ich eine Funktion für 5 SQL-Abfragen einsetzen (Blöde Adresssuche nach Namen, Telefon etc.). Die zusätzlichen individuellen Parameter werden über feste Bindungen übergeben: cur.execute("""select name,nummer from table where name like '%'||:p_begriff||'%'""", p_begriff = Suchbegriff) Danke aber trotzdem, Volker -------- Original-Nachricht -------- Datum: Fri, 02 Feb 2007 15:02:39 +0100 Von: Stefan Schwarzer An: python-de at python.net CC: Betreff: Re: [Python-de] Maskierung von % > Hi Volker, > > On 2007-02-02 14:09, Volker Helm wrote: > > Da im Text häufiger ein "wert like '%suchbegriff%'" steht, > > müsste ich immer dieses Sonderzeichen eintragen, das ist mühsam > > und unleserlich :( > > dazu noch ein Hinweis: Setze den Suchbegriff als Argument > in cursor.execute ein. Dadurch werden Zeichen, die in SQL > Sonderzeichen sind (vor allem ' , bei manchen SQL-Dialekten > auch \), richtig maskiert. > > Also nicht > > suchtext = "Python's Prozentzeichen" > cursor.execute( > "SELECT text FROM table WHERE text LIKE '%%%s%%'" % > suchtext) # selbst eingesetzt - unsicher > > sondern > > suchtext = "Python's Prozentzeichen" > cursor.execute( > "SELECT text FROM table WHERE text LIKE '%%(suchtext)s%'", > {'suchtext': suchtext}) # vom DB-Adapter eingesetzt - besser > > Beachte, dass hier der execute-Methode zwei Argumente übergeben > werden. Außerdem musst du die Prozentzeichen am Anfang und Ende > des Strings nicht verdoppeln (wenn der Datenbankadapter sauber > programmiert ist). Wie einzusetzende Zeichenketten zu formatieren > sind und wie das zweite Argument von cursor.execute aussehen > muss, hängt vom konkreten Datenbankadapter ab. Näheres in der > DB-API 2.0, an die sich alle neueren Adapter halten sollten, > http://www.python.org/dev/peps/pep-0249/ , und der Doku zum von > dir verwendeten Datenbankadapter. > > Viele Grüße > Stefan > > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de -- "Feel free" - 5 GB Mailbox, 50 FreeSMS/Monat ... Jetzt GMX ProMail testen: http://www.gmx.net/de/go/promail?ac=OM.GX.GX003K11711T4781a From sschwarzer at sschwarzer.net Mon Feb 5 12:14:27 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Mon, 05 Feb 2007 12:14:27 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <20070205082128.282650@gmx.net> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> <45C3447F.9060109@sschwarzer.net> <20070205082128.282650@gmx.net> Message-ID: <45C71193.30201@sschwarzer.net> Hi Volker, On 2007-02-05 09:21, Volker Helm wrote: > gute Idee, allerdings ist es bei mir wohl kein Problem der Sicherheit. Erstens > wird das Script nur intern verwendet, auch, wenn der Hinweis auf den zusätzlichen Parameter meist im Zusammenhang mit der Sicherheit kommt, ist er auch in allen anderen Fällen sinnvoll. Wenn eine einzusetzende Zeichenkette ein Apostroph ' enthält, gibt es dann zwar wahrscheinlich keine ausgenutzte Sicherheitslücke - aber einen Fehler bei der SQL-Ausführung. Daher sollte man _immer_ mit dem zweiten (und ggf. weiteren) Argument(en) von cursor.execute arbeiten, das macht den Code generell robuster. > zweitens wird der SQL fest definiert, nur > um die entsprechenden Einschränkungen erweitert, so kann ich eine Funktion für > 5 SQL-Abfragen einsetzen (Blöde Adresssuche nach Namen, Telefon etc.). > Die zusätzlichen individuellen Parameter werden über feste Bindungen übergeben: > cur.execute("""select name,nummer from table where name like '%'||:p_begriff||'%'""", p_begriff = Suchbegriff) Was du hier ja auch tust. :-) Viele Grüße Stefan From h.goebel at goebel-consult.de Mon Feb 5 14:26:41 2007 From: h.goebel at goebel-consult.de (Hartmut Goebel) Date: Mon, 05 Feb 2007 14:26:41 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <45C3447F.9060109@sschwarzer.net> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> <45C3447F.9060109@sschwarzer.net> Message-ID: <45C73091.1080109@goebel-consult.de> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hallo Stefan, > suchtext = "Python's Prozentzeichen" > cursor.execute( > "SELECT text FROM table WHERE text LIKE '%%(suchtext)s%'", > {'suchtext': suchtext}) # vom DB-Adapter eingesetzt - besser Sicher, dass Du das so willst? Denn falls der 'suchtext' ein Leer-/Sonderzeichen enthält, wird er escaped. Dann bekommst Du diese query: ... LIKE '%'such mich'%' ... Das ist sicher nicht das gewünschte :-) Besser _alles_ Quoting dem Treiber überlassen, das kann das im Zweifelsfall besser. Also: suchtext = "Python's Prozentzeichen" cursor.execute( "SELECT text FROM table WHERE text LIKE %(suchtext)s", {'suchtext': '%' + suchtext + '%' }) - -- Schönen Gruß - Regards Hartmut Goebel | Hartmut Goebel | IT-Security -- effizient | | h.goebel at goebel-consult.de | www.goebel-consult.de | -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (GNU/Linux) Comment: Using GnuPG with Mandriva - http://enigmail.mozdev.org iQEVAwUBRccwkczajR0mSa83AQKTOQgAgBzEaIMsSufn8b1CJoMk80LLZestubcj z42+WYgpCKFclN9+NFkVAcksoWPXdBX4JwX/LXiM0uCHYU009lCKOPbtOLJqVrTC k/iMoXuWvSWk31W0IysHdhgg0jBnBWogsqh0RzcMexzMCMBsMzx6z4H6c5gYweI6 0VdF89ia5gHHPqca3DErUrrMOcV5Uzcs9vpq3S0RN1fHCN0gcDwQo4qgRgdMCgMQ aLNOlm0GL2I1mSALJj1skWVAr8wkNC4LaGY/z+gL86kA1LNVyQu1NOElFm00yT+Q blRKI4bHCzfVFRVDrrRIP/nml/zSO12uLl+DRdH2Rgj/7Le0we4AMQ== =5w97 -----END PGP SIGNATURE----- From Helm.volker at gmx.de Mon Feb 5 15:24:28 2007 From: Helm.volker at gmx.de (Volker Helm) Date: Mon, 05 Feb 2007 15:24:28 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <45C73091.1080109@goebel-consult.de> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> <45C3447F.9060109@sschwarzer.net> <45C73091.1080109@goebel-consult.de> Message-ID: <20070205142428.114360@gmx.net> Ich sollte vielleicht mal klarstellen, dass mein Problem gelöst ist. Es war folgendes, in einem SQL wird bei mir abgehandelt, ob es einen Rabatt gibt und um welche Art es sich handelt ('?', '%', 'Mengenrabatt'). Leider wird dieser SQL im Anschluß erweitert, abhängig, ob es sich um eine Position eines Auftrages handelt, oder um alle. Dies wird mittels: sql = """select blub, rabatt, case when rabatttyp = 0 then '%' else '?' end rabattyp from table where auftrag = :auftrag %s""" sqlauftrag = "" sqlposition = "and position = :position" erweitert. Durch das vorhanden sein des Prozentzeichens klappt der gesamte Vorgang nicht, habe die Maskierung in der Dokumentation leider überlesen. Sollten Begriffe mit like gesucht werden, werden die entsprechenden Werte entweder vom Benutzer als '%Hans%Müller%' eingegeben werden müssen oder werden entschprechend vorne und hinten um ein '%' Zeichen erweitert. suchbegriff = '%'+Eingabe.strip('%')+'%' Der Suchbegriff wird dann mittels eines Dictionary variablen = {'Suchbegriff': suchbegriff} und der Anweisung cur.execute(sql,variablen) verbunden und abgeschickt. So, noch einen schönen Tag, Volker > Hallo Stefan, > > > suchtext = "Python's Prozentzeichen" > > cursor.execute( > > "SELECT text FROM table WHERE text LIKE '%%(suchtext)s%'", > > {'suchtext': suchtext}) # vom DB-Adapter eingesetzt - besser > > Sicher, dass Du das so willst? Denn falls der 'suchtext' ein > Leer-/Sonderzeichen enthält, wird er escaped. Dann bekommst Du diese > query: > > ... LIKE '%'such mich'%' ... > > Das ist sicher nicht das gewünschte :-) > > Besser _alles_ Quoting dem Treiber überlassen, das kann das im > Zweifelsfall besser. Also: > > suchtext = "Python's Prozentzeichen" > cursor.execute( > "SELECT text FROM table WHERE text LIKE %(suchtext)s", > {'suchtext': '%' + suchtext + '%' }) > > > - -- > Schönen Gruß - Regards > Hartmut Goebel > > | Hartmut Goebel | IT-Security -- effizient | > | h.goebel at goebel-consult.de | www.goebel-consult.de | > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.5 (GNU/Linux) > Comment: Using GnuPG with Mandriva - http://enigmail.mozdev.org > > iQEVAwUBRccwkczajR0mSa83AQKTOQgAgBzEaIMsSufn8b1CJoMk80LLZestubcj > z42+WYgpCKFclN9+NFkVAcksoWPXdBX4JwX/LXiM0uCHYU009lCKOPbtOLJqVrTC > k/iMoXuWvSWk31W0IysHdhgg0jBnBWogsqh0RzcMexzMCMBsMzx6z4H6c5gYweI6 > 0VdF89ia5gHHPqca3DErUrrMOcV5Uzcs9vpq3S0RN1fHCN0gcDwQo4qgRgdMCgMQ > aLNOlm0GL2I1mSALJj1skWVAr8wkNC4LaGY/z+gL86kA1LNVyQu1NOElFm00yT+Q > blRKI4bHCzfVFRVDrrRIP/nml/zSO12uLl+DRdH2Rgj/7Le0we4AMQ== > =5w97 > -----END PGP SIGNATURE----- > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de -- "Feel free" - 5 GB Mailbox, 50 FreeSMS/Monat ... Jetzt GMX ProMail testen: http://www.gmx.net/de/go/promail?ac=OM.GX.GX003K11711T4781a From peter.wichmann at uni-muenster.de Mon Feb 5 16:53:07 2007 From: peter.wichmann at uni-muenster.de (Peter Wichmann) Date: Mon, 05 Feb 2007 16:53:07 +0100 Subject: [Python-de] =?iso-8859-15?q?=D6ffentliche_HTML-Seiten_anpassen?= Message-ID: <45C752E3.9060405@uni-muenster.de> Hallo, ein Blick ins Archiv der Liste zeigt, dass die Layoutanpassung unter 'Öffentliche HTML-Seiten anpassen' nicht unbedingt im Mittelpunkt der Diskussion steht. Dennoch meine Frage: Ich habe alle dort gelisteten Templates zur Bearbeitung des Seitenlayouts angepasst. Es muss in Mailman aber noch andere Templates geben, an die ich hierüber nicht rankomme. Beispiel /mailman/options/: Wer über die listinfo einen bestehenden Account bearbeiten will und sich anmeldet, landet auf einer Seite, die das Mailman-Standardlayout verwendet und die genannten Templates offensichtlich ignoriert. Übersehe ich etwas oder muss ich einen anderen Weg gehen? Peter From gherman at darwin.in-berlin.de Fri Feb 9 20:08:54 2007 From: gherman at darwin.in-berlin.de (Dinu Gherman) Date: Fri, 9 Feb 2007 20:08:54 +0100 Subject: [Python-de] types.SetType Message-ID: Hallo! Wie ich gerade sehe, gibt es weder in Python 2.4 noch in 2.5 die Variablen types.SetType (bzw. types.FrozensetType), was mich doch ein wenig erstaunt. Man kann sie zwar selbst auf type(set()) (bzw. type(frozenset()) setzen, aber noch fehlt mir ein furchtbar intelligenter Grund da- fuer, warum das jeder fuer sich tun sollte...? Gruss, Dinu -- Dinu C. Gherman ...................................................................... I love my Mac. I just wish it came in green! - www.greenmyapple.com From deets at web.de Fri Feb 9 20:46:31 2007 From: deets at web.de (Diez B. Roggisch) Date: Fri, 09 Feb 2007 20:46:31 +0100 Subject: [Python-de] types.SetType In-Reply-To: References: Message-ID: <45CCCF97.6020503@web.de> Dinu Gherman schrieb: > Hallo! > > Wie ich gerade sehe, gibt es weder in Python 2.4 noch in 2.5 die > Variablen types.SetType (bzw. types.FrozensetType), was mich doch > ein wenig erstaunt. > > Man kann sie zwar selbst auf type(set()) (bzw. type(frozenset()) > setzen, aber noch fehlt mir ein furchtbar intelligenter Grund da- > fuer, warum das jeder fuer sich tun sollte...? Sollst du ja gar nicht: >>> print type(set()) == set True Diez From sschwarzer at sschwarzer.net Fri Feb 9 20:58:26 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Fri, 09 Feb 2007 20:58:26 +0100 Subject: [Python-de] types.SetType In-Reply-To: References: Message-ID: <45CCD262.7000509@sschwarzer.net> Hallo Dinu, On 2007-02-09 20:08, Dinu Gherman wrote: > Wie ich gerade sehe, gibt es weder in Python 2.4 noch in 2.5 die > Variablen types.SetType (bzw. types.FrozensetType), was mich doch > ein wenig erstaunt. > > Man kann sie zwar selbst auf type(set()) (bzw. type(frozenset()) > setzen, aber noch fehlt mir ein furchtbar intelligenter Grund da- > fuer, warum das jeder fuer sich tun sollte...? ich vermute, dass man inzwischen statt type(set()) einfach set verwenden sollte und statt type(frozenset()) nur frozenset: Python 2.4.3 (#1, Dec 29 2006, 02:22:42) >>> type(set()) is set True >>> type(frozenset()) is frozenset True Zum anderen stellt sich die Frage, was der Anwendungsfall für die Typprüfung ist. Wenn es die seltene emulierte Typprüfung mit isinstance ist, tut es problemlos etwas wie isinstance(value, set) . Dass noch so viele andere Typen im types-Modul rumliegen, die man analog zu oben bekommen kann, ist sicher eher der Kompatibilität alter Programme mit neueren Python-Versionen geschuldet. Andererseits gibt es ein paar Typen, die nicht in den Builtins vorhanden sind, z. B. module. Das kann man nur mit dem new-Modul relativ einfach erzeugen, soweit ich weiß. Wenn man also mit dem Modultyp vergleichen will, kann man isinstance(value, new.module) oder, wie ich gerade sehe, isinstance(value, types.ModuleType) verwenden. In Python 2.4.3 (s. o.) gilt jedenfalls Python 2.4.3 (#1, Dec 29 2006, 02:22:42) >>> new.module is types.ModuleType True Viele Grüße Stefan From gherman at darwin.in-berlin.de Fri Feb 9 21:02:53 2007 From: gherman at darwin.in-berlin.de (Dinu Gherman) Date: Fri, 9 Feb 2007 21:02:53 +0100 Subject: [Python-de] types.SetType In-Reply-To: <45CCCF97.6020503@web.de> References: <45CCCF97.6020503@web.de> Message-ID: <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> Diez B. Roggisch: > >>> print type(set()) == set > True Das ist nicht der Punkt. Das Modul types gibt es eben darum, damit ich so etwas nicht immer schreiben muss (wie bei den leidigen Tests in der Art if type(obj) == type(""): ...). Im Moment scheint mir, als ob types.SetType einfach "vergessen" worden waere... Dinu From deets at web.de Fri Feb 9 21:41:06 2007 From: deets at web.de (Diez B. Roggisch) Date: Fri, 09 Feb 2007 21:41:06 +0100 Subject: [Python-de] types.SetType In-Reply-To: <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> Message-ID: <45CCDC62.7000208@web.de> Dinu Gherman schrieb: > Diez B. Roggisch: > >>>>> print type(set()) == set >> True > > Das ist nicht der Punkt. Das Modul types gibt es eben darum, > damit ich so etwas nicht immer schreiben muss (wie bei den > leidigen Tests in der Art if type(obj) == type(""): ...). > > Im Moment scheint mir, als ob types.SetType einfach "vergessen" > worden waere... Aber es sind doch alle Konstruktoren die typen: type('') == str => True type(10) == int => True und so weiter. Das Modul types selbst ist unnoetig. Diez From gherman at darwin.in-berlin.de Sat Feb 10 19:24:13 2007 From: gherman at darwin.in-berlin.de (Dinu Gherman) Date: Sat, 10 Feb 2007 19:24:13 +0100 Subject: [Python-de] types.SetType In-Reply-To: <45CCDC62.7000208@web.de> References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> <45CCDC62.7000208@web.de> Message-ID: <2fe40e118bbe90809a67b1254712f54b@darwin.in-berlin.de> Diez B. Roggisch: > Aber es sind doch alle Konstruktoren die typen: > > type('') == str => True > type(10) == int => True > > und so weiter. Kurze Antwort: Du meinst wahrscheinlich Datentypen. Tatsaechlich gibt es Typen fuer alles Moegliche, Frames, Funktionen, sogar den Typ NotImplemented. Wenn man ein Programm schreibt, dass mit *allen* Typen zurechtkommen muss (von mir aus z.B. einen Debugger), dann moechte man eine uniforme Methode fuer die Typ-Pruefung verwenden. Ich dachte, dafuer waere das types-Modul geeignet. > Das Modul types selbst ist unnoetig. Ich finde, der Typ String ist streng genommen auch unnoetig und koennte durch Unicode allein ersetzt werden. Aber Python ist keine akademisch- theoretisch-saubere Sprache. Gruss, Dinu From pythonmailing at web.de Sat Feb 10 20:05:05 2007 From: pythonmailing at web.de (Marek Kubica) Date: Sat, 10 Feb 2007 20:05:05 +0100 Subject: [Python-de] types.SetType In-Reply-To: <2fe40e118bbe90809a67b1254712f54b@darwin.in-berlin.de> References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> <45CCDC62.7000208@web.de> <2fe40e118bbe90809a67b1254712f54b@darwin.in-berlin.de> Message-ID: <20070210200505.525514db@localhost> Hallo, On Sat, 10 Feb 2007 19:24:13 +0100 Dinu Gherman wrote: > Ich finde, der Typ String ist streng genommen auch unnoetig und > koennte durch Unicode allein ersetzt werden. Aber Python ist keine > akademisch- theoretisch-saubere Sprache. Ja, in Python 3.0 wird ja auch str durch Unicode ersetzt werden - es kommt lediglich ein bytes()-Typ hinzu, den man verwenden kann wenn Unicode mal grade stört. grüße, Marek From hpj at urpla.net Sat Feb 10 20:52:57 2007 From: hpj at urpla.net (Hans-Peter Jansen) Date: Sat, 10 Feb 2007 20:52:57 +0100 Subject: [Python-de] types.SetType In-Reply-To: <45CCDC62.7000208@web.de> References: <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> <45CCDC62.7000208@web.de> Message-ID: <200702102052.57985.hpj@urpla.net> Am Freitag, 9. Februar 2007 schrieb Diez B. Roggisch: > Dinu Gherman schrieb: > > Diez B. Roggisch: > >>>>> print type(set()) == set > >> > >> True > > > > Das ist nicht der Punkt. Das Modul types gibt es eben darum, > > damit ich so etwas nicht immer schreiben muss (wie bei den > > leidigen Tests in der Art if type(obj) == type(""): ...). > > > > Im Moment scheint mir, als ob types.SetType einfach "vergessen" > > worden waere... > > Aber es sind doch alle Konstruktoren die typen: > > > type('') == str => True > type(10) == int => True > > und so weiter. > > Das Modul types selbst ist unnoetig. Hmm, nicht ganz, in "hot paths" kann es der Performance zuträglich sein, wenn man sich eine der Evaluierungen spart: if type(obj) == types.StringType: ... Pete From martin at v.loewis.de Sun Feb 11 10:22:34 2007 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Sun, 11 Feb 2007 10:22:34 +0100 Subject: [Python-de] types.SetType In-Reply-To: References: Message-ID: <45CEE05A.7040105@v.loewis.de> Dinu Gherman schrieb: > Wie ich gerade sehe, gibt es weder in Python 2.4 noch in 2.5 die > Variablen types.SetType (bzw. types.FrozensetType), was mich doch > ein wenig erstaunt. > > Man kann sie zwar selbst auf type(set()) (bzw. type(frozenset()) > setzen, aber noch fehlt mir ein furchtbar intelligenter Grund da- > fuer, warum das jeder fuer sich tun sollte...? Du musst, glaube ich, mal erklären, *warum* Du den Typ in dem Modul haben willst ("weil alle anderen Typen da auch drin sind" ist nicht überzeugend, weil das kein technischer Grund ist). Ursprünglich gab es das Modul types, um Code der Form if type(o) is types.ListType: schreiben zu können, später dann if isinstance(o, types.ListType): Nun scheint Deine Beschwerde zu sein, dass Du nicht if isinstance(o, types.SetType): schreiben kannst; Diez versucht Dir zu erklären, dass Du statt dessen *viel einfacher* if isinstance(o, set) schreiben kannst. Das ist einfacher, weil Du nicht auf das Modul types zugreifen musst. Nun hast Du offenbar entweder missverstanden, dass das builtin set bereits ein Typ *ist*, oder Du hast einen anderen Anwendungsfall. Ciao, Martin From martin at v.loewis.de Sun Feb 11 10:24:09 2007 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Sun, 11 Feb 2007 10:24:09 +0100 Subject: [Python-de] types.SetType In-Reply-To: References: Message-ID: <45CEE0B9.7020905@v.loewis.de> Dinu Gherman schrieb: > Man kann sie zwar selbst auf type(set()) (bzw. type(frozenset()) > setzen Ich mache noch einen zweiten Versuch: Wenn Du types.SetType selber einführen wolltest, solltest Du *nicht* types.SetType = type(set()) schreiben, sondern types.SetType = set Weil: set *ist* bereits ein Typ. Ciao, Martin From martin at v.loewis.de Sun Feb 11 10:27:01 2007 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Sun, 11 Feb 2007 10:27:01 +0100 Subject: [Python-de] types.SetType In-Reply-To: <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> Message-ID: <45CEE165.7070205@v.loewis.de> Dinu Gherman schrieb: > Das ist nicht der Punkt. Das Modul types gibt es eben darum, > damit ich so etwas nicht immer schreiben muss (wie bei den > leidigen Tests in der Art if type(obj) == type(""): ...). Und ein dritter Versuch. Bei neuem Code solltest Du *weder* if type(obj) == type(""): schreiben, noch if type(obj) == types.StringType: *sondern* if type(obj) == str (u.U. auch if isinstance(obj, str): ) Ciao, Martin From martin at v.loewis.de Sun Feb 11 10:28:44 2007 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Sun, 11 Feb 2007 10:28:44 +0100 Subject: [Python-de] types.SetType In-Reply-To: <2fe40e118bbe90809a67b1254712f54b@darwin.in-berlin.de> References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> <45CCDC62.7000208@web.de> <2fe40e118bbe90809a67b1254712f54b@darwin.in-berlin.de> Message-ID: <45CEE1CC.80906@v.loewis.de> Dinu Gherman schrieb: > Wenn man ein Programm schreibt, dass mit *allen* Typen zurechtkommen > muss (von mir aus z.B. einen Debugger), dann moechte man eine uniforme > Methode fuer die Typ-Pruefung verwenden. Ich dachte, dafuer waere das > types-Modul geeignet. Seit Python 2.2 gibt es bessere Möglichkeiten als das types-Modul; deshalb wird es auch nicht systematisch um neue Typen erweitert (sondern besteht nur noch aus Rückwärtskompatibilität). Ciao, Martin From gherman at darwin.in-berlin.de Sun Feb 11 12:20:13 2007 From: gherman at darwin.in-berlin.de (Dinu Gherman) Date: Sun, 11 Feb 2007 12:20:13 +0100 Subject: [Python-de] types.SetType In-Reply-To: <45CEE165.7070205@v.loewis.de> References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> <45CEE165.7070205@v.loewis.de> Message-ID: Martin v. Löwis: > Und ein dritter Versuch. Bei neuem Code solltest Du *weder* > > if type(obj) == type(""): > > schreiben, noch > > if type(obj) == types.StringType: > > *sondern* > > if type(obj) == str > > (u.U. auch > > if isinstance(obj, str): > > ) Ok, ich zaehle meine Versuche nicht so systematisch, aber vielleicht kommt es mit einem Beispiel meinerseits besser rueber. Was muesste ich also in den folgenden Zeilen fuer ??? einsetzen, um die gewuenschte Ausgabe zu bekommen? obj = NotImplemented if type(obj) == ???: print "verstanden" if isinstance(obj, ???): print "verstanden" Ich vermute, die Antwort lautet: ??? = type(NotImplemented). Und das ist eben nichts anderes als "frueher" bei Code wie: if type(obj) == type(""). Mit anderen Worten: woher bekomme ich das NotImplementedType, ohne type(NotImplemented) benutzen zu muessen? Antwort: aus dem Modul types. Wenn es keine andere Moeglichkeit gibt, ist das Modul nicht ueberfluessig. Wenn dem so ist und kein SetType/FrozenSetType drin ist, be- trachte ich das types-Modul als unvollstaendig, weil es einen uniformen Zugriff auf alle Typen ueber diese Variablen nicht mehr ermoeglicht. Ob das tragisch ist, sei dahingestellt, aber es ist nicht konsistent und nicht elegant. Gruss, Dinu From martin at v.loewis.de Sun Feb 11 15:36:22 2007 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Sun, 11 Feb 2007 15:36:22 +0100 Subject: [Python-de] types.SetType In-Reply-To: References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> <45CEE165.7070205@v.loewis.de> Message-ID: <45CF29E6.709@v.loewis.de> Dinu Gherman schrieb: > Was muesste ich also in den folgenden Zeilen fuer > ??? einsetzen, um die gewuenschte Ausgabe zu bekommen? > > obj = NotImplemented > > if type(obj) == ???: > print "verstanden" > > if isinstance(obj, ???): > print "verstanden" > > Ich vermute, die Antwort lautet: ??? = type(NotImplemented). Korrekt. Was aber hat das mit SetType zu tun? (siehe Subject) In dem konkreten Fall würde ich aber if obj is NotImplemented: print "verstanden" schreiben: NotImplemented ist ein Singleton. Man schreibt ja auch if foo is None: anstelle von if isinstance(foo, types.NoneType) > Mit anderen Worten: woher bekomme ich das NotImplementedType, > ohne type(NotImplemented) benutzen zu muessen? Siehe oben: i.d.R. solltest Du nicht auf NotImplementedType testen, sondern auf NotImplemented. > Antwort: aus > dem Modul types. Wenn es keine andere Moeglichkeit gibt, ist > das Modul nicht ueberfluessig. Mag sein. Du änderst aber das Thema: Deine ursprüngliche Frage war ja nach set und nicht nach NotImplementedType. Auch für den Test, den Du jetzt durchführen willst ("ist obj ein Exemplar von NotImplementedType") benötigt man das types-Modul nicht, weil NotImplemted ein Singleton ist. > Wenn dem so ist und kein SetType/FrozenSetType drin ist, be- > trachte ich das types-Modul als unvollstaendig, weil es einen > uniformen Zugriff auf alle Typen ueber diese Variablen nicht > mehr ermoeglicht. Es ist aber nicht der Zweck des types-Moduls, *alle* Typen zu enthalten. Es ist auch nicht realistisch anzunehmen, dass es das jemals könnte. Python-Bibliotheken können selber neue Typen definieren, aber selbst für die mit Python standardmäßig ausgelieferten Typen ist es nicht praktikabel, alle im types-Modul aufzuführen. Anbei eine Liste von Typen, die es in Python 2.5 gibt, aber nicht im types-Modul. Diese Liste ist nicht vollständig (schon weil es manche Typen nur auf manchen Systemen gibt). > Ob das tragisch ist, sei dahingestellt, aber es ist nicht > konsistent und nicht elegant. set und frozenset aufzunehmen würde es nicht konsistent machen. Es wäre tragisch, wenn es konsistent wäre, weil dann 'import types' praktisch die gesamte Python-Bibliothek importieren müsste. Ciao, Martin ('Carbon.File', 'Alias') ('Carbon.File', 'FInfo') ('Carbon.File', 'FSCatalogInfo') ('Carbon.File', 'FSRef') ('Carbon.File', 'FSSpec') ('MacOS', 'Error') ('_AE', 'AEDesc') ('_App', 'ThemeDrawingState') ('_CF', 'CFArrayRef') ('_CF', 'CFDataRef') ('_CF', 'CFDictionaryRef') ('_CF', 'CFMutableArrayRef') ('_CF', 'CFMutableDataRef') ('_CF', 'CFMutableDictionaryRef') ('_CF', 'CFMutableStringRef') ('_CF', 'CFStringRef') ('_CF', 'CFTypeRef') ('_CF', 'CFURLRef') ('_CG', 'CGContextRef') ('_CarbonEvt', 'EventHandlerCallRef') ('_CarbonEvt', 'EventHandlerRef') ('_CarbonEvt', 'EventHotKeyRef') ('_CarbonEvt', 'EventLoopRef') ('_CarbonEvt', 'EventLoopTimerRef') ('_CarbonEvt', 'EventQueueRef') ('_CarbonEvt', 'EventRef') ('_CarbonEvt', 'EventTargetRef') ('_Cm', 'Component') ('_Cm', 'ComponentInstance') ('_Ctl', 'Control') ('_Dlg', 'Dialog') ('_Drag', 'DragObj') ('_IBCarbon', 'IBNibRef') ('_List', 'List') ('_Menu', 'Menu') ('_Mlte', 'TXNFontMenuObject') ('_Mlte', 'TXNObject') ('_OSA', 'OSAComponentInstance') ('_Qd', 'BitMap') ('_Qd', 'GrafPort') ('_Qdoffs', 'GWorld') ('_Qt', 'IdleManager') ('_Qt', 'Media') ('_Qt', 'Movie') ('_Qt', 'MovieController') ('_Qt', 'SGOutput') ('_Qt', 'TimeBase') ('_Qt', 'Track') ('_Qt', 'UserData') ('_Res', 'Resource') ('_Snd', 'SPB') ('_Snd', 'SndChannel') ('_TE', 'TE') ('_Win', 'Window') ('__builtin__', 'CArgObject') ('__builtin__', 'Element') ('__builtin__', 'EncodingMap') ('__builtin__', 'MultibyteCodec') ('__builtin__', 'MultibyteIncrementalDecoder') ('__builtin__', 'MultibyteIncrementalEncoder') ('__builtin__', 'MultibyteStreamReader') ('__builtin__', 'MultibyteStreamWriter') ('__builtin__', 'StgDict') ('__builtin__', 'Struct') ('__builtin__', 'basestring') ('__builtin__', 'classmethod') ('__builtin__', 'deque_iterator') ('__builtin__', 'deque_reverse_iterator') ('__builtin__', 'enumerate') ('__builtin__', 'frozenset') ('__builtin__', 'iterparse') ('__builtin__', 'property') ('__builtin__', 'reversed') ('__builtin__', 'set') ('__builtin__', 'sqlite3Node') ('__builtin__', 'staticmethod') ('__builtin__', 'super') ('__builtin__', 'weakref') ('_csv', 'Dialect') ('_csv', 'Error') ('_csv', 'reader') ('_csv', 'writer') ('_ctypes', 'Array') ('_ctypes', 'ArrayType') ('_ctypes', 'CField') ('_ctypes', 'CFuncPtr') ('_ctypes', 'CFuncPtrType') ('_ctypes', 'PointerType') ('_ctypes', 'SimpleType') ('_ctypes', 'StructType') ('_ctypes', 'Structure') ('_ctypes', 'Union') ('_ctypes', 'UnionType') ('_ctypes', '_CData') ('_ctypes', '_Pointer') ('_ctypes', '_SimpleCData') ('_curses', 'error') ('_curses_panel', 'error') ('_hashlib', 'HASH') ('_lsprof', 'Profiler') ('_lsprof', 'profiler_entry') ('_lsprof', 'profiler_subentry') ('_random', 'Random') ('_sha256', 'sha224') ('_sha256', 'sha256') ('_sha512', 'sha384') ('_sha512', 'sha512') ('_testcapi', 'error') ('_types', 'Helper') ('array', 'array') ('audioop', 'error') ('autoGIL', 'AutoGILError') ('binascii', 'Error') ('binascii', 'Incomplete') ('bsddb', 'error') ('cPickle', 'BadPickleGet') ('cPickle', 'PickleError') ('cPickle', 'Pickler') ('cPickle', 'PicklingError') ('cPickle', 'UnpickleableError') ('cPickle', 'Unpickler') ('cPickle', 'UnpicklingError') ('cStringIO', 'StringI') ('cStringIO', 'StringO') ('codecs', 'BufferedIncrementalDecoder') ('codecs', 'BufferedIncrementalEncoder') ('codecs', 'CodecInfo') ('codecs', 'IncrementalDecoder') ('codecs', 'IncrementalEncoder') ('collections', 'defaultdict') ('collections', 'deque') ('copy', 'Error') ('ctypes', 'ArgumentError') ('datetime', 'date') ('datetime', 'datetime') ('datetime', 'time') ('datetime', 'timedelta') ('datetime', 'tzinfo') ('dbm', 'error') ('distutils.errors', 'CCompilerError') ('distutils.errors', 'CompileError') ('distutils.errors', 'DistutilsArgError') ('distutils.errors', 'DistutilsClassError') ('distutils.errors', 'DistutilsError') ('distutils.errors', 'DistutilsExecError') ('distutils.errors', 'DistutilsFileError') ('distutils.errors', 'DistutilsGetoptError') ('distutils.errors', 'DistutilsInternalError') ('distutils.errors', 'DistutilsModuleError') ('distutils.errors', 'DistutilsOptionError') ('distutils.errors', 'DistutilsPlatformError') ('distutils.errors', 'DistutilsSetupError') ('distutils.errors', 'DistutilsTemplateError') ('distutils.errors', 'LibError') ('distutils.errors', 'LinkError') ('distutils.errors', 'PreprocessError') ('distutils.errors', 'UnknownFileError') ('dl', 'error') ('encodings', 'CodecRegistryError') ('encodings.ascii', 'IncrementalDecoder') ('encodings.ascii', 'IncrementalEncoder') ('exceptions', 'ArithmeticError') ('exceptions', 'AssertionError') ('exceptions', 'AttributeError') ('exceptions', 'BaseException') ('exceptions', 'DeprecationWarning') ('exceptions', 'EOFError') ('exceptions', 'EnvironmentError') ('exceptions', 'Exception') ('exceptions', 'FloatingPointError') ('exceptions', 'FutureWarning') ('exceptions', 'GeneratorExit') ('exceptions', 'IOError') ('exceptions', 'ImportError') ('exceptions', 'ImportWarning') ('exceptions', 'IndentationError') ('exceptions', 'IndexError') ('exceptions', 'KeyError') ('exceptions', 'KeyboardInterrupt') ('exceptions', 'LookupError') ('exceptions', 'MemoryError') ('exceptions', 'NameError') ('exceptions', 'NotImplementedError') ('exceptions', 'OSError') ('exceptions', 'OverflowError') ('exceptions', 'PendingDeprecationWarning') ('exceptions', 'ReferenceError') ('exceptions', 'RuntimeError') ('exceptions', 'RuntimeWarning') ('exceptions', 'StandardError') ('exceptions', 'StopIteration') ('exceptions', 'SyntaxError') ('exceptions', 'SyntaxWarning') ('exceptions', 'SystemError') ('exceptions', 'SystemExit') ('exceptions', 'TabError') ('exceptions', 'TypeError') ('exceptions', 'UnboundLocalError') ('exceptions', 'UnicodeDecodeError') ('exceptions', 'UnicodeEncodeError') ('exceptions', 'UnicodeError') ('exceptions', 'UnicodeTranslateError') ('exceptions', 'UnicodeWarning') ('exceptions', 'UserWarning') ('exceptions', 'ValueError') ('exceptions', 'Warning') ('exceptions', 'ZeroDivisionError') ('functools', 'partial') ('grp', 'struct_group') ('hotshot', 'ProfilerError') ('imageop', 'error') ('imp', 'NullImporter') ('itertools', '_grouper') ('itertools', 'chain') ('itertools', 'count') ('itertools', 'cycle') ('itertools', 'dropwhile') ('itertools', 'groupby') ('itertools', 'ifilter') ('itertools', 'ifilterfalse') ('itertools', 'imap') ('itertools', 'islice') ('itertools', 'izip') ('itertools', 'repeat') ('itertools', 'starmap') ('itertools', 'takewhile') ('itertools', 'tee') ('itertools', 'tee_dataobject') ('locale', 'Error') ('nis', 'error') ('operator', 'attrgetter') ('operator', 'itemgetter') ('parser', 'ParserError') ('posix', 'stat_result') ('posix', 'statvfs_result') ('resource', 'error') ('resource', 'struct_rusage') ('rgbimg', 'error') ('select', 'error') ('site', 'Quitter') ('site', '_Helper') ('site', '_Printer') ('socket', 'error') ('socket', 'gaierror') ('socket', 'herror') ('socket', 'sslerror') ('socket', 'timeout') ('sqlite3', 'Cache') ('sqlite3', 'Connection') ('sqlite3', 'Cursor') ('sqlite3', 'DataError') ('sqlite3', 'DatabaseError') ('sqlite3', 'Error') ('sqlite3', 'IntegrityError') ('sqlite3', 'InterfaceError') ('sqlite3', 'InternalError') ('sqlite3', 'NotSupportedError') ('sqlite3', 'OperationalError') ('sqlite3', 'PrepareProtocol') ('sqlite3', 'ProgrammingError') ('sqlite3', 'Row') ('sqlite3', 'Statement') ('sqlite3', 'Warning') ('sre_constants', 'error') ('string', 'Template') ('string', '_TemplateMetaclass') ('struct', 'error') ('termios', 'error') ('time', 'struct_time') ('warnings', '_OptionError') ('xml.parsers.expat', 'ExpatError') ('zipimport', 'ZipImportError') ('zipimport', 'zipimporter') ('zlib', 'error') From gherman at darwin.in-berlin.de Sun Feb 11 16:38:48 2007 From: gherman at darwin.in-berlin.de (Dinu Gherman) Date: Sun, 11 Feb 2007 16:38:48 +0100 Subject: [Python-de] types.SetType In-Reply-To: <45CF29E6.709@v.loewis.de> References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> <45CEE165.7070205@v.loewis.de> <45CF29E6.709@v.loewis.de> Message-ID: Martin v. Löwis: > [...] Eine abschließende Bemerkung dazu von meiner Seite: In 2.5 sind types.GetSetDescriptorType und types.MemberDescriptorType neu, also kann das Modul nicht unnoetig oder veraltet sein. Mein Beispiel mit NotImplemented war nur ein Beispiel. Von externen Typen, auch sol- chen in der Standard-Bibliothek, war nie die Rede. Und dafuer, dass zwei, immerhin eingebaute, (Daten-) Typen (set/frozenset) in types nicht vorhanden sind, sehe ich weiterhin keinen anderen Grund als den, dass sie vergessen wurden. Gruss, Dinu From martin at v.loewis.de Sun Feb 11 19:06:27 2007 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Sun, 11 Feb 2007 19:06:27 +0100 Subject: [Python-de] types.SetType In-Reply-To: References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> <45CEE165.7070205@v.loewis.de> <45CF29E6.709@v.loewis.de> Message-ID: <45CF5B23.2000303@v.loewis.de> > Und dafuer, dass > zwei, immerhin eingebaute, (Daten-) Typen (set/frozenset) in types > nicht vorhanden sind, sehe ich weiterhin keinen anderen Grund als > den, dass sie vergessen wurden. Darauf eine abschließende Antwort: Sei versichert, dass das nicht vergessen wurde, sondern absichtlich im types-Modul kein Alias angelegt wurde. Ich war dabei. Ein paar Belege dafür: - In PEP 348 heißt es (als Grund für die Ablehnung des PEPs): A centralized repository of type names was a mistake. Neither the "types" nor "new" modules should be carried forward to Python 3.0. Using two sets of names for the same objects is redundant and confusing. - http://mail.python.org/pipermail/python-dev/2002-May/024336.html OK, so let me explain why I'm against adding new stuff to types.py. I'm against adding new features to anything that's (about to) being deprecated. The addition of new features sends the wrong message: it suggests that the module is in active use, recommended for use, supported, maintained, etc. When someone finds that types.py has no name for the Boolean type, maybe this will cause them to realize that it's being deprecated and that in the long run (with emphasis on long) it's going away. Ciao, Martin From mmueller at python-academy.de Mon Feb 12 00:01:37 2007 From: mmueller at python-academy.de (Mike =?iso-8859-1?Q?M=FCller?=) Date: Mon, 12 Feb 2007 00:01:37 +0100 Subject: [Python-de] Python-Stammtisch in Leipzig, 13.02.07, 20:00 Uhr Message-ID: <7.0.1.0.0.20070211234100.01cae120@python-academy.de> ========================= Leipzig Python User Group ========================= Stammtisch am 13.02.2007 ------------------------- Wir treffen uns am 13.02.2007 um 20:00 Uhr wieder im Schulungszentrum der Python Academy in Leipzig (http://www.python-academy.de/Schulungszentrum/anfahrt.html). Unser Hauptthema ist diesmal Pyrex (http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex). Mit Pyrex wird das Schreiben von Pythonerweiterungen stark vereinfacht. Mitglieder der User Group haben mit Pyrex eine Verringerung der Laufzeit um den Faktor zehn und mehr erreicht. Natürlich wird es zusätzlich wieder Diskussionen zu anderen Python-Themen geben. Für das leibliche Wohl wird gesorgt. Wir bitten um kurze Anmeldung per e-mail an: info at python-academy.de An den Treffen der Python Anwendergruppe kann jeder teilnehmen, der Interesse an Python hat, die Sprache bereits nutzt oder nutzen möchte. Die Arbeitssprachen des Treffens ist Deutsch. Englisch sprechende Python-Enthusiasten sind trotzdem herzlich eingeladen. Wir übersetzen gern. Aktuelle Informationen zu den Treffen sind immer unter http://www.python-academy.de/User-Group/index.html zu finden. From deets at web.de Mon Feb 12 13:36:18 2007 From: deets at web.de (Diez B. Roggisch) Date: Mon, 12 Feb 2007 13:36:18 +0100 Subject: [Python-de] types.SetType In-Reply-To: <200702102052.57985.hpj@urpla.net> References: <45CCDC62.7000208@web.de> <200702102052.57985.hpj@urpla.net> Message-ID: <200702121336.18688.deets@web.de> Hi Pete, > > Hmm, nicht ganz, in "hot paths" kann es der Performance zuträglich sein, > wenn man sich eine der Evaluierungen spart: > if type(obj) == types.StringType: ... Aber ist type(obj) == str denn wirklich langsamer? Es wird erst lokal aufgeloest, danach global - genauso wie modulnamen, oder nicht? Womit der lookup direkt gelingt, wohingege ja noch "StringType" in types aufgeloest werden muss. Diez From sschwarzer at sschwarzer.net Mon Feb 12 17:55:52 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Mon, 12 Feb 2007 17:55:52 +0100 Subject: [Python-de] types.SetType In-Reply-To: <200702121336.18688.deets@web.de> References: <45CCDC62.7000208@web.de> <200702102052.57985.hpj@urpla.net> <200702121336.18688.deets@web.de> Message-ID: <45D09C18.50304@sschwarzer.net> Hallo Hans-Peter, Hallo Diez, On 2007-02-12 13:36, Diez B. Roggisch wrote: >> Hmm, nicht ganz, in "hot paths" kann es der Performance zuträglich sein, >> wenn man sich eine der Evaluierungen spart: >> if type(obj) == types.StringType: ... ich glaube, Python wäre nicht Python, wenn das für die Aufname eines SetType in types eine Rolle spielen würde. ;-) > Aber ist > > type(obj) == str > > denn wirklich langsamer? Es wird erst lokal aufgeloest, danach global - > genauso wie modulnamen, oder nicht? Womit der lookup direkt gelingt, > wohingege ja noch "StringType" in types aufgeloest werden muss. Wozu vermuten, wenn man messen kann? :-) Folgende Messwerte sind mit Python 2.5 bestimmt. Es geht mir nur um die Relationen, deshalb verzichte ich auf die Angabe von Rechnerdaten. Der Rechner war während der Messungen bei ca. 0 % Auslastung, abgesehen natürlich von den Messungen selbst. python /usr/lib/python2.5/timeit.py -r 10 -s "import types; o = ''" "type(o) == types.StringType" (bzw. anderer Code entsprechend eingesetzt) Den timeit-Lauf habe ich jeweils mehrmals wiederholt und, wie in der Doku empfohlen, den kleinsten Wert genommen. type(o) == types.StringType 0.571 usec type(o) is types.StringType 0.523 usec type(o) == str 0.449 usec type(o) is str 0.405 usec isinstance(o, types.StringType) 0.519 usec isinstance(o, str) 0.412 usec Der Vergleich mit "is" ist erwartungsgemäß schneller als mit "==", da nur ein Zeiger-Vergleich durchgeführt werden muss. "isinstance(o, str)" ist praktisch genau so schnell wie "type(o) is str". In den meisten Fällen will man wohl die abgeleiteten Klassen mit erwischen, so dass aus meiner Sicht auch unter dem Geschwindigkeits-Aspekt nichts gegen isinstance spricht. Lookups abkürzen ---------------- Ich habe auch getestet, wie sich die Erstellung eines Namens im lokalen Namensraum auswirkt. python /usr/lib/python2.5/timeit.py -r 10 -s "from test import str_global" "str_global()" mit def str_global(): o = "" for i in xrange(1000): isinstance(o, str) def str_lokal(): lstr = str o = "" for i in xrange(1000): isinstance(o, lstr) str_global 433 usec str_lokal 371 usec Man kann das "Nachschlagen" des str-Typs durch Anlegen eines lokalen Alias-Namens also potenziell deutlich beschleunigen. Abschließend möchte ich darum bitten, nicht zu Tempo-Fanatikern zu werden; die meisten Tuning-Maßnahmen sind wohl unnötig. :-) In den obigen Beispielen geht es um Laufzeiten von einer halben Millisekunde! Bei der Gelegenheit etwas "Eigenwerbung": http://sschwarzer.com/download/optimization_europython2006.pdf Beschleunigte Grüße ;-) Stefan From chris.arndt at web.de Tue Feb 13 12:22:43 2007 From: chris.arndt at web.de (Christopher Arndt) Date: Tue, 13 Feb 2007 12:22:43 +0100 Subject: [Python-de] =?iso-8859-1?q?=5BAnk=FCndigung=5D_Treffen_der_PUG_K?= =?iso-8859-1?q?=F6ln_am_14=2E02=2E2007?= Message-ID: <45D19F83.2070201@web.de> Hallo liebe Leute, das nächste Treffen der Python User Group Köln findet MORGEN statt: Datum: 14.2.2007 Uhrzeit: 18:30 Uhr Ort: Pool 0.14, Benutzerrechenzentrum (RRZK-B) der Universität Köln, Berrenrather Str. 136, 50937 Köln Nähere Informationen (Vortragsprogramm, Wegbeschreibung, etc.) findet man hier: http://wiki.python.de/User_Group_K%C3%B6ln#Termine Wir laden alle Python-Begeisterten aus der Umgebung ein, ob Entwickler, Anwender oder einfach nur neugierig, zu diesem Treffen zu kommen! Sorry, für die späte Ankündigung. Christopher Arndt From mathias.uebel at meeloon.de Tue Feb 13 13:44:45 2007 From: mathias.uebel at meeloon.de (Mathias Uebel) Date: Tue, 13 Feb 2007 13:44:45 +0100 Subject: [Python-de] =?iso-8859-15?q?=5BAnk=FCndigung=5D_Treffen_der_PUG_K?= =?iso-8859-15?q?=F6ln_am_14=2E02=2E2007?= In-Reply-To: <45D19F83.2070201@web.de> References: <45D19F83.2070201@web.de> Message-ID: <45D1B2BD.2070406@meeloon.de> Christopher Arndt schrieb: > Hallo liebe Leute, > > das nächste Treffen der Python User Group Köln findet MORGEN statt: > > Ich gebe zu: Mit Neid muss ich von den Treffen im Süden und Westen lesen. Darum meine Frage: Welche Aktivitäten gibt es in und um Berlin? Grusz From sschwarzer at sschwarzer.net Tue Feb 13 14:52:43 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Tue, 13 Feb 2007 14:52:43 +0100 Subject: [Python-de] =?iso-8859-1?q?=5BAnk=FCndigung=5D_Treffen_der_PUG_K?= =?iso-8859-1?q?=F6ln_am_14=2E02=2E2007?= In-Reply-To: <45D1B2BD.2070406@meeloon.de> References: <45D19F83.2070201@web.de> <45D1B2BD.2070406@meeloon.de> Message-ID: <45D1C2AB.4040808@sschwarzer.net> Hallo Mathias, On 2007-02-13 13:44, Mathias Uebel wrote: > Christopher Arndt schrieb: >> das nächste Treffen der Python User Group Köln findet MORGEN statt: >> > Ich gebe zu: Mit Neid muss ich von den Treffen im Süden und Westen lesen. und im Osten, nicht vergessen! ;-) http://python.net/pipermail/python-de/2007q1/008011.html > Darum meine Frage: Welche Aktivitäten gibt es in und um Berlin? Inzwischen gibt es wieder einen Berliner Stammtisch, das ging hier auch über die Liste, siehe http://python.net/pipermail/python-de/2007q1/008021.html Viel Spaß! Viele Grüße Stefan From stephan.diehl at gmx.net Tue Feb 13 14:15:20 2007 From: stephan.diehl at gmx.net (Stephan Diehl) Date: Tue, 13 Feb 2007 14:15:20 +0100 Subject: [Python-de] =?iso-8859-1?q?=5BAnk=FCndigung=5D_Treffen_der_PUG_K?= =?iso-8859-1?q?=F6ln_am_14=2E02=2E2007?= In-Reply-To: <45D1B2BD.2070406@meeloon.de> References: <45D19F83.2070201@web.de> <45D1B2BD.2070406@meeloon.de> Message-ID: <45D1B9E8.8020900@gmx.net> Hallo Mathias, Mathias Uebel wrote: > Christopher Arndt schrieb: >> Hallo liebe Leute, >> >> das nächste Treffen der Python User Group Köln findet MORGEN statt: >> >> > Ich gebe zu: Mit Neid muss ich von den Treffen im Süden und Westen lesen. > Darum meine Frage: Welche Aktivitäten gibt es in und um Berlin? da muss dir unser berliner treffen vor 10 Tagen durch die Lappen gegangen sein. Wir haben uns aber ganz fest vorgenommen, von jetzt ab regelmaessiger ein Treffen zu veranstalten. Am besten abonierst du mal http://starship.python.net/cgi-bin/mailman/listinfo/python-berlin > > Grusz Stephan From mathias.uebel at meeloon.de Tue Feb 13 16:44:23 2007 From: mathias.uebel at meeloon.de (Mathias Uebel) Date: Tue, 13 Feb 2007 16:44:23 +0100 Subject: [Python-de] =?iso-8859-15?q?=5BAnk=FCndigung=5D_Treffen_der_PUG_K?= =?iso-8859-15?q?=F6ln_am_14=2E02=2E2007?= In-Reply-To: <45D1C2AB.4040808@sschwarzer.net> References: <45D19F83.2070201@web.de> <45D1B2BD.2070406@meeloon.de> <45D1C2AB.4040808@sschwarzer.net> Message-ID: <45D1DCD7.3080806@meeloon.de> Stefan Schwarzer schrieb: > [...] > > und im Osten, nicht vergessen! ;-) > Ja, schön. Wenn ich mal in der Gegend bin, schau ich mal rein! > [...] > Inzwischen gibt es wieder einen Berliner Stammtisch, das > ging hier auch über die Liste, siehe > http://python.net/pipermail/python-de/2007q1/008021.html > Hey, cool. Danke für die Tips! Gruß From steve at syso.ch Wed Feb 14 19:37:00 2007 From: steve at syso.ch (Stefan Mallepell) Date: Wed, 14 Feb 2007 19:37:00 +0100 Subject: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? Message-ID: <45D356CC.7040008@syso.ch> Hallo Ich sollte noch ultradringend eine Schnittstelle in ein ERP System erstellen (ja ich bin viel, viel zu spät dran ...). Jetzt macht mir win32com.client Probleme. Die ERP SW stellt einen COM Server zur Verfügung, auf den ich als Client aus Python zugreifen sollte. Die Instanzierung des COM Objekts geht tip top. Vgl. PythonWin Output: * >>> import win32com.client * >>> o = win32com.client.Dispatch("OLE_VK.VK") Das Aufrufen von Methoden funktioniert: * >>> o.SetClient(7777) * True * >>> o.SetApplicationID(6) * True * >>> o.NewHeader * > Da die Properties des Objekts leider als "Methoden" erscheinen (vgl. Unten Ausschnitt aus generiertem Interface), kann ich nun den Properties keine Werte zuweisen. Ich erhalte immer einen Syntax Error ... * >>> o.Table.AsCurrencybyName("DKO","AUF_NR") = 268 * Traceback ( File "", line 1 * SyntaxError: can't assign to function call (, * line 1) Gibt es eine Lösung für dieses Problem? Falls ja, was muss ich sonst noch besonders beachten (Werteübergabe von Typ Integer, String, Currency, Boolean, DateTime, Variant, Double). Tja ich bin nicht wirklich der Python Crack und muss jetzt eingestehen, dass ich mich etwas übernommen habe ... Wenn mir jemand helfen kann, bin ich mega froh ;-) Danke und Gruss Stefan # The method SetAsBooleanbyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsBooleanbyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(3, LCID, 4, (24, 0), ((8, 1), (8, 1), (11, 1)),_tableID , _fldID, arg2) # The method SetAsBooleanbyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsBooleanbyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(13, LCID, 4, (24, 0), ((8, 1), (3, 1), (11, 1)),_tableID , _fldID, arg2) # The method SetAsCurrencybyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsCurrencybyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(4, LCID, 4, (24, 0), ((8, 1), (8, 1), (6, 1)),_tableID , _fldID, arg2) # The method SetAsCurrencybyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsCurrencybyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(14, LCID, 4, (24, 0), ((8, 1), (3, 1), (6, 1)),_tableID , _fldID, arg2) # The method SetAsDateTimebyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsDateTimebyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(19, LCID, 4, (24, 0), ((8, 1), (8, 1), (7, 1)),_tableID , _fldID, arg2) # The method SetAsDateTimebyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsDateTimebyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(20, LCID, 4, (24, 0), ((8, 1), (3, 1), (7, 1)),_tableID , _fldID, arg2) # The method SetAsDoublebyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsDoublebyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(5, LCID, 4, (24, 0), ((8, 1), (8, 1), (5, 1)),_tableID , _fldID, arg2) # The method SetAsDoublebyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsDoublebyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(15, LCID, 4, (24, 0), ((8, 1), (3, 1), (5, 1)),_tableID , _fldID, arg2) # The method SetAsIntegerbyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsIntegerbyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(1, LCID, 4, (24, 0), ((8, 1), (8, 1), (3, 1)),_tableID , _fldID, arg2) # The method SetAsIntegerbyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsIntegerbyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(11, LCID, 4, (24, 0), ((8, 1), (3, 1), (3, 1)),_tableID , _fldID, arg2) # The method SetAsStringbyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsStringbyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(2, LCID, 4, (24, 0), ((8, 1), (8, 1), (8, 1)),_tableID , _fldID, arg2) # The method SetAsStringbyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsStringbyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(12, LCID, 4, (24, 0), ((8, 1), (3, 1), (8, 1)),_tableID , _fldID, arg2) # The method SetAsVariantbyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsVariantbyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(6, LCID, 4, (24, 0), ((8, 1), (8, 1), (12, 1)),_tableID , _fldID, arg2) # The method SetAsVariantbyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsVariantbyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(16, LCID, 4, (24, 0), ((8, 1), (3, 1), (12, 1)),_tableID , _fldID, arg2) # The method SetTextDetail is actually a property, but must be used as a method to correctly pass the arguments def SetTextDetail(self, _dtxttyp=defaultNamedNotOptArg, arg1=defaultUnnamedArg): return self._oleobj_.InvokeTypes(10, LCID, 4, (24, 0), ((3, 1), (8, 1)),_dtxttyp , arg1) # The method SetTextHeader is actually a property, but must be used as a method to correctly pass the arguments def SetTextHeader(self, _htxttyp=defaultNamedNotOptArg, _hdoktyp=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(9, LCID, 4, (24, 0), ((3, 1), (3, 1), (8, 1)),_htxttyp , _hdoktyp, arg2) From robert at redcor.ch Wed Feb 14 20:34:27 2007 From: robert at redcor.ch (robert rottermann) Date: Wed, 14 Feb 2007 20:34:27 +0100 Subject: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? In-Reply-To: <45D356CC.7040008@syso.ch> References: <45D356CC.7040008@syso.ch> Message-ID: <45D36443.9060509@redcor.ch> versuch mal o.Table.AsCurrencybyName("DKO","AUF_NR", 268) gruss rr Stefan Mallepell wrote: > Hallo > > Ich sollte noch ultradringend eine Schnittstelle in ein ERP System > erstellen (ja ich bin viel, viel zu spät dran ...). Jetzt macht mir > win32com.client Probleme. > > Die ERP SW stellt einen COM Server zur Verfügung, auf den ich als Client > aus Python zugreifen sollte. Die Instanzierung des COM Objekts geht tip > top. Vgl. PythonWin Output: > > * >>> import win32com.client > * >>> o = win32com.client.Dispatch("OLE_VK.VK") > > Das Aufrufen von Methoden funktioniert: > > * >>> o.SetClient(7777) > * True > * >>> o.SetApplicationID(6) > * True > * >>> o.NewHeader > * * Verkauf.IVK instance at 0x19950648>> > > Da die Properties des Objekts leider als "Methoden" erscheinen (vgl. > Unten Ausschnitt aus generiertem Interface), kann ich nun den Properties > keine Werte zuweisen. Ich erhalte immer einen Syntax Error ... > > * >>> o.Table.AsCurrencybyName("DKO","AUF_NR") = 268 > * Traceback ( File "", line 1 > * SyntaxError: can't assign to function call (, > * line 1) > > Gibt es eine Lösung für dieses Problem? Falls ja, was muss ich sonst > noch besonders beachten (Werteübergabe von Typ Integer, String, > Currency, Boolean, DateTime, Variant, Double). > > Tja ich bin nicht wirklich der Python Crack und muss jetzt eingestehen, > dass ich mich etwas übernommen habe ... Wenn mir jemand helfen kann, bin > ich mega froh ;-) > > Danke und Gruss > Stefan > > > > > # The method SetAsBooleanbyName is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsBooleanbyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(3, LCID, 4, (24, 0), ((8, 1), > (8, 1), (11, 1)),_tableID > , _fldID, arg2) > > # The method SetAsBooleanbyNo is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsBooleanbyNo(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(13, LCID, 4, (24, 0), ((8, 1), > (3, 1), (11, 1)),_tableID > , _fldID, arg2) > > # The method SetAsCurrencybyName is actually a property, but must > be used as a method to correctly pass the arguments > def SetAsCurrencybyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(4, LCID, 4, (24, 0), ((8, 1), > (8, 1), (6, 1)),_tableID > , _fldID, arg2) > > # The method SetAsCurrencybyNo is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsCurrencybyNo(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(14, LCID, 4, (24, 0), ((8, 1), > (3, 1), (6, 1)),_tableID > , _fldID, arg2) > > # The method SetAsDateTimebyName is actually a property, but must > be used as a method to correctly pass the arguments > def SetAsDateTimebyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(19, LCID, 4, (24, 0), ((8, 1), > (8, 1), (7, 1)),_tableID > , _fldID, arg2) > > # The method SetAsDateTimebyNo is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsDateTimebyNo(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(20, LCID, 4, (24, 0), ((8, 1), > (3, 1), (7, 1)),_tableID > , _fldID, arg2) > > # The method SetAsDoublebyName is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsDoublebyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(5, LCID, 4, (24, 0), ((8, 1), > (8, 1), (5, 1)),_tableID > , _fldID, arg2) > > # The method SetAsDoublebyNo is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsDoublebyNo(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(15, LCID, 4, (24, 0), ((8, 1), > (3, 1), (5, 1)),_tableID > , _fldID, arg2) > > # The method SetAsIntegerbyName is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsIntegerbyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(1, LCID, 4, (24, 0), ((8, 1), > (8, 1), (3, 1)),_tableID > , _fldID, arg2) > > # The method SetAsIntegerbyNo is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsIntegerbyNo(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(11, LCID, 4, (24, 0), ((8, 1), > (3, 1), (3, 1)),_tableID > , _fldID, arg2) > > # The method SetAsStringbyName is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsStringbyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(2, LCID, 4, (24, 0), ((8, 1), > (8, 1), (8, 1)),_tableID > , _fldID, arg2) > > # The method SetAsStringbyNo is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsStringbyNo(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(12, LCID, 4, (24, 0), ((8, 1), > (3, 1), (8, 1)),_tableID > , _fldID, arg2) > > # The method SetAsVariantbyName is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsVariantbyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(6, LCID, 4, (24, 0), ((8, 1), > (8, 1), (12, 1)),_tableID > , _fldID, arg2) > > # The method SetAsVariantbyNo is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsVariantbyNo(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(16, LCID, 4, (24, 0), ((8, 1), > (3, 1), (12, 1)),_tableID > , _fldID, arg2) > > # The method SetTextDetail is actually a property, but must be used > as a method to correctly pass the arguments > def SetTextDetail(self, _dtxttyp=defaultNamedNotOptArg, > arg1=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(10, LCID, 4, (24, 0), ((3, 1), > (8, 1)),_dtxttyp > , arg1) > > # The method SetTextHeader is actually a property, but must be used > as a method to correctly pass the arguments > def SetTextHeader(self, _htxttyp=defaultNamedNotOptArg, > _hdoktyp=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(9, LCID, 4, (24, 0), ((3, 1), > (3, 1), (8, 1)),_htxttyp > , _hdoktyp, arg2) > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de > > -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : robert.vcf Dateityp : text/x-vcard Dateigröße : 200 bytes Beschreibung: nicht verfügbar URL : http://python.net/pipermail/python-de/attachments/20070214/9b060559/attachment.vcf From steve at syso.ch Thu Feb 15 12:29:34 2007 From: steve at syso.ch (Stefan Mallepell) Date: Thu, 15 Feb 2007 12:29:34 +0100 Subject: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? In-Reply-To: <45D36443.9060509@redcor.ch> References: <45D356CC.7040008@syso.ch> <45D36443.9060509@redcor.ch> Message-ID: <45D4441E.5080001@syso.ch> Hoi Robert > versuch mal > o.Table.AsCurrencybyName("DKO","AUF_NR", 268) Nein, das habe ich bereits versucht und es tut leider auch nicht. vgl unten: * >>> o.Table.AsIntegerbyName("DKO","AUF_NR", 268) * Traceback (most recent call last): * File "", line 1, in * TypeError: AsIntegerbyName() takes at most 3 arguments (4 given) Gruss Stefan From Helm.volker at gmx.de Thu Feb 15 13:20:08 2007 From: Helm.volker at gmx.de (Volker Helm) Date: Thu, 15 Feb 2007 13:20:08 +0100 Subject: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? In-Reply-To: <45D4441E.5080001@syso.ch> References: <45D356CC.7040008@syso.ch> <45D36443.9060509@redcor.ch> <45D4441E.5080001@syso.ch> Message-ID: <20070215122008.225550@gmx.net> Hi, warum fragst Du nicht mal diejenigen, die die Klassen entwickelt haben. Allerdings hat die Methode AsCurrencybyName nicht zwingend etwas mit AsIntegerbyName zu tun. Wo hast Du den die Klasse o.table initialisiert, vielleicht liegt dort ein Fehler vor, dass die entsprechende ID dann genommen wird. Leider kenne ich Eurer System nicht, zu wenig Infos. Bis dann, Volker -------- Original-Nachricht -------- Datum: Thu, 15 Feb 2007 12:29:34 +0100 Von: Stefan Mallepell An: python-de at python.net CC: Betreff: Re: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? > Hoi Robert > > > versuch mal > > o.Table.AsCurrencybyName("DKO","AUF_NR", 268) > > Nein, das habe ich bereits versucht und es tut leider auch nicht. vgl > unten: > > * >>> o.Table.AsIntegerbyName("DKO","AUF_NR", 268) > * Traceback (most recent call last): > * File "", line 1, in > * TypeError: AsIntegerbyName() takes at most 3 arguments (4 given) > > Gruss > Stefan > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de -- Ist Ihr Browser Vista-kompatibel? Jetzt die neuesten Browser-Versionen downloaden: http://www.gmx.net/de/go/browser From bh at intevation.de Thu Feb 15 13:38:59 2007 From: bh at intevation.de (Bernhard Herzog) Date: Thu, 15 Feb 2007 13:38:59 +0100 Subject: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? In-Reply-To: <45D356CC.7040008@syso.ch> (Stefan Mallepell's message of "Wed\, 14 Feb 2007 19\:37\:00 +0100") References: <45D356CC.7040008@syso.ch> Message-ID: Stefan Mallepell writes: > * >>> o.Table.AsCurrencybyName("DKO","AUF_NR") = 268 > * Traceback ( File "", line 1 > * SyntaxError: can't assign to function call (, > * line 1) > > Gibt es eine Lösung für dieses Problem? Falls ja, was muss ich sonst > noch besonders beachten (Werteübergabe von Typ Integer, String, > Currency, Boolean, DateTime, Variant, Double). Hast Du es mal mit o.Table.SetAsCurrencybyName("DKO","AUF_NR", 268) probiert. Die SetAsCurrencybyName Methode gibt es ja nach dem, was Du aus dem INterface zitierst: > # The method SetAsCurrencybyName is actually a property, but must > be used as a method to correctly pass the arguments > def SetAsCurrencybyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): Bernhard -- Intevation GmbH http://intevation.de/ Skencil http://skencil.org/ Thuban http://thuban.intevation.org/ From steve at syso.ch Thu Feb 15 13:50:24 2007 From: steve at syso.ch (Stefan Mallepell) Date: Thu, 15 Feb 2007 13:50:24 +0100 Subject: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? In-Reply-To: <20070215122008.225550@gmx.net> References: <45D356CC.7040008@syso.ch> <45D36443.9060509@redcor.ch> <45D4441E.5080001@syso.ch> <20070215122008.225550@gmx.net> Message-ID: <45D45710.6010808@syso.ch> Hi Volker Die Klasse ist ein COM-Server Objekt, welche mit win32com.client verfügbar gemacht wird. Das Problem ist, die Properties des COM-Objekts als Methoden dargestellt werden. > Allerdings hat die Methode AsCurrencybyName nicht zwingend etwas mit AsIntegerbyName zu tun. Ja, das sind zwei verschiedene Property. Habe das Bsp. schlecht gewählt - sorry. Das andere Property ergibt aber den selben Fehler. Mein Problem ist, dass Python untenstehendes als Methode und nicht als Property warnimmt. Das COM Objekt (hier "o") das aber als Property versteht, welchem man einen Wert zuweisen kann / muss. Z.B. o.Table.AsIntegerbyName("DKO","AUF_NR") = 268 Was aber gegen den Python Syntax ist ... Liebe Grüsse Stefan PS.: vgl auch erstes Mail in diesem Thread für weitere Infos From steve at syso.ch Thu Feb 15 14:08:39 2007 From: steve at syso.ch (Stefan Mallepell) Date: Thu, 15 Feb 2007 14:08:39 +0100 Subject: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? In-Reply-To: References: <45D356CC.7040008@syso.ch> Message-ID: <45D45B57.3070007@syso.ch> Hoi Bernhard > o.Table.SetAsCurrencybyName("DKO","AUF_NR", 268) > def SetAsCurrencybyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): Wie konnte ich nur so blind sein! Ich habe mir gestern wirklich die Haare gerauft und dabei hätte ich nur das Interface sauber lesen müssen ... Tja, habe jetzt einen tollen Umweg mit Zwischenfiles und VBS zusammengestrickt - was ich natürlich jetzt sofort einstampfen werde und es sauber und nett in Python machen ... Danke für die Hilfe! Stefan From deets at web.de Thu Feb 15 14:13:33 2007 From: deets at web.de (Diez B. Roggisch) Date: Thu, 15 Feb 2007 14:13:33 +0100 Subject: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? In-Reply-To: <45D45710.6010808@syso.ch> References: <45D356CC.7040008@syso.ch> <20070215122008.225550@gmx.net> <45D45710.6010808@syso.ch> Message-ID: <200702151413.33633.deets@web.de> > Die Klasse ist ein COM-Server Objekt, welche mit win32com.client > verfügbar gemacht wird. Das Problem ist, die Properties des COM-Objekts > als Methoden dargestellt werden. > > > Allerdings hat die Methode AsCurrencybyName nicht zwingend etwas mit > > AsIntegerbyName zu tun. > > Ja, das sind zwei verschiedene Property. Habe das Bsp. schlecht gewählt > - sorry. Das andere Property ergibt aber den selben Fehler. > > Mein Problem ist, dass Python untenstehendes als Methode und nicht als > Property warnimmt. Das COM Objekt (hier "o") das aber als Property > versteht, welchem man einen Wert zuweisen kann / muss. Z.B. > > o.Table.AsIntegerbyName("DKO","AUF_NR") = 268 > > Was aber gegen den Python Syntax ist ... Meine COM-Zeiten sind leider schon eine Weile her - darum kann ich nicht wirklich helfen fuerchte ich. Aber aus reinem Interesse: wie deklariert man denn so ein parametrisiertes Property, zB in VB, und wie greift man dann drauf zu? Diez From langer.markus at gmail.com Mon Mar 5 20:23:11 2007 From: langer.markus at gmail.com (Markus Langer) Date: Mon, 05 Mar 2007 21:23:11 +0100 Subject: [Python-de] verzeichnisbaum einlesesn Message-ID: <45EC7C2F.5060901@gmail.com> hallo leute, ich würde gerne den verzeichnisbaum meiner kompletten festplatte einlesesen...ich kenn zwar die befehle, aber weiter wie über die erste ebene komme ich nicht ich derdenke es mir nicht zusammen danke im voraus markus langer From lists at andreas-jung.com Mon Mar 5 21:04:10 2007 From: lists at andreas-jung.com (Andreas Jung) Date: Mon, 05 Mar 2007 22:04:10 +0100 Subject: [Python-de] verzeichnisbaum einlesesn In-Reply-To: <45EC7C2F.5060901@gmail.com> References: <45EC7C2F.5060901@gmail.com> Message-ID: --On 5. März 2007 21:23:11 +0100 Markus Langer wrote: > hallo leute, > > ich würde gerne den verzeichnisbaum meiner kompletten festplatte > einlesesen...ich kenn zwar die befehle, aber weiter wie über die > erste ebene komme ich nicht ich derdenke es mir nicht zusammen os.walk() ist Dein Freund. -aj -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : nicht verfügbar Dateityp : application/pgp-signature Dateigröße : 186 bytes Beschreibung: nicht verfügbar URL : http://python.net/pipermail/python-de/attachments/20070305/51b19c90/attachment.pgp From hpj at urpla.net Mon Mar 5 21:05:32 2007 From: hpj at urpla.net (Hans-Peter Jansen) Date: Mon, 5 Mar 2007 22:05:32 +0100 Subject: [Python-de] verzeichnisbaum einlesesn In-Reply-To: <45EC7C2F.5060901@gmail.com> References: <45EC7C2F.5060901@gmail.com> Message-ID: <200703052205.32708.hpj@urpla.net> Am Montag, 5. März 2007 21:23 schrieb Markus Langer: > hallo leute, > > ich würde gerne den verzeichnisbaum meiner kompletten festplatte > einlesesen...ich kenn zwar die befehle, aber weiter wie über die > erste ebene komme ich nicht ich derdenke es mir nicht zusammen Weniger Drogen nehmen und Doku lesen: http://docs.python.org/lib/os-file-dir.html ganz unten.. SCR, Pete From langer.markus at gmail.com Tue Mar 6 10:07:39 2007 From: langer.markus at gmail.com (markus langer) Date: Tue, 6 Mar 2007 11:07:39 +0100 Subject: [Python-de] verzeichnisbaum einlesesn In-Reply-To: <200703052205.32708.hpj@urpla.net> References: <45EC7C2F.5060901@gmail.com> <200703052205.32708.hpj@urpla.net> Message-ID: <8a0e0ccf0703060207y290f93bj9780e2b2fb1b6754@mail.gmail.com> meine unwissenheit hat nichts mit drogenkonsum gemein, sondern eher mit hochgebirgsstumpfsin ;-) lg. markus langer On 3/5/07, Hans-Peter Jansen wrote: > > Am Montag, 5. März 2007 21:23 schrieb Markus Langer: > > hallo leute, > > > > ich würde gerne den verzeichnisbaum meiner kompletten festplatte > > einlesesen...ich kenn zwar die befehle, aber weiter wie über die > > erste ebene komme ich nicht ich derdenke es mir nicht zusammen > > Weniger Drogen nehmen und Doku lesen: > http://docs.python.org/lib/os-file-dir.html ganz unten.. > > SCR, > Pete > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de > -------------- nächster Teil -------------- Ein Dateianhang mit HTML-Daten wurde abgetrennt... URL: http://python.net/pipermail/python-de/attachments/20070306/c4aeb1fd/attachment.htm From venthur at debian.org Tue Mar 6 11:33:34 2007 From: venthur at debian.org (Bastian Venthur) Date: Tue, 06 Mar 2007 12:33:34 +0100 Subject: [Python-de] =?iso-8859-15?q?E-Mailclient_=F6ffnen?= Message-ID: Hallo, weis jemand von euch ob es irgendwie möglich ist innerhalb von Python den Composer des Emailclienten aufzurufen? Optimal wäre wenn man das An-, Betreff- und Inhaltsfeld schon mit Vorgaben belegen könnte. Falls das mit Python nicht so einfach geht, geht's evtl mit QT via pyqt? Hintergrund: ich schreibe ne Anwendung in der am Ende eine Mail verschickt werden soll. Um den Nutzer soviel Arbeit wie möglich abzunehmen wäre es gut wenn man das schon soweit wie Möglich vorbereiten könnte. Zielplattform ist Linux. Schöne Grüße, Bastian -- Bastian Venthur http://venthur.de Debian Developer venthur at debian org From lists at andreas-jung.com Tue Mar 6 11:38:45 2007 From: lists at andreas-jung.com (Andreas Jung) Date: Tue, 06 Mar 2007 12:38:45 +0100 Subject: [Python-de] =?utf-8?q?E-Mailclient_=C3=B6ffnen?= In-Reply-To: References: Message-ID: <4ED5B5AD8ED1AAEA8956383E@suxmac2.local> --On 6. März 2007 12:33:34 +0100 Bastian Venthur wrote: > Hallo, > > weis jemand von euch ob es irgendwie möglich ist innerhalb von Python > den Composer des Emailclienten aufzurufen? Optimal wäre wenn man das > An-, Betreff- und Inhaltsfeld schon mit Vorgaben belegen könnte. > > Das kann schon nicht klappen, weil es zu viele verschiedenen Email-Clients gibt, die unterschiedlich angesteuert werden wollen. Mein Tipp: vergiss es. -aj -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : nicht verfügbar Dateityp : application/pgp-signature Dateigröße : 186 bytes Beschreibung: nicht verfügbar URL : http://python.net/pipermail/python-de/attachments/20070306/b6c8989f/attachment.pgp From kristian at zimmer428.net Tue Mar 6 11:42:19 2007 From: kristian at zimmer428.net (Kristian Rink) Date: Tue, 6 Mar 2007 12:42:19 +0100 Subject: [Python-de] =?utf-8?q?E-Mailclient_=C3=B6ffnen?= In-Reply-To: References: Message-ID: <20070306124219.7dfaafcc@n428> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Bastian; [Bastian Venthur @ Tue, 06 Mar 2007 12:33:34 +0100] > weis jemand von euch ob es irgendwie möglich ist innerhalb von Python > den Composer des Emailclienten aufzurufen? Optimal wäre wenn man das > An-, Betreff- und Inhaltsfeld schon mit Vorgaben belegen könnte. Ohne es selbst probiert zu haben, ein paar Ideen hierzu: - - Der "Standard-Mail-Client", der in Desktop-Umgebungen wie KDE oder GNOME registriert ist, ist spezifisch für ebendiese DE. Insofern würde ich dort versuchen, die entsprechenden Python-Bindings für KDE / GNOME zu Hilfe zu nehmen und zu hoffen, daß dort solcherartige Funktionalität beinhaltet ist. - - Ansonsten: Wenn Du einen MUA hast, der via Kommandozeile derartige Parameter entgeg