Beispiel #1
0
 def setUp(self):
     self.experiment = Experiment(name='backgroundcolor',
                                  state=ENABLED_STATE)
     self.experiment.save()
     self.request = request_factory.get('/',
                                        HTTP_USER_AGENT='GoogleBot/2.1')
     self.experiment_counter = ExperimentCounter()
Beispiel #2
0
 def test_experiment_is_related_to_owner(self):
     owner = User.objects.first()
     experiment = Experiment(nes_id=17,
                             owner=owner,
                             version=1,
                             sent_date=datetime.utcnow())
     experiment.save()
     self.assertIn(experiment, owner.experiment_set.all())
 def setUp(self):
     self.experiment = Experiment(name='mock_experiment')
     self.instance = AdminConditional(
         description='mock template',
         experiment=self.experiment,
     )
     self.request = mock.MagicMock()
     self.context = {'request': self.request}
     self.experiments = mock.MagicMock()
     self.experiments.context = self.context
     self.request.experiments = self.experiments
Beispiel #4
0
 def test_duplicate_experiments_are_invalid(self):
     owner = User.objects.first()
     Experiment.objects.create(nes_id=17,
                               owner=owner,
                               version=1,
                               sent_date=datetime.utcnow())
     experiment = Experiment(nes_id=17,
                             owner=owner,
                             version=1,
                             sent_date=datetime.utcnow())
     with self.assertRaises(ValidationError):
         experiment.full_clean()
Beispiel #5
0
 def test_cannot_save_empty_attributes(self):
     owner = User.objects.first()
     # version=17: large number to avoid conflicts with global setup
     experiment = Experiment(nes_id=1,
                             title='',
                             description='',
                             owner=owner,
                             version=17,
                             slug='',
                             sent_date=datetime.utcnow())
     # TODO: slug='' does not raises ValidationError
     with self.assertRaises(ValidationError):
         experiment.save()
         experiment.full_clean()
Beispiel #6
0
 def test_default_attributes(self):
     experiment = Experiment()
     self.assertEqual(experiment.nes_id, None)
     self.assertEqual(experiment.title, '')
     self.assertEqual(experiment.description, '')
     self.assertEqual(experiment.data_acquisition_done, False)
     self.assertEqual(experiment.sent_date, None)
     self.assertEqual(experiment.version, None)
     self.assertEqual(experiment.status, experiment.RECEIVING)
     self.assertEqual(experiment.trustee, None)
     self.assertEqual(experiment.project_url, None)
     self.assertEqual(experiment.ethics_committee_url, None)
     self.assertEqual(experiment.ethics_committee_file, None)
     self.assertEqual(experiment.slug, '')
     self.assertEqual(experiment.downloads, 0)
Beispiel #7
0
def addexperiment(request, checksum):
    dir_path = 'media/datasets/' + checksum + "/"
    dump_file = dir_path + "dataset.csv"
    meta_file = dir_path + "metadata.json"

    if request.method == "POST":
        auth = request.META['HTTP_AUTHORIZATION'].split()
        username, password = base64.b64decode(
            auth[1]).decode("utf-8").split(':')
        user = authenticate(username=username, password=password)
        if user is None or user.is_active == False:
            return HttpResponse('AUTHENTICATION_FAILED')

        if Experiment.objects.filter(checksum=checksum).exists():
            return HttpResponse('DATASET_ALREADY_IN_DB')

        with open(meta_file, "r") as f:
            experiment_meta = json.load(f)
        sensors_abbrs = list(pd.read_csv(dump_file, nrows=1).columns)
        sensors_abbrs.remove('time')
        sensors = {
            sensor['abbreviation']: sensor['id']
            for sensor in list(
                Sensor.objects.filter(abbreviation__in=sensors_abbrs).values(
                    'abbreviation', 'id'))
        }
        with open(dump_file, "r") as f:
            num_lines = sum(1 for line in f) - 1

        experiment_start_unix = int(
            time.mktime(
                time.strptime(experiment_meta['start_time'],
                              '%Y-%m-%d %H:%M:%S'))) * (10**6)
        rock = Rock.objects.get(id=experiment_meta['rock_id'])
        experiment = Experiment(start_time=experiment_meta['start_time'],
                                description=experiment_meta['description'],
                                rock_id=rock,
                                checksum=checksum,
                                nr_data_points=num_lines * len(sensors_abbrs))
        experiment.sensors = [id for id in sensors.values()]
        experiment.save()
        add_experiment_to_db.delay(checksum)
        return HttpResponse('EXPERIMENT_BEING_ADDED_TO_THE_DB')
Beispiel #8
0
    def handle(self, *args, **options):
        try:
            user_data = {}
            if hasattr(self.stdin, 'isatty') and not self.stdin.isatty():
                raise NotRunningInTTYException("Not running in a TTY")

            for field_name in Experiment.REQUIRED_FIELDS:
                field = Experiment._meta.get_field(field_name)
                user_data[field_name] = None
                while user_data[field_name] is None:
                    message = field_name.upper() + ': '
                    user_data[field_name] = self.get_input_data(field, message)

        except KeyboardInterrupt:
            self.stderr.write("\nOperation cancelled.")
            sys.exit(1)

        except NotRunningInTTYException:
            self.stdout.write(
                "Experiment creation skipped due to not running in a TTY. "
                "You can run `manage.py create_exp` in your project "
                "to create one manually.")

        app_name = user_data['name']
        if app_name not in settings.INSTALLED_APPS:
            try:
                src = 'exp0'
                dest = app_name
                shutil.copytree(src, dest)
            except Exception as e:
                self.stderr.write("Directory not copied. Error: %s" % str(e))
            try:
                template_dir = app_name + '/templates/' + app_name
                os.makedirs(template_dir)
                with open("vlab/settings.py", "a") as myFile:
                    myFile.write("INSTALLED_APPS += ('%s',)\n" % app_name)
                    myFile.close()
                experiment = Experiment(**user_data)
                experiment.save()
            except Exception as e:
                self.stderr.write("Directory not copied. Error 1: %s" % str(e))
                shutil.rmtree(app_name)
Beispiel #9
0
    def sync_experiment_row(legacy_row):
        experiment_plate_id = legacy_row[0]
        worm_strain = get_worm_strain(legacy_row[1], legacy_row[2])
        legacy_library_plate_name = legacy_row[3]
        temperature = legacy_row[4]
        date = legacy_row[5]
        is_junk = legacy_row[6]
        comment = legacy_row[7]

        all_match = True

        if experiment_plate_id < 40000:
            screen_stage = 1
        else:
            screen_stage = 2

        new_plate = ExperimentPlate(id=experiment_plate_id,
                                    screen_stage=screen_stage,
                                    temperature=temperature,
                                    date=date,
                                    comment=comment)

        all_match &= update_or_save_object(command, new_plate, recorded_plates,
                                           plate_fields_to_compare)

        experiment_plate = get_experiment_plate(experiment_plate_id)

        for well in get_well_list():
            new_well = Experiment(
                id=generate_experiment_id(experiment_plate_id, well),
                plate=experiment_plate,
                well=well,
                worm_strain=worm_strain,
                library_stock=get_library_stock(legacy_library_plate_name,
                                                well),
                is_junk=is_junk)

            all_match &= update_or_save_object(command, new_well,
                                               recorded_wells,
                                               well_fields_to_compare)

        return all_match
Beispiel #10
0
 def test_can_save_same_experiment_to_different_owners(self):
     owner1 = User.objects.get(username='******')
     owner2 = User.objects.get(username='******')
     Experiment.objects.create(
         title='A title',
         description='A description',
         nes_id=1,
         owner=owner1,
         version=17,
         sent_date=datetime.utcnow(),
         slug='slug6'  # last slug in tests_helper was 'slug'
     )
     experiment2 = Experiment(title='A title',
                              description='A description',
                              nes_id=1,
                              owner=owner2,
                              version=17,
                              sent_date=datetime.utcnow(),
                              slug='slug7')
     experiment2.full_clean()
Beispiel #11
0
 def setUp(self):
     self.experiment = Experiment(name='backgroundcolor',
                                  state=ENABLED_STATE)
     self.experiment.save()
     self.request = request_factory.get('/')
     self.request.session = DatabaseSession()
Beispiel #12
0
 def setUp(self):
     self.experiment = Experiment(name=EXPERIMENT_NAME, state=ENABLED_STATE)
     self.experiment.save()
     self.request = request_factory.get('/')
     self.request.session = DatabaseSession()
     self.experiment_counter = ExperimentCounter()
Beispiel #13
0
 def setUp(self):
     self.experiment = Experiment(name='backgroundcolor',
                                  state=ENABLED_STATE)
     self.experiment.save()
     self.experiment_counter = ExperimentCounter()