Seite 1 von 1

Problem mit simplen import script

Verfasst: Samstag 23. Juni 2007, 08:10
von EnTeQuAk
Hallo alle zusammen.

Ich schreibe gerade an einem kleinen importscript, das mir ein paar Plugins importiert.

Aussehen tut es zur Zeit so:

Code: Alles auswählen

        root = self.ctx.cfg.get('root_path', '')
        views_path = os.path.abspath(join(root, 'shoxms', 'views'))
        sys.path.append(views_path)

        for view in os.listdir(views_path):
            if not view.endswith('~'):
                if view in sys.modules:
                    continue
                view = view.split('.')[0]
                fp, pathname, description = imp.find_module(view)
                self.mods[view] = imp.load_module(view, fp, pathname, description)
Nun gibt es ein Modul `default`, welches importiert wird, jedoch keine Klassen darin.

Das Ziel ist es, alle Klassen im Modul `default`, die von einer bestimmten Klasse `View` erben aufzuzeichnen.
Die Metaklassen und alles drum und dran existiert und funktioniert.

Aber wie mache ich es nun, das `imp` alles aus dem Modul `default` importiert, damit die Metaklasse `ViewMeta` die von `View` erbenden Klassen aufzeichnen kann?


Ich hoffe ich habe es halbwegs verständlich ausgedrückt ;)

MfG EnTeQuAk

€dit:

Vielleicht auch ganz interessant, was in `self.mods` später drinne steht:

Code: Alles auswählen

{'default': <module 'default' from '/home/ente/development/webshox-svn/shoxms/trunk/shoxms/views/default.pyc'>,
 '': <module '' from '/home/ente/development/webshox-svn/shoxms/trunk/shoxms/views/__init__.pyc'>,
 '__init__': <module '__init__' from '/home/ente/development/webshox-svn/shoxms/trunk/shoxms/views/__init__.pyc'>}
Warum wird `shoxms.views.__init__` zweimal importiert?

Verfasst: Samstag 23. Juni 2007, 09:58
von BlackJack
Nur so geraten: Aber wahrscheinlich hast Du einmal das Paket importiert und damit implizit `__init__.py` und einmal explizit das Modul `__init__.py`.

Verfasst: Samstag 23. Juni 2007, 09:59
von EnTeQuAk
Gut, ich habe das Problem anders gelößt.

Nun habe ich eine Zentrale Konfigurationsdatei, wo alle Pluginklassen aufgelistet werden und nun wird einfach jedes Modul nach diesen durchkämmt.

Ist zwar nicht so wunderschön, funktioniert aber :)

Für weitere Ideen bin ich aber gerne offen!


MfG EnTeQuAk

€dit:

Mensch, da war BlackJack schneller :)
Nur so geraten: Aber wahrscheinlich hast Du einmal das Paket importiert und damit implizit `__init__.py` und einmal explizit das Modul `__init__.py`.
Jepp, das stimmt. Hab vergessen es herauszufiltern.