##// END OF EJS Templates
dbmigrate: fix python3 metaclasses error
super-admin -
r5161:b415a1d9 default
parent child Browse files
Show More
@@ -166,7 +166,39 b' def _to_index(index, table=None, engine='
166 return ret
166 return ret
167
167
168
168
169 class ColumnDelta(DictMixin, sqlalchemy.schema.SchemaItem):
169
170 # Python3: if we just use:
171 #
172 # class ColumnDelta(DictMixin, sqlalchemy.schema.SchemaItem):
173 # ...
174 #
175 # We get the following error:
176 # TypeError: metaclass conflict: the metaclass of a derived class must be a
177 # (non-strict) subclass of the metaclasses of all its bases.
178 #
179 # The complete inheritance/metaclass relationship list of ColumnDelta can be
180 # summarized by this following dot file:
181 #
182 # digraph test123 {
183 # ColumnDelta -> MutableMapping;
184 # MutableMapping -> Mapping;
185 # Mapping -> {Sized Iterable Container};
186 # {Sized Iterable Container} -> ABCMeta[style=dashed];
187 #
188 # ColumnDelta -> SchemaItem;
189 # SchemaItem -> {SchemaEventTarget Visitable};
190 # SchemaEventTarget -> object;
191 # Visitable -> {VisitableType object} [style=dashed];
192 # VisitableType -> type;
193 # }
194 #
195 # We need to use a metaclass that inherits from all the metaclasses of
196 # DictMixin and sqlalchemy.schema.SchemaItem. Let's call it "MyMeta".
197 class MyMeta(sqlalchemy.sql.visitors.VisitableType, abc.ABCMeta, object):
198 pass
199
200
201 class ColumnDelta(six.with_metaclass(MyMeta, DictMixin, sqlalchemy.schema.SchemaItem)):
170 """Extracts the differences between two columns/column-parameters
202 """Extracts the differences between two columns/column-parameters
171
203
172 May receive parameters arranged in several different ways:
204 May receive parameters arranged in several different ways:
General Comments 0
You need to be logged in to leave comments. Login now