Skip to content

Instantly share code, notes, and snippets.

@piotr-dobrogost
Last active September 2, 2015 12:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save piotr-dobrogost/b529e7914c0f90921551 to your computer and use it in GitHub Desktop.
Save piotr-dobrogost/b529e7914c0f90921551 to your computer and use it in GitHub Desktop.
Error when trying to version Node table in Kotti using SQLAlchemy-Continuum
diff --git a/kotti/resources.py b/kotti/resources.py
index e771ebe..3723732 100644
--- a/kotti/resources.py
+++ b/kotti/resources.py
@@ -69,6 +69,11 @@ from kotti.util import Link
from kotti.util import LinkParent
from kotti.util import LinkRenderer
+from sqlalchemy_continuum import make_versioned
+
+
+make_versioned(user_cls='Principal')
+
class ContainerMixin(object, DictMixin):
""" Containers form the API of a Node that's used for subitem
@@ -206,6 +211,7 @@ class Node(Base, ContainerMixin, PersistentACLMixin):
implements(INode)
+ __versioned__ = {}
__table_args__ = (
UniqueConstraint('parent_id', 'name'),
)
(env)[piotr@demon kotti-versioning]$ ./env/bin/pserve app.ini
Traceback (most recent call last):
File "./env/bin/pserve", line 11, in <module>
sys.exit(main())
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/pyramid/scripts/pserve.py", line 58, in main
return command.run()
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/pyramid/scripts/pserve.py", line 328, in run
global_conf=vars)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/pyramid/scripts/pserve.py", line 363, in loadapp
return loadapp(app_spec, name=name, relative_to=relative_to, **kw)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 247, in loadapp
return loadobj(APP, uri, name=name, **kw)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 272, in loadobj
return context.create()
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 710, in create
return self.object_type.invoke(self)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 203, in invoke
app = context.app_context.create()
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 710, in create
return self.object_type.invoke(self)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 146, in invoke
return fix_call(context.object, context.global_conf, **context.local_conf)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/paste/deploy/util.py", line 55, in fix_call
val = callable(*args, **kw)
File "/home/piotr/projects/kotti-versioning/kotti/__init__.py", line 179, in main
initialize_sql(engine)
File "/home/piotr/projects/kotti-versioning/kotti/resources.py", line 848, in initialize_sql
populate()
File "/home/piotr/projects/kotti-versioning/kotti/populate.py", line 45, in populate
if DBSession.query(Node.id).count() == 0:
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/orm/scoping.py", line 150, in do
return getattr(self.registry(), name)(*args, **kwargs)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1249, in query
return self._query_cls(entities, self, **kwargs)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 110, in __init__
self._set_entities(entities)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 120, in _set_entities
self._set_entity_selectables(self._entities)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 137, in _set_entity_selectables
ext_info.mapper._equivalent_columns
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 153, in _mapper_loads_polymorphically_with
for m2 in mapper._with_polymorphic_mappers or [mapper]:
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 747, in __get__
obj.__dict__[self.__name__] = result = self.fget(obj)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 1893, in _with_polymorphic_mappers
configure_mappers()
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 2736, in configure_mappers
Mapper.dispatch._for_class(Mapper).after_configured()
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/event/attr.py", line 218, in __call__
fn(*args, **kw)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/orm/events.py", line 550, in wrap
fn(*arg, **kw)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy_continuum/builder.py", line 165, in configure_versioned_classes
self.build_models()
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy_continuum/builder.py", line 87, in build_models
self.manager.transaction_cls
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy_continuum/model_builder.py", line 263, in __call__
self.version_class = self.build_model(table)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy_continuum/model_builder.py", line 250, in build_model
args
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/ext/declarative/api.py", line 55, in __init__
_as_declarative(cls, classname, cls.__dict__)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", line 88, in _as_declarative
_MapperConfig.setup_mapping(cls, classname, dict_)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", line 103, in setup_mapping
cfg_cls(cls_, classname, dict_)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", line 135, in __init__
self._early_mapping()
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", line 138, in _early_mapping
self.map()
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", line 529, in map
**self.mapper_args
File "<string>", line 2, in mapper
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 627, in __init__
self._configure_properties()
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 1318, in _configure_properties
setparent=True)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 1525, in _configure_property
prop = self._property_from_column(key, prop)
File "/home/piotr/projects/kotti-versioning/env/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 1650, in _property_from_column
raise sa_exc.InvalidRequestError(msg)
sqlalchemy.exc.InvalidRequestError: Implicitly combining column contents_version.transaction_id with column nodes_version.transaction_id under attribute 'transaction_id'. Please configure one or more attributes for these same-named columns explicitly.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment