del net-oscar
[learning-git.git] / pgworksheet_yvesf / pgw / Plugin.py
blob4ed6d920b8c837a66bacb2228af91a92ca885628
1 # -*- coding: utf-8; -*-
3 #This Class contains Code from http://cheeseshop.python.org/pypi/sprinkles
4 # License :: OSI Approved :: MIT License
5 # Author: Andy Smith <sprinkles_py at anarkystic com>
6 # Home Page: http://an9.org/w/SprinklesPy
7 # License: MIT License
9 import pygtk;
10 import gtk;
11 import imp;
12 import os
14 #Prototype, subclass it to creat a Plugin
15 class SidebarPlugin(gtk.VBox):
16 name = "Default Name, forgot to set it?"
17 def __init__(self, ui):
18 gtk.VBox.__init__(self)
19 self.db = ui.db
20 self.ui = ui
21 def on_init(self):
22 pass #to be overwritten
23 def on_connection(self):
24 pass #to be used also
26 class ResultViewPlugin(gtk.HBox):
27 name = "Default Name"
28 def __init__(self, ui, result):
29 gtk.HBox.__init__(self)
30 self.ui = ui
31 self.result = result
33 def update(self):
34 raise Exception( "Plugin:: update() should be overwritten" )
36 def on_init(self):
37 print "on_init should be overwritten"
39 class QueryViewPlugin(gtk.HBox):
40 name = "Default Name"
41 def __init__(self, db, result):
42 gtk.HBox.__init__(self)
43 self.db = db
44 self.result = result
47 def get_files(path):
48 ret = []
49 for root, dirs, files in os.walk(path, topdown=False):
50 for file in files:
51 if not str(file).startswith(".") and str(file).endswith(".py"):
52 ret.append(os.path.join(root, file))
53 return ret
55 def fromPath(path, subclass=None):
56 def filterer(item):
57 return issubclass(item, subclass)
59 print "Plugins: "+'Looking for sprinkles in path: %s...'%(path)
60 o = []
62 files = get_files(path)
63 for f in files:
64 print "Plugins: "+'Found file: %s'%(f)
65 loaded = fromFile(os.path.dirname(f), os.path.basename(f))
66 o = o + loaded
67 if subclass:
68 print "Plugins: "+'Filtering with %s'%(subclass)
69 o = filter(filterer, o)
70 print "Plugins: Passed: %s"%(o)
71 return o
73 def fromFile(path, filename, filterer=None):
74 o = []
75 mod_name = os.path.splitext(filename)[0]
76 new_mod = None
77 try:
78 fp, pathname, desc = imp.find_module(mod_name,[path])
79 try:
80 new_mod = imp.load_module(mod_name,fp,pathname,desc)
81 print "Plugins: "+'Loaded: %s'%(new_mod)
82 finally:
83 if fp: fp.close()
84 except ImportError, err:
85 print "Plugins: "+'Failed to import %s, %s'%(mod_name, err)
86 if not new_mod:
87 return []
88 o = fromModule(new_mod)
89 if filterer:
90 o = filter(filterer, o)
91 return o
93 def fromModule(mod, filterer=None):
94 o = []
95 if type(mod) is type(""):
96 mod = _import(mod)
97 if hasattr(mod, "EXPORTS"):
98 s = getattr(mod, "EXPORTS")
99 else:
100 #s = [getattr(mod, x) for x in dir(mod)]
101 s=[]
102 #s = filter(lambda _: (type(_) is type(object)), s)
103 #o = filter(SidebarPlugin.implementedBy, s)
104 #TODO
105 #print "Plugins: "+"Found sprinkles: %s"%(o)
106 # if filterer:
107 # print "Plugins: "+'Filtering %s with %s'%(o, filterer)
108 # o = filter(filterer, o)
109 return s