Commit 93039f18a05deec8d5ec8d2870de2936a1778dbb

Authored by Alexis Koralewski
1 parent 2ae8c1cf
Exists in dev

Fix issues due to deletion of modules (utils)

Showing 36 changed files with 663 additions and 1985 deletions   Show diff stats
pyros.py
... ... @@ -727,7 +727,7 @@ def test(module, function):
727 727 # apps = ['obs_config','scp_mgmt','common', 'scheduling', 'seq_submit', 'user_mgmt', 'alert_mgmt.tests.TestStrategyChange']
728 728 # Removing alert_mgmt, scheduler from tests
729 729 apps = ['obs_config', "scp_mgmt",
730   - 'common', 'user_mgmt', 'seq_submit','api']
  730 + 'dashboard', 'user_mgmt', 'seq_submit','api']
731 731 else:
732 732 os.environ["PATH_TO_OBSCONF_FILE"] = os.path.join(os.path.abspath(
733 733 PYROS_DJANGO_BASE_DIR), "obs_config/fixtures/observatory_configuration_ok_simple.yml")
... ...
src/core/pyros_django/alert_mgmt/urls.py
... ... @@ -2,9 +2,9 @@ from django.urls import include, path # For django versions from 2.0 and up
2 2 from . import views
3 3  
4 4 urlpatterns = [
5   - path('start_simulation', views.start_simulation, name="start_simulation"),
6   - path('change_obs_strategy/<int:alert_id>', views.change_obs_strategy, name="change_obs_strategy"),
7   - path('change_obs_strategy_validate/<int:alert_id>', views.change_obs_strategy_validate, name="change_obs_strategy_validate"),
8   - path('alerts', views.alerts_list, name='alerts_list'),
9   - path('change_default_strategy/<int:strat_id>', views.change_default_strategy, name='change_default_strategy'),
  5 + # path('start_simulation', views.start_simulation, name="start_simulation"),
  6 + # path('change_obs_strategy/<int:alert_id>', views.change_obs_strategy, name="change_obs_strategy"),
  7 + # path('change_obs_strategy_validate/<int:alert_id>', views.change_obs_strategy_validate, name="change_obs_strategy_validate"),
  8 + # path('alerts', views.alerts_list, name='alerts_list'),
  9 + # path('change_default_strategy/<int:strat_id>', views.change_default_strategy, name='change_default_strategy'),
10 10 ]
... ...
src/core/pyros_django/alert_mgmt/views.py
1   -from django.shortcuts import render
2   -from common.models import *
3   -from alert_mgmt.StrategyBuilder import StrategyBuilder
4   -import socket
5   -import majordome
6   -from django.contrib.auth.decorators import login_required
7   -import alert_mgmt.tasks
8   -
9   -import os, time, shutil
10   -
11   -TEST_FILE = "unittest_voevent.xml"
12   -
13   -TEST_FILE_PATH = os.path.join(alert_mgmt.tasks.VOEVENTS_PATH, TEST_FILE)
14   -
15   -VOEVENTS_TO_SEND_PATH = "alert_mgmt/events_to_send"
16   -
17   -
18   -@login_required
19   -def start_simulation(request):
20   - '''
21   - Called when the alert simulation button is pressed
22   - Deletes then copies the test voevent file from the events_received folder
23   - '''
24   -
25   - if os.path.isfile(TEST_FILE_PATH):
26   - os.remove(TEST_FILE_PATH)
27   - print("================== DELETE FILE ==================")
28   - time.sleep(3)
29   -
30   - print("================== COPY FILE ==================")
31   - shutil.copyfile(os.path.join(VOEVENTS_TO_SEND_PATH, TEST_FILE),
32   - TEST_FILE_PATH)
33   - alerts = Alert.objects.order_by("-request__created")
34   - if StrategyObs.objects.filter(is_default=True).exists():
35   - current_default = StrategyObs.objects.filter(is_default=True)[0].name
36   - btn_type = "btn-primary"
37   - else:
38   - current_default = "Warning: please choose a default strategy"
39   - btn_type = "btn-danger"
40   - strat_list = StrategyObs.objects.all()
41   -
42   - success = True
43   - message = "Simulation started successfully"
44   - return render(request, "alert_mgmt/alerts.html", locals())
45   -
46   -def alerts_list(request):
47   - '''
48   - Display the list of all alerts
49   - '''
50   -
51   - alerts = Alert.objects.order_by("-request__created")
52   - if StrategyObs.objects.filter(is_default=True).exists():
53   - current_default = StrategyObs.objects.filter(is_default=True)[0].name
54   - btn_type = "btn-primary"
55   - else:
56   - current_default = "Warning: please choose a default strategy"
57   - btn_type = "btn-danger"
58   - strat_list = StrategyObs.objects.all()
59   - #if request.user.is_authenticated:
60   - base_template = "base.html"
61   - return render(request, "alert_mgmt/alerts.html", locals())
62   -
63   -@login_required
64   -def change_default_strategy(request, strat_id):
65   - '''
66   - Changes the strategy to be used when an alert is received
67   - '''
68   -
69   - strategies = StrategyObs.objects.all()
70   - if strategies.filter(id=strat_id).exists():
71   - for strat in strategies:
72   - strat.is_default = False
73   - strat.save()
74   - strat = strategies.get(id=strat_id)
75   - strat.is_default = True
76   - strat.save()
77   -
78   - success = True
79   - message = "Default strategy successfully changed"
80   - else:
81   - error = True
82   - message = "Could not find this strategy"
83   -
84   - alerts = Alert.objects.order_by("-request__created")
85   - if StrategyObs.objects.filter(is_default=True).exists():
86   - current_default = StrategyObs.objects.filter(is_default=True)[0].name
87   - btn_type = "btn-primary"
88   - else:
89   - current_default = "Warning: please choose a default strategy"
90   - btn_type = "btn-danger"
91   - strat_list = StrategyObs.objects.all()
92   -
93   - return render(request, "alert_mgmt/alerts.html", locals())
94   -
95   -
96   -@login_required
97   -def change_obs_strategy(request, alert_id):
98   - '''
99   - Open a page for a given alert, listing all the other strategies
100   - '''
101   -
102   - alert = Alert.objects.get(id=alert_id)
103   - if alert.strategyobs is not None:
104   - strategies = StrategyObs.objects.exclude(id=alert.strategyobs.id)
105   - else:
106   - strategies = StrategyObs.objects.all()
107   - return render(request, "alert_mgmt/strategy_change.html", locals())
108   -
109   -
110   -@login_required
111   -def change_obs_strategy_validate(request, alert_id):
112   - '''
113   - Creates a new request with the strategy given for the selected alert
114   - '''
115   -
116   - try:
117   - alert = Alert.objects.get(id=alert_id)
118   - except Exception:
119   - alerts = Alert.objects.all()
120   - error = True
121   - message = "This alert doesn't exist"
122   - return render(request, "alert_mgmt/alerts.html", locals())
123   -
124   - # All strategies except the current one
125   - strategies = StrategyObs.objects.exclude(id=alert.strategyobs.id)
126   -
127   - if request.method == "POST":
128   -
129   - strategy_id = request.POST["strategy_choice"]
130   - try:
131   - strategy = StrategyObs.objects.get(id=strategy_id)
132   - except Exception:
133   - error = True
134   - message = "This strategy doesn't exist"
135   - return render(request, "alert_mgmt/strategy_change.html", locals())
136   -
137   - if str(alert.strategyobs.id) == strategy_id:
138   - error = True
139   - message = "This is already the current strategy for this alert"
140   - return render(request, "alert_mgmt/strategy_change.html", locals())
141   -
142   - sb = StrategyBuilder()
143   - file = strategy.xml_file
144   - # (EP) Inutile, il y a plus rapide (Alert herite de Request)
145   - #pyros_user = alert.request.pyros_user
146   - pyros_user = alert.pyros_user
147   - print("pyros user is", pyros_user)
148   - # meme remarque
149   - #scientific_program = alert.request.scientific_program
150   - scientific_program = alert.scientific_program
151   - print("SP is", scientific_program)
152   - # meme remarque
153   - #name = alert.request.name
154   - name = alert.name
155   - print("alert request name is", name)
156   - sb.create_request_from_strategy(file, pyros_user, scientific_program, name)
157   - print("New alert request created is", sb.rb.request)
158   - req = sb.validate()
159   - print("New alert request created is", req)
160   - # Attention : Alert n'a pas de pk !!! c'est le pk de Request !!!
161   - alert.pk = None
162   - alert.strategyobs = strategy
163   - alert.request_id = req
164   - # C'est quoi ce beans de geek ??? !!!
165   - alert.__dict__.update(req.__dict__)
166   - alert.save()
167   - strategies = StrategyObs.objects.exclude(id=alert.strategyobs.id)
168   -
169   - success = True
170   - message = "Strategy successfully changed. A new request was created."
171   -
172   - return render(request, "alert_mgmt/strategy_change.html", locals())
  1 +# from django.shortcuts import render
  2 +# from common.models import *
  3 +# from alert_mgmt.StrategyBuilder import StrategyBuilder
  4 +# import socket
  5 +# import majordome
  6 +# from django.contrib.auth.decorators import login_required
  7 +# import alert_mgmt.tasks
  8 +
  9 +# import os, time, shutil
  10 +
  11 +# TEST_FILE = "unittest_voevent.xml"
  12 +
  13 +# TEST_FILE_PATH = os.path.join(alert_mgmt.tasks.VOEVENTS_PATH, TEST_FILE)
  14 +
  15 +# VOEVENTS_TO_SEND_PATH = "alert_mgmt/events_to_send"
  16 +
  17 +
  18 +# @login_required
  19 +# def start_simulation(request):
  20 +# '''
  21 +# Called when the alert simulation button is pressed
  22 +# Deletes then copies the test voevent file from the events_received folder
  23 +# '''
  24 +
  25 +# if os.path.isfile(TEST_FILE_PATH):
  26 +# os.remove(TEST_FILE_PATH)
  27 +# print("================== DELETE FILE ==================")
  28 +# time.sleep(3)
  29 +
  30 +# print("================== COPY FILE ==================")
  31 +# shutil.copyfile(os.path.join(VOEVENTS_TO_SEND_PATH, TEST_FILE),
  32 +# TEST_FILE_PATH)
  33 +# alerts = Alert.objects.order_by("-request__created")
  34 +# if StrategyObs.objects.filter(is_default=True).exists():
  35 +# current_default = StrategyObs.objects.filter(is_default=True)[0].name
  36 +# btn_type = "btn-primary"
  37 +# else:
  38 +# current_default = "Warning: please choose a default strategy"
  39 +# btn_type = "btn-danger"
  40 +# strat_list = StrategyObs.objects.all()
  41 +
  42 +# success = True
  43 +# message = "Simulation started successfully"
  44 +# return render(request, "alert_mgmt/alerts.html", locals())
  45 +
  46 +# def alerts_list(request):
  47 +# '''
  48 +# Display the list of all alerts
  49 +# '''
  50 +
  51 +# alerts = Alert.objects.order_by("-request__created")
  52 +# if StrategyObs.objects.filter(is_default=True).exists():
  53 +# current_default = StrategyObs.objects.filter(is_default=True)[0].name
  54 +# btn_type = "btn-primary"
  55 +# else:
  56 +# current_default = "Warning: please choose a default strategy"
  57 +# btn_type = "btn-danger"
  58 +# strat_list = StrategyObs.objects.all()
  59 +# #if request.user.is_authenticated:
  60 +# base_template = "base.html"
  61 +# return render(request, "alert_mgmt/alerts.html", locals())
  62 +
  63 +# @login_required
  64 +# def change_default_strategy(request, strat_id):
  65 +# '''
  66 +# Changes the strategy to be used when an alert is received
  67 +# '''
  68 +
  69 +# strategies = StrategyObs.objects.all()
  70 +# if strategies.filter(id=strat_id).exists():
  71 +# for strat in strategies:
  72 +# strat.is_default = False
  73 +# strat.save()
  74 +# strat = strategies.get(id=strat_id)
  75 +# strat.is_default = True
  76 +# strat.save()
  77 +
  78 +# success = True
  79 +# message = "Default strategy successfully changed"
  80 +# else:
  81 +# error = True
  82 +# message = "Could not find this strategy"
  83 +
  84 +# alerts = Alert.objects.order_by("-request__created")
  85 +# if StrategyObs.objects.filter(is_default=True).exists():
  86 +# current_default = StrategyObs.objects.filter(is_default=True)[0].name
  87 +# btn_type = "btn-primary"
  88 +# else:
  89 +# current_default = "Warning: please choose a default strategy"
  90 +# btn_type = "btn-danger"
  91 +# strat_list = StrategyObs.objects.all()
  92 +
  93 +# return render(request, "alert_mgmt/alerts.html", locals())
  94 +
  95 +
  96 +# @login_required
  97 +# def change_obs_strategy(request, alert_id):
  98 +# '''
  99 +# Open a page for a given alert, listing all the other strategies
  100 +# '''
  101 +
  102 +# alert = Alert.objects.get(id=alert_id)
  103 +# if alert.strategyobs is not None:
  104 +# strategies = StrategyObs.objects.exclude(id=alert.strategyobs.id)
  105 +# else:
  106 +# strategies = StrategyObs.objects.all()
  107 +# return render(request, "alert_mgmt/strategy_change.html", locals())
  108 +
  109 +
  110 +# @login_required
  111 +# def change_obs_strategy_validate(request, alert_id):
  112 +# '''
  113 +# Creates a new request with the strategy given for the selected alert
  114 +# '''
  115 +
  116 +# try:
  117 +# alert = Alert.objects.get(id=alert_id)
  118 +# except Exception:
  119 +# alerts = Alert.objects.all()
  120 +# error = True
  121 +# message = "This alert doesn't exist"
  122 +# return render(request, "alert_mgmt/alerts.html", locals())
  123 +
  124 +# # All strategies except the current one
  125 +# strategies = StrategyObs.objects.exclude(id=alert.strategyobs.id)
  126 +
  127 +# if request.method == "POST":
  128 +
  129 +# strategy_id = request.POST["strategy_choice"]
  130 +# try:
  131 +# strategy = StrategyObs.objects.get(id=strategy_id)
  132 +# except Exception:
  133 +# error = True
  134 +# message = "This strategy doesn't exist"
  135 +# return render(request, "alert_mgmt/strategy_change.html", locals())
  136 +
  137 +# if str(alert.strategyobs.id) == strategy_id:
  138 +# error = True
  139 +# message = "This is already the current strategy for this alert"
  140 +# return render(request, "alert_mgmt/strategy_change.html", locals())
  141 +
  142 +# sb = StrategyBuilder()
  143 +# file = strategy.xml_file
  144 +# # (EP) Inutile, il y a plus rapide (Alert herite de Request)
  145 +# #pyros_user = alert.request.pyros_user
  146 +# pyros_user = alert.pyros_user
  147 +# print("pyros user is", pyros_user)
  148 +# # meme remarque
  149 +# #scientific_program = alert.request.scientific_program
  150 +# scientific_program = alert.scientific_program
  151 +# print("SP is", scientific_program)
  152 +# # meme remarque
  153 +# #name = alert.request.name
  154 +# name = alert.name
  155 +# print("alert request name is", name)
  156 +# sb.create_request_from_strategy(file, pyros_user, scientific_program, name)
  157 +# print("New alert request created is", sb.rb.request)
  158 +# req = sb.validate()
  159 +# print("New alert request created is", req)
  160 +# # Attention : Alert n'a pas de pk !!! c'est le pk de Request !!!
  161 +# alert.pk = None
  162 +# alert.strategyobs = strategy
  163 +# alert.request_id = req
  164 +# # C'est quoi ce beans de geek ??? !!!
  165 +# alert.__dict__.update(req.__dict__)
  166 +# alert.save()
  167 +# strategies = StrategyObs.objects.exclude(id=alert.strategyobs.id)
  168 +
  169 +# success = True
  170 +# message = "Strategy successfully changed. A new request was created."
  171 +
  172 +# return render(request, "alert_mgmt/strategy_change.html", locals())
... ...
src/core/pyros_django/common/admin.py
... ... @@ -15,282 +15,283 @@ from devices.models import Detector, Filter, AgentDeviceStatus, FilterWheel, Tel
15 15 from seq_submit.models import Image, Schedule, Sequence, Album, Plan, ScheduleHasSequences #, StrategyObs, NrtAnalysis
16 16 #from seq_submit.models import Image, StrategyObs, Schedule, Request, Alert, Sequence, Album, Plan, NrtAnalysis, ScheduleHasSequences
17 17  
  18 +# MOVED TO DASHBOARD
18 19  
19 20 # EP added
20   -class ReadOnlyModelAdmin(admin.ModelAdmin):
21   - """ModelAdmin class that prevents modifications through the admin.
22   - The changelist and the detail view work, but a 403 is returned
23   - if one actually tries to edit an object.
24   - Source: https://gist.github.com/aaugustin/1388243
25   - """
  21 +# class ReadOnlyModelAdmin(admin.ModelAdmin):
  22 +# """ModelAdmin class that prevents modifications through the admin.
  23 +# The changelist and the detail view work, but a 403 is returned
  24 +# if one actually tries to edit an object.
  25 +# Source: https://gist.github.com/aaugustin/1388243
  26 +# """
26 27  
27   - actions = None
  28 +# actions = None
28 29  
29   - def get_readonly_fields(self, request, obj=None):
30   - return self.fields or [f.name for f in self.model._meta.fields]
  30 +# def get_readonly_fields(self, request, obj=None):
  31 +# return self.fields or [f.name for f in self.model._meta.fields]
31 32  
32   - def has_add_permission(self, request):
33   - return False
  33 +# def has_add_permission(self, request):
  34 +# return False
34 35  
35   - # Allow viewing objects but not actually changing them
36   - def has_change_permission(self, request, obj=None):
37   - if request.method not in ('GET', 'HEAD'):
38   - return False
39   - return super(ReadOnlyModelAdmin, self).has_change_permission(request, obj)
  36 +# # Allow viewing objects but not actually changing them
  37 +# def has_change_permission(self, request, obj=None):
  38 +# if request.method not in ('GET', 'HEAD'):
  39 +# return False
  40 +# return super(ReadOnlyModelAdmin, self).has_change_permission(request, obj)
40 41  
41   - def has_delete_permission(self, request, obj=None):
42   - return False
  42 +# def has_delete_permission(self, request, obj=None):
  43 +# return False
43 44  
44 45  
45   -# EP added
  46 +# # EP added
  47 +
  48 +# # Edit mode
  49 +# # DEBUG = False
  50 +# # View only mode
  51 +# # DEBUG = True
46 52  
47   -# Edit mode
48   -# DEBUG = False
49   -# View only mode
50   -# DEBUG = True
  53 +# ''' Uncomment for production '''
51 54  
52   -''' Uncomment for production '''
  55 +# # if settings.DEBUG:
  56 +# # class PyrosModelAdmin(ReadOnlyModelAdmin):
  57 +# # pass
  58 +# # else:
  59 +# # class PyrosModelAdmin(admin.ModelAdmin):
  60 +# # pass
53 61  
54   -# if settings.DEBUG:
55   -# class PyrosModelAdmin(ReadOnlyModelAdmin):
  62 +
  63 +# class PyrosModelAdmin(admin.ModelAdmin):
56 64 # pass
57   -# else:
58   -# class PyrosModelAdmin(admin.ModelAdmin):
59   -# pass
60 65  
  66 +# # Many To Many interface adapter
61 67  
62   -class PyrosModelAdmin(admin.ModelAdmin):
63   - pass
64 68  
65   -# Many To Many interface adapter
  69 +# class PyrosUserAndSPInline(admin.TabularInline):
  70 +# #model = ScientificProgram.pyros_users.through
  71 +# pass
66 72  
67 73  
68   -class PyrosUserAndSPInline(admin.TabularInline):
69   - #model = ScientificProgram.pyros_users.through
70   - pass
  74 +# class SequenceAndScheduleInline(admin.TabularInline):
  75 +# model = Schedule.sequences.through
71 76  
  77 +# class PyrosUserAndUserLevelInline(admin.TabularInline):
  78 +# # add admin representation for m2m relation between PyrosUser and UserLevel
  79 +# model = UserLevel.pyros_users.through
72 80  
73   -class SequenceAndScheduleInline(admin.TabularInline):
74   - model = Schedule.sequences.through
  81 +# class ScheduleAdmin(admin.ModelAdmin):
  82 +# inlines = [
  83 +# SequenceAndScheduleInline,
  84 +# ]
  85 +# exclude = ('sequences',)
75 86  
76   -class PyrosUserAndUserLevelInline(admin.TabularInline):
77   - # add admin representation for m2m relation between PyrosUser and UserLevel
78   - model = UserLevel.pyros_users.through
79 87  
80   -class ScheduleAdmin(admin.ModelAdmin):
81   - inlines = [
82   - SequenceAndScheduleInline,
83   - ]
84   - exclude = ('sequences',)
  88 +# # One To Many interface adapters
85 89  
  90 +# class SequenceInline(admin.TabularInline):
  91 +# model = Sequence
  92 +# readonly_fields = ("name",)
  93 +# fields = ("name",)
  94 +# show_change_link = True
86 95  
87   -# One To Many interface adapters
88 96  
89   -class SequenceInline(admin.TabularInline):
90   - model = Sequence
91   - readonly_fields = ("name",)
92   - fields = ("name",)
93   - show_change_link = True
  97 +# # class RequestInline(admin.TabularInline):
  98 +# # model = Request
  99 +# # readonly_fields = ("name",)
  100 +# # fields = ("name",)
  101 +# # show_change_link = True
94 102  
95 103  
96   -# class RequestInline(admin.TabularInline):
97   -# model = Request
  104 +# class AlbumInline(admin.TabularInline):
  105 +# model = Album
98 106 # readonly_fields = ("name",)
99 107 # fields = ("name",)
100 108 # show_change_link = True
101 109  
102 110  
103   -class AlbumInline(admin.TabularInline):
104   - model = Album
105   - readonly_fields = ("name",)
106   - fields = ("name",)
107   - show_change_link = True
  111 +# class PlanInline(admin.TabularInline):
  112 +# model = Plan
  113 +# #readonly_fields = ("name",)
  114 +# #fields = ("name",)
  115 +# show_change_link = True
108 116  
109 117  
110   -class PlanInline(admin.TabularInline):
111   - model = Plan
112   - #readonly_fields = ("name",)
113   - #fields = ("name",)
114   - show_change_link = True
  118 +# class ImageInline(admin.TabularInline):
  119 +# model = Image
  120 +# readonly_fields = ("name",)
  121 +# fields = ("name",)
  122 +# show_change_link = True
115 123  
116 124  
117   -class ImageInline(admin.TabularInline):
118   - model = Image
119   - readonly_fields = ("name",)
120   - fields = ("name",)
121   - show_change_link = True
  125 +# class DetectorInline(admin.TabularInline):
  126 +# model = Detector
  127 +# readonly_fields = ("device_name",)
  128 +# fields = ("device_name",)
  129 +# show_change_link = True
122 130  
123 131  
124   -class DetectorInline(admin.TabularInline):
125   - model = Detector
126   - readonly_fields = ("device_name",)
127   - fields = ("device_name",)
128   - show_change_link = True
  132 +# class PyrosUserInline(admin.TabularInline):
  133 +# model = PyrosUser
  134 +# readonly_fields = ("user_username",)
  135 +# fields = ("user_username",)
  136 +# show_change_link = True
129 137  
130 138  
131   -class PyrosUserInline(admin.TabularInline):
132   - model = PyrosUser
133   - readonly_fields = ("user_username",)
134   - fields = ("user_username",)
135   - show_change_link = True
  139 +# class FilterInline(admin.TabularInline):
  140 +# model = Filter
  141 +# readonly_fields = ("device_name",)
  142 +# fields = ("device_name",)
  143 +# show_change_link = True
136 144  
137 145  
138   -class FilterInline(admin.TabularInline):
139   - model = Filter
140   - readonly_fields = ("device_name",)
141   - fields = ("device_name",)
142   - show_change_link = True
  146 +# # class AlertInline(admin.TabularInline):
  147 +# # model = Alert
  148 +# # readonly_fields = ("request_name",)
  149 +# # fields = ("request_name",)
  150 +# # show_change_link = True
143 151  
144 152  
145   -# class AlertInline(admin.TabularInline):
146   -# model = Alert
147   -# readonly_fields = ("request_name",)
148   -# fields = ("request_name",)
149   -# show_change_link = True
  153 +# # Admin model classes
  154 +
  155 +# # class RequestAdmin(PyrosModelAdmin):
  156 +# # pass
  157 +# # inlines = [
  158 +# # SequenceInline,
  159 +# # ]
  160 +
  161 +
  162 +# class SequenceAdmin(PyrosModelAdmin):
  163 +# inlines = [
  164 +# AlbumInline,
  165 +# SequenceAndScheduleInline, # for M2M interface
  166 +# ]
150 167  
151 168  
152   -# Admin model classes
  169 +# class PyrosUserAdmin(PyrosModelAdmin):
  170 +# list_display = ("user_username","is_active","laboratory")
  171 +# list_filter = ("is_active",)
  172 +# list_editable = ("is_active",)
  173 +# inlines = [
  174 +# #RequestInline,
  175 +# # A user has many SPs
  176 +# # PyrosUserAndSPInline, # for M2M interface
  177 +# ]
153 178  
154   -# class RequestAdmin(PyrosModelAdmin):
155   -# pass
156   - # inlines = [
157   - # SequenceInline,
158   - # ]
159 179  
  180 +# '''
  181 +# class StrategyObsAdmin(PyrosModelAdmin):
  182 +# inlines = [
  183 +# #AlertInline,
  184 +# ]
  185 +# '''
160 186  
161   -class SequenceAdmin(PyrosModelAdmin):
162   - inlines = [
163   - AlbumInline,
164   - SequenceAndScheduleInline, # for M2M interface
165   - ]
166 187  
  188 +# class ScientificProgramAdmin(PyrosModelAdmin):
  189 +# inlines = [
  190 +# #RequestInline,
  191 +# # A SP has many users:
  192 +# # PyrosUserAndSPInline, # for M2M interface
  193 +# ]
  194 +# exclude = ('pyros_users',) # for M2M interface
167 195  
168   -class PyrosUserAdmin(PyrosModelAdmin):
169   - list_display = ("user_username","is_active","laboratory")
170   - list_filter = ("is_active",)
171   - list_editable = ("is_active",)
172   - inlines = [
173   - #RequestInline,
174   - # A user has many SPs
175   -# PyrosUserAndSPInline, # for M2M interface
176   - ]
177 196  
  197 +# class CountryAdmin(PyrosModelAdmin):
  198 +# inlines = [
  199 +# PyrosUserInline,
  200 +# ]
178 201  
179   -'''
180   -class StrategyObsAdmin(PyrosModelAdmin):
181   - inlines = [
182   - #AlertInline,
183   - ]
184   -'''
185 202  
  203 +# class UserLevelAdmin(PyrosModelAdmin):
  204 +# inlines = [
  205 +# #PyrosUserInline,
  206 +# PyrosUserAndUserLevelInline,
  207 +# ]
  208 +# list_display = ("name","priority",)
  209 +# # we need to exclude pyros_users which represents the m2m relation between UserLevel and PyrosUser
  210 +# exclude = ("pyros_users",)
  211 +
  212 +
  213 +# class FilterAdmin(PyrosModelAdmin):
  214 +# # inlines = [
  215 +# # PlanInline,
  216 +# # ]
  217 +# pass
