Admin Interface für SQLAlchemy mit ExtJS

Du hast eine Idee für ein Projekt?
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Zunächst mal habe ich diverse Projekte mittlerweile auf Werkzeug und SQLAlchemy umgestellt und es ist definitiv das Beste, was ich bisher benutzt habe.

Ein Frontend würde mir sehr gefallen. Meine langjährige JavaScript-Abstinenz habe ich durch jQuery wieder aufgegeben. Seit kurzem arbeite ich mit ExtJS und bin davon für entsprechend geeignete Einsatzzwecke recht angetan (auf jeden Fall besser als qooxdoo sowie diverse halbherzige JS-UI-Lösungen). JavaScript ist in abgestecktem Einsatz (z. B. eben nur für Administratoren) durchaus akzeptabel, eine der besten Lösungen für clientseitige Programmierung (zumal browserübergreifend von Haus aus vorhanden und durch jüngste Entwicklungen mit enormem Geschwindigkeitszuwachs) im Web und vereinfacht für mich die Programmierung von Web-Anwendungen dadurch enorm, dass ich viele Requests nur noch mit einem 200 oder 204 anstatt von Redirects oder Template-Platzhalter-Füllungen beantworte und dann per JS das weitere Verhalten festlege.

Mir gefällt also die Kombination dieser drei Komponenten zu einem DB-(Schema-)Frontend sehr gut und ich traue veers das auch zu. Die Lizenz von ExtJS sollte keine unnötigen Einschränkungen mit sich bringen; GPL(3) an sich bietet sich vielleicht sogar an, nur die Einschränkungen gegenüber den Entwicklern durch den ExtJS-Hersteller sind teilweise wirklich unschön.

Wichtig ist mir, dass an dem Gelöt später kein Klimmbimm wie Django oder TurboGears (und das trifft IIRC für ToscaWidgets und damit RUM zu, nehme ich an?) dranhängt, sondern es schlank daher kommt.

Ich selbst habe übrigens irgendwann endlich PHP von meinem Server verbannt - und damit auch phpMyAdmin. Und bald auch MySQL. Daher würde ich eine Lösung sehr freuen, die:
- kein PHP benötigt
- mit MySQL, PostgreSQL und generell recht DBMS-unabhängig funktioniert (was SA ja in recht großem Stil bietet)
- auf dem Server läuft (auch wenn GUI-Client und ssh für mich bisher eine akzeptable Lösung darstellen)
- am Ende keinen doofen Namen ("pythonSqlAdmin") hat ;)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Y0Gi hat geschrieben:Ich selbst habe übrigens irgendwann endlich PHP von meinem Server verbannt - und damit auch phpMyAdmin.
Oh, ich sehe dass ich nicht der einzige bin, der Sicherheit/Administrationsaufwand gegeneinander abgewägt hat und PHP und MySQL den Laufpass gegeben hat. 8)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

So sieht's aus. Da ich nicht in der Verlegenheit bin, in PHP geschriebene Anwendungen auf meinem Server laufen zu lassen und mir die zahlreichen PHP-Angriffsversuche in meinen Logs doch etwas zu denken gegeben haben, war für mich der Preis für phpMyAdmin zu hoch. Zwar erfordern Client-GUI-Anwendungen die lokale Installation auf dem System, von dem aus man sie benutzen will. Dafür ist ein SSH-Portforward deutlich sicherer und einfacher, als phpMyAdmin nach Außen abzudichten, wo es doch grundlegend von jedem mit einem Webbrowser zugänglich ist, wenn man in der Konfiguration doch mal irgendwie Mist gebaut hat.

Zu PostgreSQL migriere ich gerade, weil *richtige* FK-Abhängigkeiten, vernünftiger Umgang mit Unicode etc. doch irgendwie wichtig oder zumindest hilfreich sind. Spätestens bei dem Versuch, die abartigen Exports von MySQL in ein zumindest nennenswert standardkonformes RDBMS zu importieren, hat sich mir die Richtigkeit dieser Entscheidung erschlossen.

