예제 #1
0
    def _store_imported_datatypes_in_db(self, project, all_datatypes):
        # type: (Project, dict) -> int
        sorted_dts = sorted(
            all_datatypes.items(),
            key=lambda dt_item: dt_item[1].create_date or datetime.now())

        count = 0
        for dt_path, datatype in sorted_dts:
            datatype_already_in_tvb = dao.get_datatype_by_gid(datatype.gid)
            if not datatype_already_in_tvb:
                self.store_datatype(datatype, dt_path)
                count += 1
            else:
                AlgorithmService.create_link([datatype_already_in_tvb.id],
                                             project.id)

            file_path = h5.h5_file_for_index(datatype).path
            h5_class = H5File.h5_class_from_file(file_path)
            reference_list = h5_class(file_path).gather_references()

            for _, reference_gid in reference_list:
                if not reference_gid:
                    continue

                ref_index = dao.get_datatype_by_gid(reference_gid.hex)
                if ref_index is None:
                    os.remove(file_path)
                    dao.remove_entity(datatype.__class__, datatype.id)
                    raise MissingReferenceException(
                        'Imported file depends on datatypes that do not exist. Please upload '
                        'those first!')

        return count
예제 #2
0
    def _store_imported_datatypes_in_db(self, project, all_datatypes,
                                        dt_burst_mappings, burst_ids_mapping):
        def by_time(dt):
            return dt.create_date or datetime.now()

        if burst_ids_mapping is None:
            burst_ids_mapping = {}
        if dt_burst_mappings is None:
            dt_burst_mappings = {}

        all_datatypes.sort(key=by_time)

        for datatype in all_datatypes:
            old_burst_id = dt_burst_mappings.get(datatype.gid)

            if old_burst_id is not None:
                datatype.fk_parent_burst = burst_ids_mapping[old_burst_id]

            datatype_allready_in_tvb = dao.get_datatype_by_gid(datatype.gid)

            if not datatype_allready_in_tvb:
                self.store_datatype(datatype)
            else:
                AlgorithmService.create_link([datatype_allready_in_tvb.id],
                                             project.id)
예제 #3
0
 def store_or_link_datatype(self, datatype, dt_path, project_id):
     self.check_import_references(dt_path, datatype)
     stored_dt_count = 0
     datatype_already_in_tvb = load.load_entity_by_gid(datatype.gid)
     if not datatype_already_in_tvb:
         self.store_datatype(datatype, dt_path)
         stored_dt_count = 1
     elif datatype_already_in_tvb.parent_operation.project.id != project_id:
         AlgorithmService.create_link([datatype_already_in_tvb.id], project_id)
         if datatype_already_in_tvb.fk_datatype_group:
             AlgorithmService.create_link([datatype_already_in_tvb.fk_datatype_group], project_id)
     return stored_dt_count
예제 #4
0
 def _store_imported_datatypes_in_db(self, project, all_datatypes):
     # type: (Project, dict) -> int
     sorted_dts = sorted(
         all_datatypes.items(),
         key=lambda dt_item: dt_item[1].create_date or datetime.now())
     count = 0
     for dt_path, datatype in sorted_dts:
         datatype_already_in_tvb = dao.get_datatype_by_gid(datatype.gid)
         if not datatype_already_in_tvb:
             self.store_datatype(datatype, dt_path)
             count += 1
         else:
             AlgorithmService.create_link([datatype_already_in_tvb.id],
                                          project.id)
     return count