186 218  
187   -class ScientificProgramAdmin(PyrosModelAdmin):
188   - inlines = [
189   - #RequestInline,
190   - # A SP has many users:
191   - # PyrosUserAndSPInline, # for M2M interface
192   - ]
193   - exclude = ('pyros_users',) # for M2M interface
194   -
195   -
196   -class CountryAdmin(PyrosModelAdmin):
197   - inlines = [
198   - PyrosUserInline,
199   - ]
200   -
201   -
202   -class UserLevelAdmin(PyrosModelAdmin):
203   - inlines = [
204   - #PyrosUserInline,
205   - PyrosUserAndUserLevelInline,
206   - ]
207   - list_display = ("name","priority",)
208   - # we need to exclude pyros_users which represents the m2m relation between UserLevel and PyrosUser
209   - exclude = ("pyros_users",)
210   -
211   -
212   -class FilterAdmin(PyrosModelAdmin):
213   - # inlines = [
214   - # PlanInline,
215   - # ]
216   - pass
217   -
218   -
219   -class FilterWheelAdmin(PyrosModelAdmin):
220   - inlines = [
221   - FilterInline,
222   - ]
223   -
224   -
225   -'''
226   -class NrtAnalysisAdmin(PyrosModelAdmin):
227   - inlines = [
228   - ImageInline,
229   - ]
230   -'''
231   -
232   -
233   -class DetectorAdmin(PyrosModelAdmin):
234   - pass
235   - # inlines = [
236   - # AlbumInline,
237   - # ]
238   -
239   -
240   -class TelescopeAdmin(PyrosModelAdmin):
241   - inlines = [
242   - DetectorInline,
243   - ]
244   -
245   -
246   -class PlanAdmin(PyrosModelAdmin):
247   - inlines = [
248   - ImageInline,
249   - ]
250   -
251   -
252   -# class AlbumAdmin(admin.ModelAdmin):
253   -class AlbumAdmin(PyrosModelAdmin):
254   - inlines = [
255   - PlanInline,
256   - ]
257   -
258   -
259   -# Link the models to the admin interface
260   -
261   -# (EP added 10/7/19)
262   -admin.site.register(AgentCmd)
263   -admin.site.register(AgentLogs)
264   -admin.site.register(AgentSurvey)
265   -admin.site.register(AgentDeviceStatus)
266   -
267   -
268   -admin.site.register(Album, AlbumAdmin)
269   -#admin.site.register(Alert)
270   -admin.site.register(Country, CountryAdmin)
271   -admin.site.register(Detector, DetectorAdmin)
272   -admin.site.register(Filter, FilterAdmin)
273   -admin.site.register(FilterWheel, FilterWheelAdmin)
274   -admin.site.register(Image)
275   -admin.site.register(Log)
276   -#admin.site.register(NrtAnalysis, NrtAnalysisAdmin)
277   -admin.site.register(Plan, PlanAdmin)
278   -#admin.site.register(Request, RequestAdmin)
279   -admin.site.register(Schedule, ScheduleAdmin)
280   -admin.site.register(ScheduleHasSequences)
281   -admin.site.register(ScientificProgram, ScientificProgramAdmin)
282   -admin.site.register(Sequence, SequenceAdmin)
283   -admin.site.register(SiteWatch)
284   -admin.site.register(SiteWatchHistory)
285   -#admin.site.register(StrategyObs, StrategyObsAdmin)
286   -##admin.site.register(TaskId)
287   -admin.site.register(Telescope, TelescopeAdmin)
288   -admin.site.register(PyrosUser, PyrosUserAdmin)
289   -admin.site.register(UserLevel, UserLevelAdmin)
290   -admin.site.register(Version)
291   -admin.site.register(WeatherWatch)
292   -admin.site.register(WeatherWatchHistory)
293   -admin.site.register(PlcDeviceStatus)
294   -admin.site.register(PlcDevice)
295   -admin.site.register(Config)
296   -admin.site.register(Institute)
297 219 \ No newline at end of file
  220 +
  221 +# class FilterWheelAdmin(PyrosModelAdmin):
  222 +# inlines = [
  223 +# FilterInline,
  224 +# ]
  225 +
  226 +
  227 +# '''
  228 +# class NrtAnalysisAdmin(PyrosModelAdmin):
  229 +# inlines = [
  230 +# ImageInline,
  231 +# ]
  232 +# '''
  233 +
  234 +
  235 +# class DetectorAdmin(PyrosModelAdmin):
  236 +# pass
  237 +# # inlines = [
  238 +# # AlbumInline,
  239 +# # ]
  240 +
  241 +
  242 +# class TelescopeAdmin(PyrosModelAdmin):
  243 +# inlines = [
  244 +# DetectorInline,
  245 +# ]
  246 +
  247 +
  248 +# class PlanAdmin(PyrosModelAdmin):
  249 +# inlines = [
  250 +# ImageInline,
  251 +# ]
  252 +
  253 +
  254 +# # class AlbumAdmin(admin.ModelAdmin):
  255 +# class AlbumAdmin(PyrosModelAdmin):
  256 +# inlines = [
  257 +# PlanInline,
  258 +# ]
  259 +
  260 +
  261 +# # Link the models to the admin interface
  262 +
  263 +# # (EP added 10/7/19)
  264 +# admin.site.register(AgentCmd)
  265 +# admin.site.register(AgentLogs)
  266 +# admin.site.register(AgentSurvey)
  267 +# admin.site.register(AgentDeviceStatus)
  268 +
  269 +
  270 +# admin.site.register(Album, AlbumAdmin)
  271 +# #admin.site.register(Alert)
  272 +# admin.site.register(Country, CountryAdmin)
  273 +# admin.site.register(Detector, DetectorAdmin)
  274 +# admin.site.register(Filter, FilterAdmin)
  275 +# admin.site.register(FilterWheel, FilterWheelAdmin)
  276 +# admin.site.register(Image)
  277 +# admin.site.register(Log)
  278 +# #admin.site.register(NrtAnalysis, NrtAnalysisAdmin)
  279 +# admin.site.register(Plan, PlanAdmin)
  280 +# #admin.site.register(Request, RequestAdmin)
  281 +# admin.site.register(Schedule, ScheduleAdmin)
  282 +# admin.site.register(ScheduleHasSequences)
  283 +# admin.site.register(ScientificProgram, ScientificProgramAdmin)
  284 +# admin.site.register(Sequence, SequenceAdmin)
  285 +# admin.site.register(SiteWatch)
  286 +# admin.site.register(SiteWatchHistory)
  287 +# #admin.site.register(StrategyObs, StrategyObsAdmin)
  288 +# ##admin.site.register(TaskId)
  289 +# admin.site.register(Telescope, TelescopeAdmin)
  290 +# admin.site.register(PyrosUser, PyrosUserAdmin)
  291 +# admin.site.register(UserLevel, UserLevelAdmin)
  292 +# admin.site.register(Version)
  293 +# admin.site.register(WeatherWatch)
  294 +# admin.site.register(WeatherWatchHistory)
  295 +# admin.site.register(PlcDeviceStatus)
  296 +# admin.site.register(PlcDevice)
  297 +# admin.site.register(Config)
  298 +# admin.site.register(Institute)
298 299 \ No newline at end of file
... ...
src/core/pyros_django/common/models.py
... ... @@ -197,136 +197,138 @@ def get_or_create_unique_row_from_model(model: models.Model):
197 197 ------------------------
198 198 OTHER MODEL CLASSES
199 199 ------------------------
200   -"""
201   -
202   -
203   -# TODO: OLD Config : ร  virer (mais utilisรฉ dans dashboard/templatetags/tags.py)
204   -class Config(models.Model):
205   - PYROS_STATE = ["Starting", "Passive", "Standby",
206   - "Remote", "Startup", "Scheduler", "Closing"]
207   -
208   - id = models.IntegerField(default='1', primary_key=True)
209   - #latitude = models.FloatField(default=1)
210   - latitude = models.DecimalField(
211   - max_digits=4, decimal_places=2,
212   - default=1,
213   - validators=[
214   - MaxValueValidator(90),
215   - MinValueValidator(-90)
216   - ]
217   - )
218   - local_time_zone = models.FloatField(default=1)
219   - #longitude = models.FloatField(default=1)
220   - longitude = models.DecimalField(
221   - max_digits=5, decimal_places=2,
222   - default=1,
223   - validators=[
224   - MaxValueValidator(360),
225   - MinValueValidator(-360)
226   - ]
227   - )
228   - altitude = models.FloatField(default=1)
229   - horizon_line = models.FloatField(default=1)
230   - row_data_save_frequency = models.IntegerField(default='300')
231   - request_frequency = models.IntegerField(default='300')
232   - analysed_data_save = models.IntegerField(default='300')
233   - telescope_ip_address = models.CharField(max_length=45, default="127.0.0.1")
234   - camera_ip_address = models.CharField(max_length=45, default="127.0.0.1")
235   - plc_ip_address = models.CharField(max_length=45, default="127.0.0.1")
236   -
237   - # TODO: changer รงa, c'est pas clair du tout...
238   - # True = mode Scheduler-standby, False = mode Remote !!!!
239   - global_mode = models.BooleanField(default='True')
240   -
241   - ack = models.BooleanField(default='False')
242   - bypass = models.BooleanField(default='True')
243   - lock = models.BooleanField(default='False')
244   - pyros_state = models.CharField(max_length=25, default=PYROS_STATE[0])
245   - force_passive_mode = models.BooleanField(default='False')
246   - plc_timeout_seconds = models.PositiveIntegerField(default=60)
247   - majordome_state = models.CharField(max_length=25, default="")
248   - ntc = models.BooleanField(default='False')
249   - majordome_restarted = models.BooleanField(default='False')
250   -
251   - class Meta:
252   - managed = True
253   - db_table = 'config'
254   - verbose_name_plural = "Config"
255   -
256   - def __str__(self):
257   - return (str(self.__dict__))
258   -
259   -
260   -
261   -class Log(models.Model):
262   - agent = models.CharField(max_length=45, blank=True, null=True)
263   - created = models.DateTimeField(blank=True, null=True, auto_now_add=True)
264   - message = models.TextField(blank=True, null=True)
265   -
266   - class Meta:
267   - managed = True
268   - db_table = 'log'
269   -
270   - def __str__(self):
271   - return (str(self.agent))
272 200  
  201 +"""
273 202  
274   -# TODO: ร  virer car utilisรฉ pour Celery (ou bien ร  utiliser pour les agents)
275   -'''
276   -class TaskId(models.Model):
277   - task = models.CharField(max_length=45, blank=True, null=True)
278   - created = models.DateTimeField(blank=True, null=True, auto_now_add=True)
279   - task_id = models.CharField(max_length=45, blank=True, null=True)
280   -
281   - class Meta:
282   - managed = True
283   - db_table = 'task_id'
284   -
285   - def __str__(self):
286   - return (str(self.task) + " - " + str(self.task_id))
287   -'''
288   -
289   -
290   -class Version(models.Model):
291   - module_name = models.CharField(max_length=45, blank=True, null=True)
292   - version = models.CharField(max_length=15, blank=True, null=True)
293   - created = models.DateTimeField(blank=True, null=True, auto_now_add=True)
294   - updated = models.DateTimeField(blank=True, null=True, auto_now=True)
295   -
296   - class Meta:
297   - managed = True
298   - db_table = 'version'
299   -
300   - def __str__(self):
301   - return (str(self.module_name) + " - " + str(self.version))
  203 +# MOVED TO DASHBOARD MODELS
  204 +
  205 +# # TODO: OLD Config : ร  virer (mais utilisรฉ dans dashboard/templatetags/tags.py)
  206 +# class Config(models.Model):
  207 +# PYROS_STATE = ["Starting", "Passive", "Standby",
  208 +# "Remote", "Startup", "Scheduler", "Closing"]
  209 +
  210 +# id = models.IntegerField(default='1', primary_key=True)
  211 +# #latitude = models.FloatField(default=1)
  212 +# latitude = models.DecimalField(
  213 +# max_digits=4, decimal_places=2,
  214 +# default=1,
  215 +# validators=[
  216 +# MaxValueValidator(90),
  217 +# MinValueValidator(-90)
  218 +# ]
  219 +# )
  220 +# local_time_zone = models.FloatField(default=1)
  221 +# #longitude = models.FloatField(default=1)
  222 +# longitude = models.DecimalField(
  223 +# max_digits=5, decimal_places=2,
  224 +# default=1,
  225 +# validators=[
  226 +# MaxValueValidator(360),
  227 +# MinValueValidator(-360)
  228 +# ]
  229 +# )
  230 +# altitude = models.FloatField(default=1)
  231 +# horizon_line = models.FloatField(default=1)
  232 +# row_data_save_frequency = models.IntegerField(default='300')
  233 +# request_frequency = models.IntegerField(default='300')
  234 +# analysed_data_save = models.IntegerField(default='300')
  235 +# telescope_ip_address = models.CharField(max_length=45, default="127.0.0.1")
  236 +# camera_ip_address = models.CharField(max_length=45, default="127.0.0.1")
  237 +# plc_ip_address = models.CharField(max_length=45, default="127.0.0.1")
  238 +
  239 +# # TODO: changer รงa, c'est pas clair du tout...
  240 +# # True = mode Scheduler-standby, False = mode Remote !!!!
  241 +# global_mode = models.BooleanField(default='True')
  242 +
  243 +# ack = models.BooleanField(default='False')
  244 +# bypass = models.BooleanField(default='True')
  245 +# lock = models.BooleanField(default='False')
  246 +# pyros_state = models.CharField(max_length=25, default=PYROS_STATE[0])
  247 +# force_passive_mode = models.BooleanField(default='False')
  248 +# plc_timeout_seconds = models.PositiveIntegerField(default=60)
  249 +# majordome_state = models.CharField(max_length=25, default="")
  250 +# ntc = models.BooleanField(default='False')
  251 +# majordome_restarted = models.BooleanField(default='False')
  252 +
  253 +# class Meta:
  254 +# managed = True
  255 +# db_table = 'config'
  256 +# verbose_name_plural = "Config"
  257 +
  258 +# def __str__(self):
  259 +# return (str(self.__dict__))
  260 +
  261 +
  262 +
  263 +# class Log(models.Model):
  264 +# agent = models.CharField(max_length=45, blank=True, null=True)
  265 +# created = models.DateTimeField(blank=True, null=True, auto_now_add=True)
  266 +# message = models.TextField(blank=True, null=True)
  267 +
  268 +# class Meta:
  269 +# managed = True
  270 +# db_table = 'log'
  271 +
  272 +# def __str__(self):
  273 +# return (str(self.agent))
  274 +
  275 +
  276 +# # TODO: ร  virer car utilisรฉ pour Celery (ou bien ร  utiliser pour les agents)
  277 +# '''
  278 +# class TaskId(models.Model):
  279 +# task = models.CharField(max_length=45, blank=True, null=True)
  280 +# created = models.DateTimeField(blank=True, null=True, auto_now_add=True)
  281 +# task_id = models.CharField(max_length=45, blank=True, null=True)
  282 +
  283 +# class Meta:
  284 +# managed = True
  285 +# db_table = 'task_id'
  286 +
  287 +# def __str__(self):
  288 +# return (str(self.task) + " - " + str(self.task_id))
  289 +# '''
  290 +
  291 +
  292 +# class Version(models.Model):
  293 +# module_name = models.CharField(max_length=45, blank=True, null=True)
  294 +# version = models.CharField(max_length=15, blank=True, null=True)
  295 +# created = models.DateTimeField(blank=True, null=True, auto_now_add=True)
  296 +# updated = models.DateTimeField(blank=True, null=True, auto_now=True)
  297 +
  298 +# class Meta:
  299 +# managed = True
  300 +# db_table = 'version'
  301 +
  302 +# def __str__(self):
  303 +# return (str(self.module_name) + " - " + str(self.version))
302 304  
303 305  
304   -class Tickets(models.Model):
305   - created = models.DateTimeField(blank=True, null=True, auto_now_add=True)
306   - updated = models.DateTimeField(blank=True, null=True, auto_now=True)
307   - end = models.DateTimeField(blank=True, null=True)
308   - title = models.TextField(blank=True, null=True)
309   - description = models.TextField(blank=True, null=True)
310   - resolution = models.TextField(blank=True, null=True)
311   - pyros_user = models.ForeignKey(PyrosUser, on_delete=models.DO_NOTHING, related_name="tickets", blank=True, null=True)
312   - last_modified_by = models.ForeignKey(PyrosUser, on_delete=models.DO_NOTHING, related_name="tickets_modified_by", blank=True, null=True)
313   - LEVEL_ONE = "ONE"
314   - LEVEL_TWO = "TWO"
315   - LEVEL_THREE = "THREE"
316   - LEVEL_FOUR = "FOUR"
317   - LEVEL_FIVE = "FIVE"
318   - SECURITY_LEVEL_CHOICES = (
319   - (LEVEL_ONE,"Warning non compromising for the operation of the system"),
320   - (LEVEL_TWO,"Known issue which can be solved by operating the software remotely"),
321   - (LEVEL_THREE,"Known issue which can be solved by an human remotely"),
322   - (LEVEL_FOUR,"Known issue without immediate solution"),
323   - (LEVEL_FIVE,"Issue not categorized until it happened")
324   - )
325   - security_level = models.TextField(choices=SECURITY_LEVEL_CHOICES, default=LEVEL_ONE)
326   -
327   - class Meta:
328   - managed = True
329   - db_table = 'tickets'
330   - verbose_name_plural = "tickets"
  306 +# class Tickets(models.Model):
  307 +# created = models.DateTimeField(blank=True, null=True, auto_now_add=True)
  308 +# updated = models.DateTimeField(blank=True, null=True, auto_now=True)
  309 +# end = models.DateTimeField(blank=True, null=True)
  310 +# title = models.TextField(blank=True, null=True)
  311 +# description = models.TextField(blank=True, null=True)
  312 +# resolution = models.TextField(blank=True, null=True)
  313 +# pyros_user = models.ForeignKey(PyrosUser, on_delete=models.DO_NOTHING, related_name="tickets", blank=True, null=True)
  314 +# last_modified_by = models.ForeignKey(PyrosUser, on_delete=models.DO_NOTHING, related_name="tickets_modified_by", blank=True, null=True)
  315 +# LEVEL_ONE = "ONE"
  316 +# LEVEL_TWO = "TWO"
  317 +# LEVEL_THREE = "THREE"
  318 +# LEVEL_FOUR = "FOUR"
  319 +# LEVEL_FIVE = "FIVE"
  320 +# SECURITY_LEVEL_CHOICES = (
  321 +# (LEVEL_ONE,"Warning non compromising for the operation of the system"),
  322 +# (LEVEL_TWO,"Known issue which can be solved by operating the software remotely"),
  323 +# (LEVEL_THREE,"Known issue which can be solved by an human remotely"),
  324 +# (LEVEL_FOUR,"Known issue without immediate solution"),
  325 +# (LEVEL_FIVE,"Issue not categorized until it happened")
  326 +# )
  327 +# security_level = models.TextField(choices=SECURITY_LEVEL_CHOICES, default=LEVEL_ONE)
  328 +
  329 +# class Meta:
  330 +# managed = True
  331 +# db_table = 'tickets'
  332 +# verbose_name_plural = "tickets"
331 333  
332 334  
... ...
src/core/pyros_django/common/tests.py
... ... @@ -9,7 +9,7 @@ from django.utils import timezone
9 9 # Project imports
10 10 from user_mgmt.models import Country
11 11 from common.models import *
12   -from common.RequestBuilder import RequestBuilder
  12 +# from common.RequestBuilder import RequestBuilder
13 13  
14 14 #log = setupLogger("common", "common")
15 15  
... ...
src/core/pyros_django/dashboard/forms.py
... ... @@ -3,37 +3,37 @@ from django import forms
3 3  
4 4 # Project imports
5 5 from user_mgmt.models import PyrosUser #, UserLevel
6   -from common.models import Config
  6 +#from common.models import Config
7 7 from majordome.models import Majordome
8 8  
9 9  
10   -class ConfigForm(forms.ModelForm):
11   - class Meta:
12   - model = Config
13   - fields = ('latitude',
14   - 'local_time_zone',
15   - 'longitude',
16   - 'altitude',
17   - 'horizon_line',
18   - 'row_data_save_frequency',
19   - 'request_frequency',
20   - 'analysed_data_save',
21   - 'telescope_ip_address',
22   - 'camera_ip_address',
23   - 'plc_ip_address',)
24   - labels = {
25   - 'latitude': ('Latitude :'),
26   - 'local_time_zone': ('Local Time Zone :'),
27   - 'longitude': ('Longitude :'),
28   - 'altitude': ('Altitude :'),
29   - 'horizon_line': ('Horizon Line :'),
30   - 'row_data_save_frequency': ('Row Data Save Frequency :'),
31   - 'request_frequency': ('Request Frequency :'),
32   - 'analysed_data_save': ('Analysed Data Save :'),
33   - 'telescope_ip_address': ('Ip Address :'),
34   - 'camera_ip_address': ('Ip Address :'),
35   - 'plc_ip_address': ('Ip Address :'),
36   - }
  10 +# class ConfigForm(forms.ModelForm):
  11 +# class Meta:
  12 +# model = Config
  13 +# fields = ('latitude',
  14 +# 'local_time_zone',
  15 +# 'longitude',
  16 +# 'altitude',
  17 +# 'horizon_line',
  18 +# 'row_data_save_frequency',
  19 +# 'request_frequency',
  20 +# 'analysed_data_save',
  21 +# 'telescope_ip_address',
  22 +# 'camera_ip_address',
  23 +# 'plc_ip_address',)
  24 +# labels = {
  25 +# 'latitude': ('Latitude :'),
  26 +# 'local_time_zone': ('Local Time Zone :'),
  27 +# 'longitude': ('Longitude :'),
  28 +# 'altitude': ('Altitude :'),
  29 +# 'horizon_line': ('Horizon Line :'),
  30 +# 'row_data_save_frequency': ('Row Data Save Frequency :'),
  31 +# 'request_frequency': ('Request Frequency :'),
  32 +# 'analysed_data_save': ('Analysed Data Save :'),
  33 +# 'telescope_ip_address': ('Ip Address :'),
  34 +# 'camera_ip_address': ('Ip Address :'),
  35 +# 'plc_ip_address': ('Ip Address :'),
  36 +# }
37 37  
38 38 class MajordomeForm(forms.ModelForm):
39 39 class Meta:
... ...
src/core/pyros_django/dashboard/templatetags/tags.py
... ... @@ -9,7 +9,7 @@ from django.conf import settings
9 9 # Project imports
10 10 #from common.models import Config, PyrosUser, PyrosState
11 11 from user_mgmt.models import PyrosUser, UserLevel
12   -from common.models import Config
  12 +from dashboard.models import Config
13 13 from majordome.models import Majordome
14 14  
15 15 register = template.Library()
... ...
src/core/pyros_django/dashboard/urls.py
... ... @@ -6,7 +6,6 @@ from . import views
6 6  
7 7 urlpatterns = [
8 8 path('index', views.index, name='index'),
9   - path('configuration', views.configUpdate, name='configuration'),
10 9 path('status', views.change_globalMode, name='change_globalMode'),
11 10 path('bypass', views.change_bypass, name='change_bypass'),
12 11 path('lock', views.change_lock, name='change_lock'),
... ...
src/core/pyros_django/dashboard/views.py
... ... @@ -32,13 +32,12 @@ from django.utils.http import urlencode
32 32 # Project imports
33 33 from env_monitor.models import WeatherWatch, SiteWatch, WeatherWatchHistory, Env_data, Env_data_hist
34 34 from majordome.models import Majordome, AgentSurvey, AgentCmd
35   -from common.models import Log, Config
36 35 #from user_mgmt.models import PyrosUser, UserLevel
37 36 from user_mgmt.models import ScientificProgram, SP_Period_Guest
38 37 #from scp_mgmt.models import ScientificProgram, SP_Period_Guest
39 38 from devices.models import PlcDeviceStatus, TelescopeCommand #, Telescope
40 39  
41   -from dashboard.forms import ConfigForm, MajordomeForm #, UserForm
  40 +from dashboard.forms import MajordomeForm #, UserForm
42 41 from dashboard.decorator import level_required
43 42 from devices.Telescope import TelescopeController
44 43 from devices.TelescopeRemoteControlDefault import TelescopeRemoteControlDefault
... ... @@ -798,15 +797,15 @@ def proposal(request):
798 797  
799 798 return render(request, 'dashboard/proposal.html', {'proposal_info' : proposal_info, 'nb_info_proposal' : nb_info_proposal})
800 799  
801   -@login_required
802   -#@level_required(5)
803   -def configUpdate(request):
804   - instance = get_object_or_404(Config, id=1)
805   - form = ConfigForm(request.POST or None, instance=instance)
806   - if form.is_valid():
807   - form.save()
808   - return reverse('settings')
809   - return render(request, 'dashboard/configuration.html', {'form': form})
  800 +# @login_required
  801 +# #@level_required(5)
  802 +# def configUpdate(request):
  803 +# instance = get_object_or_404(Config, id=1)
  804 +# form = ConfigForm(request.POST or None, instance=instance)
  805 +# if form.is_valid():
  806 +# form.save()
  807 +# return reverse('settings')
  808 +# return render(request, 'dashboard/configuration.html', {'form': form})
810 809  
811 810  
812 811 @login_required
... ...
src/core/pyros_django/devices/Device.py
... ... @@ -7,7 +7,7 @@ import select
7 7 #import utils.Logger as L
8 8 import time
9 9 import os
10   -from common.models import Log
  10 +from dashboard.models import Log
11 11  
12 12 DEBUG_FILE = True
13 13 RECONNECT_TIMEOUT_SECONDS = 20
... ...
src/core/pyros_django/devices/TelescopeRemoteControlAbstract.py
1 1 from django.conf import settings
2   -from common.models import Log
  2 +from dashboard.models import Log
3 3 from devices.Telescope import TelescopeController
4 4  
5 5  
... ...
src/core/pyros_django/devices/TelescopeRemoteControlDefault.py
1 1 from django.conf import settings
2   -from common.models import Log
  2 +from dashboard.models import Log
3 3 from devices.TelescopeRemoteControlAbstract import TelescopeRemoteControlAbstract
4 4 from devices.Telescope import TelescopeController
5 5 import os
... ...
src/core/pyros_django/devices/views.py
1 1 from django.shortcuts import render, get_object_or_404
2   -from common.models import Log, Config
  2 +from dashboard.models import Log, Config
3 3 from django.http import HttpResponse
4 4 from django.core import serializers
5 5 from django.contrib.auth.decorators import login_required
... ...
src/core/pyros_django/majordome/agent/A_SST.py
... ... @@ -108,7 +108,6 @@ class A_SST(Agent):
108 108 self._no_restart = False
109 109 wildcard = "../../*/A*_*"
110 110 self._general_agents = glob.glob(wildcard, recursive=True)
111   - print(self._general_agents)
112 111 #log.info(f"PC hostname is {self.computer}")
113 112  
114 113 # @Override
... ...
src/core/pyros_django/majordome/majordome_test.py
... ... @@ -173,7 +173,7 @@ assert djangosettings.DATABASES[&quot;default&quot;][&quot;NAME&quot;] == &quot;pyros_test&quot;
173 173 i += 1
174 174 print_step_message(i, "Get config")
175 175 # Needs sys.path.append('..')
176   -from common.models import Config, PlcDeviceStatus
  176 +from dashboard.models import Config, PlcDeviceStatus
177 177  
178 178 config = get_object_or_404(Config, id=1)
179 179 print("config id is", config.id)
... ...
src/core/pyros_django/misc/fixtures/initial_fixture.json
... ... @@ -564,28 +564,6 @@
564 564 "dir_level": null,
565 565 "can_del_void_req": false
566 566 }
567   -},
568   -
569   -{
570   - "model": "common.config",
571   - "pk": 1,
572   - "fields": {
573   - "id": 1,
574   - "latitude": 1,
575   - "local_time_zone": 1,
576   - "longitude": 1,
577   - "altitude": 1,
578   - "horizon_line": 1,
579   - "row_data_save_frequency": 300,
580   - "request_frequency": 300,
581   - "analysed_data_save": 300,
582   - "telescope_ip_address": "127.0.0.1",
583   - "camera_ip_address": "127.0.0.1",
584   - "plc_ip_address": "127.0.0.1",
585   - "global_mode": true,
586   - "ack": true,
587   - "bypass": false,
588   - "plc_timeout_seconds": 10
589   - }
590 567 }
  568 +
