XML_Objects - Tester und Kritiker gesucht

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

XML_Objects - Tester und Kritiker gesucht

Beitragvon Dookie » Samstag 17. Juli 2004, 00:04

Hallo Leute,

ich hab da ein (nicht mehr so ganz) relativ kleines Modul um Objekte in eine XML-Datei zu schreiben und diese aus einer XML-Datei wieder zu laden.
XML_Objects.py
Edit: Python-Code von Dookie gelöscht und ausgelagert

Wie ihr seht, werden von XML_Object abgeleitete Klassen automatisch registriert und können so ohne Umschweife mit den Daten aus einem XML-File wiederhergestellt werden.
Falls ihr Fragen oder Anregungen oder sonstige Kritik habt, einfach her damit.


Gruß

Dookie
Zuletzt geändert von Dookie am Montag 19. Juli 2004, 22:09, insgesamt 2-mal geändert.

Code: Alles auswählen

#!/usr/bin/env python
import this
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Kleines Update

Beitragvon Dookie » Samstag 17. Juli 2004, 13:20

Hallo nochmal,

ich hab jetzt ein kleines Update hochgeladen
http://www.boa3d.de/python/modules/XML_Objects.php
http://www.boa3d.de/python/modules/XML_Object_Test.py

Die Schnittstellenmethoden für XML_Object-Klassen beginnen jetzt mit xml_ also xml_get_children(...), xml_add_child(...) und xml_add_cdata(...) (neu)
to_xml(indent) und attrs_to_xml() bleiben so.

Jetzt werden auch cdata-Abschnitte im xml behandelt. <br/>Tags werden als '\n' an xml_add_cdata(...) übergeben.


Gruß

Dookie
Zuletzt geändert von Dookie am Freitag 23. Juli 2004, 23:19, insgesamt 1-mal geändert.

Code: Alles auswählen

#!/usr/bin/env python
import this
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Re: XML_Objects - Tester und Kritiker gesucht

Beitragvon Milan » Sonntag 18. Juli 2004, 10:33

Dookie hat geschrieben:

Code: Alles auswählen

import os
from XML_Objects import XML_Object


class Container(XML_Object, list):
    __slots__ = {"name" : str, "flag" : bool}
   
    def __init__(self, **kw):
        self.name = kw.pop("name", "nobody")
        self.flag = kw.pop("flag", False)
        super(Container,self).__init__(**kw)

class Vector(XML_Object):
    __slots__ = dict.fromkeys(('x', 'y', 'z'), float)
   
    def __init__(self, x = 0.0, y = 0.0, z = 0.0):
        self.x = x
        self.y = y
        self.z = z
        super(Vector, self).__init__()


Hi. Das ist ein Abschnitt, den ich nicht ganz verstehe... Ich kenn mich noch nicht mit super aus und versteh deswegen nicht, was hier gemacht wird. Kannst du das nochmal erklären? Grob verstanden hab ich: du baust einen listenähnlichen Behälter... aber wie hängt das genau zusammen?

thx, Milan
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Sonntag 18. Juli 2004, 12:48

Hi Milan,

Container ist ein Test, wie man auf einfachste Art und Weise eine Klasse erstellen kann, die in erster Linie Child-Objekte enthält. Dafür bietet sich eben eine Liste an und es liegt nahe den Container von XML_Object und list abzuleiten.

Code: Alles auswählen

        super(container,self).__init__(**kw)

würde man in "oldstyle"-Klassen so

Code: Alles auswählen

        XML_Object.__init__(self, **kw)
        list.__init__(self, **kw)

schreiben. Super kümmert sich darum, welche Basisklassen in welcher Reihenfolge aufgerufen werden und bei Mehrfachvererbung, wie in dem Beispiel auch darum, daß gemeinsame Basisklassen von von Basisklassen nicht mehrfach aufgerufen werden.

Zu super werd ich im Allgemeinenforum noch was posten, dürfte ja allgemeines Interesse finden.

Das Ganze Modul ist noch im Alphastadium, also es kann sich in den nächsten Tagen noch einiges auch an den Schnittstellen ändern. Ich werds aber in einer Woch oder so freezen, dann bleiben die Schnittstellen unangetastet abgesehen von eventuellen Erweiterungen.


Gruß

Dookie

Code: Alles auswählen

#!/usr/bin/env python
import this
Benutzeravatar
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

Beitragvon fs111 » Sonntag 18. Juli 2004, 14:56

Frage: Wo ist der Unterschied zwischen Deinem Modul und dem hier:

http://pyxml.sourceforge.net/topics/howto/node26.html

fs111
Pydoc-Integration in vim - Feedback willkommen: http://www.vim.org/scripts/script.php?script_id=910
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Sonntag 18. Juli 2004, 16:04

hi fs111,

ich hab mal probeweise ein

Code: Alles auswählen

print generic.dumps(root)

eingefügt bei meinem Beispiel. Als Ausgabe bekam ich dann:

Code: Alles auswählen

Traceback (most recent call last):
  File "XML_Object_Test.py", line 55, in ?
    print generic.dumps(root)
  File "/usr/lib/python2.3/site-packages/_xmlplus/marshal/generic.py", line 59, in dumps
    L = [self.PROLOGUE + self.DTD] + self.m_root(value, dict)
  File "/usr/lib/python2.3/site-packages/_xmlplus/marshal/generic.py", line 104, in m_root
    L = ['<%s>' % name] + self._marshal(value,dict) + ['</%s>' % name]
  File "/usr/lib/python2.3/site-packages/_xmlplus/marshal/generic.py", line 92, in _marshal
    return getattr(self, meth)(value, dict)
AttributeError: Marshaller instance has no attribute 'm_Container'


tja, is schon ein kleiner unterschied ;)

Gruß

Dookie

Code: Alles auswählen

#!/usr/bin/env python
import this
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Sonntag 18. Juli 2004, 18:04

Ich hab mir jetzt mal das xml.marshalling angeschaut. Das ist ja recht nett, solange man sich auf Basistypen von Python beschränkt. Da ist aber pickle sicher besser geeignet um solche Daten zu speichern und zu laden.

Mein Modul ist eher geegnet für Daten, die in hierarchischen Strukturen gespeichert werden. Insbesondere Applikationen, die eine Pluginschnittstelle zur Verfügung stellen, die es erlaubt eigene Objekte in einer Applikation zu verarbeiten, könnten von meinem Modul profitieren. Die Appliktion stellt dann für die Plugins z.B. eine Base_Object-Klasse zur verfügung, welche von XML_Object abgeleitet ist. Das Plugin erstellt jetzt seine eigene Klasse, die von Base_Object, oder einer davon abgeleiteten Klasse, abgeleitet ist und gibt in __slots__ an welche Attribute die Klasse hat und von welchem Typ diese sind. Mehr brauchts nicht um auch diese Objekte in einer XML-Datei zu speichern und wieder zu laden.

Ausserdem ist es auch ein schönes Beispiel, was mit Newstyleklassen alles möglich ist. Hier kann ich auch mal zeigen, wofür Metaklassen zu gebrauchen sind.


Gruß

Dookie

Code: Alles auswählen

#!/usr/bin/env python
import this
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Montag 19. Juli 2004, 16:10

so ich hab mal wieder geupdatet, jetzt gibts Version 1.0a

http://www.boa3d.de/python/modules/XML_Objects.php
http://www.boa3d.de/python/modules/XML_Object_Test.py

fs111 hat mich auf die Idee gebracht auch Builtin-Objecte von Python (int, float, tuple, list, dict ...) in das xml zu speichern.

Ich werde noch ein sinnvolleres Beispiel coden und auch eine Seite mit genauerer Beschreibung onlinestellen.


Gruß

Dookie
Zuletzt geändert von Dookie am Freitag 23. Juli 2004, 23:20, insgesamt 1-mal geändert.

Code: Alles auswählen

#!/usr/bin/env python
import this
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Montag 19. Juli 2004, 22:16

Hallo,

jetzt gibts eine eigene Seite für das Projekt.
http://www.boa3d.de/python/modules/XML_Objects.php
Ist noch etwas Baustelle aber ich arbeite daran :)


Gruß

Dookie

Code: Alles auswählen

#!/usr/bin/env python
import this
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Donnerstag 22. Juli 2004, 00:17

Hallo schon wieder,

ich jetzt gibts Version 1.0.4a von XML_Objects
Neben dem Speichern und Laden von Builtin-Typen können jetzt auch Objekte aus Modulen die (noch) nicht importiert wurden aus der XML-Datei geladen werden. Alle Objekte, die sich mittels <modul>.<class>(iterable) oder <modul>.<class>(string) erzeugen lassen können ohne irgendwie registriert zu werden aus einer XML-Datei geladen werden. Siehe auch das Beispiel am Ende vom Pythonsource mit sets.Set.


Gruß

Dookie
Zuletzt geändert von Dookie am Freitag 23. Juli 2004, 23:21, insgesamt 1-mal geändert.

Code: Alles auswählen

#!/usr/bin/env python
import this
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Freitag 23. Juli 2004, 23:11

Hallo,

XML_Objects ist jetzt in die Betaphase eingetreten.
XML_Objects
Ich würd mich mal über Feedback freuen.


Gruß

Dookie

Code: Alles auswählen

#!/usr/bin/env python
import this
Benutzeravatar
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

Beitragvon fs111 » Samstag 24. Juli 2004, 15:26

Hast Du die Doku per Hand gemacht, oder sowas wei epydoc oder HappyDoc bennutzt?

fs111
Pydoc-Integration in vim - Feedback willkommen: http://www.vim.org/scripts/script.php?script_id=910
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Samstag 24. Juli 2004, 16:04

die Doku ist Handarbeit 8)
Alles mit vim.


Gruß

Dookie

Code: Alles auswählen

#!/usr/bin/env python
import this
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Sonntag 25. Juli 2004, 10:51

Dookie hat geschrieben:Hallo,

XML_Objects ist jetzt in die Betaphase eingetreten.
XML_Objects
Ich würd mich mal über Feedback freuen.


Gruß

Dookie


HI. Ich freu mich sehr drüber, denn das ist bestimmt wahnsinnig praktisch, aber zum richtigen Testen werd ich erst nächste Woche kommen. Du musst dich noch solange gedulden :oops: :wink:
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Sonntag 25. Juli 2004, 17:56

Inzwischen habe ich auch noch einen Mechanismus eingebaut, der es möglich macht, wenn ein Objekt aus einem noch nicht installierten Modul aus einer XML-Datei gelesen wird, darauf im Progamm zu reagieren und z.B. dem User zu ermöglichen dieses Modul zu installieren. Auch die Dokumentation habe ich jetzt noch etwas vervollständigt, ich arbeite aber noch weiter daran, also immer mal wieder auf die Seite schauen.


Gruß

Dookie

Code: Alles auswählen

#!/usr/bin/env python
import this

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder