diff --git a/DOSPORTAL/forms.py b/DOSPORTAL/forms.py index f43e77b..a4b3322 100644 --- a/DOSPORTAL/forms.py +++ b/DOSPORTAL/forms.py @@ -71,18 +71,20 @@ def __init__(self,*args, user=None, **kwargs): # #}) # ) - detector = forms.ModelChoiceField( - queryset=Detector.objects.all(), - widget=forms.Select(attrs={ - 'class': 'form-control', - }), - required=False, - label="Detector", - help_text="Select used detector. It is not mandatory in case of detectors with auto-detect feature." - ) + # detector = forms.ModelChoiceField( + # queryset=Detector.objects.all(), + # widget=forms.Select(attrs={ + # 'class': 'form-control', + # }), + # required=False, + # label="Detector", + # help_text="Select used detector. It is not mandatory in case of detectors with auto-detect feature." + # ) description = MarkdownxFormField( - + label="Description", + help_text="Detailed description of the record; markdown supported.", + required=False, ) record_type = forms.ChoiceField( @@ -98,7 +100,8 @@ def __init__(self,*args, user=None, **kwargs): class Meta: model = Record - exclude = ("time_end", "measurement", "log_original_filename", "metadata", "duration", "time_start", "record_duration", "author", 'data_file') + exclude = ("time_end", "measurement", "log_original_filename", "metadata", "duration", "record_duration", "author", 'data_file', + "created", "detector") class DetectorEditForm(forms.ModelForm): diff --git a/DOSPORTAL/migrations/0014_alter_detector_data_alter_record_metadata_and_more.py b/DOSPORTAL/migrations/0014_alter_detector_data_alter_record_metadata_and_more.py new file mode 100644 index 0000000..12d12fe --- /dev/null +++ b/DOSPORTAL/migrations/0014_alter_detector_data_alter_record_metadata_and_more.py @@ -0,0 +1,29 @@ +# Generated by Django 4.2.11 on 2024-04-05 02:23 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('DOSPORTAL', '0013_detectortype_url'), + ] + + operations = [ + migrations.AlterField( + model_name='detector', + name='data', + field=models.JSONField(blank=True, default=[{}], help_text='Detector metadata, used for advanced data processing and maintaining', verbose_name='Detector metadata'), + ), + migrations.AlterField( + model_name='record', + name='metadata', + field=models.JSONField(blank=True, default='[{}]', help_text='record metadata, used for advanced data processing and maintaining', verbose_name='record_metadata'), + ), + migrations.AlterField( + model_name='record', + name='time_start', + field=models.DateTimeField(default=datetime.datetime(2000, 1, 1, 0, 0), null=True, verbose_name='Measurement beginning time'), + ), + ] diff --git a/DOSPORTAL/migrations/0015_record_time_tracked.py b/DOSPORTAL/migrations/0015_record_time_tracked.py new file mode 100644 index 0000000..6f5e414 --- /dev/null +++ b/DOSPORTAL/migrations/0015_record_time_tracked.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.11 on 2024-04-05 02:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('DOSPORTAL', '0014_alter_detector_data_alter_record_metadata_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='record', + name='time_tracked', + field=models.BooleanField(default=False, help_text="When time is tracked, 'time_start' must be filled out", verbose_name='Is time tracked?'), + ), + ] diff --git a/DOSPORTAL/migrations/0016_alter_record_time_start.py b/DOSPORTAL/migrations/0016_alter_record_time_start.py new file mode 100644 index 0000000..32a8647 --- /dev/null +++ b/DOSPORTAL/migrations/0016_alter_record_time_start.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.11 on 2024-04-05 02:27 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('DOSPORTAL', '0015_record_time_tracked'), + ] + + operations = [ + migrations.AlterField( + model_name='record', + name='time_start', + field=models.DateTimeField(blank=True, default=datetime.datetime(2000, 1, 1, 0, 0), null=True, verbose_name='Measurement beginning time'), + ), + ] diff --git a/DOSPORTAL/models.py b/DOSPORTAL/models.py index efefe6e..9d771bc 100644 --- a/DOSPORTAL/models.py +++ b/DOSPORTAL/models.py @@ -1,3 +1,4 @@ +import datetime from typing import Iterable from django.db import models import uuid @@ -324,7 +325,9 @@ class Detector(UUIDMixin): data = models.JSONField( _("Detector metadata"), - help_text="Detector metadata, used for advanced data processing and maintaining" + help_text="Detector metadata, used for advanced data processing and maintaining", + default=[{}], + blank=True ) owner = models.ForeignKey( @@ -532,9 +535,17 @@ def user_directory_path_data(instance, filename): blank=True ) + time_tracked = models.BooleanField( + verbose_name = _("Is time tracked?"), + default = False, + help_text=_("When time is tracked, 'time_start' must be filled out") + ) + time_start = models.DateTimeField( verbose_name = _("Measurement beginning time"), null=True, + blank=True, + default=datetime.datetime(2000, 1, 1, 0, 0, 0) ) created = models.DateTimeField( @@ -569,7 +580,8 @@ def user_directory_path_data(instance, filename): metadata = models.JSONField( _("record_metadata"), help_text=_("record metadata, used for advanced data processing and maintaining"), - default='[{}]' + default='[{}]', + blank=True ) diff --git a/DOSPORTAL/settings.py b/DOSPORTAL/settings.py index fcc655f..3eb1519 100644 --- a/DOSPORTAL/settings.py +++ b/DOSPORTAL/settings.py @@ -57,9 +57,9 @@ 'crispy_bootstrap5', 'django_gravatar', 'markdownx', - + 'guardian', 'prettyjson', - 'organizations', + # 'organizations', ] MARKDOWNX_MARKDOWN_EXTENSIONS = [ @@ -122,6 +122,11 @@ } +AUTHENTICATION_BACKENDS = ( + 'django.contrib.auth.backends.ModelBackend', # this is default + 'guardian.backends.ObjectPermissionBackend', +) + # Password validation # https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators diff --git a/DOSPORTAL/signals.py b/DOSPORTAL/signals.py index 1e6794f..5c744f3 100644 --- a/DOSPORTAL/signals.py +++ b/DOSPORTAL/signals.py @@ -1,7 +1,7 @@ from django.db.models.signals import post_save from django.contrib.auth.models import User from django.dispatch import receiver -from .models import Profile, Record, SpectrumData +from .models import Profile, Record, SpectrumData, Detector import json import pandas as pd import datetime @@ -61,7 +61,7 @@ def save_record(sender, instance, created = None, **kwargs): "fw-version": parts[2], "fw-build_info": parts[5], "fw-commit": parts[4], - 'hw-sn': parts[5] + 'hw-sn': parts[6].strip() } elif line.startswith("$DIG"): @@ -71,7 +71,7 @@ def save_record(sender, instance, created = None, **kwargs): "type": parts[0], "hw-model": parts[1], "hw-sn": parts[2], - '-': parts[3] + 'eeprom': parts[3].strip() } elif line.startswith("$ADC"): @@ -81,25 +81,34 @@ def save_record(sender, instance, created = None, **kwargs): "type": parts[0], "hw-model": parts[1], "hw-sn": parts[2], - '-': parts[3] + 'eeprom': parts[3].strip() } - df = pd.read_csv(instance.log_file.path, sep = ',', header = None, names=range(max_size)) + df_spectrum = pd.read_csv(instance.log_file.path, sep = ',', header = None, names=range(max_size)) - df = df [df[0] == '$HIST'] - df = df.drop(columns=[0, 1, 3, 4, 5, 6, 7, 8]) + df_spectrum = df_spectrum [df_spectrum[0] == '$HIST'] + df_spectrum = df_spectrum.drop(columns=[0, 1, 3, 4, 5, 6, 7, 8]) - new_columns = ['time'] + list(range(df.shape[1] - 1)) - df.columns = new_columns + new_columns = ['time'] + list(range(df_spectrum.shape[1] - 1)) + df_spectrum.columns = new_columns - duration = df['time'].max() + duration = df_spectrum['time'].max() instance.record_duration = datetime.timedelta(seconds=float(duration)) new_name = instance.user_directory_path_data('pk') - df.to_pickle('data/media/'+new_name) + df_spectrum.to_pickle('data/media/'+new_name) instance.data_file.name = new_name + try: + sn = metadata['log_device_info']['DOS']['hw-sn'] + print("Traying to find detector with SN", sn) + det = Detector.objects.get(sn=sn) + print(det) + instance.detector = det + except Exception as e: + print(e) + print(instance.data_file) diff --git a/DOSPORTAL/templates/records/record_detail.html b/DOSPORTAL/templates/records/record_detail.html index b5bb8a1..6b2bdc6 100644 --- a/DOSPORTAL/templates/records/record_detail.html +++ b/DOSPORTAL/templates/records/record_detail.html @@ -33,7 +33,11 @@
{{record.metadata}})
{{record.metadata}})