591 569 ]
... ...
src/core/pyros_django/misc/fixtures/initial_fixture_TZ.json
1   -[{
2   - "model": "common.country",
3   - "pk": 1,
4   - "fields": {
5   - "name": "France",
6   - "desc": "",
7   - "quota": null
8   - }
9   - },
  1 +[
10 2 {
11   - "model": "common.ScienceTheme",
  3 + "model": "user_mgmt.ScienceTheme",
12 4 "pk": 1,
13 5 "fields": {
14 6 "name": "Solar System"
15 7 }
16 8 },
17 9 {
18   - "model": "common.ScienceTheme",
  10 + "model": "user_mgmt.ScienceTheme",
19 11 "pk": 2,
20 12 "fields": {
21 13 "name": "Galatic"
22 14 }
23 15 },
24 16 {
25   - "model": "common.ScienceTheme",
  17 + "model": "user_mgmt.ScienceTheme",
26 18 "pk": 3,
27 19 "fields": {
28 20 "name": "Extra Galatic"
29 21 }
30 22 },
31 23 {
32   - "model": "common.Period",
  24 + "model": "user_mgmt.Period",
33 25 "pk": 1,
34 26 "fields": {
35 27  
36 28 }
37 29 },
38 30 {
39   - "model": "common.Period",
  31 + "model": "user_mgmt.Period",
40 32 "pk": 2,
41 33 "fields": {
42 34 "exploitation_duration": 3650
43 35 }
44 36 },
45 37 {
46   - "model": "common.scientificprogram",
  38 + "model": "user_mgmt.scientificprogram",
47 39 "pk": 1,
48 40 "fields": {
49 41 "name": "Sky-observation",
... ... @@ -56,7 +48,7 @@
56 48 }
57 49 },
58 50 {
59   - "model": "common.SP_Period",
  51 + "model": "user_mgmt.SP_Period",
60 52 "pk": 1,
61 53 "fields": {
62 54 "period": 1,
... ... @@ -67,83 +59,7 @@
67 59 }
68 60 },
69 61 {
70   - "model": "common.strategyobs",
71   - "pk": 1,
72   - "fields": {
73   - "name": "strat1",
74   - "desc": "",
75   - "xml_file": "strat1.xml",
76   - "is_default": false
77   - }
78   - },
79   - {
80   - "model": "common.strategyobs",
81   - "pk": 2,
82   - "fields": {
83   - "name": "strat2",
84   - "desc": "",
85   - "xml_file": "strat2.xml",
86   - "is_default": false
87   - }
88   - },
89   - {
90   - "model": "common.strategyobs",
91   - "pk": 3,
92   - "fields": {
93   - "name": "strat_unittest",
94   - "desc": "",
95   - "xml_file": "strat_unittest.xml",
96   - "is_default": true
97   - }
98   - },
99   - {
100   - "model": "common.telescope",
101   - "pk": 1,
102   - "fields": {
103   - "mount_type": "",
104   - "diameter": null,
105   - "status": "",
106   - "latitude": null,
107   - "longitude": null,
108   - "sens": "",
109   - "altitude": null,
110   - "readout_time": null,
111   - "slew_time": null,
112   - "slew_dead": null,
113   - "slew_rate_max": null,
114   - "horizon_type": "",
115   - "horizon_def": null,
116   - "lim_dec_max": null,
117   - "lim_dec_min": null,
118   - "lim_ha_rise": null,
119   - "lim_ha_set": null,
120   - "address": "",
121   - "night_elev_sun": null,
122   - "mpc_code": "",
123   - "name": "Telescope",
124   - "desc": "",
125   - "created": "2016-05-13T11:50:14Z",
126   - "updated": "2016-05-13T11:50:14Z",
127   - "is_online": false,
128   - "maintenance_date": null
129   - }
130   - },
131   - {
132   - "model": "common.dome",
133   - "pk": 1,
134   - "fields": {
135   - "name": "Dome",
136   - "desc": "dome",
137   - "created": "2016-05-13T11:50:14Z",
138   - "updated": "2016-05-13T11:50:14Z",
139   - "is_online": false,
140   - "status": "",
141   - "maintenance_date": null,
142   - "open": false
143   - }
144   - },
145   - {
146   - "model": "common.userlevel",
  62 + "model": "user_mgmt.userlevel",
147 63 "pk": 1,
148 64 "fields": {
149 65 "name": "Admin",
... ... @@ -153,7 +69,7 @@
153 69 }
154 70 },
155 71 {
156   - "model": "common.userlevel",
  72 + "model": "user_mgmt.userlevel",
157 73 "pk": 2,
158 74 "fields": {
159 75 "name": "Observer",
... ... @@ -163,7 +79,7 @@
163 79 }
164 80 },
165 81 {
166   - "model": "common.userlevel",
  82 + "model": "user_mgmt.userlevel",
167 83 "pk": 3,
168 84 "fields": {
169 85 "name": "TAC",
... ... @@ -173,7 +89,7 @@
173 89 }
174 90 },
175 91 {
176   - "model": "common.userlevel",
  92 + "model": "user_mgmt.userlevel",
177 93 "pk": 4,
178 94 "fields": {
179 95 "name": "Management board member",
... ... @@ -183,7 +99,7 @@
183 99 }
184 100 },
185 101 {
186   - "model": "common.userlevel",
  102 + "model": "user_mgmt.userlevel",
187 103 "pk": 5,
188 104 "fields": {
189 105 "name": "Operator",
... ... @@ -193,7 +109,7 @@
193 109 }
194 110 },
195 111 {
196   - "model": "common.userlevel",
  112 + "model": "user_mgmt.userlevel",
197 113 "pk": 6,
198 114 "fields": {
199 115 "name": "Unit-PI",
... ... @@ -203,7 +119,7 @@
203 119 }
204 120 },
205 121 {
206   - "model": "common.userlevel",
  122 + "model": "user_mgmt.userlevel",
207 123 "pk": 7,
208 124 "fields": {
209 125 "name": "Unit-board",
... ... @@ -213,7 +129,7 @@
213 129 }
214 130 },
215 131 {
216   - "model": "common.userlevel",
  132 + "model": "user_mgmt.userlevel",
217 133 "pk": 8,
218 134 "fields": {
219 135 "name": "Visitor",
... ... @@ -223,197 +139,7 @@
223 139 }
224 140 },
225 141 {
226   - "model": "common.version",
227   - "pk": 1,
228   - "fields": {
229   - "module_name": "Scheduler",
230   - "version": "0.1",
231   - "created": "2016-06-23T14:04:48Z",
232   - "updated": "2016-06-23T14:04:48Z"
233   - }
234   - },
235   - {
236   - "model": "common.version",
237   - "pk": 2,
238   - "fields": {
239   - "module_name": "Dashboard",
240   - "version": "0.1",
241   - "created": "2016-06-23T14:04:48Z",
242   - "updated": "2016-06-23T14:04:48Z"
243   - }
244   - },
245   - {
246   - "model": "common.version",
247   - "pk": 3,
248   - "fields": {
249   - "module_name": "Observation Manager",
250   - "version": "0.1",
251   - "created": "2016-06-23T14:04:48Z",
252   - "updated": "2016-06-23T14:04:48Z"
253   - }
254   - },
255   - {
256   - "model": "common.version",
257   - "pk": 4,
258   - "fields": {
259   - "module_name": "Routine Manager",
260   - "version": "0.1",
261   - "created": "2016-06-23T14:04:48Z",
262   - "updated": "2016-06-23T14:04:48Z"
263   - }
264   - },
265   - {
266   - "model": "common.version",
267   - "pk": 5,
268   - "fields": {
269   - "module_name": "Alert Manager",
270   - "version": "0.1",
271   - "created": "2016-06-23T14:04:48Z",
272   - "updated": "2016-06-23T14:04:48Z"
273   - }
274   - },
275   - {
276   - "model": "common.version",
277   - "pk": 6,
278   - "fields": {
279   - "module_name": "Monitoring",
280   - "version": "0.1",
281   - "created": "2016-06-23T14:04:48Z",
282   - "updated": "2016-06-23T14:04:48Z"
283   - }
284   - },
285   - {
286   - "model": "common.version",
287   - "pk": 7,
288   - "fields": {
289   - "module_name": "User Manager",
290   - "version": "0.1",
291   - "created": "2016-06-23T14:04:48Z",
292   - "updated": "2016-06-23T14:04:48Z"
293   - }
294   - },
295   - {
296   - "model": "common.version",
297   - "pk": 8,
298   - "fields": {
299   - "module_name": "Analyzer",
300   - "version": "0.1",
301   - "created": "2016-06-23T14:04:48Z",
302   - "updated": "2016-06-23T14:04:48Z"
303   - }
304   - },
305   - {
306   - "model": "common.version",
307   - "pk": 9,
308   - "fields": {
309   - "module_name": "Majordome",
310   - "version": "0.1",
311   - "created": "2016-06-23T14:04:48Z",
312   - "updated": "2016-06-23T14:04:48Z"
313   - }
314   - },
315   - {
316   - "model": "common.version",
317   - "pk": 10,
318   - "fields": {
319   - "module_name": "Majordome",
320   - "version": "0.2",
321   - "created": "2016-06-28T10:50:32Z",
322   - "updated": "2016-06-28T10:50:32Z"
323   - }
324   - },
325   - {
326   - "model": "common.version",
327   - "pk": 11,
328   - "fields": {
329   - "module_name": "Majordome",
330   - "version": "0.1.4",
331   - "created": "2016-07-20T13:44:29Z",
332   - "updated": "2016-07-20T13:44:29Z"
333   - }
334   - },
335   - {
336   - "model": "common.version",
337   - "pk": 12,
338   - "fields": {
339   - "module_name": "Alert Manager",
340   - "version": "0.2.3",
341   - "created": "2016-07-20T13:44:29Z",
342   - "updated": "2016-07-20T13:44:29Z"
343   - }
344   - },
345   - {
346   - "model": "common.version",
347   - "pk": 13,
348   - "fields": {
349   - "module_name": "Dashboard",
350   - "version": "0.1.1",
351   - "created": "2016-07-20T13:44:29Z",
352   - "updated": "2016-07-20T13:44:29Z"
353   - }
354   - },
355   - {
356   - "model": "common.version",
357   - "pk": 14,
358   - "fields": {
359   - "module_name": "Observation Manager",
360   - "version": "0.1.3",
361   - "created": "2016-07-20T13:44:29Z",
362   - "updated": "2016-07-20T13:44:29Z"
363   - }
364   - },
365   - {
366   - "model": "common.version",
367   - "pk": 15,
368   - "fields": {
369   - "module_name": "Routine Manager",
370   - "version": "0.1.2",
371   - "created": "2016-07-20T13:44:29Z",
372   - "updated": "2016-07-20T13:44:29Z"
373   - }
374   - },
375   - {
376   - "model": "common.version",
377   - "pk": 16,
378   - "fields": {
379   - "module_name": "Monitoring",
380   - "version": "0.1.3",
381   - "created": "2016-07-20T13:44:29Z",
382   - "updated": "2016-07-20T13:44:29Z"
383   - }
384   - },
385   - {
386   - "model": "common.version",
387   - "pk": 17,
388   - "fields": {
389   - "module_name": "Scheduler",
390   - "version": "0.1.2",
391   - "created": "2016-07-20T13:44:29Z",
392   - "updated": "2016-07-20T13:44:29Z"
393   - }
394   - },
395   - {
396   - "model": "common.version",
397   - "pk": 18,
398   - "fields": {
399   - "module_name": "User Manager",
400   - "version": "0.1.1",
401   - "created": "2016-07-20T13:44:29Z",
402   - "updated": "2016-07-20T13:44:29Z"
403   - }
404   - },
405   - {
406   - "model": "common.version",
407   - "pk": 19,
408   - "fields": {
409   - "module_name": "Analyzer",
410   - "version": "0.1.2",
411   - "created": "2016-07-20T13:44:29Z",
412   - "updated": "2016-07-20T13:44:29Z"
413   - }
414   - },
415   - {
416   - "model": "common.institute",
  142 + "model": "user_mgmt.institute",
417 143 "pk": 1,
418 144 "fields": {
419 145 "name": "My Observatory",
... ... @@ -421,7 +147,7 @@
421 147 }
422 148 },
423 149 {
424   - "model": "common.pyrosuser",
  150 + "model": "user_mgmt.pyrosuser",
425 151 "pk": 1,
426 152 "fields": {
427 153 "password": "pbkdf2_sha256$24000$HRial3QUfrlz$bVuEzQaXthOd9GZVXd2449LDEF8EMQure69nA/Hu7qQ=",
... ... @@ -447,27 +173,5 @@
447 173 "institute": 2
448 174  
449 175 }
450   - },
451   - {
452   - "model": "common.config",
453   - "pk": 1,
454   - "fields": {
455   - "id": 1,
456   - "latitude": 1,
457   - "local_time_zone": 1,
458   - "longitude": 1,
459   - "altitude": 1,
460   - "horizon_line": 1,
461   - "row_data_save_frequency": 300,
462   - "request_frequency": 300,
463   - "analysed_data_save": 300,
464   - "telescope_ip_address": "127.0.0.1",
465   - "camera_ip_address": "127.0.0.1",
466   - "plc_ip_address": "127.0.0.1",
467   - "global_mode": true,
468   - "ack": true,
469   - "bypass": false,
470   - "plc_timeout_seconds": 10
471   - }
472 176 }
473 177 ]
474 178 \ No newline at end of file
... ...
src/core/pyros_django/misc/fixtures/initial_fixture_dev_TZ.json
... ... @@ -362,196 +362,6 @@
362 362 }
363 363 },
364 364 {
365   - "model": "common.version",
366   - "pk": 1,
367   - "fields": {
368   - "module_name": "Scheduler",
369   - "version": "0.1",
370   - "created": "2016-06-23T14:04:48Z",
371   - "updated": "2016-06-23T14:04:48Z"
372   - }
373   - },
374   - {
375   - "model": "common.version",
376   - "pk": 2,
377   - "fields": {
378   - "module_name": "Dashboard",
379   - "version": "0.1",
380   - "created": "2016-06-23T14:04:48Z",
381   - "updated": "2016-06-23T14:04:48Z"
382   - }
383   - },
384   - {
385   - "model": "common.version",
386   - "pk": 3,
387   - "fields": {
388   - "module_name": "Observation Manager",
389   - "version": "0.1",
390   - "created": "2016-06-23T14:04:48Z",
391   - "updated": "2016-06-23T14:04:48Z"
392   - }
393   - },
394   - {
395   - "model": "common.version",
396   - "pk": 4,
397   - "fields": {
398   - "module_name": "Routine Manager",
399   - "version": "0.1",
400   - "created": "2016-06-23T14:04:48Z",
401   - "updated": "2016-06-23T14:04:48Z"
402   - }
403   - },
404   - {
405   - "model": "common.version",
406   - "pk": 5,
407   - "fields": {
408   - "module_name": "Alert Manager",
409   - "version": "0.1",
410   - "created": "2016-06-23T14:04:48Z",
411   - "updated": "2016-06-23T14:04:48Z"
412   - }
413   - },
414   - {
415   - "model": "common.version",
416   - "pk": 6,
417   - "fields": {
418   - "module_name": "Monitoring",
419   - "version": "0.1",
420   - "created": "2016-06-23T14:04:48Z",
421   - "updated": "2016-06-23T14:04:48Z"
422   - }
423   - },
424   - {
425   - "model": "common.version",
426   - "pk": 7,
427   - "fields": {
428   - "module_name": "User Manager",
429   - "version": "0.1",
430   - "created": "2016-06-23T14:04:48Z",
431   - "updated": "2016-06-23T14:04:48Z"
432   - }
433   - },
434   - {
435   - "model": "common.version",
436   - "pk": 8,
437   - "fields": {
438   - "module_name": "Analyzer",
439   - "version": "0.1",
440   - "created": "2016-06-23T14:04:48Z",
441   - "updated": "2016-06-23T14:04:48Z"
442   - }
443   - },
444   - {
445   - "model": "common.version",
446   - "pk": 9,
447   - "fields": {
448   - "module_name": "Majordome",
449   - "version": "0.1",
450   - "created": "2016-06-23T14:04:48Z",
451   - "updated": "2016-06-23T14:04:48Z"
452   - }
453   - },
454   - {
455   - "model": "common.version",
456   - "pk": 10,
457   - "fields": {
458   - "module_name": "Majordome",
459   - "version": "0.2",
460   - "created": "2016-06-28T10:50:32Z",
461   - "updated": "2016-06-28T10:50:32Z"
462   - }
463   - },
464   - {
465   - "model": "common.version",
466   - "pk": 11,
467   - "fields": {
468   - "module_name": "Majordome",
469   - "version": "0.1.4",
470   - "created": "2016-07-20T13:44:29Z",
471   - "updated": "2016-07-20T13:44:29Z"
472   - }
473   - },
474   - {
475   - "model": "common.version",
476   - "pk": 12,
477   - "fields": {
478   - "module_name": "Alert Manager",
479   - "version": "0.2.3",
480   - "created": "2016-07-20T13:44:29Z",
481   - "updated": "2016-07-20T13:44:29Z"
482   - }
483   - },
484   - {
485   - "model": "common.version",
486   - "pk": 13,
487   - "fields": {
488   - "module_name": "Dashboard",
489   - "version": "0.1.1",
490   - "created": "2016-07-20T13:44:29Z",
491   - "updated": "2016-07-20T13:44:29Z"
492   - }
493   - },
494   - {
495   - "model": "common.version",
496   - "pk": 14,
497   - "fields": {
498   - "module_name": "Observation Manager",
499   - "version": "0.1.3",
500   - "created": "2016-07-20T13:44:29Z",
501   - "updated": "2016-07-20T13:44:29Z"
502   - }
503   - },
504   - {
505   - "model": "common.version",
506   - "pk": 15,
507   - "fields": {
508   - "module_name": "Routine Manager",
509   - "version": "0.1.2",
510   - "created": "2016-07-20T13:44:29Z",
511   - "updated": "2016-07-20T13:44:29Z"
512   - }
513   - },
514   - {
515   - "model": "common.version",
516   - "pk": 16,
517   - "fields": {
518   - "module_name": "Monitoring",
519   - "version": "0.1.3",
520   - "created": "2016-07-20T13:44:29Z",
521   - "updated": "2016-07-20T13:44:29Z"
522   - }
523   - },
524   - {
525   - "model": "common.version",
526   - "pk": 17,
527   - "fields": {
528   - "module_name": "Scheduler",
529   - "version": "0.1.2",
530   - "created": "2016-07-20T13:44:29Z",
531   - "updated": "2016-07-20T13:44:29Z"
532   - }
533   - },
534   - {
535   - "model": "common.version",
536   - "pk": 18,
537   - "fields": {
538   - "module_name": "User Manager",
539   - "version": "0.1.1",
540   - "created": "2016-07-20T13:44:29Z",
541   - "updated": "2016-07-20T13:44:29Z"
542   - }
543   - },
544   - {
545   - "model": "common.version",
546   - "pk": 19,
547   - "fields": {
548   - "module_name": "Analyzer",
549   - "version": "0.1.2",
550   - "created": "2016-07-20T13:44:29Z",
551   - "updated": "2016-07-20T13:44:29Z"
552   - }
553   - },
554   - {
555 365 "model": "user_mgmt.institute",
556 366 "pk": 2,
557 367 "fields": {
... ... @@ -1064,28 +874,6 @@
1064 874 }
1065 875 },
1066 876 {
1067   - "model": "common.config",
1068   - "pk": 1,
1069   - "fields": {
1070   - "id": 1,
1071   - "latitude": 1,
1072   - "local_time_zone": 1,
1073   - "longitude": 1,
1074   - "altitude": 1,
1075   - "horizon_line": 1,
1076   - "row_data_save_frequency": 300,
1077   - "request_frequency": 300,
1078   - "analysed_data_save": 300,
1079   - "telescope_ip_address": "127.0.0.1",
1080   - "camera_ip_address": "127.0.0.1",
1081   - "plc_ip_address": "127.0.0.1",
1082   - "global_mode": true,
1083   - "ack": true,
1084   - "bypass": false,
1085   - "plc_timeout_seconds": 10
1086   - }
1087   - },
1088   - {
1089 877 "model": "seq_submit.sequence",
1090 878 "pk": 1,
1091 879 "fields": {
... ...
src/core/pyros_django/misc/fixtures/tests/complete_fixture.json
1   -[{"model": "auth.permission", "pk": 1, "fields": {"name": "Can add log entry", "content_type": 1, "codename": "add_logentry"}}, {"model": "auth.permission", "pk": 2, "fields": {"name": "Can change log entry", "content_type": 1, "codename": "change_logentry"}}, {"model": "auth.permission", "pk": 3, "fields": {"name": "Can delete log entry", "content_type": 1, "codename": "delete_logentry"}}, {"model": "auth.permission", "pk": 4, "fields": {"name": "Can view log entry", "content_type": 1, "codename": "view_logentry"}}, {"model": "auth.permission", "pk": 5, "fields": {"name": "Can add permission", "content_type": 2, "codename": "add_permission"}}, {"model": "auth.permission", "pk": 6, "fields": {"name": "Can change permission", "content_type": 2, "codename": "change_permission"}}, {"model": "auth.permission", "pk": 7, "fields": {"name": "Can delete permission", "content_type": 2, "codename": "delete_permission"}}, {"model": "auth.permission", "pk": 8, "fields": {"name": "Can view permission", "content_type": 2, "codename": "view_permission"}}, {"model": "auth.permission", "pk": 9, "fields": {"name": "Can add group", "content_type": 3, "codename": "add_group"}}, {"model": "auth.permission", "pk": 10, "fields": {"name": "Can change group", "content_type": 3, "codename": "change_group"}}, {"model": "auth.permission", "pk": 11, "fields": {"name": "Can delete group", "content_type": 3, "codename": "delete_group"}}, {"model": "auth.permission", "pk": 12, "fields": {"name": "Can view group", "content_type": 3, "codename": "view_group"}}, {"model": "auth.permission", "pk": 13, "fields": {"name": "Can add content type", "content_type": 4, "codename": "add_contenttype"}}, {"model": "auth.permission", "pk": 14, "fields": {"name": "Can change content type", "content_type": 4, "codename": "change_contenttype"}}, {"model": "auth.permission", "pk": 15, "fields": {"name": "Can delete content type", "content_type": 4, "codename": "delete_contenttype"}}, {"model": "auth.permission", "pk": 16, "fields": {"name": "Can view content type", "content_type": 4, "codename": "view_contenttype"}}, {"model": "auth.permission", "pk": 17, "fields": {"name": "Can add session", "content_type": 5, "codename": "add_session"}}, {"model": "auth.permission", "pk": 18, "fields": {"name": "Can change session", "content_type": 5, "codename": "change_session"}}, {"model": "auth.permission", "pk": 19, "fields": {"name": "Can delete session", "content_type": 5, "codename": "delete_session"}}, {"model": "auth.permission", "pk": 20, "fields": {"name": "Can view session", "content_type": 5, "codename": "view_session"}}, {"model": "auth.permission", "pk": 21, "fields": {"name": "Can add Token", "content_type": 6, "codename": "add_token"}}, {"model": "auth.permission", "pk": 22, "fields": {"name": "Can change Token", "content_type": 6, "codename": "change_token"}}, {"model": "auth.permission", "pk": 23, "fields": {"name": "Can delete Token", "content_type": 6, "codename": "delete_token"}}, {"model": "auth.permission", "pk": 24, "fields": {"name": "Can view Token", "content_type": 6, "codename": "view_token"}}, {"model": "auth.permission", "pk": 25, "fields": {"name": "Can add token", "content_type": 7, "codename": "add_tokenproxy"}}, {"model": "auth.permission", "pk": 26, "fields": {"name": "Can change token", "content_type": 7, "codename": "change_tokenproxy"}}, {"model": "auth.permission", "pk": 27, "fields": {"name": "Can delete token", "content_type": 7, "codename": "delete_tokenproxy"}}, {"model": "auth.permission", "pk": 28, "fields": {"name": "Can view token", "content_type": 7, "codename": "view_tokenproxy"}}, {"model": "auth.permission", "pk": 29, "fields": {"name": "Can add pyros user", "content_type": 8, "codename": "add_pyrosuser"}}, {"model": "auth.permission", "pk": 30, "fields": {"name": "Can change pyros user", "content_type": 8, "codename": "change_pyrosuser"}}, {"model": "auth.permission", "pk": 31, "fields": {"name": "Can delete pyros user", "content_type": 8, "codename": "delete_pyrosuser"}}, {"model": "auth.permission", "pk": 32, "fields": {"name": "Can view pyros user", "content_type": 8, "codename": "view_pyrosuser"}}, {"model": "auth.permission", "pk": 33, "fields": {"name": "Can add country", "content_type": 9, "codename": "add_country"}}, {"model": "auth.permission", "pk": 34, "fields": {"name": "Can change country", "content_type": 9, "codename": "change_country"}}, {"model": "auth.permission", "pk": 35, "fields": {"name": "Can delete country", "content_type": 9, "codename": "delete_country"}}, {"model": "auth.permission", "pk": 36, "fields": {"name": "Can view country", "content_type": 9, "codename": "view_country"}}, {"model": "auth.permission", "pk": 37, "fields": {"name": "Can add institute", "content_type": 10, "codename": "add_institute"}}, {"model": "auth.permission", "pk": 38, "fields": {"name": "Can change institute", "content_type": 10, "codename": "change_institute"}}, {"model": "auth.permission", "pk": 39, "fields": {"name": "Can delete institute", "content_type": 10, "codename": "delete_institute"}}, {"model": "auth.permission", "pk": 40, "fields": {"name": "Can view institute", "content_type": 10, "codename": "view_institute"}}, {"model": "auth.permission", "pk": 41, "fields": {"name": "Can add period", "content_type": 11, "codename": "add_period"}}, {"model": "auth.permission", "pk": 42, "fields": {"name": "Can change period", "content_type": 11, "codename": "change_period"}}, {"model": "auth.permission", "pk": 43, "fields": {"name": "Can delete period", "content_type": 11, "codename": "delete_period"}}, {"model": "auth.permission", "pk": 44, "fields": {"name": "Can view period", "content_type": 11, "codename": "view_period"}}, {"model": "auth.permission", "pk": 45, "fields": {"name": "Can add science theme", "content_type": 12, "codename": "add_sciencetheme"}}, {"model": "auth.permission", "pk": 46, "fields": {"name": "Can change science theme", "content_type": 12, "codename": "change_sciencetheme"}}, {"model": "auth.permission", "pk": 47, "fields": {"name": "Can delete science theme", "content_type": 12, "codename": "delete_sciencetheme"}}, {"model": "auth.permission", "pk": 48, "fields": {"name": "Can view science theme", "content_type": 12, "codename": "view_sciencetheme"}}, {"model": "auth.permission", "pk": 49, "fields": {"name": "Can add scientific program", "content_type": 13, "codename": "add_scientificprogram"}}, {"model": "auth.permission", "pk": 50, "fields": {"name": "Can change scientific program", "content_type": 13, "codename": "change_scientificprogram"}}, {"model": "auth.permission", "pk": 51, "fields": {"name": "Can delete scientific program", "content_type": 13, "codename": "delete_scientificprogram"}}, {"model": "auth.permission", "pk": 52, "fields": {"name": "Can view scientific program", "content_type": 13, "codename": "view_scientificprogram"}}, {"model": "auth.permission", "pk": 53, "fields": {"name": "Can add s p_ period", "content_type": 14, "codename": "add_sp_period"}}, {"model": "auth.permission", "pk": 54, "fields": {"name": "Can change s p_ period", "content_type": 14, "codename": "change_sp_period"}}, {"model": "auth.permission", "pk": 55, "fields": {"name": "Can delete s p_ period", "content_type": 14, "codename": "delete_sp_period"}}, {"model": "auth.permission", "pk": 56, "fields": {"name": "Can view s p_ period", "content_type": 14, "codename": "view_sp_period"}}, {"model": "auth.permission", "pk": 57, "fields": {"name": "Can add user level", "content_type": 15, "codename": "add_userlevel"}}, {"model": "auth.permission", "pk": 58, "fields": {"name": "Can change user level", "content_type": 15, "codename": "change_userlevel"}}, {"model": "auth.permission", "pk": 59, "fields": {"name": "Can delete user level", "content_type": 15, "codename": "delete_userlevel"}}, {"model": "auth.permission", "pk": 60, "fields": {"name": "Can view user level", "content_type": 15, "codename": "view_userlevel"}}, {"model": "auth.permission", "pk": 61, "fields": {"name": "Can add s p_ period workflow", "content_type": 16, "codename": "add_sp_periodworkflow"}}, {"model": "auth.permission", "pk": 62, "fields": {"name": "Can change s p_ period workflow", "content_type": 16, "codename": "change_sp_periodworkflow"}}, {"model": "auth.permission", "pk": 63, "fields": {"name": "Can delete s p_ period workflow", "content_type": 16, "codename": "delete_sp_periodworkflow"}}, {"model": "auth.permission", "pk": 64, "fields": {"name": "Can view s p_ period workflow", "content_type": 16, "codename": "view_sp_periodworkflow"}}, {"model": "auth.permission", "pk": 65, "fields": {"name": "Can add s p_ period_ guest", "content_type": 17, "codename": "add_sp_period_guest"}}, {"model": "auth.permission", "pk": 66, "fields": {"name": "Can change s p_ period_ guest", "content_type": 17, "codename": "change_sp_period_guest"}}, {"model": "auth.permission", "pk": 67, "fields": {"name": "Can delete s p_ period_ guest", "content_type": 17, "codename": "delete_sp_period_guest"}}, {"model": "auth.permission", "pk": 68, "fields": {"name": "Can view s p_ period_ guest", "content_type": 17, "codename": "view_sp_period_guest"}}, {"model": "auth.permission", "pk": 69, "fields": {"name": "Can add s p_ period_ user", "content_type": 18, "codename": "add_sp_period_user"}}, {"model": "auth.permission", "pk": 70, "fields": {"name": "Can change s p_ period_ user", "content_type": 18, "codename": "change_sp_period_user"}}, {"model": "auth.permission", "pk": 71, "fields": {"name": "Can delete s p_ period_ user", "content_type": 18, "codename": "delete_sp_period_user"}}, {"model": "auth.permission", "pk": 72, "fields": {"name": "Can view s p_ period_ user", "content_type": 18, "codename": "view_sp_period_user"}}, {"model": "auth.permission", "pk": 73, "fields": {"name": "Can add agent cmd", "content_type": 19, "codename": "add_agentcmd"}}, {"model": "auth.permission", "pk": 74, "fields": {"name": "Can change agent cmd", "content_type": 19, "codename": "change_agentcmd"}}, {"model": "auth.permission", "pk": 75, "fields": {"name": "Can delete agent cmd", "content_type": 19, "codename": "delete_agentcmd"}}, {"model": "auth.permission", "pk": 76, "fields": {"name": "Can view agent cmd", "content_type": 19, "codename": "view_agentcmd"}}, {"model": "auth.permission", "pk": 77, "fields": {"name": "Can add agent logs", "content_type": 20, "codename": "add_agentlogs"}}, {"model": "auth.permission", "pk": 78, "fields": {"name": "Can change agent logs", "content_type": 20, "codename": "change_agentlogs"}}, {"model": "auth.permission", "pk": 79, "fields": {"name": "Can delete agent logs", "content_type": 20, "codename": "delete_agentlogs"}}, {"model": "auth.permission", "pk": 80, "fields": {"name": "Can view agent logs", "content_type": 20, "codename": "view_agentlogs"}}, {"model": "auth.permission", "pk": 81, "fields": {"name": "Can add agent survey", "content_type": 21, "codename": "add_agentsurvey"}}, {"model": "auth.permission", "pk": 82, "fields": {"name": "Can change agent survey", "content_type": 21, "codename": "change_agentsurvey"}}, {"model": "auth.permission", "pk": 83, "fields": {"name": "Can delete agent survey", "content_type": 21, "codename": "delete_agentsurvey"}}, {"model": "auth.permission", "pk": 84, "fields": {"name": "Can view agent survey", "content_type": 21, "codename": "view_agentsurvey"}}, {"model": "auth.permission", "pk": 85, "fields": {"name": "Can add config", "content_type": 22, "codename": "add_config"}}, {"model": "auth.permission", "pk": 86, "fields": {"name": "Can change config", "content_type": 22, "codename": "change_config"}}, {"model": "auth.permission", "pk": 87, "fields": {"name": "Can delete config", "content_type": 22, "codename": "delete_config"}}, {"model": "auth.permission", "pk": 88, "fields": {"name": "Can view config", "content_type": 22, "codename": "view_config"}}, {"model": "auth.permission", "pk": 89, "fields": {"name": "Can add env_data", "content_type": 23, "codename": "add_env_data"}}, {"model": "auth.permission", "pk": 90, "fields": {"name": "Can change env_data", "content_type": 23, "codename": "change_env_data"}}, {"model": "auth.permission", "pk": 91, "fields": {"name": "Can delete env_data", "content_type": 23, "codename": "delete_env_data"}}, {"model": "auth.permission", "pk": 92, "fields": {"name": "Can view env_data", "content_type": 23, "codename": "view_env_data"}}, {"model": "auth.permission", "pk": 93, "fields": {"name": "Can add env_data_hist", "content_type": 24, "codename": "add_env_data_hist"}}, {"model": "auth.permission", "pk": 94, "fields": {"name": "Can change env_data_hist", "content_type": 24, "codename": "change_env_data_hist"}}, {"model": "auth.permission", "pk": 95, "fields": {"name": "Can delete env_data_hist", "content_type": 24, "codename": "delete_env_data_hist"}}, {"model": "auth.permission", "pk": 96, "fields": {"name": "Can view env_data_hist", "content_type": 24, "codename": "view_env_data_hist"}}, {"model": "auth.permission", "pk": 97, "fields": {"name": "Can add log", "content_type": 25, "codename": "add_log"}}, {"model": "auth.permission", "pk": 98, "fields": {"name": "Can change log", "content_type": 25, "codename": "change_log"}}, {"model": "auth.permission", "pk": 99, "fields": {"name": "Can delete log", "content_type": 25, "codename": "delete_log"}}, {"model": "auth.permission", "pk": 100, "fields": {"name": "Can view log", "content_type": 25, "codename": "view_log"}}, {"model": "auth.permission", "pk": 101, "fields": {"name": "Can add majordome", "content_type": 26, "codename": "add_majordome"}}, {"model": "auth.permission", "pk": 102, "fields": {"name": "Can change majordome", "content_type": 26, "codename": "change_majordome"}}, {"model": "auth.permission", "pk": 103, "fields": {"name": "Can delete majordome", "content_type": 26, "codename": "delete_majordome"}}, {"model": "auth.permission", "pk": 104, "fields": {"name": "Can view majordome", "content_type": 26, "codename": "view_majordome"}}, {"model": "auth.permission", "pk": 105, "fields": {"name": "Can add sensors_data", "content_type": 27, "codename": "add_sensors_data"}}, {"model": "auth.permission", "pk": 106, "fields": {"name": "Can change sensors_data", "content_type": 27, "codename": "change_sensors_data"}}, {"model": "auth.permission", "pk": 107, "fields": {"name": "Can delete sensors_data", "content_type": 27, "codename": "delete_sensors_data"}}, {"model": "auth.permission", "pk": 108, "fields": {"name": "Can view sensors_data", "content_type": 27, "codename": "view_sensors_data"}}, {"model": "auth.permission", "pk": 109, "fields": {"name": "Can add sensors_data_last_value", "content_type": 28, "codename": "add_sensors_data_last_value"}}, {"model": "auth.permission", "pk": 110, "fields": {"name": "Can change sensors_data_last_value", "content_type": 28, "codename": "change_sensors_data_last_value"}}, {"model": "auth.permission", "pk": 111, "fields": {"name": "Can delete sensors_data_last_value", "content_type": 28, "codename": "delete_sensors_data_last_value"}}, {"model": "auth.permission", "pk": 112, "fields": {"name": "Can view sensors_data_last_value", "content_type": 28, "codename": "view_sensors_data_last_value"}}, {"model": "auth.permission", "pk": 113, "fields": {"name": "Can add site watch", "content_type": 29, "codename": "add_sitewatch"}}, {"model": "auth.permission", "pk": 114, "fields": {"name": "Can change site watch", "content_type": 29, "codename": "change_sitewatch"}}, {"model": "auth.permission", "pk": 115, "fields": {"name": "Can delete site watch", "content_type": 29, "codename": "delete_sitewatch"}}, {"model": "auth.permission", "pk": 116, "fields": {"name": "Can view site watch", "content_type": 29, "codename": "view_sitewatch"}}, {"model": "auth.permission", "pk": 117, "fields": {"name": "Can add site watch history", "content_type": 30, "codename": "add_sitewatchhistory"}}, {"model": "auth.permission", "pk": 118, "fields": {"name": "Can change site watch history", "content_type": 30, "codename": "change_sitewatchhistory"}}, {"model": "auth.permission", "pk": 119, "fields": {"name": "Can delete site watch history", "content_type": 30, "codename": "delete_sitewatchhistory"}}, {"model": "auth.permission", "pk": 120, "fields": {"name": "Can view site watch history", "content_type": 30, "codename": "view_sitewatchhistory"}}, {"model": "auth.permission", "pk": 121, "fields": {"name": "Can add tickets", "content_type": 31, "codename": "add_tickets"}}, {"model": "auth.permission", "pk": 122, "fields": {"name": "Can change tickets", "content_type": 31, "codename": "change_tickets"}}, {"model": "auth.permission", "pk": 123, "fields": {"name": "Can delete tickets", "content_type": 31, "codename": "delete_tickets"}}, {"model": "auth.permission", "pk": 124, "fields": {"name": "Can view tickets", "content_type": 31, "codename": "view_tickets"}}, {"model": "auth.permission", "pk": 125, "fields": {"name": "Can add version", "content_type": 32, "codename": "add_version"}}, {"model": "auth.permission", "pk": 126, "fields": {"name": "Can change version", "content_type": 32, "codename": "change_version"}}, {"model": "auth.permission", "pk": 127, "fields": {"name": "Can delete version", "content_type": 32, "codename": "delete_version"}}, {"model": "auth.permission", "pk": 128, "fields": {"name": "Can view version", "content_type": 32, "codename": "view_version"}}, {"model": "auth.permission", "pk": 129, "fields": {"name": "Can add weather watch", "content_type": 33, "codename": "add_weatherwatch"}}, {"model": "auth.permission", "pk": 130, "fields": {"name": "Can change weather watch", "content_type": 33, "codename": "change_weatherwatch"}}, {"model": "auth.permission", "pk": 131, "fields": {"name": "Can delete weather watch", "content_type": 33, "codename": "delete_weatherwatch"}}, {"model": "auth.permission", "pk": 132, "fields": {"name": "Can view weather watch", "content_type": 33, "codename": "view_weatherwatch"}}, {"model": "auth.permission", "pk": 133, "fields": {"name": "Can add weather watch history", "content_type": 34, "codename": "add_weatherwatchhistory"}}, {"model": "auth.permission", "pk": 134, "fields": {"name": "Can change weather watch history", "content_type": 34, "codename": "change_weatherwatchhistory"}}, {"model": "auth.permission", "pk": 135, "fields": {"name": "Can delete weather watch history", "content_type": 34, "codename": "delete_weatherwatchhistory"}}, {"model": "auth.permission", "pk": 136, "fields": {"name": "Can view weather watch history", "content_type": 34, "codename": "view_weatherwatchhistory"}}, {"model": "auth.permission", "pk": 137, "fields": {"name": "Can add album", "content_type": 35, "codename": "add_album"}}, {"model": "auth.permission", "pk": 138, "fields": {"name": "Can change album", "content_type": 35, "codename": "change_album"}}, {"model": "auth.permission", "pk": 139, "fields": {"name": "Can delete album", "content_type": 35, "codename": "delete_album"}}, {"model": "auth.permission", "pk": 140, "fields": {"name": "Can view album", "content_type": 35, "codename": "view_album"}}, {"model": "auth.permission", "pk": 141, "fields": {"name": "Can add image", "content_type": 36, "codename": "add_image"}}, {"model": "auth.permission", "pk": 142, "fields": {"name": "Can change image", "content_type": 36, "codename": "change_image"}}, {"model": "auth.permission", "pk": 143, "fields": {"name": "Can delete image", "content_type": 36, "codename": "delete_image"}}, {"model": "auth.permission", "pk": 144, "fields": {"name": "Can view image", "content_type": 36, "codename": "view_image"}}, {"model": "auth.permission", "pk": 145, "fields": {"name": "Can add plan", "content_type": 37, "codename": "add_plan"}}, {"model": "auth.permission", "pk": 146, "fields": {"name": "Can change plan", "content_type": 37, "codename": "change_plan"}}, {"model": "auth.permission", "pk": 147, "fields": {"name": "Can delete plan", "content_type": 37, "codename": "delete_plan"}}, {"model": "auth.permission", "pk": 148, "fields": {"name": "Can view plan", "content_type": 37, "codename": "view_plan"}}, {"model": "auth.permission", "pk": 149, "fields": {"name": "Can add schedule", "content_type": 38, "codename": "add_schedule"}}, {"model": "auth.permission", "pk": 150, "fields": {"name": "Can change schedule", "content_type": 38, "codename": "change_schedule"}}, {"model": "auth.permission", "pk": 151, "fields": {"name": "Can delete schedule", "content_type": 38, "codename": "delete_schedule"}}, {"model": "auth.permission", "pk": 152, "fields": {"name": "Can view schedule", "content_type": 38, "codename": "view_schedule"}}, {"model": "auth.permission", "pk": 153, "fields": {"name": "Can add schedule has sequences", "content_type": 39, "codename": "add_schedulehassequences"}}, {"model": "auth.permission", "pk": 154, "fields": {"name": "Can change schedule has sequences", "content_type": 39, "codename": "change_schedulehassequences"}}, {"model": "auth.permission", "pk": 155, "fields": {"name": "Can delete schedule has sequences", "content_type": 39, "codename": "delete_schedulehassequences"}}, {"model": "auth.permission", "pk": 156, "fields": {"name": "Can view schedule has sequences", "content_type": 39, "codename": "view_schedulehassequences"}}, {"model": "auth.permission", "pk": 157, "fields": {"name": "Can add sequence", "content_type": 40, "codename": "add_sequence"}}, {"model": "auth.permission", "pk": 158, "fields": {"name": "Can change sequence", "content_type": 40, "codename": "change_sequence"}}, {"model": "auth.permission", "pk": 159, "fields": {"name": "Can delete sequence", "content_type": 40, "codename": "delete_sequence"}}, {"model": "auth.permission", "pk": 160, "fields": {"name": "Can view sequence", "content_type": 40, "codename": "view_sequence"}}, {"model": "auth.permission", "pk": 161, "fields": {"name": "Can add agent device status", "content_type": 41, "codename": "add_agentdevicestatus"}}, {"model": "auth.permission", "pk": 162, "fields": {"name": "Can change agent device status", "content_type": 41, "codename": "change_agentdevicestatus"}}, {"model": "auth.permission", "pk": 163, "fields": {"name": "Can delete agent device status", "content_type": 41, "codename": "delete_agentdevicestatus"}}, {"model": "auth.permission", "pk": 164, "fields": {"name": "Can view agent device status", "content_type": 41, "codename": "view_agentdevicestatus"}}, {"model": "auth.permission", "pk": 165, "fields": {"name": "Can add agent device telescope status", "content_type": 42, "codename": "add_agentdevicetelescopestatus"}}, {"model": "auth.permission", "pk": 166, "fields": {"name": "Can change agent device telescope status", "content_type": 42, "codename": "change_agentdevicetelescopestatus"}}, {"model": "auth.permission", "pk": 167, "fields": {"name": "Can delete agent device telescope status", "content_type": 42, "codename": "delete_agentdevicetelescopestatus"}}, {"model": "auth.permission", "pk": 168, "fields": {"name": "Can view agent device telescope status", "content_type": 42, "codename": "view_agentdevicetelescopestatus"}}, {"model": "auth.permission", "pk": 169, "fields": {"name": "Can add detector", "content_type": 43, "codename": "add_detector"}}, {"model": "auth.permission", "pk": 170, "fields": {"name": "Can change detector", "content_type": 43, "codename": "change_detector"}}, {"model": "auth.permission", "pk": 171, "fields": {"name": "Can delete detector", "content_type": 43, "codename": "delete_detector"}}, {"model": "auth.permission", "pk": 172, "fields": {"name": "Can view detector", "content_type": 43, "codename": "view_detector"}}, {"model": "auth.permission", "pk": 173, "fields": {"name": "Can add dome", "content_type": 44, "codename": "add_dome"}}, {"model": "auth.permission", "pk": 174, "fields": {"name": "Can change dome", "content_type": 44, "codename": "change_dome"}}, {"model": "auth.permission", "pk": 175, "fields": {"name": "Can delete dome", "content_type": 44, "codename": "delete_dome"}}, {"model": "auth.permission", "pk": 176, "fields": {"name": "Can view dome", "content_type": 44, "codename": "view_dome"}}, {"model": "auth.permission", "pk": 177, "fields": {"name": "Can add plc device", "content_type": 45, "codename": "add_plcdevice"}}, {"model": "auth.permission", "pk": 178, "fields": {"name": "Can change plc device", "content_type": 45, "codename": "change_plcdevice"}}, {"model": "auth.permission", "pk": 179, "fields": {"name": "Can delete plc device", "content_type": 45, "codename": "delete_plcdevice"}}, {"model": "auth.permission", "pk": 180, "fields": {"name": "Can view plc device", "content_type": 45, "codename": "view_plcdevice"}}, {"model": "auth.permission", "pk": 181, "fields": {"name": "Can add telescope", "content_type": 46, "codename": "add_telescope"}}, {"model": "auth.permission", "pk": 182, "fields": {"name": "Can change telescope", "content_type": 46, "codename": "change_telescope"}}, {"model": "auth.permission", "pk": 183, "fields": {"name": "Can delete telescope", "content_type": 46, "codename": "delete_telescope"}}, {"model": "auth.permission", "pk": 184, "fields": {"name": "Can view telescope", "content_type": 46, "codename": "view_telescope"}}, {"model": "auth.permission", "pk": 185, "fields": {"name": "Can add telescope command", "content_type": 47, "codename": "add_telescopecommand"}}, {"model": "auth.permission", "pk": 186, "fields": {"name": "Can change telescope command", "content_type": 47, "codename": "change_telescopecommand"}}, {"model": "auth.permission", "pk": 187, "fields": {"name": "Can delete telescope command", "content_type": 47, "codename": "delete_telescopecommand"}}, {"model": "auth.permission", "pk": 188, "fields": {"name": "Can view telescope command", "content_type": 47, "codename": "view_telescopecommand"}}, {"model": "auth.permission", "pk": 189, "fields": {"name": "Can add plc device status", "content_type": 48, "codename": "add_plcdevicestatus"}}, {"model": "auth.permission", "pk": 190, "fields": {"name": "Can change plc device status", "content_type": 48, "codename": "change_plcdevicestatus"}}, {"model": "auth.permission", "pk": 191, "fields": {"name": "Can delete plc device status", "content_type": 48, "codename": "delete_plcdevicestatus"}}, {"model": "auth.permission", "pk": 192, "fields": {"name": "Can view plc device status", "content_type": 48, "codename": "view_plcdevicestatus"}}, {"model": "auth.permission", "pk": 193, "fields": {"name": "Can add filter wheel", "content_type": 49, "codename": "add_filterwheel"}}, {"model": "auth.permission", "pk": 194, "fields": {"name": "Can change filter wheel", "content_type": 49, "codename": "change_filterwheel"}}, {"model": "auth.permission", "pk": 195, "fields": {"name": "Can delete filter wheel", "content_type": 49, "codename": "delete_filterwheel"}}, {"model": "auth.permission", "pk": 196, "fields": {"name": "Can view filter wheel", "content_type": 49, "codename": "view_filterwheel"}}, {"model": "auth.permission", "pk": 197, "fields": {"name": "Can add filter", "content_type": 50, "codename": "add_filter"}}, {"model": "auth.permission", "pk": 198, "fields": {"name": "Can change filter", "content_type": 50, "codename": "change_filter"}}, {"model": "auth.permission", "pk": 199, "fields": {"name": "Can delete filter", "content_type": 50, "codename": "delete_filter"}}, {"model": "auth.permission", "pk": 200, "fields": {"name": "Can view filter", "content_type": 50, "codename": "view_filter"}}, {"model": "contenttypes.contenttype", "pk": 1, "fields": {"app_label": "admin", "model": "logentry"}}, {"model": "contenttypes.contenttype", "pk": 2, "fields": {"app_label": "auth", "model": "permission"}}, {"model": "contenttypes.contenttype", "pk": 3, "fields": {"app_label": "auth", "model": "group"}}, {"model": "contenttypes.contenttype", "pk": 4, "fields": {"app_label": "contenttypes", "model": "contenttype"}}, {"model": "contenttypes.contenttype", "pk": 5, "fields": {"app_label": "sessions", "model": "session"}}, {"model": "contenttypes.contenttype", "pk": 6, "fields": {"app_label": "authtoken", "model": "token"}}, {"model": "contenttypes.contenttype", "pk": 7, "fields": {"app_label": "authtoken", "model": "tokenproxy"}}, {"model": "contenttypes.contenttype", "pk": 8, "fields": {"app_label": "user_mgmt", "model": "pyrosuser"}}, {"model": "contenttypes.contenttype", "pk": 9, "fields": {"app_label": "user_mgmt", "model": "country"}}, {"model": "contenttypes.contenttype", "pk": 10, "fields": {"app_label": "user_mgmt", "model": "institute"}}, {"model": "contenttypes.contenttype", "pk": 11, "fields": {"app_label": "user_mgmt", "model": "period"}}, {"model": "contenttypes.contenttype", "pk": 12, "fields": {"app_label": "user_mgmt", "model": "sciencetheme"}}, {"model": "contenttypes.contenttype", "pk": 13, "fields": {"app_label": "user_mgmt", "model": "scientificprogram"}}, {"model": "contenttypes.contenttype", "pk": 14, "fields": {"app_label": "user_mgmt", "model": "sp_period"}}, {"model": "contenttypes.contenttype", "pk": 15, "fields": {"app_label": "user_mgmt", "model": "userlevel"}}, {"model": "contenttypes.contenttype", "pk": 16, "fields": {"app_label": "user_mgmt", "model": "sp_periodworkflow"}}, {"model": "contenttypes.contenttype", "pk": 17, "fields": {"app_label": "user_mgmt", "model": "sp_period_guest"}}, {"model": "contenttypes.contenttype", "pk": 18, "fields": {"app_label": "user_mgmt", "model": "sp_period_user"}}, {"model": "contenttypes.contenttype", "pk": 19, "fields": {"app_label": "common", "model": "agentcmd"}}, {"model": "contenttypes.contenttype", "pk": 20, "fields": {"app_label": "common", "model": "agentlogs"}}, {"model": "contenttypes.contenttype", "pk": 21, "fields": {"app_label": "common", "model": "agentsurvey"}}, {"model": "contenttypes.contenttype", "pk": 22, "fields": {"app_label": "common", "model": "config"}}, {"model": "contenttypes.contenttype", "pk": 23, "fields": {"app_label": "common", "model": "env_data"}}, {"model": "contenttypes.contenttype", "pk": 24, "fields": {"app_label": "common", "model": "env_data_hist"}}, {"model": "contenttypes.contenttype", "pk": 25, "fields": {"app_label": "common", "model": "log"}}, {"model": "contenttypes.contenttype", "pk": 26, "fields": {"app_label": "common", "model": "majordome"}}, {"model": "contenttypes.contenttype", "pk": 27, "fields": {"app_label": "common", "model": "sensors_data"}}, {"model": "contenttypes.contenttype", "pk": 28, "fields": {"app_label": "common", "model": "sensors_data_last_value"}}, {"model": "contenttypes.contenttype", "pk": 29, "fields": {"app_label": "common", "model": "sitewatch"}}, {"model": "contenttypes.contenttype", "pk": 30, "fields": {"app_label": "common", "model": "sitewatchhistory"}}, {"model": "contenttypes.contenttype", "pk": 31, "fields": {"app_label": "common", "model": "tickets"}}, {"model": "contenttypes.contenttype", "pk": 32, "fields": {"app_label": "common", "model": "version"}}, {"model": "contenttypes.contenttype", "pk": 33, "fields": {"app_label": "common", "model": "weatherwatch"}}, {"model": "contenttypes.contenttype", "pk": 34, "fields": {"app_label": "common", "model": "weatherwatchhistory"}}, {"model": "contenttypes.contenttype", "pk": 35, "fields": {"app_label": "seq_submit", "model": "album"}}, {"model": "contenttypes.contenttype", "pk": 36, "fields": {"app_label": "seq_submit", "model": "image"}}, {"model": "contenttypes.contenttype", "pk": 37, "fields": {"app_label": "seq_submit", "model": "plan"}}, {"model": "contenttypes.contenttype", "pk": 38, "fields": {"app_label": "seq_submit", "model": "schedule"}}, {"model": "contenttypes.contenttype", "pk": 39, "fields": {"app_label": "seq_submit", "model": "schedulehassequences"}}, {"model": "contenttypes.contenttype", "pk": 40, "fields": {"app_label": "seq_submit", "model": "sequence"}}, {"model": "contenttypes.contenttype", "pk": 41, "fields": {"app_label": "devices", "model": "agentdevicestatus"}}, {"model": "contenttypes.contenttype", "pk": 42, "fields": {"app_label": "devices", "model": "agentdevicetelescopestatus"}}, {"model": "contenttypes.contenttype", "pk": 43, "fields": {"app_label": "devices", "model": "detector"}}, {"model": "contenttypes.contenttype", "pk": 44, "fields": {"app_label": "devices", "model": "dome"}}, {"model": "contenttypes.contenttype", "pk": 45, "fields": {"app_label": "devices", "model": "plcdevice"}}, {"model": "contenttypes.contenttype", "pk": 46, "fields": {"app_label": "devices", "model": "telescope"}}, {"model": "contenttypes.contenttype", "pk": 47, "fields": {"app_label": "devices", "model": "telescopecommand"}}, {"model": "contenttypes.contenttype", "pk": 48, "fields": {"app_label": "devices", "model": "plcdevicestatus"}}, {"model": "contenttypes.contenttype", "pk": 49, "fields": {"app_label": "devices", "model": "filterwheel"}}, {"model": "contenttypes.contenttype", "pk": 50, "fields": {"app_label": "devices", "model": "filter"}}, {"model": "user_mgmt.userlevel", "pk": 1, "fields": {"name": "Admin", "desc": "", "priority": 8, "quota": 9999.0}}, {"model": "user_mgmt.userlevel", "pk": 2, "fields": {"name": "Observer", "desc": "", "priority": 2, "quota": 9999.0}}, {"model": "user_mgmt.userlevel", "pk": 3, "fields": {"name": "TAC", "desc": "", "priority": 1, "quota": 9999.0}}, {"model": "user_mgmt.userlevel", "pk": 4, "fields": {"name": "Management board member", "desc": "", "priority": 3, "quota": 9999.0}}, {"model": "user_mgmt.userlevel", "pk": 5, "fields": {"name": "Operator", "desc": "", "priority": 4, "quota": 9999.0}}, {"model": "user_mgmt.userlevel", "pk": 6, "fields": {"name": "Unit-PI", "desc": "", "priority": 7, "quota": 9999.0}}, {"model": "user_mgmt.userlevel", "pk": 7, "fields": {"name": "Unit-board", "desc": "", "priority": 6, "quota": 9999.0}}, {"model": "user_mgmt.userlevel", "pk": 8, "fields": {"name": "Visitor", "desc": "Account without any privilege", "priority": 0, "quota": 0.0}}, {"model": "user_mgmt.country", "pk": 1, "fields": {"name": "France", "desc": "", "quota": null}}, {"model": "user_mgmt.institute", "pk": 1, "fields": {"name": "CNES", "quota": 80}}, {"model": "user_mgmt.institute", "pk": 2, "fields": {"name": "CNRS", "quota": 20}}, {"model": "user_mgmt.sciencetheme", "pk": 1, "fields": {"name": "Solar System"}}, {"model": "user_mgmt.sciencetheme", "pk": 2, "fields": {"name": "Galatic"}}, {"model": "user_mgmt.sciencetheme", "pk": 3, "fields": {"name": "Extra Galatic"}}, {"model": "user_mgmt.pyrosuser", "pk": 1, "fields": {"password": "pbkdf2_sha256$24000$HRial3QUfrlz$bVuEzQaXthOd9GZVXd2449LDEF8EMQure69nA/Hu7qQ=", "last_login": "2016-08-10T15:16:42.327Z", "is_superuser": true, "first_name": "pyros", "last_name": "", "email": "admin@example.com", "is_staff": true, "date_joined": "2016-08-10T15:15:58.481Z", "username": "pyros", "is_active": true, "first_time": false, "country": 1, "desc": "", "created": "2016-08-11T07:54:05.627Z", "updated": "2016-08-11T07:54:05.627Z", "tel": "", "address": "", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": null, "groups": [], "user_permissions": [], "user_level": [1], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 2, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Pascal", "last_name": "Richard", "email": "Pascal.Richard@cnes.fr", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Pascal.Richard@cnes.fr", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "18 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "CNES", "institute": 1, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [2], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 3, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Mรฉgane", "last_name": "Diet", "email": "Megane.Diet@cnes.fr", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Megane.Diet@cnes.fr", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "18 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "CNES", "institute": 1, "is_institute_representative": true, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [2, 4], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 4, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Valentin", "last_name": "Baral", "email": "Valentin.Baral@cnes.fr", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Valentin.Baral@cnes.fr", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "18 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "CNES", "institute": 1, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [2], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 5, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Alain", "last_name": "Klotz", "email": "aklotz@irap.omp.eu", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "aklotz@irap.omp.eu", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": true, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [2, 4, 6], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 6, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Loic", "last_name": "Eymar", "email": "loic.eymar@oca.eu", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "loic.eymar@oca.eu", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "96 Boulevard de l'Observatoire, 06300 Nice", "laboratory": "OCA", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [2, 5], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 7, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": true, "first_name": "Etienne", "last_name": "Pallier", "email": "etienne.pallier@irap.omp.eu", "is_staff": true, "date_joined": "2021-05-20T09:03:37.108Z", "username": "etienne.pallier@irap.omp.eu", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [1], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 8, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": true, "first_name": "Alexis", "last_name": "Koralewski", "email": "akoralewski@irap.omp.eu", "is_staff": true, "date_joined": "2021-05-20T09:03:37.108Z", "username": "akoralewski@irap.omp.eu", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [1], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 9, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Observer", "last_name": "Observer", "email": "observer@example.com", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "observer@example.com", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [2], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 10, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": true, "first_name": "Admin", "last_name": "Admin", "email": "Admin@example.com", "is_staff": true, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Admin@example.com", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [1], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 11, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Operator", "last_name": "Operator", "email": "Operator@example.com", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Operator@example.com", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [5], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 12, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Management", "last_name": "Board", "email": "Management_board@example.com", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Management_board@example.com", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [4], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 13, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": true, "first_name": "Unit", "last_name": "PI", "email": "Unit-PI@example.com", "is_staff": true, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Unit-PI@example.com", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [6], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 14, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "TAC", "last_name": "TAC", "email": "TAC@example.com", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "TAC@example.com", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [3], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 15, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Visitor", "last_name": "Visitor", "email": "Visitor@example.com", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Visitor@example.com", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [8], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 16, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": true, "first_name": "Unit", "last_name": "Board", "email": "Unit-board@example.com", "is_staff": true, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Unit-board@example.com", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [7], "referee_themes": []}}, {"model": "user_mgmt.period", "pk": 1, "fields": {"start_date": "2023-06-20", "exploitation_duration": 182, "submission_duration": 136, "evaluation_duration": 31, "validation_duration": 5, "notification_duration": 10, "property_of_data_duration": 365, "data_accessibility_duration": 3650}}, {"model": "user_mgmt.scientificprogram", "pk": 1, "fields": {"created": null, "updated": null, "name": "debris", "description_short": "", "description_long": "", "institute": 1, "sp_pi": 2, "science_theme": 1, "is_auto_validated": true}}, {"model": "user_mgmt.sp_period", "pk": 1, "fields": {"period": 1, "scientific_program": 1, "public_visibility": "Name", "referee1": null, "vote_referee1": "A: Accepted", "reason_referee1": "", "referee2": null, "vote_referee2": "A: Accepted", "reason_referee2": "", "is_valid": "Accepted", "status": "Accepted", "quota_minimal": 0, "quota_nominal": 0, "quota_allocated": 0, "quota_remaining": 0, "over_quota_duration": 0, "over_quota_duration_allocated": 0, "over_quota_duration_remaining": 0, "token": 0, "token_allocated": 0, "token_remaining": 0, "priority": 0}}, {"model": "user_mgmt.sp_period_user", "pk": 2, "fields": {"SP_Period": 1, "user": 3}}, {"model": "user_mgmt.sp_period_user", "pk": 3, "fields": {"SP_Period": 1, "user": 4}}, {"model": "common.config", "pk": 1, "fields": {"latitude": "1.00", "local_time_zone": 1.0, "longitude": "1.00", "altitude": 1.0, "horizon_line": 1.0, "row_data_save_frequency": 300, "request_frequency": 300, "analysed_data_save": 300, "telescope_ip_address": "127.0.0.1", "camera_ip_address": "127.0.0.1", "plc_ip_address": "127.0.0.1", "global_mode": true, "ack": true, "bypass": false, "lock": false, "pyros_state": "Starting", "force_passive_mode": false, "plc_timeout_seconds": 10, "majordome_state": "", "ntc": false, "majordome_restarted": false}}, {"model": "common.version", "pk": 1, "fields": {"module_name": "Scheduler", "version": "0.1", "created": "2016-06-23T14:04:48Z", "updated": "2016-06-23T14:04:48Z"}}, {"model": "common.version", "pk": 2, "fields": {"module_name": "Dashboard", "version": "0.1", "created": "2016-06-23T14:04:48Z", "updated": "2016-06-23T14:04:48Z"}}, {"model": "common.version", "pk": 3, "fields": {"module_name": "Observation Manager", "version": "0.1", "created": "2016-06-23T14:04:48Z", "updated": "2016-06-23T14:04:48Z"}}, {"model": "common.version", "pk": 4, "fields": {"module_name": "Routine Manager", "version": "0.1", "created": "2016-06-23T14:04:48Z", "updated": "2016-06-23T14:04:48Z"}}, {"model": "common.version", "pk": 5, "fields": {"module_name": "Alert Manager", "version": "0.1", "created": "2016-06-23T14:04:48Z", "updated": "2016-06-23T14:04:48Z"}}, {"model": "common.version", "pk": 6, "fields": {"module_name": "Monitoring", "version": "0.1", "created": "2016-06-23T14:04:48Z", "updated": "2016-06-23T14:04:48Z"}}, {"model": "common.version", "pk": 7, "fields": {"module_name": "User Manager", "version": "0.1", "created": "2016-06-23T14:04:48Z", "updated": "2016-06-23T14:04:48Z"}}, {"model": "common.version", "pk": 8, "fields": {"module_name": "Analyzer", "version": "0.1", "created": "2016-06-23T14:04:48Z", "updated": "2016-06-23T14:04:48Z"}}, {"model": "common.version", "pk": 9, "fields": {"module_name": "Majordome", "version": "0.1", "created": "2016-06-23T14:04:48Z", "updated": "2016-06-23T14:04:48Z"}}, {"model": "common.version", "pk": 10, "fields": {"module_name": "Majordome", "version": "0.2", "created": "2016-06-28T10:50:32Z", "updated": "2016-06-28T10:50:32Z"}}, {"model": "common.version", "pk": 11, "fields": {"module_name": "Majordome", "version": "0.1.4", "created": "2016-07-20T13:44:29Z", "updated": "2016-07-20T13:44:29Z"}}, {"model": "common.version", "pk": 12, "fields": {"module_name": "Alert Manager", "version": "0.2.3", "created": "2016-07-20T13:44:29Z", "updated": "2016-07-20T13:44:29Z"}}, {"model": "common.version", "pk": 13, "fields": {"module_name": "Dashboard", "version": "0.1.1", "created": "2016-07-20T13:44:29Z", "updated": "2016-07-20T13:44:29Z"}}, {"model": "common.version", "pk": 14, "fields": {"module_name": "Observation Manager", "version": "0.1.3", "created": "2016-07-20T13:44:29Z", "updated": "2016-07-20T13:44:29Z"}}, {"model": "common.version", "pk": 15, "fields": {"module_name": "Routine Manager", "version": "0.1.2", "created": "2016-07-20T13:44:29Z", "updated": "2016-07-20T13:44:29Z"}}, {"model": "common.version", "pk": 16, "fields": {"module_name": "Monitoring", "version": "0.1.3", "created": "2016-07-20T13:44:29Z", "updated": "2016-07-20T13:44:29Z"}}, {"model": "common.version", "pk": 17, "fields": {"module_name": "Scheduler", "version": "0.1.2", "created": "2016-07-20T13:44:29Z", "updated": "2016-07-20T13:44:29Z"}}, {"model": "common.version", "pk": 18, "fields": {"module_name": "User Manager", "version": "0.1.1", "created": "2016-07-20T13:44:29Z", "updated": "2016-07-20T13:44:29Z"}}, {"model": "common.version", "pk": 19, "fields": {"module_name": "Analyzer", "version": "0.1.2", "created": "2016-07-20T13:44:29Z", "updated": "2016-07-20T13:44:29Z"}}, {"model": "seq_submit.sequence", "pk": 1, "fields": {"start_expo_pref": "IMMEDIATE", "pyros_user": 2, "scientific_program": 1, "name": "seq_20220218T158246", "desc": null, "created": "2022-02-18T15:07:36.334Z", "updated": "2022-02-21T12:40:50.275Z", "last_modified_by": null, "is_alert": false, "status": "DRAFT", "with_drift": false, "priority": null, "analysis_method": null, "moon_min": null, "alt_min": null, "type": null, "img_current": null, "img_total": null, "not_obs": false, "obsolete": false, "processing": false, "flag": null, "period": 1, "start_date": "2022-02-18T15:07:36Z", "end_date": "2022-02-18T15:07:36.333Z", "jd1": "0E-8", "jd2": "0E-8", "tolerance_before": "1s", "tolerance_after": "1min", "duration": "-1.00000000", "overhead": "0E-8", "submitted": false, "config_attributes": {"layout": "OpticalChannel", "target": "RADEC 0H10M -15D", "conformation": "WIDE", "tolerance_after": "1min", "tolerance_before": "1s"}, "ra": null, "dec": null, "complete": true, "night_id": null}}, {"model": "seq_submit.sequence", "pk": 2, "fields": {"start_expo_pref": "IMMEDIATE", "pyros_user": 2, "scientific_program": 1, "name": "seq_20220218T150731", "desc": null, "created": "2022-02-21T12:43:05.768Z", "updated": "2022-02-21T12:43:06.872Z", "last_modified_by": null, "is_alert": false, "status": "TBP", "with_drift": false, "priority": null, "analysis_method": null, "moon_min": null, "alt_min": null, "type": null, "img_current": null, "img_total": null, "not_obs": false, "obsolete": false, "processing": false, "flag": null, "period": 1, "start_date": "2022-02-21T20:07:36Z", "end_date": "2022-02-21T12:43:05.767Z", "jd1": "0E-8", "jd2": "0E-8", "tolerance_before": "1s", "tolerance_after": "1min", "duration": "-1.00000000", "overhead": "0E-8", "submitted": false, "config_attributes": {"layout": "OpticalChannel", "target": "RADEC 0H10M -15D", "conformation": "WIDE"}, "ra": null, "dec": null, "complete": true, "night_id": null}}, {"model": "seq_submit.sequence", "pk": 3, "fields": {"start_expo_pref": "IMMEDIATE", "pyros_user": 2, "scientific_program": 1, "name": "seq_20220218T150732", "desc": null, "created": "2022-02-21T12:44:28.423Z", "updated": "2022-02-21T12:44:29.556Z", "last_modified_by": null, "is_alert": false, "status": "TBP", "with_drift": false, "priority": null, "analysis_method": null, "moon_min": null, "alt_min": null, "type": null, "img_current": null, "img_total": null, "not_obs": false, "obsolete": false, "processing": false, "flag": null, "period": 1, "start_date": "2022-02-21T20:07:36Z", "end_date": "2022-02-21T12:44:28.422Z", "jd1": "0E-8", "jd2": "0E-8", "tolerance_before": "1s", "tolerance_after": "1min", "duration": "-1.00000000", "overhead": "0E-8", "submitted": false, "config_attributes": {"layout": "OpticalChannel", "target": "RADEC 0H10M -15D", "conformation": "WIDE"}, "ra": null, "dec": null, "complete": true, "night_id": null}}, {"model": "seq_submit.album", "pk": 1, "fields": {"sequence": 1, "name": "OpticalChannel", "desc": "Album with one channel", "created": "2022-02-18T15:07:43.164Z", "updated": "2022-02-21T12:40:50.149Z", "complete": true}}, {"model": "seq_submit.album", "pk": 2, "fields": {"sequence": 2, "name": "OpticalChannel", "desc": null, "created": "2022-02-21T12:43:06.477Z", "updated": "2022-02-21T12:43:06.477Z", "complete": true}}, {"model": "seq_submit.album", "pk": 3, "fields": {"sequence": 3, "name": "OpticalChannel", "desc": null, "created": "2022-02-21T12:44:29.265Z", "updated": "2022-02-21T12:44:29.265Z", "complete": true}}, {"model": "seq_submit.plan", "pk": 1, "fields": {"album": 1, "created": "2022-02-18T15:07:51.078Z", "updated": "2022-02-21T12:40:49.978Z", "duration": 0.0, "nb_images": 1, "config_attributes": {"binnings": {"binxy": [1, 1], "readouttime": 6}, "exposuretime": 1.0}, "complete": true}}, {"model": "seq_submit.plan", "pk": 2, "fields": {"album": 2, "created": "2022-02-21T12:43:06.670Z", "updated": "2022-02-21T12:43:06.794Z", "duration": 0.0, "nb_images": 1, "config_attributes": {"binnings": {"binxy": [1, 1], "readouttime": 6}, "exposuretime": 1.0}, "complete": true}}, {"model": "seq_submit.plan", "pk": 3, "fields": {"album": 3, "created": "2022-02-21T12:44:29.361Z", "updated": "2022-02-21T12:44:29.468Z", "duration": 0.0, "nb_images": 1, "config_attributes": {"binnings": {"binxy": [1, 1], "readouttime": 6}, "exposuretime": 1.0}, "complete": true}}, {"model": "devices.plcdevice", "pk": 1, "fields": {"is_online": false, "status": null, "maintenance_date": null, "name": "Plc", "desc": "", "created": "2018-06-18T14:32:00Z", "updated": "2018-06-18T14:32:00Z"}}, {"model": "devices.detector", "pk": 1, "fields": {"name": "Cagire", "desc": "", "created": "2016-05-13T11:49:49Z", "updated": "2016-05-13T11:49:49Z", "is_online": false, "status": "", "maintenance_date": null, "telescope": 1, "nb_photo_x": null, "nb_photo_y": null, "photo_size_x": null, "photo_size_y": null, "has_shutter": false, "equivalent_foc_len": "", "acq_start": null, "acq_stop": null, "check_temp": null, "gain": null, "readout_noise": null, "readout_time": null, "idcam_readout_mode": null}}, {"model": "devices.detector", "pk": 2, "fields": {"name": "Visible camera", "desc": "", "created": "2016-05-13T11:50:17Z", "updated": "2016-05-13T11:50:17Z", "is_online": false, "status": "", "maintenance_date": null, "telescope": 1, "nb_photo_x": null, "nb_photo_y": null, "photo_size_x": null, "photo_size_y": null, "has_shutter": false, "equivalent_foc_len": "", "acq_start": null, "acq_stop": null, "check_temp": null, "gain": null, "readout_noise": null, "readout_time": null, "idcam_readout_mode": null}}, {"model": "devices.dome", "pk": 1, "fields": {"name": "Dome", "desc": "dome", "created": "2016-05-13T11:50:14Z", "updated": "2016-05-13T11:50:14Z", "is_online": false, "status": "", "maintenance_date": null, "open": false}}, {"model": "devices.filter", "pk": 1, "fields": {"name": "First infrared filter", "desc": "", "created": "2016-05-13T11:49:56Z", "updated": "2016-05-13T11:49:56Z", "is_online": false, "status": "", "maintenance_date": null, "filter_wheel": 2, "category": "", "transmission_curve_doc": ""}}, {"model": "devices.filter", "pk": 2, "fields": {"name": "Second infrared filter", "desc": "", "created": "2016-05-13T11:50:07Z", "updated": "2016-05-13T11:50:07Z", "is_online": false, "status": "", "maintenance_date": null, "filter_wheel": 2, "category": "", "transmission_curve_doc": ""}}, {"model": "devices.filter", "pk": 3, "fields": {"name": "First visible filter", "desc": "", "created": "2016-05-13T11:50:02Z", "updated": "2016-05-13T11:50:02Z", "is_online": false, "status": "", "maintenance_date": null, "filter_wheel": 2, "category": "", "transmission_curve_doc": ""}}, {"model": "devices.filter", "pk": 4, "fields": {"name": "Second visible filter", "desc": "", "created": "2016-05-13T11:50:11Z", "updated": "2016-05-13T11:50:11Z", "is_online": false, "status": "", "maintenance_date": null, "filter_wheel": 2, "category": "", "transmission_curve_doc": ""}}, {"model": "devices.filterwheel", "pk": 1, "fields": {"name": "Cagire FW", "desc": "", "created": "2016-06-28T13:28:28Z", "updated": "2016-06-28T13:28:28Z", "is_online": false, "status": "", "maintenance_date": null, "detector": 1}}, {"model": "devices.filterwheel", "pk": 2, "fields": {"name": "Visible Camera FW", "desc": "", "created": "2016-06-28T13:28:46Z", "updated": "2016-06-28T13:28:46Z", "is_online": false, "status": "", "maintenance_date": null, "detector": 2}}, {"model": "devices.telescope", "pk": 1, "fields": {"name": "Telescope", "desc": "", "created": "2016-05-13T11:50:14Z", "updated": "2016-05-13T11:50:14Z", "is_online": false, "status": "", "maintenance_date": null, "mount_type": "", "diameter": null, "latitude": null, "longitude": null, "sens": "", "altitude": null, "readout_time": null, "slew_time": null, "slew_dead": null, "slew_rate_max": null, "horizon_type": "", "horizon_def": null, "lim_dec_max": null, "lim_dec_min": null, "lim_ha_rise": null, "lim_ha_set": null, "address": "", "night_elev_sun": null, "mpc_code": ""}}]
2 1 \ No newline at end of file
  2 +[{"model": "auth.permission", "pk": 1, "fields": {"name": "Can add log entry", "content_type": 1, "codename": "add_logentry"}}, {"model": "auth.permission", "pk": 2, "fields": {"name": "Can change log entry", "content_type": 1, "codename": "change_logentry"}}, {"model": "auth.permission", "pk": 3, "fields": {"name": "Can delete log entry", "content_type": 1, "codename": "delete_logentry"}}, {"model": "auth.permission", "pk": 4, "fields": {"name": "Can view log entry", "content_type": 1, "codename": "view_logentry"}}, {"model": "auth.permission", "pk": 5, "fields": {"name": "Can add permission", "content_type": 2, "codename": "add_permission"}}, {"model": "auth.permission", "pk": 6, "fields": {"name": "Can change permission", "content_type": 2, "codename": "change_permission"}}, {"model": "auth.permission", "pk": 7, "fields": {"name": "Can delete permission", "content_type": 2, "codename": "delete_permission"}}, {"model": "auth.permission", "pk": 8, "fields": {"name": "Can view permission", "content_type": 2, "codename": "view_permission"}}, {"model": "auth.permission", "pk": 9, "fields": {"name": "Can add group", "content_type": 3, "codename": "add_group"}}, {"model": "auth.permission", "pk": 10, "fields": {"name": "Can change group", "content_type": 3, "codename": "change_group"}}, {"model": "auth.permission", "pk": 11, "fields": {"name": "Can delete group", "content_type": 3, "codename": "delete_group"}}, {"model": "auth.permission", "pk": 12, "fields": {"name": "Can view group", "content_type": 3, "codename": "view_group"}}, {"model": "auth.permission", "pk": 13, "fields": {"name": "Can add content type", "content_type": 4, "codename": "add_contenttype"}}, {"model": "auth.permission", "pk": 14, "fields": {"name": "Can change content type", "content_type": 4, "codename": "change_contenttype"}}, {"model": "auth.permission", "pk": 15, "fields": {"name": "Can delete content type", "content_type": 4, "codename": "delete_contenttype"}}, {"model": "auth.permission", "pk": 16, "fields": {"name": "Can view content type", "content_type": 4, "codename": "view_contenttype"}}, {"model": "auth.permission", "pk": 17, "fields": {"name": "Can add session", "content_type": 5, "codename": "add_session"}}, {"model": "auth.permission", "pk": 18, "fields": {"name": "Can change session", "content_type": 5, "codename": "change_session"}}, {"model": "auth.permission", "pk": 19, "fields": {"name": "Can delete session", "content_type": 5, "codename": "delete_session"}}, {"model": "auth.permission", "pk": 20, "fields": {"name": "Can view session", "content_type": 5, "codename": "view_session"}}, {"model": "auth.permission", "pk": 21, "fields": {"name": "Can add Token", "content_type": 6, "codename": "add_token"}}, {"model": "auth.permission", "pk": 22, "fields": {"name": "Can change Token", "content_type": 6, "codename": "change_token"}}, {"model": "auth.permission", "pk": 23, "fields": {"name": "Can delete Token", "content_type": 6, "codename": "delete_token"}}, {"model": "auth.permission", "pk": 24, "fields": {"name": "Can view Token", "content_type": 6, "codename": "view_token"}}, {"model": "auth.permission", "pk": 25, "fields": {"name": "Can add token", "content_type": 7, "codename": "add_tokenproxy"}}, {"model": "auth.permission", "pk": 26, "fields": {"name": "Can change token", "content_type": 7, "codename": "change_tokenproxy"}}, {"model": "auth.permission", "pk": 27, "fields": {"name": "Can delete token", "content_type": 7, "codename": "delete_tokenproxy"}}, {"model": "auth.permission", "pk": 28, "fields": {"name": "Can view token", "content_type": 7, "codename": "view_tokenproxy"}}, {"model": "auth.permission", "pk": 29, "fields": {"name": "Can add pyros user", "content_type": 8, "codename": "add_pyrosuser"}}, {"model": "auth.permission", "pk": 30, "fields": {"name": "Can change pyros user", "content_type": 8, "codename": "change_pyrosuser"}}, {"model": "auth.permission", "pk": 31, "fields": {"name": "Can delete pyros user", "content_type": 8, "codename": "delete_pyrosuser"}}, {"model": "auth.permission", "pk": 32, "fields": {"name": "Can view pyros user", "content_type": 8, "codename": "view_pyrosuser"}}, {"model": "auth.permission", "pk": 33, "fields": {"name": "Can add country", "content_type": 9, "codename": "add_country"}}, {"model": "auth.permission", "pk": 34, "fields": {"name": "Can change country", "content_type": 9, "codename": "change_country"}}, {"model": "auth.permission", "pk": 35, "fields": {"name": "Can delete country", "content_type": 9, "codename": "delete_country"}}, {"model": "auth.permission", "pk": 36, "fields": {"name": "Can view country", "content_type": 9, "codename": "view_country"}}, {"model": "auth.permission", "pk": 37, "fields": {"name": "Can add institute", "content_type": 10, "codename": "add_institute"}}, {"model": "auth.permission", "pk": 38, "fields": {"name": "Can change institute", "content_type": 10, "codename": "change_institute"}}, {"model": "auth.permission", "pk": 39, "fields": {"name": "Can delete institute", "content_type": 10, "codename": "delete_institute"}}, {"model": "auth.permission", "pk": 40, "fields": {"name": "Can view institute", "content_type": 10, "codename": "view_institute"}}, {"model": "auth.permission", "pk": 41, "fields": {"name": "Can add period", "content_type": 11, "codename": "add_period"}}, {"model": "auth.permission", "pk": 42, "fields": {"name": "Can change period", "content_type": 11, "codename": "change_period"}}, {"model": "auth.permission", "pk": 43, "fields": {"name": "Can delete period", "content_type": 11, "codename": "delete_period"}}, {"model": "auth.permission", "pk": 44, "fields": {"name": "Can view period", "content_type": 11, "codename": "view_period"}}, {"model": "auth.permission", "pk": 45, "fields": {"name": "Can add science theme", "content_type": 12, "codename": "add_sciencetheme"}}, {"model": "auth.permission", "pk": 46, "fields": {"name": "Can change science theme", "content_type": 12, "codename": "change_sciencetheme"}}, {"model": "auth.permission", "pk": 47, "fields": {"name": "Can delete science theme", "content_type": 12, "codename": "delete_sciencetheme"}}, {"model": "auth.permission", "pk": 48, "fields": {"name": "Can view science theme", "content_type": 12, "codename": "view_sciencetheme"}}, {"model": "auth.permission", "pk": 49, "fields": {"name": "Can add scientific program", "content_type": 13, "codename": "add_scientificprogram"}}, {"model": "auth.permission", "pk": 50, "fields": {"name": "Can change scientific program", "content_type": 13, "codename": "change_scientificprogram"}}, {"model": "auth.permission", "pk": 51, "fields": {"name": "Can delete scientific program", "content_type": 13, "codename": "delete_scientificprogram"}}, {"model": "auth.permission", "pk": 52, "fields": {"name": "Can view scientific program", "content_type": 13, "codename": "view_scientificprogram"}}, {"model": "auth.permission", "pk": 53, "fields": {"name": "Can add s p_ period", "content_type": 14, "codename": "add_sp_period"}}, {"model": "auth.permission", "pk": 54, "fields": {"name": "Can change s p_ period", "content_type": 14, "codename": "change_sp_period"}}, {"model": "auth.permission", "pk": 55, "fields": {"name": "Can delete s p_ period", "content_type": 14, "codename": "delete_sp_period"}}, {"model": "auth.permission", "pk": 56, "fields": {"name": "Can view s p_ period", "content_type": 14, "codename": "view_sp_period"}}, {"model": "auth.permission", "pk": 57, "fields": {"name": "Can add user level", "content_type": 15, "codename": "add_userlevel"}}, {"model": "auth.permission", "pk": 58, "fields": {"name": "Can change user level", "content_type": 15, "codename": "change_userlevel"}}, {"model": "auth.permission", "pk": 59, "fields": {"name": "Can delete user level", "content_type": 15, "codename": "delete_userlevel"}}, {"model": "auth.permission", "pk": 60, "fields": {"name": "Can view user level", "content_type": 15, "codename": "view_userlevel"}}, {"model": "auth.permission", "pk": 61, "fields": {"name": "Can add s p_ period workflow", "content_type": 16, "codename": "add_sp_periodworkflow"}}, {"model": "auth.permission", "pk": 62, "fields": {"name": "Can change s p_ period workflow", "content_type": 16, "codename": "change_sp_periodworkflow"}}, {"model": "auth.permission", "pk": 63, "fields": {"name": "Can delete s p_ period workflow", "content_type": 16, "codename": "delete_sp_periodworkflow"}}, {"model": "auth.permission", "pk": 64, "fields": {"name": "Can view s p_ period workflow", "content_type": 16, "codename": "view_sp_periodworkflow"}}, {"model": "auth.permission", "pk": 65, "fields": {"name": "Can add s p_ period_ guest", "content_type": 17, "codename": "add_sp_period_guest"}}, {"model": "auth.permission", "pk": 66, "fields": {"name": "Can change s p_ period_ guest", "content_type": 17, "codename": "change_sp_period_guest"}}, {"model": "auth.permission", "pk": 67, "fields": {"name": "Can delete s p_ period_ guest", "content_type": 17, "codename": "delete_sp_period_guest"}}, {"model": "auth.permission", "pk": 68, "fields": {"name": "Can view s p_ period_ guest", "content_type": 17, "codename": "view_sp_period_guest"}}, {"model": "auth.permission", "pk": 69, "fields": {"name": "Can add s p_ period_ user", "content_type": 18, "codename": "add_sp_period_user"}}, {"model": "auth.permission", "pk": 70, "fields": {"name": "Can change s p_ period_ user", "content_type": 18, "codename": "change_sp_period_user"}}, {"model": "auth.permission", "pk": 71, "fields": {"name": "Can delete s p_ period_ user", "content_type": 18, "codename": "delete_sp_period_user"}}, {"model": "auth.permission", "pk": 72, "fields": {"name": "Can view s p_ period_ user", "content_type": 18, "codename": "view_sp_period_user"}}, {"model": "auth.permission", "pk": 73, "fields": {"name": "Can add agent cmd", "content_type": 19, "codename": "add_agentcmd"}}, {"model": "auth.permission", "pk": 74, "fields": {"name": "Can change agent cmd", "content_type": 19, "codename": "change_agentcmd"}}, {"model": "auth.permission", "pk": 75, "fields": {"name": "Can delete agent cmd", "content_type": 19, "codename": "delete_agentcmd"}}, {"model": "auth.permission", "pk": 76, "fields": {"name": "Can view agent cmd", "content_type": 19, "codename": "view_agentcmd"}}, {"model": "auth.permission", "pk": 77, "fields": {"name": "Can add agent logs", "content_type": 20, "codename": "add_agentlogs"}}, {"model": "auth.permission", "pk": 78, "fields": {"name": "Can change agent logs", "content_type": 20, "codename": "change_agentlogs"}}, {"model": "auth.permission", "pk": 79, "fields": {"name": "Can delete agent logs", "content_type": 20, "codename": "delete_agentlogs"}}, {"model": "auth.permission", "pk": 80, "fields": {"name": "Can view agent logs", "content_type": 20, "codename": "view_agentlogs"}}, {"model": "auth.permission", "pk": 81, "fields": {"name": "Can add agent survey", "content_type": 21, "codename": "add_agentsurvey"}}, {"model": "auth.permission", "pk": 82, "fields": {"name": "Can change agent survey", "content_type": 21, "codename": "change_agentsurvey"}}, {"model": "auth.permission", "pk": 83, "fields": {"name": "Can delete agent survey", "content_type": 21, "codename": "delete_agentsurvey"}}, {"model": "auth.permission", "pk": 84, "fields": {"name": "Can view agent survey", "content_type": 21, "codename": "view_agentsurvey"}}, {"model": "auth.permission", "pk": 85, "fields": {"name": "Can add config", "content_type": 22, "codename": "add_config"}}, {"model": "auth.permission", "pk": 86, "fields": {"name": "Can change config", "content_type": 22, "codename": "change_config"}}, {"model": "auth.permission", "pk": 87, "fields": {"name": "Can delete config", "content_type": 22, "codename": "delete_config"}}, {"model": "auth.permission", "pk": 88, "fields": {"name": "Can view config", "content_type": 22, "codename": "view_config"}}, {"model": "auth.permission", "pk": 89, "fields": {"name": "Can add env_data", "content_type": 23, "codename": "add_env_data"}}, {"model": "auth.permission", "pk": 90, "fields": {"name": "Can change env_data", "content_type": 23, "codename": "change_env_data"}}, {"model": "auth.permission", "pk": 91, "fields": {"name": "Can delete env_data", "content_type": 23, "codename": "delete_env_data"}}, {"model": "auth.permission", "pk": 92, "fields": {"name": "Can view env_data", "content_type": 23, "codename": "view_env_data"}}, {"model": "auth.permission", "pk": 93, "fields": {"name": "Can add env_data_hist", "content_type": 24, "codename": "add_env_data_hist"}}, {"model": "auth.permission", "pk": 94, "fields": {"name": "Can change env_data_hist", "content_type": 24, "codename": "change_env_data_hist"}}, {"model": "auth.permission", "pk": 95, "fields": {"name": "Can delete env_data_hist", "content_type": 24, "codename": "delete_env_data_hist"}}, {"model": "auth.permission", "pk": 96, "fields": {"name": "Can view env_data_hist", "content_type": 24, "codename": "view_env_data_hist"}}, {"model": "auth.permission", "pk": 97, "fields": {"name": "Can add log", "content_type": 25, "codename": "add_log"}}, {"model": "auth.permission", "pk": 98, "fields": {"name": "Can change log", "content_type": 25, "codename": "change_log"}}, {"model": "auth.permission", "pk": 99, "fields": {"name": "Can delete log", "content_type": 25, "codename": "delete_log"}}, {"model": "auth.permission", "pk": 100, "fields": {"name": "Can view log", "content_type": 25, "codename": "view_log"}}, {"model": "auth.permission", "pk": 101, "fields": {"name": "Can add majordome", "content_type": 26, "codename": "add_majordome"}}, {"model": "auth.permission", "pk": 102, "fields": {"name": "Can change majordome", "content_type": 26, "codename": "change_majordome"}}, {"model": "auth.permission", "pk": 103, "fields": {"name": "Can delete majordome", "content_type": 26, "codename": "delete_majordome"}}, {"model": "auth.permission", "pk": 104, "fields": {"name": "Can view majordome", "content_type": 26, "codename": "view_majordome"}}, {"model": "auth.permission", "pk": 105, "fields": {"name": "Can add sensors_data", "content_type": 27, "codename": "add_sensors_data"}}, {"model": "auth.permission", "pk": 106, "fields": {"name": "Can change sensors_data", "content_type": 27, "codename": "change_sensors_data"}}, {"model": "auth.permission", "pk": 107, "fields": {"name": "Can delete sensors_data", "content_type": 27, "codename": "delete_sensors_data"}}, {"model": "auth.permission", "pk": 108, "fields": {"name": "Can view sensors_data", "content_type": 27, "codename": "view_sensors_data"}}, {"model": "auth.permission", "pk": 109, "fields": {"name": "Can add sensors_data_last_value", "content_type": 28, "codename": "add_sensors_data_last_value"}}, {"model": "auth.permission", "pk": 110, "fields": {"name": "Can change sensors_data_last_value", "content_type": 28, "codename": "change_sensors_data_last_value"}}, {"model": "auth.permission", "pk": 111, "fields": {"name": "Can delete sensors_data_last_value", "content_type": 28, "codename": "delete_sensors_data_last_value"}}, {"model": "auth.permission", "pk": 112, "fields": {"name": "Can view sensors_data_last_value", "content_type": 28, "codename": "view_sensors_data_last_value"}}, {"model": "auth.permission", "pk": 113, "fields": {"name": "Can add site watch", "content_type": 29, "codename": "add_sitewatch"}}, {"model": "auth.permission", "pk": 114, "fields": {"name": "Can change site watch", "content_type": 29, "codename": "change_sitewatch"}}, {"model": "auth.permission", "pk": 115, "fields": {"name": "Can delete site watch", "content_type": 29, "codename": "delete_sitewatch"}}, {"model": "auth.permission", "pk": 116, "fields": {"name": "Can view site watch", "content_type": 29, "codename": "view_sitewatch"}}, {"model": "auth.permission", "pk": 117, "fields": {"name": "Can add site watch history", "content_type": 30, "codename": "add_sitewatchhistory"}}, {"model": "auth.permission", "pk": 118, "fields": {"name": "Can change site watch history", "content_type": 30, "codename": "change_sitewatchhistory"}}, {"model": "auth.permission", "pk": 119, "fields": {"name": "Can delete site watch history", "content_type": 30, "codename": "delete_sitewatchhistory"}}, {"model": "auth.permission", "pk": 120, "fields": {"name": "Can view site watch history", "content_type": 30, "codename": "view_sitewatchhistory"}}, {"model": "auth.permission", "pk": 121, "fields": {"name": "Can add tickets", "content_type": 31, "codename": "add_tickets"}}, {"model": "auth.permission", "pk": 122, "fields": {"name": "Can change tickets", "content_type": 31, "codename": "change_tickets"}}, {"model": "auth.permission", "pk": 123, "fields": {"name": "Can delete tickets", "content_type": 31, "codename": "delete_tickets"}}, {"model": "auth.permission", "pk": 124, "fields": {"name": "Can view tickets", "content_type": 31, "codename": "view_tickets"}}, {"model": "auth.permission", "pk": 125, "fields": {"name": "Can add version", "content_type": 32, "codename": "add_version"}}, {"model": "auth.permission", "pk": 126, "fields": {"name": "Can change version", "content_type": 32, "codename": "change_version"}}, {"model": "auth.permission", "pk": 127, "fields": {"name": "Can delete version", "content_type": 32, "codename": "delete_version"}}, {"model": "auth.permission", "pk": 128, "fields": {"name": "Can view version", "content_type": 32, "codename": "view_version"}}, {"model": "auth.permission", "pk": 129, "fields": {"name": "Can add weather watch", "content_type": 33, "codename": "add_weatherwatch"}}, {"model": "auth.permission", "pk": 130, "fields": {"name": "Can change weather watch", "content_type": 33, "codename": "change_weatherwatch"}}, {"model": "auth.permission", "pk": 131, "fields": {"name": "Can delete weather watch", "content_type": 33, "codename": "delete_weatherwatch"}}, {"model": "auth.permission", "pk": 132, "fields": {"name": "Can view weather watch", "content_type": 33, "codename": "view_weatherwatch"}}, {"model": "auth.permission", "pk": 133, "fields": {"name": "Can add weather watch history", "content_type": 34, "codename": "add_weatherwatchhistory"}}, {"model": "auth.permission", "pk": 134, "fields": {"name": "Can change weather watch history", "content_type": 34, "codename": "change_weatherwatchhistory"}}, {"model": "auth.permission", "pk": 135, "fields": {"name": "Can delete weather watch history", "content_type": 34, "codename": "delete_weatherwatchhistory"}}, {"model": "auth.permission", "pk": 136, "fields": {"name": "Can view weather watch history", "content_type": 34, "codename": "view_weatherwatchhistory"}}, {"model": "auth.permission", "pk": 137, "fields": {"name": "Can add album", "content_type": 35, "codename": "add_album"}}, {"model": "auth.permission", "pk": 138, "fields": {"name": "Can change album", "content_type": 35, "codename": "change_album"}}, {"model": "auth.permission", "pk": 139, "fields": {"name": "Can delete album", "content_type": 35, "codename": "delete_album"}}, {"model": "auth.permission", "pk": 140, "fields": {"name": "Can view album", "content_type": 35, "codename": "view_album"}}, {"model": "auth.permission", "pk": 141, "fields": {"name": "Can add image", "content_type": 36, "codename": "add_image"}}, {"model": "auth.permission", "pk": 142, "fields": {"name": "Can change image", "content_type": 36, "codename": "change_image"}}, {"model": "auth.permission", "pk": 143, "fields": {"name": "Can delete image", "content_type": 36, "codename": "delete_image"}}, {"model": "auth.permission", "pk": 144, "fields": {"name": "Can view image", "content_type": 36, "codename": "view_image"}}, {"model": "auth.permission", "pk": 145, "fields": {"name": "Can add plan", "content_type": 37, "codename": "add_plan"}}, {"model": "auth.permission", "pk": 146, "fields": {"name": "Can change plan", "content_type": 37, "codename": "change_plan"}}, {"model": "auth.permission", "pk": 147, "fields": {"name": "Can delete plan", "content_type": 37, "codename": "delete_plan"}}, {"model": "auth.permission", "pk": 148, "fields": {"name": "Can view plan", "content_type": 37, "codename": "view_plan"}}, {"model": "auth.permission", "pk": 149, "fields": {"name": "Can add schedule", "content_type": 38, "codename": "add_schedule"}}, {"model": "auth.permission", "pk": 150, "fields": {"name": "Can change schedule", "content_type": 38, "codename": "change_schedule"}}, {"model": "auth.permission", "pk": 151, "fields": {"name": "Can delete schedule", "content_type": 38, "codename": "delete_schedule"}}, {"model": "auth.permission", "pk": 152, "fields": {"name": "Can view schedule", "content_type": 38, "codename": "view_schedule"}}, {"model": "auth.permission", "pk": 153, "fields": {"name": "Can add schedule has sequences", "content_type": 39, "codename": "add_schedulehassequences"}}, {"model": "auth.permission", "pk": 154, "fields": {"name": "Can change schedule has sequences", "content_type": 39, "codename": "change_schedulehassequences"}}, {"model": "auth.permission", "pk": 155, "fields": {"name": "Can delete schedule has sequences", "content_type": 39, "codename": "delete_schedulehassequences"}}, {"model": "auth.permission", "pk": 156, "fields": {"name": "Can view schedule has sequences", "content_type": 39, "codename": "view_schedulehassequences"}}, {"model": "auth.permission", "pk": 157, "fields": {"name": "Can add sequence", "content_type": 40, "codename": "add_sequence"}}, {"model": "auth.permission", "pk": 158, "fields": {"name": "Can change sequence", "content_type": 40, "codename": "change_sequence"}}, {"model": "auth.permission", "pk": 159, "fields": {"name": "Can delete sequence", "content_type": 40, "codename": "delete_sequence"}}, {"model": "auth.permission", "pk": 160, "fields": {"name": "Can view sequence", "content_type": 40, "codename": "view_sequence"}}, {"model": "auth.permission", "pk": 161, "fields": {"name": "Can add agent device status", "content_type": 41, "codename": "add_agentdevicestatus"}}, {"model": "auth.permission", "pk": 162, "fields": {"name": "Can change agent device status", "content_type": 41, "codename": "change_agentdevicestatus"}}, {"model": "auth.permission", "pk": 163, "fields": {"name": "Can delete agent device status", "content_type": 41, "codename": "delete_agentdevicestatus"}}, {"model": "auth.permission", "pk": 164, "fields": {"name": "Can view agent device status", "content_type": 41, "codename": "view_agentdevicestatus"}}, {"model": "auth.permission", "pk": 165, "fields": {"name": "Can add agent device telescope status", "content_type": 42, "codename": "add_agentdevicetelescopestatus"}}, {"model": "auth.permission", "pk": 166, "fields": {"name": "Can change agent device telescope status", "content_type": 42, "codename": "change_agentdevicetelescopestatus"}}, {"model": "auth.permission", "pk": 167, "fields": {"name": "Can delete agent device telescope status", "content_type": 42, "codename": "delete_agentdevicetelescopestatus"}}, {"model": "auth.permission", "pk": 168, "fields": {"name": "Can view agent device telescope status", "content_type": 42, "codename": "view_agentdevicetelescopestatus"}}, {"model": "auth.permission", "pk": 169, "fields": {"name": "Can add detector", "content_type": 43, "codename": "add_detector"}}, {"model": "auth.permission", "pk": 170, "fields": {"name": "Can change detector", "content_type": 43, "codename": "change_detector"}}, {"model": "auth.permission", "pk": 171, "fields": {"name": "Can delete detector", "content_type": 43, "codename": "delete_detector"}}, {"model": "auth.permission", "pk": 172, "fields": {"name": "Can view detector", "content_type": 43, "codename": "view_detector"}}, {"model": "auth.permission", "pk": 173, "fields": {"name": "Can add dome", "content_type": 44, "codename": "add_dome"}}, {"model": "auth.permission", "pk": 174, "fields": {"name": "Can change dome", "content_type": 44, "codename": "change_dome"}}, {"model": "auth.permission", "pk": 175, "fields": {"name": "Can delete dome", "content_type": 44, "codename": "delete_dome"}}, {"model": "auth.permission", "pk": 176, "fields": {"name": "Can view dome", "content_type": 44, "codename": "view_dome"}}, {"model": "auth.permission", "pk": 177, "fields": {"name": "Can add plc device", "content_type": 45, "codename": "add_plcdevice"}}, {"model": "auth.permission", "pk": 178, "fields": {"name": "Can change plc device", "content_type": 45, "codename": "change_plcdevice"}}, {"model": "auth.permission", "pk": 179, "fields": {"name": "Can delete plc device", "content_type": 45, "codename": "delete_plcdevice"}}, {"model": "auth.permission", "pk": 180, "fields": {"name": "Can view plc device", "content_type": 45, "codename": "view_plcdevice"}}, {"model": "auth.permission", "pk": 181, "fields": {"name": "Can add telescope", "content_type": 46, "codename": "add_telescope"}}, {"model": "auth.permission", "pk": 182, "fields": {"name": "Can change telescope", "content_type": 46, "codename": "change_telescope"}}, {"model": "auth.permission", "pk": 183, "fields": {"name": "Can delete telescope", "content_type": 46, "codename": "delete_telescope"}}, {"model": "auth.permission", "pk": 184, "fields": {"name": "Can view telescope", "content_type": 46, "codename": "view_telescope"}}, {"model": "auth.permission", "pk": 185, "fields": {"name": "Can add telescope command", "content_type": 47, "codename": "add_telescopecommand"}}, {"model": "auth.permission", "pk": 186, "fields": {"name": "Can change telescope command", "content_type": 47, "codename": "change_telescopecommand"}}, {"model": "auth.permission", "pk": 187, "fields": {"name": "Can delete telescope command", "content_type": 47, "codename": "delete_telescopecommand"}}, {"model": "auth.permission", "pk": 188, "fields": {"name": "Can view telescope command", "content_type": 47, "codename": "view_telescopecommand"}}, {"model": "auth.permission", "pk": 189, "fields": {"name": "Can add plc device status", "content_type": 48, "codename": "add_plcdevicestatus"}}, {"model": "auth.permission", "pk": 190, "fields": {"name": "Can change plc device status", "content_type": 48, "codename": "change_plcdevicestatus"}}, {"model": "auth.permission", "pk": 191, "fields": {"name": "Can delete plc device status", "content_type": 48, "codename": "delete_plcdevicestatus"}}, {"model": "auth.permission", "pk": 192, "fields": {"name": "Can view plc device status", "content_type": 48, "codename": "view_plcdevicestatus"}}, {"model": "auth.permission", "pk": 193, "fields": {"name": "Can add filter wheel", "content_type": 49, "codename": "add_filterwheel"}}, {"model": "auth.permission", "pk": 194, "fields": {"name": "Can change filter wheel", "content_type": 49, "codename": "change_filterwheel"}}, {"model": "auth.permission", "pk": 195, "fields": {"name": "Can delete filter wheel", "content_type": 49, "codename": "delete_filterwheel"}}, {"model": "auth.permission", "pk": 196, "fields": {"name": "Can view filter wheel", "content_type": 49, "codename": "view_filterwheel"}}, {"model": "auth.permission", "pk": 197, "fields": {"name": "Can add filter", "content_type": 50, "codename": "add_filter"}}, {"model": "auth.permission", "pk": 198, "fields": {"name": "Can change filter", "content_type": 50, "codename": "change_filter"}}, {"model": "auth.permission", "pk": 199, "fields": {"name": "Can delete filter", "content_type": 50, "codename": "delete_filter"}}, {"model": "auth.permission", "pk": 200, "fields": {"name": "Can view filter", "content_type": 50, "codename": "view_filter"}}, {"model": "contenttypes.contenttype", "pk": 1, "fields": {"app_label": "admin", "model": "logentry"}}, {"model": "contenttypes.contenttype", "pk": 2, "fields": {"app_label": "auth", "model": "permission"}}, {"model": "contenttypes.contenttype", "pk": 3, "fields": {"app_label": "auth", "model": "group"}}, {"model": "contenttypes.contenttype", "pk": 4, "fields": {"app_label": "contenttypes", "model": "contenttype"}}, {"model": "contenttypes.contenttype", "pk": 5, "fields": {"app_label": "sessions", "model": "session"}}, {"model": "contenttypes.contenttype", "pk": 6, "fields": {"app_label": "authtoken", "model": "token"}}, {"model": "contenttypes.contenttype", "pk": 7, "fields": {"app_label": "authtoken", "model": "tokenproxy"}}, {"model": "contenttypes.contenttype", "pk": 8, "fields": {"app_label": "user_mgmt", "model": "pyrosuser"}}, {"model": "contenttypes.contenttype", "pk": 9, "fields": {"app_label": "user_mgmt", "model": "country"}}, {"model": "contenttypes.contenttype", "pk": 10, "fields": {"app_label": "user_mgmt", "model": "institute"}}, {"model": "contenttypes.contenttype", "pk": 11, "fields": {"app_label": "user_mgmt", "model": "period"}}, {"model": "contenttypes.contenttype", "pk": 12, "fields": {"app_label": "user_mgmt", "model": "sciencetheme"}}, {"model": "contenttypes.contenttype", "pk": 13, "fields": {"app_label": "user_mgmt", "model": "scientificprogram"}}, {"model": "contenttypes.contenttype", "pk": 14, "fields": {"app_label": "user_mgmt", "model": "sp_period"}}, {"model": "contenttypes.contenttype", "pk": 15, "fields": {"app_label": "user_mgmt", "model": "userlevel"}}, {"model": "contenttypes.contenttype", "pk": 16, "fields": {"app_label": "user_mgmt", "model": "sp_periodworkflow"}}, {"model": "contenttypes.contenttype", "pk": 17, "fields": {"app_label": "user_mgmt", "model": "sp_period_guest"}}, {"model": "contenttypes.contenttype", "pk": 18, "fields": {"app_label": "user_mgmt", "model": "sp_period_user"}}, {"model": "contenttypes.contenttype", "pk": 19, "fields": {"app_label": "common", "model": "agentcmd"}}, {"model": "contenttypes.contenttype", "pk": 20, "fields": {"app_label": "common", "model": "agentlogs"}}, {"model": "contenttypes.contenttype", "pk": 21, "fields": {"app_label": "common", "model": "agentsurvey"}}, {"model": "contenttypes.contenttype", "pk": 22, "fields": {"app_label": "common", "model": "config"}}, {"model": "contenttypes.contenttype", "pk": 23, "fields": {"app_label": "common", "model": "env_data"}}, {"model": "contenttypes.contenttype", "pk": 24, "fields": {"app_label": "common", "model": "env_data_hist"}}, {"model": "contenttypes.contenttype", "pk": 25, "fields": {"app_label": "common", "model": "log"}}, {"model": "contenttypes.contenttype", "pk": 26, "fields": {"app_label": "common", "model": "majordome"}}, {"model": "contenttypes.contenttype", "pk": 27, "fields": {"app_label": "common", "model": "sensors_data"}}, {"model": "contenttypes.contenttype", "pk": 28, "fields": {"app_label": "common", "model": "sensors_data_last_value"}}, {"model": "contenttypes.contenttype", "pk": 29, "fields": {"app_label": "common", "model": "sitewatch"}}, {"model": "contenttypes.contenttype", "pk": 30, "fields": {"app_label": "common", "model": "sitewatchhistory"}}, {"model": "contenttypes.contenttype", "pk": 31, "fields": {"app_label": "common", "model": "tickets"}}, {"model": "contenttypes.contenttype", "pk": 32, "fields": {"app_label": "common", "model": "version"}}, {"model": "contenttypes.contenttype", "pk": 33, "fields": {"app_label": "common", "model": "weatherwatch"}}, {"model": "contenttypes.contenttype", "pk": 34, "fields": {"app_label": "common", "model": "weatherwatchhistory"}}, {"model": "contenttypes.contenttype", "pk": 35, "fields": {"app_label": "seq_submit", "model": "album"}}, {"model": "contenttypes.contenttype", "pk": 36, "fields": {"app_label": "seq_submit", "model": "image"}}, {"model": "contenttypes.contenttype", "pk": 37, "fields": {"app_label": "seq_submit", "model": "plan"}}, {"model": "contenttypes.contenttype", "pk": 38, "fields": {"app_label": "seq_submit", "model": "schedule"}}, {"model": "contenttypes.contenttype", "pk": 39, "fields": {"app_label": "seq_submit", "model": "schedulehassequences"}}, {"model": "contenttypes.contenttype", "pk": 40, "fields": {"app_label": "seq_submit", "model": "sequence"}}, {"model": "contenttypes.contenttype", "pk": 41, "fields": {"app_label": "devices", "model": "agentdevicestatus"}}, {"model": "contenttypes.contenttype", "pk": 42, "fields": {"app_label": "devices", "model": "agentdevicetelescopestatus"}}, {"model": "contenttypes.contenttype", "pk": 43, "fields": {"app_label": "devices", "model": "detector"}}, {"model": "contenttypes.contenttype", "pk": 44, "fields": {"app_label": "devices", "model": "dome"}}, {"model": "contenttypes.contenttype", "pk": 45, "fields": {"app_label": "devices", "model": "plcdevice"}}, {"model": "contenttypes.contenttype", "pk": 46, "fields": {"app_label": "devices", "model": "telescope"}}, {"model": "contenttypes.contenttype", "pk": 47, "fields": {"app_label": "devices", "model": "telescopecommand"}}, {"model": "contenttypes.contenttype", "pk": 48, "fields": {"app_label": "devices", "model": "plcdevicestatus"}}, {"model": "contenttypes.contenttype", "pk": 49, "fields": {"app_label": "devices", "model": "filterwheel"}}, {"model": "contenttypes.contenttype", "pk": 50, "fields": {"app_label": "devices", "model": "filter"}}, {"model": "user_mgmt.userlevel", "pk": 1, "fields": {"name": "Admin", "desc": "", "priority": 8, "quota": 9999.0}}, {"model": "user_mgmt.userlevel", "pk": 2, "fields": {"name": "Observer", "desc": "", "priority": 2, "quota": 9999.0}}, {"model": "user_mgmt.userlevel", "pk": 3, "fields": {"name": "TAC", "desc": "", "priority": 1, "quota": 9999.0}}, {"model": "user_mgmt.userlevel", "pk": 4, "fields": {"name": "Management board member", "desc": "", "priority": 3, "quota": 9999.0}}, {"model": "user_mgmt.userlevel", "pk": 5, "fields": {"name": "Operator", "desc": "", "priority": 4, "quota": 9999.0}}, {"model": "user_mgmt.userlevel", "pk": 6, "fields": {"name": "Unit-PI", "desc": "", "priority": 7, "quota": 9999.0}}, {"model": "user_mgmt.userlevel", "pk": 7, "fields": {"name": "Unit-board", "desc": "", "priority": 6, "quota": 9999.0}}, {"model": "user_mgmt.userlevel", "pk": 8, "fields": {"name": "Visitor", "desc": "Account without any privilege", "priority": 0, "quota": 0.0}}, {"model": "user_mgmt.country", "pk": 1, "fields": {"name": "France", "desc": "", "quota": null}}, {"model": "user_mgmt.institute", "pk": 1, "fields": {"name": "CNES", "quota": 80}}, {"model": "user_mgmt.institute", "pk": 2, "fields": {"name": "CNRS", "quota": 20}}, {"model": "user_mgmt.sciencetheme", "pk": 1, "fields": {"name": "Solar System"}}, {"model": "user_mgmt.sciencetheme", "pk": 2, "fields": {"name": "Galatic"}}, {"model": "user_mgmt.sciencetheme", "pk": 3, "fields": {"name": "Extra Galatic"}}, {"model": "user_mgmt.pyrosuser", "pk": 1, "fields": {"password": "pbkdf2_sha256$24000$HRial3QUfrlz$bVuEzQaXthOd9GZVXd2449LDEF8EMQure69nA/Hu7qQ=", "last_login": "2016-08-10T15:16:42.327Z", "is_superuser": true, "first_name": "pyros", "last_name": "", "email": "admin@example.com", "is_staff": true, "date_joined": "2016-08-10T15:15:58.481Z", "username": "pyros", "is_active": true, "first_time": false, "country": 1, "desc": "", "created": "2016-08-11T07:54:05.627Z", "updated": "2016-08-11T07:54:05.627Z", "tel": "", "address": "", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": null, "groups": [], "user_permissions": [], "user_level": [1], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 2, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Pascal", "last_name": "Richard", "email": "Pascal.Richard@cnes.fr", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Pascal.Richard@cnes.fr", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "18 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "CNES", "institute": 1, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [2], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 3, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Mรฉgane", "last_name": "Diet", "email": "Megane.Diet@cnes.fr", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Megane.Diet@cnes.fr", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "18 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "CNES", "institute": 1, "is_institute_representative": true, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [2, 4], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 4, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Valentin", "last_name": "Baral", "email": "Valentin.Baral@cnes.fr", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Valentin.Baral@cnes.fr", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "18 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "CNES", "institute": 1, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [2], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 5, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Alain", "last_name": "Klotz", "email": "aklotz@irap.omp.eu", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "aklotz@irap.omp.eu", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": true, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [2, 4, 6], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 6, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Loic", "last_name": "Eymar", "email": "loic.eymar@oca.eu", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "loic.eymar@oca.eu", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "96 Boulevard de l'Observatoire, 06300 Nice", "laboratory": "OCA", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [2, 5], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 7, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": true, "first_name": "Etienne", "last_name": "Pallier", "email": "etienne.pallier@irap.omp.eu", "is_staff": true, "date_joined": "2021-05-20T09:03:37.108Z", "username": "etienne.pallier@irap.omp.eu", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [1], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 8, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": true, "first_name": "Alexis", "last_name": "Koralewski", "email": "akoralewski@irap.omp.eu", "is_staff": true, "date_joined": "2021-05-20T09:03:37.108Z", "username": "akoralewski@irap.omp.eu", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [1], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 9, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Observer", "last_name": "Observer", "email": "observer@example.com", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "observer@example.com", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [2], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 10, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": true, "first_name": "Admin", "last_name": "Admin", "email": "Admin@example.com", "is_staff": true, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Admin@example.com", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [1], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 11, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Operator", "last_name": "Operator", "email": "Operator@example.com", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Operator@example.com", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [5], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 12, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Management", "last_name": "Board", "email": "Management_board@example.com", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Management_board@example.com", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [4], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 13, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": true, "first_name": "Unit", "last_name": "PI", "email": "Unit-PI@example.com", "is_staff": true, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Unit-PI@example.com", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [6], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 14, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "TAC", "last_name": "TAC", "email": "TAC@example.com", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "TAC@example.com", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [3], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 15, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": false, "first_name": "Visitor", "last_name": "Visitor", "email": "Visitor@example.com", "is_staff": false, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Visitor@example.com", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [8], "referee_themes": []}}, {"model": "user_mgmt.pyrosuser", "pk": 16, "fields": {"password": "pbkdf2_sha256$100000$LdWOwxlQqzYU$n5YIpgps3de5U8bAx3sVmhFhwXCHgczKszJG8SuVyjs=", "last_login": null, "is_superuser": true, "first_name": "Unit", "last_name": "Board", "email": "Unit-board@example.com", "is_staff": true, "date_joined": "2021-05-20T09:03:37.108Z", "username": "Unit-board@example.com", "is_active": true, "first_time": false, "country": 1, "desc": null, "created": "2021-05-20T09:03:37.108Z", "updated": "2021-05-20T09:03:37.138Z", "tel": null, "address": "14 Avenue Edouard Belin, 31400 Toulouse", "laboratory": "IRAP", "institute": 2, "is_institute_representative": false, "motive_of_registration": "", "validator": 1, "groups": [], "user_permissions": [], "user_level": [7], "referee_themes": []}}, {"model": "user_mgmt.period", "pk": 1, "fields": {"start_date": "2023-06-20", "exploitation_duration": 182, "submission_duration": 136, "evaluation_duration": 31, "validation_duration": 5, "notification_duration": 10, "property_of_data_duration": 365, "data_accessibility_duration": 3650}}, {"model": "user_mgmt.scientificprogram", "pk": 1, "fields": {"created": null, "updated": null, "name": "debris", "description_short": "", "description_long": "", "institute": 1, "sp_pi": 2, "science_theme": 1, "is_auto_validated": true}}, {"model": "user_mgmt.sp_period", "pk": 1, "fields": {"period": 1, "scientific_program": 1, "public_visibility": "Name", "referee1": null, "vote_referee1": "A: Accepted", "reason_referee1": "", "referee2": null, "vote_referee2": "A: Accepted", "reason_referee2": "", "is_valid": "Accepted", "status": "Accepted", "quota_minimal": 0, "quota_nominal": 0, "quota_allocated": 0, "quota_remaining": 0, "over_quota_duration": 0, "over_quota_duration_allocated": 0, "over_quota_duration_remaining": 0, "token": 0, "token_allocated": 0, "token_remaining": 0, "priority": 0}}, {"model": "user_mgmt.sp_period_user", "pk": 2, "fields": {"SP_Period": 1, "user": 3}}, {"model": "user_mgmt.sp_period_user", "pk": 3, "fields": {"SP_Period": 1, "user": 4}}, {"model": "seq_submit.sequence", "pk": 1, "fields": {"start_expo_pref": "IMMEDIATE", "pyros_user": 2, "scientific_program": 1, "name": "seq_20220218T158246", "desc": null, "created": "2022-02-18T15:07:36.334Z", "updated": "2022-02-21T12:40:50.275Z", "last_modified_by": null, "is_alert": false, "status": "DRAFT", "with_drift": false, "priority": null, "analysis_method": null, "moon_min": null, "alt_min": null, "type": null, "img_current": null, "img_total": null, "not_obs": false, "obsolete": false, "processing": false, "flag": null, "period": 1, "start_date": "2022-02-18T15:07:36Z", "end_date": "2022-02-18T15:07:36.333Z", "jd1": "0E-8", "jd2": "0E-8", "tolerance_before": "1s", "tolerance_after": "1min", "duration": "-1.00000000", "overhead": "0E-8", "submitted": false, "config_attributes": {"layout": "OpticalChannel", "target": "RADEC 0H10M -15D", "conformation": "WIDE", "tolerance_after": "1min", "tolerance_before": "1s"}, "ra": null, "dec": null, "complete": true, "night_id": null}}, {"model": "seq_submit.sequence", "pk": 2, "fields": {"start_expo_pref": "IMMEDIATE", "pyros_user": 2, "scientific_program": 1, "name": "seq_20220218T150731", "desc": null, "created": "2022-02-21T12:43:05.768Z", "updated": "2022-02-21T12:43:06.872Z", "last_modified_by": null, "is_alert": false, "status": "TBP", "with_drift": false, "priority": null, "analysis_method": null, "moon_min": null, "alt_min": null, "type": null, "img_current": null, "img_total": null, "not_obs": false, "obsolete": false, "processing": false, "flag": null, "period": 1, "start_date": "2022-02-21T20:07:36Z", "end_date": "2022-02-21T12:43:05.767Z", "jd1": "0E-8", "jd2": "0E-8", "tolerance_before": "1s", "tolerance_after": "1min", "duration": "-1.00000000", "overhead": "0E-8", "submitted": false, "config_attributes": {"layout": "OpticalChannel", "target": "RADEC 0H10M -15D", "conformation": "WIDE"}, "ra": null, "dec": null, "complete": true, "night_id": null}}, {"model": "seq_submit.sequence", "pk": 3, "fields": {"start_expo_pref": "IMMEDIATE", "pyros_user": 2, "scientific_program": 1, "name": "seq_20220218T150732", "desc": null, "created": "2022-02-21T12:44:28.423Z", "updated": "2022-02-21T12:44:29.556Z", "last_modified_by": null, "is_alert": false, "status": "TBP", "with_drift": false, "priority": null, "analysis_method": null, "moon_min": null, "alt_min": null, "type": null, "img_current": null, "img_total": null, "not_obs": false, "obsolete": false, "processing": false, "flag": null, "period": 1, "start_date": "2022-02-21T20:07:36Z", "end_date": "2022-02-21T12:44:28.422Z", "jd1": "0E-8", "jd2": "0E-8", "tolerance_before": "1s", "tolerance_after": "1min", "duration": "-1.00000000", "overhead": "0E-8", "submitted": false, "config_attributes": {"layout": "OpticalChannel", "target": "RADEC 0H10M -15D", "conformation": "WIDE"}, "ra": null, "dec": null, "complete": true, "night_id": null}}, {"model": "seq_submit.album", "pk": 1, "fields": {"sequence": 1, "name": "OpticalChannel", "desc": "Album with one channel", "created": "2022-02-18T15:07:43.164Z", "updated": "2022-02-21T12:40:50.149Z", "complete": true}}, {"model": "seq_submit.album", "pk": 2, "fields": {"sequence": 2, "name": "OpticalChannel", "desc": null, "created": "2022-02-21T12:43:06.477Z", "updated": "2022-02-21T12:43:06.477Z", "complete": true}}, {"model": "seq_submit.album", "pk": 3, "fields": {"sequence": 3, "name": "OpticalChannel", "desc": null, "created": "2022-02-21T12:44:29.265Z", "updated": "2022-02-21T12:44:29.265Z", "complete": true}}, {"model": "seq_submit.plan", "pk": 1, "fields": {"album": 1, "created": "2022-02-18T15:07:51.078Z", "updated": "2022-02-21T12:40:49.978Z", "duration": 0.0, "nb_images": 1, "config_attributes": {"binnings": {"binxy": [1, 1], "readouttime": 6}, "exposuretime": 1.0}, "complete": true}}, {"model": "seq_submit.plan", "pk": 2, "fields": {"album": 2, "created": "2022-02-21T12:43:06.670Z", "updated": "2022-02-21T12:43:06.794Z", "duration": 0.0, "nb_images": 1, "config_attributes": {"binnings": {"binxy": [1, 1], "readouttime": 6}, "exposuretime": 1.0}, "complete": true}}, {"model": "seq_submit.plan", "pk": 3, "fields": {"album": 3, "created": "2022-02-21T12:44:29.361Z", "updated": "2022-02-21T12:44:29.468Z", "duration": 0.0, "nb_images": 1, "config_attributes": {"binnings": {"binxy": [1, 1], "readouttime": 6}, "exposuretime": 1.0}, "complete": true}}, {"model": "devices.plcdevice", "pk": 1, "fields": {"is_online": false, "status": null, "maintenance_date": null, "name": "Plc", "desc": "", "created": "2018-06-18T14:32:00Z", "updated": "2018-06-18T14:32:00Z"}}, {"model": "devices.detector", "pk": 1, "fields": {"name": "Cagire", "desc": "", "created": "2016-05-13T11:49:49Z", "updated": "2016-05-13T11:49:49Z", "is_online": false, "status": "", "maintenance_date": null, "telescope": 1, "nb_photo_x": null, "nb_photo_y": null, "photo_size_x": null, "photo_size_y": null, "has_shutter": false, "equivalent_foc_len": "", "acq_start": null, "acq_stop": null, "check_temp": null, "gain": null, "readout_noise": null, "readout_time": null, "idcam_readout_mode": null}}, {"model": "devices.detector", "pk": 2, "fields": {"name": "Visible camera", "desc": "", "created": "2016-05-13T11:50:17Z", "updated": "2016-05-13T11:50:17Z", "is_online": false, "status": "", "maintenance_date": null, "telescope": 1, "nb_photo_x": null, "nb_photo_y": null, "photo_size_x": null, "photo_size_y": null, "has_shutter": false, "equivalent_foc_len": "", "acq_start": null, "acq_stop": null, "check_temp": null, "gain": null, "readout_noise": null, "readout_time": null, "idcam_readout_mode": null}}, {"model": "devices.dome", "pk": 1, "fields": {"name": "Dome", "desc": "dome", "created": "2016-05-13T11:50:14Z", "updated": "2016-05-13T11:50:14Z", "is_online": false, "status": "", "maintenance_date": null, "open": false}}, {"model": "devices.filter", "pk": 1, "fields": {"name": "First infrared filter", "desc": "", "created": "2016-05-13T11:49:56Z", "updated": "2016-05-13T11:49:56Z", "is_online": false, "status": "", "maintenance_date": null, "filter_wheel": 2, "category": "", "transmission_curve_doc": ""}}, {"model": "devices.filter", "pk": 2, "fields": {"name": "Second infrared filter", "desc": "", "created": "2016-05-13T11:50:07Z", "updated": "2016-05-13T11:50:07Z", "is_online": false, "status": "", "maintenance_date": null, "filter_wheel": 2, "category": "", "transmission_curve_doc": ""}}, {"model": "devices.filter", "pk": 3, "fields": {"name": "First visible filter", "desc": "", "created": "2016-05-13T11:50:02Z", "updated": "2016-05-13T11:50:02Z", "is_online": false, "status": "", "maintenance_date": null, "filter_wheel": 2, "category": "", "transmission_curve_doc": ""}}, {"model": "devices.filter", "pk": 4, "fields": {"name": "Second visible filter", "desc": "", "created": "2016-05-13T11:50:11Z", "updated": "2016-05-13T11:50:11Z", "is_online": false, "status": "", "maintenance_date": null, "filter_wheel": 2, "category": "", "transmission_curve_doc": ""}}, {"model": "devices.filterwheel", "pk": 1, "fields": {"name": "Cagire FW", "desc": "", "created": "2016-06-28T13:28:28Z", "updated": "2016-06-28T13:28:28Z", "is_online": false, "status": "", "maintenance_date": null, "detector": 1}}, {"model": "devices.filterwheel", "pk": 2, "fields": {"name": "Visible Camera FW", "desc": "", "created": "2016-06-28T13:28:46Z", "updated": "2016-06-28T13:28:46Z", "is_online": false, "status": "", "maintenance_date": null, "detector": 2}}, {"model": "devices.telescope", "pk": 1, "fields": {"name": "Telescope", "desc": "", "created": "2016-05-13T11:50:14Z", "updated": "2016-05-13T11:50:14Z", "is_online": false, "status": "", "maintenance_date": null, "mount_type": "", "diameter": null, "latitude": null, "longitude": null, "sens": "", "altitude": null, "readout_time": null, "slew_time": null, "slew_dead": null, "slew_rate_max": null, "horizon_type": "", "horizon_def": null, "lim_dec_max": null, "lim_dec_min": null, "lim_ha_rise": null, "lim_ha_set": null, "address": "", "night_elev_sun": null, "mpc_code": ""}}]
3 3 \ No newline at end of file
... ...
src/core/pyros_django/misc/fixtures/tests/majordome_test.json
... ... @@ -1,50 +0,0 @@
1   -[
2   -
3   -{
4   - "model": "common.plcdevice",
5   - "pk": 1,
6   - "fields": {
7   - "name": "Plc",
8   - "desc": "",
9   - "created": "2018-06-18 14:32:00",
10   - "updated": "2018-06-18 14:32:00",
11   - "is_online": false,
12   - "maintenance_date": null
13   - }
14   -},
15   -
16   -{
17   - "model": "common.config",
18   - "pk": 1,
19   - "fields": {
20   - "id": 1,
21   - "latitude": 10,
22   - "local_time_zone": 1,
23   - "longitude": 1,
24   - "altitude": 1,
25   - "horizon_line": 1,
26   - "row_data_save_frequency": 400,
27   - "request_frequency": 300,
28   - "analysed_data_save": 300,
29   - "telescope_ip_address": "127.0.0.1",
30   - "camera_ip_address": "127.0.0.1",
31   - "plc_ip_address": "127.0.0.1",
32   - "global_mode": true,
33   - "ack": true,
34   - "bypass": false,
35   - "plc_timeout_seconds": 60
36   - }
37   -},
38   -
39   -{
40   - "model": "common.plcdevicestatus",
41   - "pk": 1,
42   - "fields": {
43   - "id": 1,
44   - "device_id": 1,
45   - "created": "2018-07-18 11:49:49",
46   - "plc_mode": "MANU"
47   - }
48   -}
49   -
50   -]
src/core/pyros_django/misc/fixtures/tests/majordome_test_TZ.json
... ... @@ -1,50 +0,0 @@
1   -[
2   -
3   -{
4   - "model": "common.plcdevice",
5   - "pk": 1,
6   - "fields": {
7   - "name": "Plc",
8   - "desc": "",
9   - "created": "2018-06-18T14:32:00Z",
10   - "updated": "2018-06-18T14:32:00Z",
11   - "is_online": false,
12   - "maintenance_date": null
13   - }
14   -},
15   -
16   -{
17   - "model": "common.config",
18   - "pk": 1,
19   - "fields": {
20   - "id": 1,
21   - "latitude": 10,
22   - "local_time_zone": 1,
23   - "longitude": 1,
24   - "altitude": 1,
25   - "horizon_line": 1,
26   - "row_data_save_frequency": 400,
27   - "request_frequency": 300,
28   - "analysed_data_save": 300,
29   - "telescope_ip_address": "127.0.0.1",
30   - "camera_ip_address": "127.0.0.1",
31   - "plc_ip_address": "127.0.0.1",
32   - "global_mode": true,
33   - "ack": true,
34   - "bypass": false,
35   - "plc_timeout_seconds": 60
36   - }
37   -},
38   -
39   -{
40   - "model": "common.plcdevicestatus",
41   - "pk": 1,
42   - "fields": {
43   - "id": 1,
44   - "device_id": 1,
45   - "created": "2018-07-18T11:49:49Z",
46   - "plc_mode": "MANU"
47   - }
48   -}
49   -
50   -]
src/core/pyros_django/misc/fixtures/tests/sequences_test_TZ.json
... ... @@ -60,33 +60,6 @@
60 60 }
61 61 },
62 62 {
63   - "model": "common.config",
64   - "pk": 1,
65   - "fields": {
66   - "latitude": "1.00",
67   - "local_time_zone": 1.0,
68   - "longitude": "1.00",
69   - "altitude": 1.0,
70   - "horizon_line": 1.0,
71   - "row_data_save_frequency": 300,
72   - "request_frequency": 300,
73   - "analysed_data_save": 300,
74   - "telescope_ip_address": "127.0.0.1",
75   - "camera_ip_address": "127.0.0.1",
76   - "plc_ip_address": "127.0.0.1",
77   - "global_mode": true,
78   - "ack": true,
79   - "bypass": false,
80   - "lock": false,
81   - "pyros_state": "Starting",
82   - "force_passive_mode": false,
83   - "plc_timeout_seconds": 10,
84   - "majordome_state": "",
85   - "ntc": false,
86   - "majordome_restarted": false
87   - }
88   - },
89   - {
90 63 "model": "user_mgmt.country",
91 64 "pk": 1,
92 65 "fields": {
... ...
src/core/pyros_django/obs_config/fixtures/observatory_configuration_ko.yml
... ... @@ -97,7 +97,7 @@ OBSERVATORY:
97 97 is_real: False
98 98  
99 99 - AGENT:
100   - name: AgentMajordome
  100 + name: A_Majordome
101 101 computer: MainComputer
102 102 path: ~
103 103  
... ... @@ -107,7 +107,7 @@ OBSERVATORY:
107 107 path: ~
108 108  
109 109 - AGENT:
110   - name: AgentScheduler
  110 + name: A_Scheduler
111 111 computer: MainComputer
112 112 path: ~
113 113  
... ...
src/core/pyros_django/obs_config/fixtures/observatory_configuration_ok_complex.yml
... ... @@ -100,7 +100,7 @@ OBSERVATORY:
100 100 is_real: False
101 101  
102 102 - AGENT:
103   - name: AgentMajordome
  103 + name: A_Majordome
104 104 computer: MainComputer
105 105 path: ~
106 106  
... ... @@ -110,7 +110,7 @@ OBSERVATORY:
110 110 path: ~
111 111  
112 112 - AGENT:
113   - name: AgentScheduler
  113 + name: A_Scheduler
114 114 computer: MainComputer
115 115 path: ~
116 116  
... ...
src/core/pyros_django/obs_config/fixtures/observatory_configuration_ok_simple.yml
... ... @@ -97,7 +97,7 @@ OBSERVATORY:
97 97 is_real: False
98 98  
99 99 - AGENT:
100   - name: AgentMajordome
  100 + name: A_Majordome
101 101 computer: MainComputer
102 102 path: ~
103 103  
... ... @@ -107,7 +107,7 @@ OBSERVATORY:
107 107 path: ~
108 108  
109 109 - AGENT:
110   - name: AgentScheduler
  110 + name: A_Scheduler
111 111 computer: MainComputer
112 112 path: ~
113 113  
... ...
src/core/pyros_django/pyros/urls.py
... ... @@ -39,7 +39,7 @@ urlpatterns = [
39 39 path('devices/', include('devices.urls')),
40 40 path('scheduling/', include('scheduling.urls')),
41 41 path('alert_mgmt/', include('alert_mgmt.urls')),
42   - path('analyzer/', include('analyzer.urls')),
  42 + # path('analyzer/', include('analyzer.urls')),
43 43 path('majordome/', include('majordome.urls')),
44 44 path('env_monitor/', include('env_monitor.urls')),
45 45 path('observation_manager/', include('observation_manager.urls')),
... ...
src/core/pyros_django/scheduling/Scheduler.py deleted
... ... @@ -1,387 +0,0 @@
1   -from operator import attrgetter
2   -
3   -from scheduling.templatetags.jdconverter import jdtodate
4   -from .UserManager import UserQuotaManager
5   -from .Interval import *
6   -from django.db.models import Q
7   -
8   -from seq_submit.models import Sequence, Schedule
9   -
10   -SIMULATION = False
11   -DEBUG_FILE = False
12   -
13   -class Scheduler(IntervalManagement):
14   - REJECTED_ROOM = "Insufficient room for this sequence"
15   -
16   - def __init__(self):
17   - super().__init__("Scheduler", "Scheduler")
18   - self.schedule = Schedule.objects.create()
19   - self.sequences = []
20   -
21   - def log(self, message: str):
22   - self.logger.info(message)
23   -
24   - def getNightLimits(self) -> tuple:
25   - start = getNightStart()
26   - end = getNightEnd()
27   - return (start, end)
28   -
29   - def setNightLimits(self, plan_start: float, plan_end: float) -> int:
30   - self.schedule.plan_start = Decimal(plan_start)
31   - self.schedule.plan_end = Decimal(plan_end)
32   - return 0
33   -
34   - #TODO:
35   - def isFirstSchedule(self) -> bool:
36   - return False
37   -
38   - def determinePlanStart(self, previous_sched):
39   - start = secondsToPreciseJulianDate(getPreciseCurrentTime())
40   - if start > previous_sched.plan_start + self.max_overhead:
41   - return start + self.max_overhead
42   - return previous_sched.plan_start
43   -
44   - '''
45   - Copy information from current night previous schedule
46   - '''
47   - def copyFromPrevious(self) -> int:
48   - if len(Schedule.objects.all()) == 1:
49   - print("only 1 schedule available")
50   - self.schedule.plan_night_start = self.schedule.plan_start
51   - if DEBUG_FILE:
52   - self.log("No schedule found")
53   - return 1
54   - try:
55   - previous_sched = Schedule.objects.order_by('-created')[1]
56   - previous_exc_seq = previous_sched.sequences.filter(Q(status=Sequence.EXECUTED) |
57   - Q(status=Sequence.EXECUTING))
58   - except:
59   - self.schedule.plan_night_start = self.schedule.plan_start
60   - if DEBUG_FILE:
61   - self.debug("Scheduler could not get information from previous schedule")
62   - return 1
63   - for seq in previous_exc_seq:
64   - shs = seq.shs.latest("schedule__created")
65   - shs.pk = None
66   - shs.schedule = self.schedule
67   - shs.save()
68   - adder = 0
69   - try:
70   - executing = Sequence.objects.filter(status=Sequence.EXECUTING).get()
71   - if executing:
72   - s = executing.shs.latest("schedule__created")
73   - adder = s.tep - secondsToPreciseJulianDate(getPreciseCurrentTime())
74   - except Exception as e:
75   - self.log("No executing sequence found " + str(e))
76   - self.schedule.plan_night_start = previous_sched.plan_night_start
77   - self.schedule.plan_end = previous_sched.plan_end
78   - self.schedule.plan_start = self.determinePlanStart(previous_sched) + adder
79   - return 0
80   -
81   - '''
82   - used for tests (entry point)
83   - '''
84   - def simulateSchedule(self, sequences) -> tuple:
85   - global SIMULATION
86   - SIMULATION = True
87   -
88   - self.schedule.plan_night_start = self.schedule.plan_start
89   - self.sequences = list(sequences)
90   - shs_list = []
91   - for sequence in self.sequences:
92   - shs_list.append(ScheduleHasSequences(sequence=sequence, schedule=self.schedule))
93   - self.sequences = [(sequence, shs_list[index]) for index, sequence in enumerate(self.sequences)]
94   - self.computeSchedule()
95   - return (self.schedule, self.sequences)
96   -
97   - def computeSchedule(self) -> int:
98   - #print("In computeSchedule")
99   - interval = Interval(self.schedule.plan_start, self.schedule.plan_end)
100   - self.intervals.append(interval)
101   - if DEBUG_FILE:
102   - self.log("Interval created : " + str(interval.__dict__))
103   - self.removeInvalidSequences()
104   - self.determinePriorities()
105   - print("Sequences bef removeNonEligible are:", len(self.sequences))
106   - # EP le pb est ici !!!
107   - #TODO: bugfix time computation EP a virer (remettre)
108   - self.removeNonEligible()
109   - print("Sequences aft removeNonEligible are:", len(self.sequences))
110   - self.sortSequences()
111   - self.placeSequences()
112   - return 0
113   -
114   - '''
115   - Default entry point (called from scheduler/tasks.py/scheduling/run())
116   - '''
117   - def makeSchedule(self) -> Schedule:
118   - print("In makeSchedule()")
119   - global SIMULATION
120   - # WHY ???
121   - SIMULATION = False
122   -
123   - if self.isFirstSchedule():
124   - #print("It is the first schedule")
125   - self.schedule.plan_night_start = self.schedule.plan_start
126   - else:
127   - #print("It is not the first schedule")
128   - self.copyFromPrevious() #TODO trycatch a faire
129   - self.schedule.plan_night_start = self.schedule.plan_start
130   - print("night start is", self.schedule.plan_night_start)
131   -
132   - #EP: avirer (add 2 hours)
133   - #self.schedule.plan_night_start += float( (1/24)*2 )
134   - #self.schedule.plan_start += float( (1/24)*2 )
135   -
136   - # Get all sequences which are PLANNED, TOBEPLANNED, or PENDING
137   - self.sequences = list(Sequence.objects.filter(Q(status=Sequence.PLANNED) | Q(status=Sequence.TOBEPLANNED)
138   - | Q(status=Sequence.PENDING)))
139   - print("**** nb of sequences already available for scheduling", len(self.sequences))
140   -
141   - # List of tuples (sequence, ScheduleHasSequences) for each sequence above and for current schedule
142   - self.sequences = [
143   - (
144   - sequence,
145   - ScheduleHasSequences(sequence=sequence, schedule=self.schedule)
146   - )
147   - for sequence in self.sequences
148   - ]
149   - print("Sequences BEFORE are:", len(self.sequences))
150   - if DEBUG_FILE:
151   - self.log(str(len(self.sequences)) + " sequences found")
152   - self.computeSchedule()
153   - print("Sequences AFTER are:", len(self.sequences))
154   - self.saveSchedule()
155   - if DEBUG_FILE:
156   - self.log("Saving schedule with " + str(len(self.schedule.sequences.all())) + " sequences")
157   - return self.schedule
158   -
159   - def saveSchedule(self) -> int:
160   - self.schedule.save()
161   - for sequence, shs in self.sequences:
162   - sequence.status = Sequence.PLANNED
163   - shs.schedule = self.schedule
164   - sequence.save()
165   - shs.save()
166   - if DEBUG_FILE:
167   - self.logSchedule()
168   - return 0
169   -
170   -
171   - '''
172   - JB: Using : list(self.sequences) makes a copy.
173   - '''
174   - def removeNonEligible(self) -> int:
175   - for sequence, shs in list(self.sequences):
176   - overlap = Decimal(min(self.schedule.plan_end, sequence.jd2)) - Decimal(max(self.schedule.plan_start, sequence.jd1)) - self.max_overhead
177   - print()
178   - print("- sequence: ", sequence)
179   - print("plan start - plan end:", jdtodate(self.schedule.plan_start), "-", jdtodate(self.schedule.plan_end))
180   - print("jd1-jd2:", jdtodate(sequence.jd1), "-", jdtodate(sequence.jd2))
181   - print("overlap < duration ?:", overlap, sequence.duration)
182   - #print("- sequence: ", sequence, "plan start, end, jd1, jd2, overlap", self.schedule.plan_start, self.schedule.plan_end, sequence.jd1, sequence.jd2, overlap)
183   - #print("- sequence: ", sequence, "plan start", jdtodate(self.schedule.plan_start))
184   - print()
185   - if overlap < sequence.duration:
186   - if sequence.jd1 < self.schedule.plan_start:
187   - sequence.status = Sequence.UNPLANNABLE
188   - if not SIMULATION:
189   - sequence.save()
190   - self.sequences.remove((sequence, shs))
191   - if DEBUG_FILE:
192   - self.log("Removing non eligible sequence")
193   - return 0
194   -
195   - def removeInvalidSequences(self):
196   - for sequence,shs in list(self.sequences):
197   - if (sequence.jd1 < 0 or sequence.jd2 < 0 or
198   - is_nearby_less_or_equal(sequence.duration, Decimal(0)) or
199   - sequence.jd2 - sequence.jd1 < sequence.duration):
200   - if DEBUG_FILE:
201   - self.log("Removing sequence in removeInvalidSequences")
202   - self.sequences.remove((sequence, shs))
203   - sequence.status = Sequence.INVALID
204   - if not SIMULATION:
205   - sequence.save()
206   - return 0
207   -
208   - def updateOtherDeltas(self, sequence: Sequence, shs: ScheduleHasSequences, interval: Interval) -> int:
209   - seq_before, shs_b_i = self.findSequenceBefore(interval)
210   - seq_after, shs_a_i = self.findSequenceAfter(interval)
211   -
212   - if seq_before and shs_b_i:
213   - shs_b_i.deltaTR = min(shs.tsp - self.max_overhead, seq_before.jd2) - shs_b_i.tep
214   - if seq_after and shs_a_i:
215   - shs_a_i.deltaTL = shs_a_i.tsp - self.max_overhead - max(shs.tep, seq_after.jd1)
216   - return 0
217   -
218   - '''
219   - Function who place all the sequences in intervals
220   - '''
221   - def placeSequences(self) -> int:
222   - #print("In placeSequences()")
223   - #print("sequences are", self.sequences)
224   - for sequence, shs in list(self.sequences):
225   - #print("placeSequences() sequence is", sequence)
226   - quota = UserQuotaManager.determineQuota(sequence)
227   - #print("quota is", quota)
228   - if not UserQuotaManager.isSufficient(quota, sequence):
229   - shs.status = Sequence.REJECTED
230   - shs.desc = UserQuotaManager.REJECTED
231   - continue
232   - matching_intervals = self.getMatchingIntervals(sequence)
233   - if len(matching_intervals) > 0:
234   - inter = self.placeSequence(sequence, shs, matching_intervals)
235   - if inter:
236   - self.updateOtherDeltas(sequence, shs, inter)
237   - sequence_placed = True
238   - else:
239   - sequence_placed = self.tryShiftingSequences(sequence, shs)
240   - if sequence_placed:
241   - shs.status = Sequence.PLANNED
242   - self.decreaseQuota(sequence, sequence.duration)
243   - else:
244   - if DEBUG_FILE:
245   - self.log("Removing sequence in place_sequences")
246   - shs.status = Sequence.REJECTED
247   - shs.desc = self.REJECTED_ROOM
248   - return 0
249   -
250   - def findSequenceBefore(self, interval: Interval):
251   - for seq, s in self.sequences:
252   - if s.status == Sequence.PLANNED:
253   - if is_nearby_equal(s.tep, interval.start):
254   - return (seq, s)
255   - return (None, None)
256   -
257   - def findSequenceAfter(self, interval: Interval):
258   - for seq, s in self.sequences:
259   - if s.status == Sequence.PLANNED:
260   - if is_nearby_equal(s.tsp - self.max_overhead, interval.end):
261   - return (seq, s)
262   - return (None, None)
263   -
264   - '''
265   - pm(l/r) = Possible Move (Left / Right)
266   - shs_(b/a)_i = shs (before/after) interval
267   - '''
268   - def tryShiftingSequences(self, sequence: Sequence, shs: ScheduleHasSequences) -> bool:
269   - potential = self.getPotentialIntervals(sequence)
270   - potential.sort(key=attrgetter("duration"), reverse=True) #sort the list by decreasing duration
271   - pml = Decimal(0)
272   - pmr = Decimal(0)
273   -
274   - for interval in potential:
275   - seq_before, shs_b_i = self.findSequenceBefore(interval)
276   - seq_after, shs_a_i = self.findSequenceAfter(interval)
277   -
278   - available = min(interval.end, sequence.jd2) - max(interval.start, sequence.jd1)
279   - missing = sequence.duration - available + self.max_overhead
280   - if seq_before and shs_b_i:
281   - pml = min(shs_b_i.deltaTL, interval.start - sequence.jd1)
282   - if seq_after and shs_a_i:
283   - pmr = min(shs_a_i.deltaTR, sequence.jd2 - interval.end)
284   -
285   - if is_nearby_sup_or_equal(pml, missing):
286   - self.moveSequence(seq_before, shs_b_i, missing, "LEFT")
287   - elif is_nearby_sup_or_equal(pmr, missing):
288   - self.moveSequence(seq_after, shs_a_i, missing, "RIGHT")
289   - elif is_nearby_sup_or_equal(pml + pmr, missing):
290   - self.moveSequence(seq_before, shs_b_i, pml, "LEFT")
291   - self.moveSequence(seq_after, shs_a_i, missing - pml, "RIGHT")
292   - else:
293   - continue
294   - matching = self.getMatchingIntervals(sequence)
295   - if len(matching) != 1:
296   - raise ValueError("There should be one and only one matching interval after shifting")
297   - inter = self.placeSequence(sequence, shs, matching)
298   - if inter:
299   - self.updateOtherDeltas(sequence, shs, inter)
300   - return True
301   - return False
302   -
303   - '''
304   - Move the sequence tsp (time start planned) and tep (time end planned) left or right
305   - '''
306   - def moveSequence(self, sequence: Sequence, shs: ScheduleHasSequences, time_shift: Decimal, direction: str) -> int:
307   - interval_before = None
308   - interval_after = None
309   -
310   - if direction not in ["LEFT", "RIGHT"]:
311   - return 1
312   - if time_shift > (shs.deltaTL if direction == "LEFT" else shs.deltaTR):
313   - return 1
314   - for interval in self.intervals:
315   - if is_nearby_equal(interval.end, shs.tsp - self.max_overhead):
316   - interval_before = interval
317   - elif is_nearby_equal(interval.start, shs.tep):
318   - interval_after = interval
319   - if direction == "LEFT":
320   - interval_before.end -= time_shift
321   - if interval_after:
322   - interval_after.start -= time_shift
323   - shs.tsp -= time_shift
324   - shs.tep -= time_shift
325   - shs.deltaTL -= time_shift
326   - shs.deltaTR += time_shift
327   - else:
328   - if interval_before:
329   - interval_before.end += time_shift
330   - interval_after.start += time_shift
331   - shs.tsp += time_shift
332   - shs.tep += time_shift
333   - shs.deltaTL += time_shift
334   - shs.deltaTR -= time_shift
335   - if interval_after:
336   - if is_nearby_less_or_equal(interval_after.duration, self.max_overhead):
337   - self.intervals.remove(interval_after)
338   - if interval_before:
339   - if is_nearby_less_or_equal(interval_before.duration, self.max_overhead):
340   - self.intervals.remove(interval_before)
341   - return 0
342   -
343   - '''
344   - Sort by jd2 and priority -> (main sorting value)
345   - '''
346   - def sortSequences(self) -> int:
347   - self.sequences.sort(key=lambda x: x[0].jd2)
348   - self.sequences.sort(key=lambda x: x[0].priority if x[0].priority else 0)
349   - return 0
350   -
351   - def determinePriorities(self) -> int: #TODO
352   - return 0
353   -
354   - def decreaseQuota(self, sequence: Sequence, quota: float) -> int:
355   - user = UserQuotaManager(sequence.request.pyros_user)
356   - if SIMULATION:
357   - return 0
358   - return user.decreaseQuota(Decimal(quota))
359   -
360   - def isEmptySchedule(self) -> bool:
361   - if len(self.sequences) == 0:
362   - return True
363   - return False
364   -
365   - '''
366   - DEBUG FUNCTIONS
367   - '''
368   - def logSequence(self, sequence):
369   - self.log("Logging sequence : ")
370   - s = sequence.shs.latest("schedule__created")
371   - if s.schedule == self.schedule:
372   - self.log("--> name: %r, start: %f, end: %f, duration: %f, deltaTL: %f, deltaTR: %f"
373   - % (sequence.name, s.tsp, s.tep, sequence.duration, s.deltaTL, s.deltaTR))
374   - self.log("------ end ------")
375   - return 0
376   -
377   - def logSchedule(self) -> int:
378   - sequences = Sequence.objects.filter(shs__status=Sequence.PLANNED).order_by('shs__tsp').distinct()
379   - self.log("There are %d sequence(s) planned" % len(sequences))
380   - for sequence in sequences:
381   - s = sequence.shs.latest("schedule__created")
382   - self.log("--> Pk: %d name: %r, shs PK: %d, start: %f, end: %f, duration: %f, deltaTL: %f, deltaTR: %f"
383   - % (sequence.pk, sequence.name, s.pk, s.tsp, s.tep, sequence.duration, s.deltaTL, s.deltaTR))
384   - self.log("There are %d free intervals" % len(self.intervals))
385   - for interval in self.intervals:
386   - self.log("--> start: %f, end: %f" % (interval.start, interval.end))
387   - return 0
src/core/pyros_django/scheduling/UserManager.py deleted
... ... @@ -1,36 +0,0 @@
1   -from common.models import *
2   -from seq_submit.models import Sequence
3   -
4   -from utils.Logger import *
5   -from decimal import *
6   -
7   -class UserQuotaManager(Logger):
8   - REJECTED = "Insufficient quota"
9   -
10   - def __init__(self, user: PyrosUser):
11   - super().__init__("UserManager", "UserManager")
12   - self.user = user
13   -
14   - @classmethod
15   - def determineQuota(cls, sequence: Sequence) -> float:
16   - #TODO : change return value (quota isn't associated with PyrosUser)
17   - return 100
18   - return sequence.request.pyros_user.quota
19   -
20   - @classmethod
21   - def isSufficient(cls, quota: float, sequence: Sequence) -> bool:
22   - #print("seq is", sequence.duration)
23   - #print("quota is", quota)
24   - if quota < sequence.duration:
25   - return False
26   - return True
27   -
28   - @classmethod
29   - def determinePriority(cls, sequence: Sequence) -> float:
30   - return 0
31   -
32   - def decreaseQuota(self, value: Decimal) -> int:
33   - #TODO : update this method according to new models
34   - #self.user.quota -= float(value)
35   - #self.user.save()
36   - return 0
src/core/pyros_django/scheduling/simulator.py deleted
... ... @@ -1,141 +0,0 @@
1   -from scheduling.Scheduler import Scheduler
2   -from common.models import *
3   -import urllib.request as urllib2
4   -from html.parser import HTMLParser
5   -import math
6   -from decimal import Decimal
7   -import time
8   -
9   -
10   -class MyHTMLParser(HTMLParser):
11   - '''
12   - Subclassing HTMLParser to access the data properly
13   - '''
14   -
15   - def __init__(self):
16   - HTMLParser.__init__(self)
17   - self.data = []
18   -
19   - def handle_data(self, data):
20   - self.data.append(data)
21   -
22   - def handle_comment(self, data):
23   - pass
24   -
25   -
26   -class Simulator():
27   - '''
28   - Simulates the creation of a planning thanks to an HTML file
29   - '''
30   -
31   - def __init__(self):
32   - pass
33   -
34   - def simulate(self, sequences_file):
35   - '''
36   - ENTRY POINT
37   -
38   - Parse the file with sequences, then call the Scheduler simulation function and give the result to the view
39   -
40   - :param sequences_file : HTML file containing sequences description
41   - :returns : a tuple (Schedule, list of sequences) after the scheduling process
42   - '''
43   -
44   - file = urllib2.urlopen(sequences_file)
45   - data = str(file.read())
46   - parser = MyHTMLParser()
47   - parser.feed(data)
48   -
49   - """filter unwanted \n and other data"""
50   - filtered_list = list(map(lambda s: s.strip(), parser.data))
51   - page_text = "".join(filtered_list[11:])
52   -
53   - raw_sequences = page_text.split("\\n")
54   - del raw_sequences[0]
55   - del raw_sequences[len(raw_sequences) - 1]
56   - raw_sequences = [
57   - sequence for sequence in raw_sequences if len(sequence) > 10]
58   -
59   - """Create the default models linked to the sequences"""
60   - sp = ScientificProgram()
61   - country = Country()
62   - # (AKo) : usr_lvl isn't really needed for this simulator, as we're using the real db, we cannot associate a "dummy" user to a real user_level
63   - #usr_lvl = UserLevel()
64   - institute = Institute.objects.create(name="test",quota=50.0)
65   - py_usr = PyrosUser(username="toto", country=country,institute=institute)
66   - req = Request(scientific_program=sp, pyros_user=py_usr)
67   -
68   - scheduler = Scheduler()
69   -
70   - """Create the sequences"""
71   - sequences = []
72   - for raw_sequence in raw_sequences:
73   - sequence_array = raw_sequence.split(" ")
74   - id_seq = sequence_array[0]
75   - priority = int(sequence_array[2])
76   - ''' transforms the duration (seconds) in days (86,400s in a day)'''
77   - duration = Decimal(float(sequence_array[4]) / 86400.0)
78   - jd1 = Decimal("%.8f" % float(sequence_array[5]))
79   - jd2 = Decimal("%.8f" % float(sequence_array[6]))
80   -
81   - sequence = Sequence(request=req, status=Sequence.PLANNED,
82   - name="sequence", id=id_seq, priority=priority, duration=duration, jd1=jd1, jd2=jd2, t_prefered=-1)
83   - sequences.append(sequence)
84   -
85   - # 1) trouver le nombre qu'on retrouve le plus souvent en troncature de
86   - # jd1 (faire un dico)
87   - days = {}
88   - for sequence in sequences:
89   - truncated = math.floor(float(sequence.jd1))
90   - if truncated in days.keys():
91   - days[truncated] += 1
92   - else:
93   - days[truncated] = 1
94   - maximum_truncated = max(days.keys(), key=(lambda key: days[key]))
95   -
96   - # 2) virer toutes les sรฉquences qui n'ont pas ce jd1 en troncature
97   - sequences = [sequence for sequence in sequences if math.floor(
98   - float(sequence.jd1)) == maximum_truncated]
99   -
100   - # 3) set le plan_start et le plan_end en fonction du plus petit jd1 et
101   - # du plus grand jd2
102   - scheduler.schedule.plan_start = -1
103   - scheduler.schedule.plan_end = -1
104   - for sequence in sequences:
105   - if scheduler.schedule.plan_start == -1 or sequence.jd1 < scheduler.schedule.plan_start:
106   - scheduler.schedule.plan_start = sequence.jd1
107   - if scheduler.schedule.plan_end == -1 or sequence.jd2 > scheduler.schedule.plan_end:
108   - scheduler.schedule.plan_end = sequence.jd2
109   -
110   - start = time.time()
111   -
112   - schedule, sequences = scheduler.simulateSchedule(sequences)
113   -
114   - end = time.time()
115   -
116   - print("Duration : ", end - start)
117   -
118   - self.test_sequences_validity(schedule, sequences)
119   -
120   - return (schedule, sequences)
121   -
122   - def test_sequences_validity(self, schedule, sequences):
123   - '''
124   - For PLANNED sequences, tests if :
125   - - all the sequences are in the schedule
126   - - there is no overlap between sequences
127   - - [tsp - tep] is in [jd1 - jd2]
128   - - tep < tsp
129   - '''
130   - sequences.sort(key=lambda x: x[1].tsp)
131   -
132   - for index, (sequence, shs) in enumerate(sequences):
133   - if shs.status == Sequence.PENDING:
134   - if shs.tsp > shs.tep:
135   - raise ValueError("tep < tsp ...")
136   - if shs.tsp < schedule.plan_start or schedule.plan_end < shs.tep:
137   - raise ValueError("[tsp;tep] not in [plan_start;plan_end]")
138   - if shs.tsp < sequence.jd1 or sequence.jd2 < shs.tep:
139   - raise ValueError("[tsp;tep] not in [jd1;jd2]")
140   - if index > 0 and shs.tsp < sequences[index - 1][1].tep:
141   - raise ValueError("There is a sequence overlap")
src/core/pyros_django/scheduling/tasks.py deleted
... ... @@ -1,25 +0,0 @@
1   -from __future__ import absolute_import
2   -from scheduling.Scheduler import Scheduler
3   -from common.models import *
4   -from utils.JDManipulator import *
5   -from utils.Logger import setupLogger
6   -
7   -log = setupLogger("TaskSched", "TaskSched")
8   -
9   -#class scheduling(Task):
10   -class scheduling():
11   -
12   - #TODO Remove first parameter (useless) -> maybe both ?
13   - def run(self, first_schedule=False, alert=False):
14   - print("In scheduling.run()")
15   - # AttributeError: 'scheduling' object has no attribute 'request'
16   - ##task = TaskId.objects.create(task_id=self.request.id, task="scheduling")
17   - Log.objects.create(agent='Scheduler', message='Start schedule : ' + str(datetime.datetime.now()))
18   - # This creates a Scheduler (in memory) which creates a Schedule (in DB)
19   - self.scheduler = Scheduler()
20   - self.scheduler.setNightLimits(secondsToJulianDate(getNightStart()), secondsToJulianDate(getNightEnd()))
21   - print("****sched-task: NEW SCHEDULE", self.scheduler.schedule, "*****")
22   - self.scheduler.makeSchedule()
23   - print("****sched-task: NEW SCHEDULE", self.scheduler.schedule, "*****")
24   - Log.objects.create(agent='Scheduler', message='Scheduling finished : ' + str(datetime.datetime.now()))
25   - ##task.delete()
26 0 \ No newline at end of file
src/core/pyros_django/scheduling/urls.py
... ... @@ -5,7 +5,7 @@ from django.conf import settings
5 5 from django.conf.urls.static import static
6 6  
7 7 urlpatterns = [
8   - path('', views.current_schedule, name="current_schedule"),
9   - path('retrieve_schedule', views.retrieve_schedule, name="retrieve_schedule"),
10   - path('simulation', views.schedule_simulation, name="schedule_simulation"),
  8 + # path('', views.current_schedule, name="current_schedule"),
  9 + # path('retrieve_schedule', views.retrieve_schedule, name="retrieve_schedule"),
  10 + # path('simulation', views.schedule_simulation, name="schedule_simulation"),
11 11 ]
12 12 \ No newline at end of file
... ...
src/core/pyros_django/scheduling/views.py
1   -from django.shortcuts import render
2   -#from common.models import Sequence, Schedule
3   -from seq_submit.models import Sequence, Schedule
4   -
5   -from django.contrib.auth.decorators import login_required
6   -from scheduling.simulator import Simulator
7   -from operator import attrgetter
8   -
9   -SIMULATION_FILE = 'file:./scheduling/sequences_cador.html'
10   -
11   -def retrieve_schedule(request):
12   - if (len(Schedule.objects.all()) > 0): # checking if the schedule is empty
13   - schedule = Schedule.objects.order_by("-created")[0] # Sorting Schedule
14   - shs_list = schedule.shs.order_by("tsp") # getting all the schedule has sequences references
15   - sequences = [(shs.sequence, shs) for shs in shs_list] # getting all sequences
16   -
17   - nb_scheduled_sequences = len(shs_list)
18   - executed_sequences = len([shs for shs in shs_list if shs.status == Sequence.EXECUTED])
19   - else: # if empty set everything to 0 / None (variables are checked in src/templates/scheduler/current_schedule.html)
20   - schedule = None
21   - sequences = None
22   - shs_list = None
23   - nb_scheduled_sequences = 0
24   - executed_sequences = 0
25   - if request.user.is_authenticated:
26   - return render(request, 'scheduling/retrieve_schedule.html', {'sequences' : sequences, 'schedule' : schedule, 'nb_scheduled_sequences' : nb_scheduled_sequences, 'executed_sequences' : executed_sequences, 'base_template' : "base.html"})
27   - return render(request, 'scheduling/retrieve_schedule.html', {'sequences' : sequences, 'schedule' : schedule, 'nb_scheduled_sequences' : nb_scheduled_sequences, 'executed_sequences' : executed_sequences, 'base_template' : "base.html"})
28   -
29   -
30   -def current_schedule(request):
31   - if request.user.is_authenticated:
32   - return render(request, 'scheduling/current_schedule.html', {'base_template' : "base.html"})
33   - return render(request, 'scheduling/current_schedule.html', {'base_template' : "base.html"})
34   -
35   -def schedule_simulation(request):
36   - simulator = Simulator()
37   - schedule, sequences = simulator.simulate(SIMULATION_FILE)
38   -
39   - nb_scheduled_sequences = len([sequence for sequence in sequences if sequence[1].status != Sequence.PLANNED])
40   - executed_sequences = len([sequence for sequence in sequences if sequence[1].status == Sequence.EXECUTED])
41   -
42   -
43   - sequences.sort(key=lambda seq: seq[1].tsp)
44   - if request.user.is_authenticated:
45   - return render(request, 'scheduling/current_schedule.html', {'sequences' : sequences, 'schedule' : schedule, 'nb_scheduled_sequences' : nb_scheduled_sequences, 'executed_sequences' : executed_sequences, 'base_template' : "base.html"})
46   - return render(request, 'scheduling/current_schedule.html', {'sequences' : sequences, 'schedule' : schedule, 'nb_scheduled_sequences' : nb_scheduled_sequences, 'executed_sequences' : executed_sequences, 'base_template' : "base.html"})
  1 +# from django.shortcuts import render
  2 +# #from common.models import Sequence, Schedule
  3 +# from seq_submit.models import Sequence, Schedule
  4 +
  5 +# from django.contrib.auth.decorators import login_required
  6 +# from scheduling.simulator import Simulator
  7 +# from operator import attrgetter
  8 +
  9 +# SIMULATION_FILE = 'file:./scheduling/sequences_cador.html'
  10 +
  11 +# def retrieve_schedule(request):
  12 +# if (len(Schedule.objects.all()) > 0): # checking if the schedule is empty
  13 +# schedule = Schedule.objects.order_by("-created")[0] # Sorting Schedule
  14 +# shs_list = schedule.shs.order_by("tsp") # getting all the schedule has sequences references
  15 +# sequences = [(shs.sequence, shs) for shs in shs_list] # getting all sequences
  16 +
  17 +# nb_scheduled_sequences = len(shs_list)
  18 +# executed_sequences = len([shs for shs in shs_list if shs.status == Sequence.EXECUTED])
  19 +# else: # if empty set everything to 0 / None (variables are checked in src/templates/scheduler/current_schedule.html)
  20 +# schedule = None
  21 +# sequences = None
  22 +# shs_list = None
  23 +# nb_scheduled_sequences = 0
  24 +# executed_sequences = 0
  25 +# if request.user.is_authenticated:
  26 +# return render(request, 'scheduling/retrieve_schedule.html', {'sequences' : sequences, 'schedule' : schedule, 'nb_scheduled_sequences' : nb_scheduled_sequences, 'executed_sequences' : executed_sequences, 'base_template' : "base.html"})
  27 +# return render(request, 'scheduling/retrieve_schedule.html', {'sequences' : sequences, 'schedule' : schedule, 'nb_scheduled_sequences' : nb_scheduled_sequences, 'executed_sequences' : executed_sequences, 'base_template' : "base.html"})
  28 +
  29 +
  30 +# def current_schedule(request):
  31 +# if request.user.is_authenticated:
  32 +# return render(request, 'scheduling/current_schedule.html', {'base_template' : "base.html"})
  33 +# return render(request, 'scheduling/current_schedule.html', {'base_template' : "base.html"})
  34 +
  35 +# def schedule_simulation(request):
  36 +# simulator = Simulator()
  37 +# schedule, sequences = simulator.simulate(SIMULATION_FILE)
  38 +
  39 +# nb_scheduled_sequences = len([sequence for sequence in sequences if sequence[1].status != Sequence.PLANNED])
  40 +# executed_sequences = len([sequence for sequence in sequences if sequence[1].status == Sequence.EXECUTED])
  41 +
  42 +
  43 +# sequences.sort(key=lambda seq: seq[1].tsp)
  44 +# if request.user.is_authenticated:
  45 +# return render(request, 'scheduling/current_schedule.html', {'sequences' : sequences, 'schedule' : schedule, 'nb_scheduled_sequences' : nb_scheduled_sequences, 'executed_sequences' : executed_sequences, 'base_template' : "base.html"})
  46 +# return render(request, 'scheduling/current_schedule.html', {'sequences' : sequences, 'schedule' : schedule, 'nb_scheduled_sequences' : nb_scheduled_sequences, 'executed_sequences' : executed_sequences, 'base_template' : "base.html"})
... ...
src/core/pyros_django/seq_submit/tests.py
... ... @@ -72,8 +72,14 @@ class SequencesTests(TestCase):
72 72  
73 73 def setUp(self) -> None:
74 74 password = "password123"
  75 + # Make sure period never exists 3 digits, we'll use only ids 1, 2 and 3 for tests
  76 + # Delete old period created by running previous tests
  77 + try:
  78 + Period.objects.filter(id__gte=2).delete()
  79 + except:
  80 + pass
75 81 # create a new period for the tests that will be the explotation period
76   - self.period1 = Period.objects.create()
  82 + self.period1 = Period.objects.create(id=2)
77 83 # replace for sp_period and sequence their attached period so we don't use the fix period in the fixture
78 84 for sp_period in SP_Period.objects.all():
79 85 sp_period.period = self.period1
... ... @@ -82,9 +88,9 @@ class SequencesTests(TestCase):
82 88 sequence.period = self.period1
83 89 sequence.save()
84 90 Period.objects.get(id=1).delete()
85   - self.period2 = Period.objects.create(
  91 + self.period2 = Period.objects.create(id=3,
86 92 start_date=Period.objects.all().first().end_date)
87   - self.period3 = Period.objects.create(
  93 + self.period3 = Period.objects.create(id=4,
88 94 start_date=self.period2.end_date, submission_duration=550)
89 95 self.usr1 = PyrosUser.objects.get(username="observer")
90 96 self.usr2 = PyrosUser.objects.get(username="unit_pi")
... ...
src/core/pyros_django/seq_submit/urls.py
... ... @@ -10,10 +10,7 @@ urlpatterns = [
10 10 re_path(r'^(?P<status>-?\d)/(?P<message>.+)$',
11 11 views.sequences_list, name="sequences_list"),
12 12  
13   - re_path(r'^action_request/(?P<req_id>\d+)/(?P<action>[a-z_]{1,20})$',
14   - views.action_request, name="action_request"),
15   - re_path(r'^action_request/(?P<req_id>\d+)/(?P<action>[a-z_]{1,20})/(?P<status>-?\d)/(?P<message>.+)$',
16   - views.action_request, name="action_request_message"),
  13 +
17 14  
18 15 re_path(r'^action_sequence/(?P<seq_id>\d+)/(?P<action>[a-z_]{1,20})$',
19 16 views.action_sequence, name="action_sequence"),
... ... @@ -32,8 +29,6 @@ urlpatterns = [
32 29 re_path(r'^action_plan/(?P<plan_id>\d+)/(?P<action>[a-z_]{1,20})/(?P<status>-?\d)/(?P<message>.+)$',
33 30 views.action_plan, name="action_plan_message"),
34 31  
35   - re_path(r'^request_validate/(?P<req_id>\d+)$',
36   - views.request_validate, name="request_validate"),
37 32 re_path(r'^sequence_validate/(?P<seq_id>\d+)$',
38 33 views.sequence_validate, name="sequence_validate"),
39 34 re_path(r'^album_validate/(?P<alb_id>\d+)$',
... ... @@ -41,21 +36,12 @@ urlpatterns = [
41 36 re_path(r'^plan_validate/(?P<plan_id>\d+)$',
42 37 views.plan_validate, name="plan_validate"),
43 38  
44   - re_path(r'^create_request$', views.create_request, name="create_request"),
45 39 #re_path(r'^create_sequence/(?P<req_id>\d+)$', views.create_sequence, name="create_sequence"),
46 40 re_path(r'^create_sequence/', views.create_sequence, name="create_sequence"),
47 41 re_path(r'^create_album/(?P<seq_id>\d+)$',
48 42 views.create_album, name="create_album"),
49 43 re_path(r'^create_plan/(?P<alb_id>\d+)$', views.create_plan, name="create_plan"),
50 44  
51   - re_path(r'^submit_request/(?P<req_id>\d+)/(?P<redir>[a-z_]{1,20})$',
52   - views.submit_request, name="submit_request"),
53   - re_path(r'^unsubmit_request/(?P<req_id>\d+)$',
54   - views.unsubmit_request, name="unsubmit_request"),
55   -
56   - re_path(r'^export_request/(?P<req_id>\d+)$',
57   - views.export_request, name="export_request"),
58   - re_path(r'^import_request$', views.import_request, name="import_request"),
59 45 # path("test_create_plan",views.test_create_plan,name="test_create_plan"),
60 46 path("edit_plan/<int:id>", views.edit_plan, name="edit_plan"),
61 47 path("delete_albums/<int:seq_id>", views.delete_albums, name="delete_albums"),
... ...
src/core/pyros_django/seq_submit/views.py
... ... @@ -36,7 +36,6 @@ from .forms import SequenceForm, AlbumForm, PlanForm, uneditablePlanForm
36 36 #from .forms import RequestForm, SequenceForm, AlbumForm, PlanForm, uneditablePlanForm
37 37 from .validators import check_plan_validity, check_album_validity, check_sequence_validity, check_request_validity
38 38 from .functions import check_sequence_file_validity_and_save, create_sequence_pickle
39   -from .RequestSerializer import RequestSerializer
40 39 import scheduling
41 40  
42 41 import numpy
... ... @@ -758,73 +757,6 @@ def unsubmit_request(request, req_id):
758 757 return redirect(action_request, req_id=req_id, action="edit", status=1, message=message)
759 758  
760 759  
761   -@login_required
762   -def export_request(request, req_id):
763   - """
764   - Create an XML file with the given request, and send a download request to the user
765   - """
766   -
767   - if (settings.DEBUG):
768   - #log.info("From export_request")
769   - pass
770   -
771   - req = Request.objects.get(id=req_id)
772   - if req.complete == False:
773   - message = "Request must be completely valid to be serialized"
774   - return redirect(action_request, req_id=req_id, action="view", status=-1, message=message)
775   -
776   - file_name = SAVED_REQUESTS_FOLDER + "request" + str(req.id) + ".xml"
777   - rs = RequestSerializer()
778   - rs.serialize(req, file_name)
779   -
780   - wrapper = FileWrapper(open(file_name, "r"))
781   - content_type = mimetypes.guess_type(file_name)[0]
782   -
783   - response = HttpResponse(wrapper, content_type=content_type)
784   - response['Content-Length'] = os.path.getsize(file_name)
785   - response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(
786   - os.path.basename(file_name))
787   -
788   - return response
789   -
790   -
791   -@login_required
792   -@csrf_exempt
793   -def import_request(request):
794   - """
795   - Ask for a XML file, parse it and create a request in DB
796   - Don't do anything if there is a single error into the file
797   - """
798   -
799   - if (settings.DEBUG):
800   - pass
801   - #log.info("From import_request")
802   -
803   - log.info(request)
804   -
805   - if request.method == "POST":
806   - file = request.FILES.get("request_file")
807   - if file is None:
808   - status = -1
809   - message = "File does not exist"
810   - elif file.size > 1000000:
811   - status = -1
812   - message = "File is too big (more than 1 000 000 bytes)"
813   - else:
814   - rs = RequestSerializer()
815   - message = rs.unserialize(file.read(), request.user)
816   - if message != "":
817   - status = -1
818   - else:
819   - status = 1
820   - message = "Request imported successfully. Please check it before submitting for scheduling."
821   - print("message is", message)
822   - else:
823   - status = -1
824   - message = "Internal error"
825   -
826   - # Now, display the list of requests (updated with this new request)
827   - return redirect(sequences_list, status=status, message=message)
828 760  
829 761 # @login_required
830 762 # def test_create_plan(request):
... ...