예제 #1
0
    def add_bio_feature_reporter_data(self, name, description, *args,
                                      **kwargs):
        if len(self.bio_feature_reporter_buffer
               ) >= self.bio_feature_reporter_buffer_size:
            saved = False
            while not saved:
                try:
                    init_parsing_database_connections(self.db)
                    parsing_plt = ParsingPlatform.objects.using(
                        self.db).get(platform_fk=self.plt_id)
                    with transaction.atomic(using=self.db):
                        for rep, values in self.bio_feature_reporter_buffer:
                            rep.platform = parsing_plt
                            rep.save(using=self.db)
                            for value in values:
                                value.bio_feature_reporter = rep
                                value.save(using=self.db)

                    self.bio_feature_reporter_buffer.clear()
                    saved = True
                except OperationalError as e:
                    time.sleep(2)
        else:
            reporter = ParsingBioFeatureReporter(name=name,
                                                 description=description)
            values = []
            for field, value in kwargs.items():
                reporter_field_value = ParsingBioFeatureReporterValues(
                    bio_feature_reporter_field=field, value=value)
                values.append(reporter_field_value)
            self.bio_feature_reporter_buffer.append((reporter, values))
예제 #2
0
    def __init__(self, plt, db):
        self.db = db
        self.platform_access_id = None
        self.platform_name = None
        self.description = None
        self.platform_type = None
        self.plt_id = plt.id
        self.bio_feature_reporter_buffer = []
        self.bio_feature_reporter_buffer_size = 2000

        init_parsing_database_connections(self.db)
        try:
            parsing_plt = ParsingPlatform.objects.using(
                self.db).get(platform_fk=self.plt_id)
        except Exception as e:
            parsing_plt = ParsingPlatform()
        parsing_plt.platform_access_id = plt.platform_access_id
        parsing_plt.platform_name = plt.platform_name
        parsing_plt.description = plt.description
        parsing_plt.platform_fk = plt.id
        parsing_plt.platform_type = plt.platform_type.name if plt.platform_type is not None else None
        saved = False
        while not saved:
            try:
                parsing_plt.save(using=self.db)
                saved = True
            except OperationalError as e:
                time.sleep(2)
        saved = False
        while not saved:
            try:
                parsing_plt.parsingbiofeaturereporter_set.all().delete()
                saved = True
            except OperationalError as e:
                time.sleep(2)
예제 #3
0
    def __init__(self, smp, db):
        self.db = db
        self.sample_name = None
        self.description = None
        self.smp_id = smp.id
        self.buffer = []
        self.buffer_size = 2000

        init_parsing_database_connections(self.db)
        try:
            self.parsing_smp = ParsingSample.objects.using(
                self.db).get(sample_fk=self.smp_id)
        except Exception as e:
            self.parsing_smp = ParsingSample()
        self.parsing_smp.sample_name = smp.sample_name
        self.parsing_smp.description = smp.description
        self.parsing_smp.reporter_platform = self.parsing_smp.platform.reporter_platform
        saved = False
        while not saved:
            try:
                self.parsing_smp.save(using=self.db)
                saved = True
            except OperationalError as e:
                time.sleep(2)
        saved = False
        while not saved:
            try:
                self.parsing_smp.parsingrawdata_set.all().delete()
                saved = True
            except OperationalError as e:
                time.sleep(2)
예제 #4
0
    def save_sample_object(self):
        saved = False
        while not saved:
            try:
                init_parsing_database_connections(self.db)
                parsing_smp = ParsingSample.objects.using(
                    self.db).get(sample_fk=self.smp_id)
                parsing_smp.sample_name = self.sample_name if self.sample_name is not None else parsing_smp.sample_name
                parsing_smp.description = self.description if self.description is not None else parsing_smp.description
                parsing_smp.sample_fk = self.smp_id
                parsing_smp.save(using=self.db)

                with transaction.atomic(using=self.db):
                    ParsingRawData.objects.using(self.db).bulk_create(
                        self.buffer)
                saved = True
            except OperationalError as e:
                time.sleep(2)
예제 #5
0
 def add_raw_data(self, bio_feature_reporter, value):
     if len(self.buffer) >= self.buffer_size:
         saved = False
         while not saved:
             try:
                 init_parsing_database_connections(self.db)
                 with transaction.atomic(using=self.db):
                     ParsingRawData.objects.using(self.db).bulk_create(
                         self.buffer)
                 self.buffer.clear()
                 saved = True
             except OperationalError as e:
                 time.sleep(2)
     else:
         self.buffer.append(
             ParsingRawData(sample=self.parsing_smp,
                            bio_feature_reporter_name=bio_feature_reporter,
                            value=value))
예제 #6
0
 def save_experiment_object(self):
     init_parsing_database_connections(self.db)
     try:
         parsing_exp = ParsingExperiment.objects.using(
             self.db).get(experiment_fk=self.exp_id)
     except Exception as e:
         parsing_exp = ParsingExperiment()
     saved = False
     while not saved:
         try:
             parsing_exp.organism = self.organism if self.organism is not None else parsing_exp.organism
             parsing_exp.experiment_access_id = self.experiment_access_id if self.experiment_access_id is not None else parsing_exp.experiment_access_id
             parsing_exp.experiment_name = self.experiment_name if self.experiment_name is not None else parsing_exp.experiment_name
             parsing_exp.scientific_paper_ref = self.scientific_paper_accession_base_link + self.scientific_paper_ref \
                 if self.scientific_paper_ref is not None else parsing_exp.scientific_paper_ref
             parsing_exp.description = self.description if self.description is not None else parsing_exp.description
             parsing_exp.experiment_fk = self.exp_id
             parsing_exp.save(using=self.db)
             saved = True
         except OperationalError as e:
             time.sleep(2)
예제 #7
0
    def save_platform_object(self):
        saved = False
        while not saved:
            try:
                init_parsing_database_connections(self.db)
                parsing_plt = ParsingPlatform.objects.using(
                    self.db).get(platform_fk=self.plt_id)
                parsing_plt.platform_access_id = self.platform_access_id if self.platform_access_id is not None else parsing_plt.platform_access_id
                parsing_plt.platform_name = self.platform_name if self.platform_name is not None else parsing_plt.platform_name
                parsing_plt.description = self.description if self.description is not None else parsing_plt.description
                parsing_plt.platform_fk = self.plt_id
                parsing_plt.platform_type = self.platform_type
                parsing_plt.save(using=self.db)

                with transaction.atomic(using=self.db):
                    for rep, values in self.bio_feature_reporter_buffer:
                        rep.platform = parsing_plt
                        rep.save(using=self.db)
                        for value in values:
                            value.bio_feature_reporter = rep
                            value.save(using=self.db)
                saved = True
            except OperationalError as e:
                time.sleep(2)