Um wieder den Bogen zum Thema zu schlagen: Mit dem angedachten Tool sollte es möglich sein, es lokal zu installieren und zu nutzen, um dabei auf eine entfernte Datenbank zuzugreifen, um eine Offenbarung per Webserver mit anschließend erforderlicher Absicherung zu vermeiden. Das sollte sogar phpMyAdmin können.
brickenstein
User
Beiträge: 13
Registriert: Sonntag 23. November 2008, 16:18

Die Fehler haben mit dem Server zu tun (es ist allerdings geplant toscawidgets.org demnächst auf einen anderen Server zu migrieren).
Wer RUM lokal ausprobieren möchte,
findet hier eine Anleitung:
http://groups.google.com/group/turbogea ... a5f7866963
Gruß,
Michael
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Worauf basiert TG bzw. die verwendete Version diesbezüglich eigentlich? Klar, Abhängigkeiten in allen Ehren, aber für so ein Tool möchte ich das ganze Geraffel (insbesondere wenn so halbgares Zeug wie Paste im Hintergrund sitzt) eigentlich ungern installieren. Genau deswegen gefällt mir ja Werkzeug so gut, weil es eine durchdachte Basis darstellt ohne Boilerplate-Code mitzubringen. Weniger ist mehr und so ;)
brickenstein
User
Beiträge: 13
Registriert: Sonntag 23. November 2008, 16:18

Zuallererst:
RUM ist unabhängig von TG (als WSGI-Applikation).
D.h. RUM ist insbesondere in jede andere
(mittels Deines Lieblings WSGI-Framework geschriebene)
WSGI-Applikation
einbinden
und kann dort über PEAK Rules z.B. die Userauthentifizierungsdaten,
die Deine Anwendung liefert,
berücksichtigen.

Ein paar Komponenten wie WebOb,...
benutzen wir schon direkt in RUM.

Zu TG:
TurboGears 1 baut auf CherryPy, Kid, SQLObject/SQLAlchemy auf
TurboGears 2 wechselt von CherryPy -> Pylons/Paste.

Das Verhältnis von TG zu RUM ist, dass RUM als GSOC-Projekt für TurboGears entstanden ist.
Warum Du allerdings Paste als halbgares Zeug bezeichnest ist mir nicht ganz klar.

Gruß,
Michael
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Ich kann dir nicht ganz folgen. Basiert RUM also nicht auf dem TG-Framework, sondern ist eine eigenständige WSGI-Applikation mit WebOb als WSGI-Adapter?

Dass du von der Einbindung von RUM in eine andere Anwendung redest, ist interessant. Bisher hatte ich eine separate Anwendung vor Augen; kann RUM das auch sein? Als generisches Frontend für eine Datenbank, die es mittels der Fähigkeiten von SQLAlchemy reflektiert?
brickenstein
User
Beiträge: 13
Registriert: Sonntag 23. November 2008, 16:18

Eigentlich hast Du das schon recht gut verstanden:
RUM basiert nicht auf TurboGears, sondern ist eine reine WSGI-Applikation.

RUM kann man auch im stand-alone Modus betreiben, gar kein Problem.
Normalerweise ist das auch das, was wir während der Entwicklung tun.

Zur Reflektion:
Ich habe an Datenbankreflektion im Stil von SQLSoup gearbeitet.
Für Testzwecke (um RUM zu testen) und sehr kleine Projekte kann das interessant sein.
Es gibt ein Skript, das man aufrufen kann:
rumalchemy [options] url
wobei die URL die URL der Datenbank ist.

Für einen ersthaften Einsatz würde ich in jedem Fall empfehlen ein SQLAlchemy-Model zu schreiben, weil man gewisse Dinge doch anpassen kann.
Das SQLAlchemy-Model selbst kann allerdings, wenn Du das (wie ich) bevorzugst, die Tabellen selbst von der Datenbank reflektieren und nur einige wenige Dinge anpassen.

Soweit ich Deinen Einsatszweck verstanden habe, sollte es gut dafür geeignet sein: als generisches Frontend für Datenbanken.
Gruß,
Michael
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Ah, das hört sich doch schon besser an.

Eigentlich bevorzuge ich es, das Model in Python zu definieren und daraus dann SQL-CREATE-Statements zu generieren. Ein Frontend möchte ich aber nicht in jede Anwendung integrieren und unabhängiges möchte ich nicht mit dem Model füttern (Import-Abhängigkeiten des Models etc.). Daher würde ich eine zentrale Instanz des Frontends vorziehen, die eben Reflektion nutzt.
brickenstein
User
Beiträge: 13
Registriert: Sonntag 23. November 2008, 16:18

Also wie gesagt, wir haben eine Reflektionsebene, die nur unter Angabe der URL funktioniert.

Du solltest einfach erst einmal ausprobieren, ob das für Deine Zwecke ausreicht.
RUM ist sehr mächtig, d.h. wir zielen auch darauf, dass man es Endnutzern in die Hand geben kann.
Reflektion funktioniert bis zu einem bestimmten Grad gut:
- Spaltentypen auslesen
- Eigenschaften wie nullable, maximale Lenge von Texteinträgen reflektiere
- einige Relationen erkennen (vor Allem one-to-many)

Problematischer wird es bei Dingen, wie dem Zusammenspiel von Tabellen (Relationen).

Aber probier es erst einmal einfach aus, wie es mit Deinen Daten aussieht.

Unser Code, die Modelle automatisch zu erstellen beruht auf einer verbesserten Version von SQLSoup.

Gruß,
Michael
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

RUM scheint ja wirklich nett zu sein, allerdings hat es mir ein paar zu viele Abhängigkeiten, aber vlt wird ja aus nem werkzeug fork was :)

EDIT:// Btw bringt mal eure Abhängigkeiten in Ordnung...
(installiert es mal wie in den Docs beschrieben mit virtualenv --no-site-packages --> fail!). Ich hab mich jetzt halbwegs drum rumgewurschtelt, vlt komm ich heut noch zum testen^^

EDIT2:// Btw in euere setup.cfg ist ne toscawidgets indexurl, dadurch kann ein user, der sich nicht auskennt Routes 1.10 nicht installieren, da das auf der indexseite nicht ist...

EDIT3:// Erster Aufruf dauert ewig, auch wenn Introspection nen dev Feature ist, es gehört gleich beim serverstart gemacht, sonst wartet man sich zu tode.
brickenstein
User
Beiträge: 13
Registriert: Sonntag 23. November 2008, 16:18

Hi danke auch für die Hinweise zum Setup, ich versuche zu verbessern, was ich kann (leider bin ich auf toscawidgets.org kein admin).

Zum Testen würde ich sicherstellen,
dass Du die aktuelle Mercurial Distribution benutzt,
die ist viel weiter fortgeschritten und stabiler als die 0.1.

http://groups.google.com/group/turbogea ... a5f7866963

Gruß,
Michael
brickenstein
User
Beiträge: 13
Registriert: Sonntag 23. November 2008, 16:18

ok, index rausgenommen (in aktueller mercurial version).
Danke.

Die Geschwindigkeit ist definitiv noch zu optimieren.
Mir ist allerdings aufgefallen, dass das Ding auf meinem lahmen Webserver im Produktivmod gar nicht mal so langsam ist (das Logging scheint noch viel Platz wegzunehmen). Im Profiler sind mir außerdem die Routes als Performancefresser aufgefallen (ich hoffe, dass ich das richtig interpretiert habe, hat mich allerdings sehr verwundert).
Gruß,
Michael
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Catwalk 2.0 scheint nun auch auf SQLAlchemy abzuzielen. Wäre evtl auch ein brauchbares Werkzeug. :wink:
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
brickenstein
User
Beiträge: 13
Registriert: Sonntag 23. November 2008, 16:18

RUM 0.2 ist gerade frisch released worden

Hier die neue Homepage:
http://python-rum.org/

