dee

Merge lp:~davidc3/dee/python3-overrides into lp:dee

Proposed by David Callé
Status: Merged
Approved by: Didier Roche-Tolomelli
Approved revision: 367
Merged at revision: 368
Proposed branch: lp:~davidc3/dee/python3-overrides
Merge into: lp:dee
Diff against target: 155 lines (+127/-1)
4 files modified
bindings/Makefile.am (+1/-1)
bindings/python3/Dee.py (+115/-0)
bindings/python3/Makefile.am (+10/-0)
configure.ac (+1/-0)
To merge this branch: bzr merge lp:~davidc3/dee/python3-overrides
Reviewer Review Type Date Requested Status
Didier Roche-Tolomelli Approve
Review via email: mp+106447@code.launchpad.net

Commit message

provide a gir override for python3

Description of the change

While I'm not sure if it's the good way to create gi overrides, the provided python3/Dee.py works in Python3 and allow lenses to use the bindings.

To post a comment you must log in.
Revision history for this message
Didier Roche-Tolomelli (didrocks) wrote :

The override worked on python3 for me. Approving (manual test already covered)

review: Approve
Revision history for this message
Unity Merger (unity-merger) wrote :

No commit message specified.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'bindings/Makefile.am'
2--- bindings/Makefile.am 2011-02-14 09:17:36 +0000
3+++ bindings/Makefile.am 2012-05-18 18:47:18 +0000
4@@ -1,2 +1,2 @@
5-SUBDIRS = python
6+SUBDIRS = python python3
7
8
9=== added directory 'bindings/python3'
10=== added file 'bindings/python3/Dee.py'
11--- bindings/python3/Dee.py 1970-01-01 00:00:00 +0000
12+++ bindings/python3/Dee.py 2012-05-18 18:47:18 +0000
13@@ -0,0 +1,115 @@
14+from gi.overrides import override
15+from gi.importer import modules
16+
17+Dee = modules['Dee']._introspection_module
18+from gi.repository import GLib
19+
20+__all__ = []
21+
22+class RowWrapper:
23+ def __init__ (self, model, itr):
24+ self.model = model
25+ self.itr = itr
26+
27+ def __getitem__ (self, column):
28+ return self.model.get_value(self.itr, column)
29+
30+ def __setitem__ (self, column, val):
31+ self.model.set_value (self.itr, column, val)
32+
33+ def __iter__ (self):
34+ for column in range(self.model.get_n_columns()):
35+ yield self.model.get_value (self.itr, column)
36+
37+ def __len__ (self):
38+ return self.model.get_n_columns()
39+
40+ def __str__ (self):
41+ return "(%s)" % ", ".join(map(str,self))
42+
43+ def __eq__ (self, other):
44+ if not isinstance (other, RowWrapper):
45+ return False
46+ if self.model != other.model:
47+ return False
48+ return self.itr == other.itr
49+
50+class Model(Dee.Model):
51+
52+ def __init__(self):
53+ Dee.Model.__init__(self)
54+
55+ def set_schema (self, *args):
56+ self.set_schema_full (tuple(args), len(args))
57+
58+ def _build_row (self, args):
59+ result = []
60+ for i, arg in enumerate(args):
61+ if isinstance(arg, GLib.Variant):
62+ result.append(arg)
63+ else:
64+ result.append(GLib.Variant(self.get_column_schema(i), arg))
65+ return tuple(result)
66+
67+ def prepend (self, *args):
68+ return self.prepend_row (self._build_row(args))
69+
70+ def append (self, *args):
71+ return self.append_row (self._build_row(args))
72+
73+ def insert (self, pos, *args):
74+ return self.insert_row (pos, self._build_row(args))
75+
76+ def insert_before (self, iter, *args):
77+ return self.insert_row_before (iter, self._build_row(args))
78+
79+ def insert_sorted (self, sort_func, *args):
80+ return self.insert_row_sorted (self._build_row(args), sort_func, None)
81+
82+ def find_sorted (self, sort_func, *args):
83+ return self.find_row_sorted (self._build_row(args), sort_func, None)
84+
85+ def get_schema (self):
86+ return Dee.Model.get_schema(self)[0]
87+
88+ def get_value (self, itr, column):
89+ return Dee.Model.get_value (self, itr, column).unpack()
90+
91+ def set_value (self, itr, column, value):
92+ var = GLib.Variant (self.get_column_schema(column), value)
93+ if isinstance (itr, int):
94+ itr = self.get_iter_at_row(itr)
95+ Dee.Model.set_value (self, itr, column, var)
96+
97+ def __getitem__ (self, itr):
98+ if isinstance (itr, int):
99+ itr = self.get_iter_at_row(itr)
100+ return RowWrapper(self, itr)
101+
102+ def __setitem__ (self, itr, row):
103+ max_col = self.get_n_columns ()
104+ for column, value in enumerate (row):
105+ if column >= max_col:
106+ raise IndexError("Too many columns in row assignment: %s" % column)
107+ self.set_value (itr, column, value)
108+
109+ def get_row (self, itr):
110+ return self[itr]
111+
112+ def __iter__ (self):
113+ itr = self.get_first_iter ()
114+ last = self.get_last_iter ()
115+ while itr != last:
116+ yield self.get_row(itr)
117+ itr = self.next(itr)
118+ raise StopIteration
119+
120+ def __len__ (self):
121+ return self.get_n_rows()
122+
123+
124+
125+Model = override(Model)
126+__all__.append('Model')
127+
128+
129
130=== added file 'bindings/python3/Makefile.am'
131--- bindings/python3/Makefile.am 1970-01-01 00:00:00 +0000
132+++ bindings/python3/Makefile.am 2012-05-18 18:47:18 +0000
133@@ -0,0 +1,10 @@
134+PLATFORM_VERSION = 3.0
135+
136+pkgpyexecdir = $(pyexecdir)/gi
137+
138+pygioverridesdir = $(pkgpyexecdir)/overrides
139+pygioverrides_PYTHON = \
140+ Dee.py
141+
142+EXTRA_DIST = Dee.py
143+
144
145=== modified file 'configure.ac'
146--- configure.ac 2012-04-12 07:31:04 +0000
147+++ configure.ac 2012-05-18 18:47:18 +0000
148@@ -193,6 +193,7 @@
149 src/Makefile
150 bindings/Makefile
151 bindings/python/Makefile
152+ bindings/python3/Makefile
153 doc/Makefile
154 doc/reference/Makefile
155 doc/reference/dee-1.0/Makefile

Subscribers

People subscribed via source and target branches

to all changes: