Commit 93039f18a05deec8d5ec8d2870de2936a1778dbb
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
src/core/pyros_django/devices/TelescopeRemoteControlAbstract.py
src/core/pyros_django/devices/TelescopeRemoteControlDefault.py
src/core/pyros_django/devices/views.py
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["default"]["NAME"] == "pyros_test" |
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): | ... | ... |