def _cascade_operation(self, reference, cascading_type): entity = reference if isinstance(reference, ProxyObject): entity = reference._actual if not EntityMetadataHelper.hasMetadata(entity): return entity_meta = EntityMetadataHelper.extract(entity) relational_map = entity_meta.relational_map for property_name in relational_map: guide = relational_map[property_name] if guide.inverted_by: continue actual_data = entity.__getattribute__(property_name) reference = self.hydrate_entity(actual_data) if not guide.cascading_options or cascading_type not in guide.cascading_options or not reference: continue if isinstance(reference, list): for sub_reference in actual_data: self._forward_operation(self.hydrate_entity(sub_reference), cascading_type, guide.target_class) continue self._forward_operation(reference, cascading_type, guide.target_class)
def repository(self, reference): """ Retrieve the collection :param reference: the entity class or entity metadata of the target repository / collection :rtype: tori.db.repository.Repository """ key = None if isinstance(reference, EntityMetadata): key = reference.collection_name elif EntityMetadataHelper.hasMetadata(reference): is_registerable_reference = True metadata = EntityMetadataHelper.extract(reference) key = metadata.collection_name self.register_class(reference) if not key: raise UnsupportedRepositoryReferenceError('Either a class with metadata or an entity metadata is supported.') if key not in self._repository_map: repository = Repository( session = self, representing_class = reference ) repository.setup_index() self._repository_map[key] = repository return self._repository_map[key]
def _is_entity(self, data): return EntityMetadataHelper.hasMetadata(data)