# where PackageTag object is created *and* flushed but does not yet have # the package_id set (this cause us other problems ...). Some time later a # second commit happens in which the package_id is correctly set. # However after first commit PackageTag does not have Package and # delete-orphan kicks in to remove it! 'package_tags': orm.relation( tag.PackageTag, backref='package', cascade='all, delete', #, delete-orphan', ), }, order_by=package_table.c.name, extension=[ vdm.sqlalchemy.Revisioner(package_revision_table), extension.PluginMapperExtension(), ], ) vdm.sqlalchemy.modify_base_object_mapper(Package, core.Revision, core.State) PackageRevision = vdm.sqlalchemy.create_object_version(meta.mapper, Package, package_revision_table) def related_packages(self): return [self.continuity] PackageRevision.related_packages = related_packages vdm.sqlalchemy.modify_base_object_mapper(tag.PackageTag, core.Revision,
Returns a list of the dataset's extras, as PackageExtra object NB includes deleted ones too (state='deleted') ''' from package_extra import PackageExtra return meta.Session.query(PackageExtra) \ .filter_by(package_id=self.id) \ .all() class RatingValueException(Exception): pass # import here to prevent circular import import tag meta.mapper(Package, package_table, properties={ # delete-orphan on cascade does NOT work! # Why? Answer: because of way SQLAlchemy/our code works there are points # where PackageTag object is created *and* flushed but does not yet have # the package_id set (this cause us other problems ...). Some time later a # second commit happens in which the package_id is correctly set. # However after first commit PackageTag does not have Package and # delete-orphan kicks in to remove it! 'package_tags':orm.relation(tag.PackageTag, backref='package', cascade='all, delete', #, delete-orphan', ), }, order_by=package_table.c.name, extension=[extension.PluginMapperExtension()], )