und das Announcement
http://groups.google.com/group/rum-disc ... 0ed72c394c

Die Demo auf dem neuen Server
http://demo.python-rum.org/
sollte jetzt auch besser funktionieren.

Gruß,
Michael
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Läuft immer noch langsam aber wenigstens Fehlerfrei. Auch das UI scheint jetzt etwas hübscher zu sein (auch wenn es immer noch nach Programmierer riecht :wink: ). Was mir gerade so spontant auffällt, Relationen werden mit <Select> Listen dargestellt. Das skaliert nicht gerade gut mit mehr als 10 Datensätzen. Sortieren nach Fremdschlüsseln scheint auch nicht zu gehen. Werde es mir dann mal genauer ansehen wenn ich mehr Zeit dazu habe.

Und zum eigentlichen Topic, nach dem ich von legal@extjs.com immer noch keine Antworten bezüglich ihrer Lizenzpolitik bekommen habe wird mir das langsam aber sicher zu blöd.

- Jonas
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
brickenstein
User
Beiträge: 13
Registriert: Sonntag 23. November 2008, 16:18

In der aktuellen Version haben wir auf schöne JS-Funktionalität zur Bearbeitung von Relationen verzichtet.
Das ist aber ein sehr wichtiger Punkt für uns. Wir bevorzugen allerdings Dojo.
Ich persönlich habe RUM im produktiven Einsatz und dort dann entsprechende Ajax-Widgets eingesetzt (es lässt sich nahezu Alles anpassen).

Übrigens sind die initialen Ladezeiten deutlich verringert (wenn eine Seite das erste Mal aufgerufen wird).

@veers: Du scheinst nicht der einzige zu sein, der von der ExtJS-Lizenzpolitik ermüdet ist.

Michael
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

veers hat geschrieben:nach dem ich von legal@extjs.com immer noch keine Antworten bezüglich ihrer Lizenzpolitik bekommen habe wird mir das langsam aber sicher zu blöd.
Was ist denn bei http://extjs.com/products/license.php noch unklar?

Stefan
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

sma hat geschrieben:
veers hat geschrieben:nach dem ich von legal@extjs.com immer noch keine Antworten bezüglich ihrer Lizenzpolitik bekommen habe wird mir das langsam aber sicher zu blöd.
Was ist denn bei http://extjs.com/products/license.php noch unklar?

Stefan
Wenn ich eine Webanwendung baue welche Ext als GUI Library verwendet, ist dann die Webanwendung als ganzes ein abgeleitetes Werk? Was wenn ich eine bestehende Anwendung mit ExtJS erweitere wird diese dann ein Abgeleitetes Werk (wäre ja irgend wie lächerlich...)? Und noch viel wichtiger, wenn dem so ist, und diese öffentlich erreichbar ist, und somit die Ext *.js Files verteilt, zählt das als Veröffentlichung und muss ich dann jedem Besucher den Quellcode meiner Website zugänglich machen?

- Jonas
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

veers hat geschrieben:Wenn ich eine Webanwendung baue welche Ext als GUI Library verwendet, ist dann die Webanwendung als ganzes ein abgeleitetes Werk? Was wenn ich eine bestehende Anwendung mit ExtJS erweitere wird diese dann ein Abgeleitetes Werk (wäre ja irgend wie lächerlich...)?
Die Frage ist nicht weiter wichtig. Schau dir die "Open Source License Exception for Applications" an: Wenn es eine Anwendung und keine weitere Bibliothek und open-source nach einer der aufgelisteten Lizenzen ist, dann ist das okay. GPLv3 ist auch für Bibliotheken okay.
veers hat geschrieben:Und noch viel wichtiger, wenn dem so ist, und diese öffentlich erreichbar ist, und somit die Ext *.js Files verteilt, zählt das als Veröffentlichung und muss ich dann jedem Besucher den Quellcode meiner Website zugänglich machen?
Die *.js-Dateien sind doch bereits der Quelltext. Und ansonsten reicht doch ein Link auf extjs.com.

Stefan
Antworten