Source code for cas.accession.incremental_accession_manager

from cas.accession.base_accession_manager import BaseAccessionManager


[docs] class IncrementalAccessionManager(BaseAccessionManager): """ Numerically incremental Accession ID generator. """ def __init__(self, accession_prefix=None, last_accession_id=0): """ Initializer. Params: accession_prefix: accession_id prefix """ if accession_prefix is None: accession_prefix = "" self.accession_prefix = accession_prefix self.last_accession_id = last_accession_id self.accession_ids = list()
[docs] def generate_accession_id( self, id_recommendation: str = None, labelset: str = None, cellset_name: str = None ) -> str: """ Generates an auto-increment based accession id. If the recommended accession_id is available, uses it. Params: id_recommendation: accession id recommendation. Function uses this id if it is available, provides an auto-incremented id otherwise. labelset: this parameter is not utilized in this implementation. cellset_name: this parameter is not utilized in this implementation. Return: accession_id """ if id_recommendation: id_recommendation = id_recommendation.replace(self.accession_prefix, "") if id_recommendation.startswith("_"): id_recommendation = id_recommendation[1:] if ( id_recommendation and id_recommendation not in self.accession_ids and id_recommendation.isdigit() # and int(id_recommendation) > self.last_accession_id and int(id_recommendation) not in self.accession_ids ): accession_id = id_recommendation if self.last_accession_id < int(id_recommendation): self.last_accession_id = int(id_recommendation) elif id_recommendation and not id_recommendation.isdigit(): # non-numeric accession id accession_id = id_recommendation else: id_candidate = self.last_accession_id + 1 while str(id_candidate) in self.accession_ids: id_candidate += 1 accession_id = str(id_candidate) self.last_accession_id = id_candidate self.accession_ids.append(accession_id) if self.accession_prefix and not accession_id.startswith(self.accession_prefix): accession_id = self.accession_prefix + accession_id return accession_id