From 21a9f0375b43964c2f2ee109fb3230ce1dac57a3 2016-02-15 20:08:05 From: Fiorella Quino Date: 2016-02-15 20:08:05 Subject: [PATCH] Task #95: se agrego la funcion "import" para archivos .json git-svn-id: http://jro-dev.igp.gob.pe/svn/jro_hard/radarsys/trunk/webapp@63 aa17d016-51d5-4e8b-934c-7b2bbb1bbe71 --- diff --git a/apps/cgs/files.py b/apps/cgs/files.py new file mode 100644 index 0000000..fa1dcab --- /dev/null +++ b/apps/cgs/files.py @@ -0,0 +1,31 @@ +''' +Created on Feb 15, 2016 + +@author: Miguel Urco +''' + +import json + +def read_json_file(fp): + + kwargs = {} + + json_data = fp + data = json.load(json_data) + json_data.close() + + frequency0 = data["Frequencies"][0][1] + frequency1 = data["Frequencies"][1][1] + frequency2 = data["Frequencies"][2][1] + frequency3 = data["Frequencies"][3][1] + + kwargs['freq0'] = frequency0 + kwargs['freq1'] = frequency1 + kwargs['freq2'] = frequency2 + kwargs['freq3'] = frequency3 + + return kwargs + + +def write_json_file(filename): + pass \ No newline at end of file diff --git a/apps/cgs/forms.py b/apps/cgs/forms.py index 2cdff67..254745f 100644 --- a/apps/cgs/forms.py +++ b/apps/cgs/forms.py @@ -20,15 +20,15 @@ class CGSConfigurationForm(forms.ModelForm): def clean(self): return -# # Custom validation to force an integer when type of unit = "Unit" -# form_data = self.cleaned_data -# if (form_data['freq0'] or form_data['freq1'] or form_data['freq2'] or form_data['freq3'] < 0): -# raise forms.ValidationError("Please introduce positive Number") -# -# return form_data +# class Meta: model = CGSConfiguration #exclude = ('freqs', 'clk_in', 'mult','div',) # exclude = ('freqs',) fields = ('experiment', 'device', 'freq0', 'freq1', 'freq2', 'freq3') + + +class UploadFileForm(forms.Form): + title = forms.CharField(label='Extension Type', widget=forms.TextInput(attrs={'readonly':'readonly'})) + file = forms.FileField() \ No newline at end of file diff --git a/apps/cgs/models.py b/apps/cgs/models.py index 664512b..f112e02 100644 --- a/apps/cgs/models.py +++ b/apps/cgs/models.py @@ -6,24 +6,36 @@ from django.core.validators import MinValueValidator, MaxValueValidator from apps.main.models import Device, Experiment +from files import read_json_file # Create your models here. class CGSConfiguration(Configuration): - - #device = models.ForeignKey(Device) - #exp = models.ForeignKey(Experiment, default = None) + freq0 = models.FloatField(verbose_name='Frequency 0',validators=[MinValueValidator(62.5e6), MaxValueValidator(450e6)], blank=True, null=True) freq1 = models.FloatField(verbose_name='Frequency 1',validators=[MinValueValidator(62.5e6), MaxValueValidator(450e6)], blank=True, null=True) freq2 = models.FloatField(verbose_name='Frequency 2',validators=[MinValueValidator(62.5e6), MaxValueValidator(450e6)], blank=True, null=True) freq3 = models.FloatField(verbose_name='Frequency 3',validators=[MinValueValidator(62.5e6), MaxValueValidator(450e6)], blank=True, null=True) #jfreqs = JSONField(default={"frequencies":[{"f0":freq0,"f1":freq1,"f2":freq2,"f3":freq3}]}, blank=True) - #clk_in = models.PositiveIntegerField(default=10e6) - #mult = models.PositiveIntegerField(default=40) - #div = models.PositiveIntegerField(default=1) + def verify_frequencies(self): return True + + + def update_from_file(self, fp): + + kwargs = read_json_file(fp) + + if not kwargs: + return False + + self.freq0 = kwargs['freq0'] + self.freq1 = kwargs['freq1'] + self.freq2 = kwargs['freq2'] + self.freq3 = kwargs['freq3'] + + return True class Meta: diff --git a/apps/cgs/urls.py b/apps/cgs/urls.py index d92bfac..b5a4a9f 100644 --- a/apps/cgs/urls.py +++ b/apps/cgs/urls.py @@ -7,9 +7,7 @@ urlpatterns = ( url(r'^(?P-?\d+)/edit/$', 'apps.cgs.views.cgs_conf_edit', name='url_edit_cgs_conf'), url(r'^(?P-?\d+)/write/$', 'apps.cgs.views.cgs_conf_write', name='url_write_cgs_conf'), url(r'^(?P-?\d+)/read/$', 'apps.cgs.views.cgs_conf_read', name='url_read_cgs_conf'), - #url(r'^(?P-?\d+)/write/$', 'apps.main.views.dev_conf_write', name='url_write_cgs_conf'), - #url(r'^(?P-?\d+)/read/$', 'apps.main.views.dev_conf_read', name='url_read_cgs_conf'), - url(r'^(?P-?\d+)/import/$', 'apps.main.views.dev_conf_import', name='url_import_cgs_conf'), + url(r'^(?P-?\d+)/import/$', 'apps.cgs.views.cgs_conf_import', name='url_import_cgs_conf'), url(r'^(?P-?\d+)/export/$', 'apps.cgs.views.cgs_conf_export', name='url_export_cgs_conf'), #url(r'^(?P-?\d+)/export/$', 'apps.main.views.dev_conf_export', name='url_export_cgs_conf'), ) diff --git a/apps/cgs/views.py b/apps/cgs/views.py index 2b65792..33250a1 100644 --- a/apps/cgs/views.py +++ b/apps/cgs/views.py @@ -4,7 +4,7 @@ from django.contrib import messages from apps.main.models import Experiment, Configuration from .models import CGSConfiguration -from .forms import CGSConfigurationForm +from .forms import CGSConfigurationForm, UploadFileForm from apps.main.views import sidebar import requests @@ -244,6 +244,58 @@ def cgs_conf_read(request, id_conf): return render(request, 'cgs_conf_edit.html', kwargs) +def cgs_conf_import(request, id_conf): + + conf = get_object_or_404(CGSConfiguration, pk=id_conf) + + if request.method == 'POST': + file_form = UploadFileForm(request.POST, request.FILES) + + if file_form.is_valid(): + + try: + if conf.update_from_file(request.FILES['file']): + + try: + conf.full_clean() + except ValidationError as e: + messages.error(request, e) + else: + conf.save() + + messages.success(request, "Parameters imported from file: '%s'." %request.FILES['file'].name) + #messages.warning(request,"") + return redirect('url_cgs_conf', id_conf=conf.id) + except: + messages.error(request, "No JSON object could be decoded.") + + messages.error(request, "Could not import parameters from file") + + else: + file_form = UploadFileForm(initial={'title': '.json'}) + + + kwargs = {} + kwargs['id_dev'] = conf.id + kwargs['title'] = 'Device Configuration' + kwargs['form'] = file_form + kwargs['suptitle'] = 'Importing file' + kwargs['button'] = 'Import' + + kwargs.update(sidebar(conf)) + + return render(request, 'cgs_conf_import.html', kwargs) + +def handle_uploaded_file(f): + + data = {'freq0' : 62500000, + 'freq1' : 62500000, + 'freq2' : 62500000, + 'freq3' : 62500000, + } + + return data + def cgs_conf_export(request, id_conf): conf = get_object_or_404(CGSConfiguration, pk=id_conf)