Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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]
Ejemplo n.º 3
0
 def _is_entity(self, data):
     return EntityMetadataHelper.hasMetadata(data)