def get_pools(self) -> List[OrderPool]: """create pools from samples Check that all samples from one pool has the same application """ pools: Dict[str, OrderPool] = {} sample: OrderSample for sample in self.samples: pool_name = sample.pool if not pool_name: continue application = sample.application if pool_name not in pools: pools[pool_name] = OrderPool( name=pool_name, data_analysis=sample.data_analysis, data_delivery=sample.data_delivery, application=application, samples=[sample], ) continue # each pool must only have one application type pool = pools[pool_name] if str(pool.application) != application: raise OrderFormError( f"different applications in pool: {pool_name} - {[pools[pool_name].application, application]}" ) pool.samples.append(sample) return [pools[pool_name] for pool_name in pools]