django-phpBB3

Django, Flask, Bottle, WSGI, CGI…
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

So ich hab ja mit https://github.com/jedie/django-phpBB3 angefangen.

Erstmal ist es nur dafür da, das man an die Daten von einer phpBB3 Installation kommt. Also das man eine gescheite models.py und admin.py hat.

Das kann dann dazu dienen eine Migration zu einer anderen Forumssoftware zu machen. Man kann es aber vielleicht auch ähnlich nutzten wie das existierende https://code.google.com/p/django-phpbb/ Also in einer anderen Django-App an die Daten des Forums anzapfen.

Doch für mich ist es erstmal nur die Grundlage zur Migration. Wenn dann irgendwann mal eine Migration vollzogen ist, werde ich wohl das Projekt nicht großartig weiter führen.

z.Z. sieht alles danach aus, das es nach DjangoBB geht, aber wer weiß... Dazu mehr im anderen Thread: http://www.python-forum.de/viewtopic.ph ... 9&start=75


Hier geht es also um django-phpBB3...

Ich habe schon herraus gefunden, das es hier Informationen zum Datenbank Schema von phpBB gibt:
http://wiki.phpbb.com/Tables
http://www.phpbbdoctor.com/doc_tables.php

Mit einem gehackten Script ( https://github.com/jedie/django-phpBB3/ ... le_desc.py ) konnte ich eine Wiki Seite Auslesen um die Beschreibungen der Tabellen in die models.py und admin.py automatisch zu übernehmen, siehe: https://github.com/jedie/django-phpBB3/ ... 1757810221

Interessant wird es aber z.B. help_text automatisiert auszufüllen. Im Wiki gibt es zu jeder Tabelle eine Unterseite, z.B.: http://wiki.phpbb.com/Table.phpbb_users
Unter der Haupt Seiten steht:
Script used to create this list: User:Pyramide/DB2wiki.
Doch ich könnte noch nicht herraus finden, aus welchen Daten die Wiki Seiten erzeugt werden.

Weiß da jemand mehr zu?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hab ein weiteres script zusammen gehackt um die Wiki Seiten zu parsen: https://github.com/jedie/django-phpBB3/ ... 84eee3b65d

Ergebnis ist dann aktuell das:

Code: Alles auswählen

{'PhpbbAclGroups': {'auth_setting': {'content': 'ACL_YES, ACL_NO or ACL_NEVER',
                                     'default': '0',
                                     'type (MySQL)': 'tinyint(2)'},
                    'description': 'Permission roles and/or individual permissions assigned to groups',
                    'page_name': 'Table.phpbb_acl_groups'},
 'PhpbbAclOptions': {'description': 'List of possible permissions',
                     'founder_only': {'content': 'only founders can have this permission',
                                      'default': '0',
                                      'type (MySQL)': 'tinyint(1) unsigned'},
                     'page_name': 'Table.phpbb_acl_options'},
 'PhpbbAclRoles': {'description': 'Permission roles (Standard Moderator, Simple Moderator etc.)',
                   'page_name': 'Table.phpbb_acl_roles',
                   'role_order': {'content': 'tbd',
                                  'default': '0',
                                  'type (MySQL)': 'smallint(4) unsigned'}},
...
Vollständiges dict: http://pastebin.com/NGKwxHhJ

Muß noch überprüfen ob die Angaben so richtig sind. Als nächstes will ich die Info automaitsch in die models.py einfügen ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ups. War noch ein Fehler drin... Nun speichere ich die geparsten Daten auch in einer datei: https://github.com/jedie/django-phpBB3/ ... el_data.py

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

So, ich hab nun alle Daten die ich aus dem Wiki bekommen hab in der models.py mit dem script https://github.com/jedie/django-phpBB3/ ... _models.py eingearbeitet.

Neben den Meta Daten wie help_text habe ich auch über das Skript die ganzen ForeignKey fields automatisch gesetzt. Dazu noch IntegerField in PositiveIntegerField bzw. PositiveSmallIntegerField geändert und ein "default" gesetzt.

Danach habe ich noch mit https://github.com/jedie/django-phpBB3/ ... _models.py alle Model Klassen Namen umbenannt: Mehrzahl zu Einzahl gemacht.

Getestet habe ich das Ergebnis allerdings noch nicht ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

So, es gab noch eine ganze Reihe an updates. Nun zapfe ich damit auch eine phpBB3 installation an und schaue, wie man den admin bereich Sinnvoll voreinstellen kann...

Da bin ich an zwei Grenzen gestoßen:

1. Zum einen muß Django einen primary_key haben. Ein zusammengesetzter aus mehreren Feldern funktioniert nicht, wird aber in ein/zwei tabellen von phpBB gemacht. Denke die sind aber nicht so wichtig für den Zweck...

2. je nachdem was ich im Admin anzeigen lassen möchte, erhalte ich diesen Fehler:

Code: Alles auswählen

Exception Value: (1116, 'Too many tables; MySQL can only use 61 tables in a join')

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

jens hat geschrieben:2. je nachdem was ich im Admin anzeigen lassen möchte, erhalte ich diesen Fehler:

Code: Alles auswählen

Exception Value: (1116, 'Too many tables; MySQL can only use 61 tables in a join')
Wtf machst du? Du sollst nicht einfach select_related() machen.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

das ist das vom django admin. Ich mache selbst noch überhaupt keine Queries ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Wohl kaum, Django admin macht selbst kein select_related, entweder sind deine __unicode__ methoden kaputt oder du hast list_select_related aktiv oder du zeigst ForeignKeys an…
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Da hast du recht, der Fehler kommt, wenn ich ForeignKeys anzeigen lasse, was ich aber dann vermeide ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Es gibt noch einige Updates...

Ich fange auch gerade mit dem eigentlichen migrations script für DjangoBB...

Nun hab ich auch herraus gefunden, das phpBB die ForeignKey anders nutzt... Das Problem: In der Datenbank wird beim ForeignKey feld nicht "NULL" gesetzt, sindern eine 0 eingetragen... Django möchte somit gern den ForeignKey mit der ID 0 haben, den es natürlich nicht gibt...

Somit gibt es damit probleme:
1. Im Admin kann man solche Felder nicht bearbeiten, btw. leer lassen
2. Beim Zugriff gibt's ein DoesNotExist fehler, statt einem None

Zu 1. hab ich das gemacht:

Code: Alles auswählen

class PhpBBForeignKey(models.ForeignKey):
    """
    phpBB stores a None ForeignKey as a numeric 0
    """
    def get_db_prep_save(self, value, connection):
        if value in ("", None):
            value = 0
        return super(PhpBBForeignKey, self).get_db_prep_save(value, connection)
Wie kann ich diese Klasse erweitern, das ich auch 2. Lösen kann? Btw. nicht mehr umgehen muß?

EDIT: Hab den aktuellen Stand mal committet. Das Migration Skript ist hier:
https://github.com/jedie/django-phpBB3/ ... jangobb.py

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hab den aktuellen Stand nochmal comittet.

Informationen zum migrieren hier: https://github.com/jedie/django-phpBB3# ... o-djangobb

Die Migration ist noch nicht vollständig, aber es geht schon soweit, das die User, Foren, Topics und Posts da sind. Es gibt allerdings noch ein paar offene Fragen, siehe README...

Auf der TODO Liste ist u.a. das Handling von Attachments. Wobei das für mich erstmal nicht so interessant ist.

Sehr schade ist auch, das man die "Benachrichtigungen" nicht migrieren kann, weil das Django ORM nicht mit mehreren PrimaryKeys klar kommt, siehe: https://code.djangoproject.com/wiki/Mul ... rimaryKeys
Man könnte auf "raw SQL" zurück greifen?!?

Encoding und bbcode machen auch noch ärger und das Datum der Beiträge stimmt auch noch nicht...

Halt viele Bugs und einiges zu tun ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Es wird langsam...

Fehler beim encoding lag an meinem Datenbank Dump und hat nichts mit dem Projekt zu tun...

Die Migration läuft nun schon ganz gut. Nun sind all Posts auch da und die Statistiken stimmt auch mit dem Original überein.

Was noch Problematisch ist: Der dolle BBcode... phpBB3 macht da einige komische Dinge. Stichwort: bbcode_uid, bbcode_bitfield usw... In der phpBB Datenbank stehen halt noch ein paar "Meta" Informationen und nicht nur bbcode pur...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

jens hat geschrieben:Was noch Problematisch ist: Der dolle BBcode... phpBB3 macht da einige komische Dinge. Stichwort: bbcode_uid, bbcode_bitfield usw... In der phpBB Datenbank stehen halt noch ein paar "Meta" Informationen und nicht nur bbcode pur...
der github User 'nitely' hat get_cleaned_bbcode() und phpbb_html2bbcode() implementiert:
https://github.com/nitely/django-phpBB3 ... ls.py#L705

Ich werde mir das nächste Woche mal ansehen...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

jens hat geschrieben:der github User 'nitely' hat get_cleaned_bbcode() und phpbb_html2bbcode() implementiert:
https://github.com/nitely/django-phpBB3 ... ls.py#L705
Hab das ganze nochmal etwas angepasst. Nun macht bbcode und html entities kein Problem mehr...

Was jetzt noch fehlt, sind die Dateianhänge in den Posts. Dann wäre die Migration komplett.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

jens hat geschrieben:Was jetzt noch fehlt, sind die Dateianhänge in den Posts. Dann wäre die Migration komplett.
Dateianhänge werden nun auch migriert... Doch ganz komplett ist es noch nicht, denn:
jens hat geschrieben:Sehr schade ist auch, das man die "Benachrichtigungen" nicht migrieren kann, weil das Django ORM nicht mit mehreren PrimaryKeys klar kommt, siehe: https://code.djangoproject.com/wiki/Mul ... rimaryKeys
Man könnte auf "raw SQL" zurück greifen?!?
siehe auch https://github.com/jedie/django-phpBB3/issues/5

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mit https://github.com/jedie/django-phpBB3/ ... 06d4425f5c werden nun auch die "Benachrichtigungen" migriert.

Nun fehlt nichts mehr!

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

jens hat geschrieben:Nun fehlt nichts mehr!
Warum muss ich bloß an "beruehmte letzte Worte denken" :roll:
Benutzeravatar
Kebap
User
Beiträge: 772
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Ich denk mehr so: Wow, gute Arbeit, da ist ja schon einiges zusammengekommen! 8)
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

re cofi: Nunja, wenn ich mein Forum migriert habe, fällt natürlich das Interesse am django-phpBB3 auf nahezu Null und für die Migration fehlt aus meinen Augen nichts mehr ;)

Aber vielleicht ist das Projekt ja für den ein oder anderen interessant. Kann man z.B. auch nutzten um die Daten einer weiterlaufendem phpBB Forum anzuzapfen. z.B. um RSS Feeds zu generieren oder Spam User schneller zu löschen oder so... Halt Erweiterungen in Python für phpBB ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Wäre es nicht möglich, mal mit einer Kopie der DB dieses Forums (die ja vielleicht Damaskus zur Verfügung stellt) nur so zum Spaß mal die Migration zu testen und zu schauen, wie denn eine django-basierte Variante dieses Forums so aussähe? Wenn dieser elendige Bug mit & in Code-Segmenten verschwinden würde, wäre doch etwas gewonnen.

Und wenn ich dann noch Markdown (in der Github-Variante mit ```sprache ... ``` für einfaches Syntax-Highlighting) als alternatives Eingabeformat haben könnte, wäre ich auch für Python und gegen PHP und motiviert, das einzubauen zu helfen :)

Stefan
Antworten