I've hit a speed bump.
Since I want to use the data_filters class property (of the SaveDataMixin) I thought it best to create a content type identical to kotti.resources.File (because I think File cannot be subclassed). This is it, with only the name in the type_info changed. By marking it as an File implementer I hoped being able to reuse File's views. [Later I would create an additional view that would make use of the output of the datafilter]
@implementer(IFile)
class PreviewFile(SaveDataMixin, Content):
id = Column(ForeignKey(Content.id), primary_key=True)
type_info = Content.type_info.copy(
name=u'PreviewFile',
title=_(u'Preview File'),
add_view=u'add_file',
addable_to=[u'Document'],
selectable_default_views=[],
uploadable_mimetypes=['*', ],
)
However the code doesn't work. See stack trace below. There seems to be a "data" member missing. I'd expect SaveDataMixin to provide this.
What gives?
Marcel
Traceback (most recent call last):
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/bin/pserve", line 9, in <module>
load_entry_point('pyramid', 'console_scripts', 'pserve')()
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/pyramid/scripts/pserve.py", line 58, in main
return command.run()
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/pyramid/scripts/pserve.py", line 328, in run
global_conf=vars)
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/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 "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 247, in loadapp
return loadobj(APP, uri, name=name, **kw)
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 272, in loadobj
return context.create()
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 710, in create
return self.object_type.invoke(self)
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 203, in invoke
app = context.app_context.create()
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 710, in create
return self.object_type.invoke(self)
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/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 "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/paste/deploy/util.py", line 55, in fix_call
val = callable(*args, **kw)
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/kotti/__init__.py", line 187, in main
initialize_sql(engine)
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/kotti/resources.py", line 863, in initialize_sql
populate()
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/kotti/populate.py", line 45, in populate
if DBSession.query(Node.id).count() == 0:
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/sqlalchemy/orm/scoping.py", line 150, in do
return getattr(self.registry(), name)(*args, **kwargs)
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1260, in query
return self._query_cls(entities, self, **kwargs)
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 110, in __init__
self._set_entities(entities)
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 120, in _set_entities
self._set_entity_selectables(self._entities)
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 137, in _set_entity_selectables
ext_info.mapper._equivalent_columns
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/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 "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 747, in __get__
obj.__dict__[self.__name__] = result = self.fget(obj)
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 1893, in _with_polymorphic_mappers
configure_mappers()
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 2771, in configure_mappers
Mapper.dispatch._for_class(Mapper).after_configured()
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/sqlalchemy/event/attr.py", line 218, in __call__
fn(*args, **kw)
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/sqlalchemy/orm/events.py", line 613, in wrap
fn(*arg, **kw)
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", line 144, in after_configured
self.cls.__declare_last__()
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/kotti/resources.py", line 664, in __declare_last__
args = (mapper.attrs['data'], 'set', _SQLAMutationTracker._field_set)
File "/Users/mjm/Dropbox/Devel/_Experiments/pyramid/venv2/lib/python2.7/site-packages/sqlalchemy/util/_collections.py", line 193, in __getitem__
return self._data[key]
KeyError: 'data'