author | Radek Brich <radek.brich@devl.cz> |
Thu, 31 Jan 2013 13:41:48 +0100 | |
changeset 64 | 687e18e5ca93 |
parent 11 | bc69eca59041 |
child 76 | 3a41b351b122 |
permissions | -rw-r--r-- |
11
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
1 |
import time |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
2 |
import gobject, gtk, pango, cairo |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
3 |
import gtksourceview2 as gtksourceview |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
4 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
5 |
import psycopg2 |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
6 |
import psycopg2.extensions |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
7 |
import psycopg2.extras |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
8 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
9 |
from pgconsole.config import cfg |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
10 |
from pgconsole.editor import Editor |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
11 |
from pgconsole.dataview import DataView |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
12 |
from pgconsole.database import Database, BadConnectionError, DatabaseError |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
13 |
from pgconsole.settings import Settings |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
14 |
from pgconsole.panedext import HPanedExt, VPanedExt |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
15 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
16 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
17 |
class PgConsoleApp: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
18 |
def __init__(self): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
19 |
self.db = Database() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
20 |
self.conn = None |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
21 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
22 |
win = gtk.Window(gtk.WINDOW_TOPLEVEL) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
23 |
self.win = win |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
24 |
win.set_title('PostgreSQL Console') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
25 |
win.set_size_request(300, 200) # minimal size |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
26 |
win.set_default_size(800, 600) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
27 |
self.restore_window_size() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
28 |
win.connect("destroy", self.destroy) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
29 |
win.connect("key_press_event", self.keypress) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
30 |
win.connect('configure-event', self.on_configure) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
31 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
32 |
# toolbar |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
33 |
toolbar = gtk.Toolbar() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
34 |
toolbar.set_style(gtk.TOOLBAR_ICONS) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
35 |
toolbar.set_property("icon-size", gtk.ICON_SIZE_SMALL_TOOLBAR) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
36 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
37 |
tb = gtk.ToolButton(gtk.STOCK_PREFERENCES) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
38 |
tb.set_label('Settings') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
39 |
tb.set_tooltip_text('Settings') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
40 |
tb.connect('clicked', self.settings) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
41 |
self.tb_settings = tb |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
42 |
toolbar.add(tb) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
43 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
44 |
self.cb_server = gtk.combo_box_entry_new_text() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
45 |
self.cb_server.set_tooltip_text('Server') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
46 |
self.cb_server.get_child().set_property("editable", False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
47 |
self.cb_server.set_property("add_tearoffs", True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
48 |
#self.cb_server.set_property("focus-on-click", False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
49 |
self.cb_server.set_property("can-focus", True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
50 |
self.cb_server.connect('changed', self.on_server_changed) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
51 |
self.cb_server.connect("key_press_event", self.toolbar_server_keypress) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
52 |
ti = gtk.ToolItem() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
53 |
ti.add(self.cb_server) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
54 |
toolbar.add(ti) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
55 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
56 |
self.cb_dbname = gtk.combo_box_entry_new_text() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
57 |
self.cb_dbname.set_tooltip_text('Database') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
58 |
self.cb_dbname.get_child().set_property("editable", False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
59 |
self.cb_dbname.set_property("add_tearoffs", True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
60 |
#self.cb_dbname.set_property("focus-on-click", False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
61 |
self.cb_dbname.set_property("can-focus", True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
62 |
ti = gtk.ToolItem() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
63 |
ti.add(self.cb_dbname) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
64 |
toolbar.add(ti) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
65 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
66 |
tb = gtk.ToolButton(gtk.STOCK_CONNECT) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
67 |
tb.set_label('Connect') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
68 |
tb.set_tooltip_text('Connect') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
69 |
tb.connect('clicked', self.connect) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
70 |
toolbar.add(tb) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
71 |
self.tb_connect = tb |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
72 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
73 |
sep = gtk.SeparatorToolItem() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
74 |
toolbar.add(sep) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
75 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
76 |
tb = gtk.ToolButton(gtk.STOCK_EXECUTE) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
77 |
tb.set_label('Execute') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
78 |
tb.set_tooltip_text('Execute') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
79 |
tb.connect('clicked', self.execute) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
80 |
toolbar.add(tb) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
81 |
tb.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
82 |
self.tb_execute = tb |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
83 |
tb = gtk.ToolButton(gtk.STOCK_NEW) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
84 |
tb.set_label('Begin transaction') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
85 |
tb.set_tooltip_text('Begin transaction') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
86 |
tb.connect('clicked', self.begin) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
87 |
tb.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
88 |
toolbar.add(tb) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
89 |
self.tb_begin = tb |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
90 |
tb = gtk.ToolButton(gtk.STOCK_APPLY) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
91 |
tb.set_label('Commit') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
92 |
tb.set_tooltip_text('Commit') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
93 |
tb.connect('clicked', self.commit) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
94 |
tb.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
95 |
self.tb_commit = tb |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
96 |
toolbar.add(tb) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
97 |
tb = gtk.ToolButton(gtk.STOCK_CANCEL) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
98 |
tb.set_label('Rollback') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
99 |
tb.set_tooltip_text('Rollback') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
100 |
tb.connect('clicked', self.rollback) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
101 |
tb.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
102 |
self.tb_rollback = tb |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
103 |
toolbar.add(tb) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
104 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
105 |
sep = gtk.SeparatorToolItem() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
106 |
toolbar.add(sep) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
107 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
108 |
# editor |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
109 |
self.editor = Editor() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
110 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
111 |
# data view |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
112 |
self.dataview = DataView() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
113 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
114 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
115 |
vbox = gtk.VBox(False, 2) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
116 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
117 |
sep = gtk.SeparatorToolItem() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
118 |
sep.set_expand(True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
119 |
sep.set_draw(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
120 |
toolbar.add(sep) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
121 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
122 |
self.throbber_anim = gtk.gdk.PixbufAnimation('data/Throbber.gif') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
123 |
self.throbber = gtk.Image() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
124 |
tb = gtk.ToolItem() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
125 |
tb.add(self.throbber) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
126 |
toolbar.add(tb) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
127 |
sep = gtk.SeparatorToolItem() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
128 |
sep.set_draw(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
129 |
toolbar.add(sep) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
130 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
131 |
vbox.pack_start(toolbar, False, False, 0) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
132 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
133 |
vpaned = VPanedExt() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
134 |
vpaned.set_border_width(5) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
135 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
136 |
hpaned = HPanedExt() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
137 |
hpaned.set_border_width(0) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
138 |
hpaned.add1(self.editor) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
139 |
hpaned.child_set_property(self.editor, 'shrink', False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
140 |
hpaned.set_snap2(80) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
141 |
hpaned.set_property('position', 500) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
142 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
143 |
vpaned.add1(hpaned) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
144 |
vpaned.set_snap1(80) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
145 |
vpaned.set_property('position', 300) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
146 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
147 |
vpaned.add2(self.dataview) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
148 |
vpaned.set_snap2(80) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
149 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
150 |
self.vpaned = vpaned |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
151 |
self.hpaned = hpaned |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
152 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
153 |
# log |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
154 |
self.logbuf = gtk.TextBuffer() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
155 |
view = gtk.TextView(self.logbuf) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
156 |
view.set_editable(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
157 |
font_desc = pango.FontDescription('monospace') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
158 |
if font_desc: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
159 |
view.modify_font(font_desc) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
160 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
161 |
sw = gtk.ScrolledWindow() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
162 |
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
163 |
sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
164 |
sw.add(view) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
165 |
hpaned.add2(sw) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
166 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
167 |
vbox.pack_start(vpaned, padding=0) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
168 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
169 |
win.add(vbox) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
170 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
171 |
self.editor.view.grab_focus() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
172 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
173 |
self.reload_server_list(0) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
174 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
175 |
win.show_all() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
176 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
177 |
self.restore_win_state() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
178 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
179 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
180 |
def main(self): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
181 |
gtk.main() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
182 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
183 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
184 |
def destroy(self, widget, data=None): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
185 |
self.save_win_state() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
186 |
cfg.save() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
187 |
gtk.main_quit() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
188 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
189 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
190 |
def on_configure(self, w, ev): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
191 |
cfg.root.window.size.width = ev.width |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
192 |
cfg.root.window.size.height = ev.height |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
193 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
194 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
195 |
def restore_window_size(self): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
196 |
self.win.resize(cfg.root.window.size.width, cfg.root.window.size.height) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
197 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
198 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
199 |
def save_win_state(self): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
200 |
cfg.root.window.dividers.verticaldivider = self.vpaned.get_position() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
201 |
cfg.root.window.dividers.horizontaldivider = self.hpaned.get_position() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
202 |
cfg.root.window.dividers.editordivider = self.editor.get_position() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
203 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
204 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
205 |
def restore_win_state(self): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
206 |
pos = cfg.root.window.dividers.verticaldivider |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
207 |
if pos >= 0: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
208 |
self.vpaned.set_position(pos) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
209 |
pos = cfg.root.window.dividers.horizontaldivider |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
210 |
if pos >= 0: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
211 |
self.hpaned.set_position(pos) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
212 |
pos = cfg.root.window.dividers.editordivider |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
213 |
if pos >= 0: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
214 |
self.editor.set_position(pos) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
215 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
216 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
217 |
def get_typename(self, oid, size): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
218 |
self.curs.execute('SELECT typname FROM pg_type WHERE oid=%s', [oid]) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
219 |
psycopg2.extras.wait_select(self.curs.connection) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
220 |
row = self.curs.fetchone() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
221 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
222 |
typname = None |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
223 |
if row: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
224 |
typname = row[0] |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
225 |
if typname == 'int4': |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
226 |
return 'integer' |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
227 |
if typname in ('timestamp', 'interval', 'date'): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
228 |
return typname |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
229 |
if size and size > 0 and size < 65535: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
230 |
typname += '(%s)' % size |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
231 |
return typname |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
232 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
233 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
234 |
def get_conninfo(self, nodb=False): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
235 |
sel = self.cb_server.get_active() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
236 |
srv = cfg.servers.server[sel] |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
237 |
if nodb: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
238 |
dbname = 'postgres' |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
239 |
else: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
240 |
dbname = self.cb_dbname.get_active_text() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
241 |
conninfo = 'host=%s port=%s dbname=%s user=%s password=%s' \ |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
242 |
% (srv.host, srv.port, dbname, srv.user, srv.password) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
243 |
return conninfo |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
244 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
245 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
246 |
def connect(self, w): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
247 |
conninfo = self.get_conninfo() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
248 |
if self.conn: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
249 |
# disconnect |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
250 |
self.db.put_conn(conninfo, self.conn) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
251 |
self.conn = None |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
252 |
self.cb_server.set_sensitive(True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
253 |
self.cb_dbname.set_sensitive(True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
254 |
self.tb_connect.set_stock_id(gtk.STOCK_CONNECT) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
255 |
self.tb_connect.set_label('Connect') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
256 |
self.tb_connect.set_tooltip_text('Connect') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
257 |
self.tb_execute.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
258 |
self.tb_begin.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
259 |
else: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
260 |
# connect |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
261 |
self.logbuf.insert(self.logbuf.get_end_iter(), 'Connect %s\n' % conninfo) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
262 |
try: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
263 |
self.conn = self.db.get_conn(conninfo) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
264 |
except DatabaseError as e: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
265 |
self.logbuf.insert(self.logbuf.get_end_iter(), 'Error:\n%s\n' % e) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
266 |
return |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
267 |
self.cb_server.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
268 |
self.cb_dbname.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
269 |
self.tb_connect.set_stock_id(gtk.STOCK_DISCONNECT) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
270 |
self.tb_connect.set_label('Disconnect') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
271 |
self.tb_connect.set_tooltip_text('Disconnect') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
272 |
self.tb_execute.set_sensitive(True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
273 |
self.tb_begin.set_sensitive(True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
274 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
275 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
276 |
def begin(self, w): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
277 |
self.logbuf.insert(self.logbuf.get_end_iter(), 'Begin transaction\n') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
278 |
curs = self.conn.cursor() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
279 |
curs.execute('BEGIN') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
280 |
psycopg2.extras.wait_select(curs.connection) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
281 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
282 |
self.tb_connect.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
283 |
self.tb_begin.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
284 |
self.tb_commit.set_sensitive(True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
285 |
self.tb_rollback.set_sensitive(True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
286 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
287 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
288 |
def commit(self, w): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
289 |
self.logbuf.insert(self.logbuf.get_end_iter(), 'Commit\n') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
290 |
curs = self.conn.cursor() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
291 |
curs.execute('COMMIT') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
292 |
psycopg2.extras.wait_select(curs.connection) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
293 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
294 |
self.tb_connect.set_sensitive(True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
295 |
self.tb_begin.set_sensitive(True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
296 |
self.tb_commit.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
297 |
self.tb_rollback.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
298 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
299 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
300 |
def rollback(self, w): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
301 |
self.logbuf.insert(self.logbuf.get_end_iter(), 'Rollback\n') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
302 |
curs = self.conn.cursor() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
303 |
curs.execute('ROLLBACK') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
304 |
psycopg2.extras.wait_select(curs.connection) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
305 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
306 |
self.tb_connect.set_sensitive(True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
307 |
self.tb_begin.set_sensitive(True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
308 |
self.tb_commit.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
309 |
self.tb_rollback.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
310 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
311 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
312 |
def execute(self, widget): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
313 |
query = self.editor.get_selection() or self.editor.get_text() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
314 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
315 |
self.tb_connect.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
316 |
self.tb_execute.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
317 |
self.tb_begin.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
318 |
self.tb_commit.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
319 |
self.tb_rollback.set_sensitive(False) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
320 |
self.throbber.set_from_animation(self.throbber_anim) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
321 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
322 |
self.curs = self.conn.cursor() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
323 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
324 |
self.t1 = time.time() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
325 |
try: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
326 |
self.curs.execute(query) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
327 |
except (psycopg2.OperationalError, psycopg2.DatabaseError) as e: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
328 |
self.logbuf.insert(self.logbuf.get_end_iter(), 'Error:\n' + str(e)) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
329 |
return |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
330 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
331 |
self.execute_poll() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
332 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
333 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
334 |
def execute_poll(self, source=None, cond=None): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
335 |
try: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
336 |
state = self.conn.poll() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
337 |
except (psycopg2.OperationalError, psycopg2.DatabaseError) as e: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
338 |
self.logbuf.insert(self.logbuf.get_end_iter(), 'Error:\n' + str(e)) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
339 |
return |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
340 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
341 |
if state == psycopg2.extensions.POLL_OK: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
342 |
self.execute_finish() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
343 |
elif state == psycopg2.extensions.POLL_WRITE: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
344 |
gobject.io_add_watch(self.conn.fileno(), gobject.IO_OUT, self.execute_poll) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
345 |
elif state == psycopg2.extensions.POLL_READ: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
346 |
gobject.io_add_watch(self.conn.fileno(), gobject.IO_IN, self.execute_poll) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
347 |
else: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
348 |
self.logbuf.insert(self.logbuf.get_end_iter(), "poll() returned %s" % state) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
349 |
return |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
350 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
351 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
352 |
def execute_finish(self): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
353 |
t2 = time.time() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
354 |
t = (t2 - self.t1)*1000 |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
355 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
356 |
self.throbber.clear() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
357 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
358 |
self.logbuf.insert(self.logbuf.get_end_iter(), |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
359 |
'Query successful (%d ms, %d rows)\n' % (t, self.curs.rowcount)) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
360 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
361 |
# notices |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
362 |
for n in self.conn.notices: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
363 |
self.logbuf.insert(self.logbuf.get_end_iter(), n) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
364 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
365 |
if self.curs.rowcount >= 0: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
366 |
rows = self.curs.fetchall() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
367 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
368 |
names = [] |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
369 |
for c in self.curs.description: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
370 |
name = c[0] |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
371 |
typename = self.get_typename(c[1], c[3]) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
372 |
names += [(name, typename)] |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
373 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
374 |
self.dataview.load_data(names, rows) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
375 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
376 |
self.tb_execute.set_sensitive(True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
377 |
if self.conn.get_transaction_status() == psycopg2.extensions.TRANSACTION_STATUS_INTRANS: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
378 |
self.tb_commit.set_sensitive(True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
379 |
self.tb_rollback.set_sensitive(True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
380 |
else: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
381 |
self.tb_connect.set_sensitive(True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
382 |
self.tb_begin.set_sensitive(True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
383 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
384 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
385 |
def simulate_click(self, tb): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
386 |
if tb.get_property('sensitive'): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
387 |
tb.get_child().activate() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
388 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
389 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
390 |
def keypress(self, w, event): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
391 |
keyname = gtk.gdk.keyval_name(event.keyval) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
392 |
if keyname == 'F1': |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
393 |
self.simulate_click(self.tb_settings) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
394 |
return True |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
395 |
if keyname == 'F2': |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
396 |
print(self.cb_server.popup()) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
397 |
return True |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
398 |
if keyname == 'F3': |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
399 |
print(self.cb_dbname.popup()) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
400 |
return True |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
401 |
if keyname == 'F4': |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
402 |
self.simulate_click(self.tb_connect) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
403 |
return True |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
404 |
if keyname == 'F5': |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
405 |
self.simulate_click(self.tb_execute) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
406 |
return True |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
407 |
if keyname == 'F6': |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
408 |
self.simulate_click(self.tb_begin) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
409 |
return True |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
410 |
if keyname == 'F7': |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
411 |
self.simulate_click(self.tb_commit) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
412 |
return True |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
413 |
if keyname == 'F8': |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
414 |
self.simulate_click(self.tb_rollback) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
415 |
return True |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
416 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
417 |
return False |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
418 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
419 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
420 |
def toolbar_server_keypress(self, w, event): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
421 |
keyname = gtk.gdk.keyval_name(event.keyval) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
422 |
if keyname == 'Tab': |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
423 |
self.populate_db_list() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
424 |
self.cb_dbname.grab_focus() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
425 |
return True |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
426 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
427 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
428 |
def on_server_changed(self, w): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
429 |
if self.cb_server.get_active() != -1: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
430 |
self.populate_db_list() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
431 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
432 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
433 |
def populate_db_list(self): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
434 |
conninfo = self.get_conninfo(True) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
435 |
try: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
436 |
conn = self.db.get_conn(conninfo) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
437 |
except DatabaseError as e: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
438 |
self.logbuf.insert(self.logbuf.get_end_iter(), 'Error:\n%s\n' % e) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
439 |
return |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
440 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
441 |
curs = conn.cursor() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
442 |
curs.execute('SELECT * FROM pg_catalog.pg_database WHERE NOT datistemplate ORDER BY 1') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
443 |
psycopg2.extras.wait_select(conn) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
444 |
rows = curs.fetchall() |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
445 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
446 |
self.db.put_conn(conninfo, conn) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
447 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
448 |
for i in range(self.cb_dbname.get_model().iter_n_children(None)): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
449 |
self.cb_dbname.remove_text(0) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
450 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
451 |
for row in rows: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
452 |
self.cb_dbname.append_text(row[0]) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
453 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
454 |
self.cb_dbname.set_active(0) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
455 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
456 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
457 |
def reload_server_list(self, sel=None): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
458 |
# clean |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
459 |
for i in range(self.cb_server.get_model().iter_n_children(None)): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
460 |
self.cb_server.remove_text(0) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
461 |
self.cb_server.get_child().set_text('') |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
462 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
463 |
try: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
464 |
# populate |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
465 |
for server in cfg.servers.server: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
466 |
if str(server.name): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
467 |
title = '%s (%s)' % (str(server.name), str(server.host)) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
468 |
else: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
469 |
title = str(server.host) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
470 |
self.cb_server.append_text(title) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
471 |
except AttributeError: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
472 |
pass |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
473 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
474 |
if not sel is None: |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
475 |
self.cb_server.set_active(sel) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
476 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
477 |
|
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
478 |
def settings(self, w): |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
479 |
Settings(self) |
bc69eca59041
PgConsole: add app.py, splitted from pgconsole.py.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
480 |