source: OpenRLabs-Git/web2py/applications/rlabs/controllers/setup.py

main
Last change on this file was 335213f, checked in by David Fuertes <dfuertes@…>, 4 years ago

Terminado instalador docker

  • Property mode set to 100644
File size: 10.1 KB
Line 
1# -*- coding: utf-8 -*-
2#################################################################################
3# @file    setup.py
4# @brief   Controller  for properties setup   
5# @warning None
6# @note Use: None     
7# @license GNU GPLv3+
8# @author  David Fuertes, EUPT, University of Zaragoza.
9# @version 1.1.0 - First version
10# @date    2019-15-11
11#################################################################################
12from threading import current_thread
13import json
14
15import gluon
16
17from ados import adoDB_users, adoDB_services, adoDB_openRlabs_setup, adoDB_timetable, adoDB_prereserves
18from ognsys import Ognsys
19from lab import Lab
20
21from prereserves import PreReserve
22
23
24
25@auth.requires_membership('admin')
26def index():
27    if request.vars.error:
28        return {'error': 'Error de comunicación con el servidor de opengnsys. Por favor, compruebe la configuración.'}
29    else:
30        return {'error': 'null'}
31
32@auth.requires_membership('admin')
33def openrlabs():           
34    setups = adoDB_openRlabs_setup.getSetup_OpenRLabs(db)
35    if setups:     
36        form = SQLFORM(adoDB_openRlabs_setup.getSetup_OpenRLabs_table(db), setups)               
37    else:
38        form =  SQLFORM(adoDB_openRlabs_setup.getSetup_OpenRLabs_table(db))
39           
40    if form.process().accepted:
41       response.flash = 'form accepted'
42       redirect(URL('setup','index'))
43    elif form.errors:
44       response.flash = 'form has errors'
45                   
46    return dict(form=form)
47
48@auth.requires_membership('admin')
49def auth_setup():           
50    setups = adoDB_openRlabs_setup.getSetup_OpenRLabs(db)
51       
52    if setups:
53        table_auth_values = adoDB_openRlabs_setup.get_auth_method_values(setups['auth_mode'], db)
54       
55        if setups['auth_mode'] == 'pop3_servers':
56            form = SQLFORM.grid(db.pop3_servers,
57                                            csv=False, maxtextlength=500,
58                                            details=False, deletable=False, paginate = 10)
59
60        else:
61            if table_auth_values:           
62                form = SQLFORM(db[setups['auth_mode']], table_auth_values)           
63            else:
64                form = SQLFORM(db[setups['auth_mode']],)
65   
66   
67    if isinstance(form, gluon.sqlhtml.SQLFORM):       
68        if form.process().accepted:
69           response.flash = 'form accepted'
70           redirect(URL('setup','index'))
71        elif form.errors:
72           response.flash = 'form has errors'
73                             
74    return dict(form=form)
75
76#######
77## Ajax
78#######
79@auth.requires_membership('admin')
80def get_images_lab():   
81    if request.vars['lab_id'] != '':
82        current_lab = Lab(request.vars['ou_id'],request.vars['lab_id'])
83        clients = current_lab.get_remote_clients()       
84        if 'error' in clients:           
85            return json.dumps({'error': 'Error conexión al obtener imagenes del laboratorio. Reintentelo de nuevo.'})
86        else:
87            return json.dumps(clients['images_info'])
88
89def __delete_prereserve(table, id):   
90    prereserve_db = adoDB_prereserves.get_prereserve_by_id(db, id)
91    if prereserve_db:   
92        prereserve = PreReserve(db, prereserve_db)
93        prereserve.remove()
94   
95
96@auth.requires_membership('admin')
97def prereserves():
98   
99    opengnsys = Ognsys(db)
100   
101    labs = opengnsys.get_labs()   
102    labs_set = {}
103    max_hosts_lab = {}
104    lab_ous = {}
105    for ou_name, labs_ou in labs.items():               
106        for lab in labs_ou:           
107            if 'id' in lab:
108                current_lab = Lab(lab['ou']['id'],lab['id'])             
109                total_clients = current_lab.get_total_clients()                               
110                labs_set.update({lab['id'] : lab['name'] + ' (' + ou_name + ')'})
111                max_hosts_lab.update({lab['id'] : total_clients })
112                lab_ous.update({lab['id'] : lab['ou']['id'] })
113
114    adoDB_prereserves.set_readable_id(db, False)
115
116    if request.args:
117        if request.args[0] == 'new':
118            adoDB_prereserves.set_requires_lab_id(db, labs_set)           
119            adoDB_prereserves.set_requires_image_name(db)
120
121
122    grid = SQLFORM.grid(adoDB_prereserves.get_query_reserves(db),
123                        csv=False, maxtextlength=500, ondelete=__delete_prereserve,
124                        details=False, deletable=True, paginate = 10)
125   
126    if request.args:
127       
128        if request.args[0] == 'new' or request.args[0] == 'edit':
129
130            lab_name_input = grid.element('#pre_reserves_lab_name')
131
132            grid.element('#pre_reserves_num_reserves')['_type'] = "number"
133            grid.element('#pre_reserves_num_reserves')['_min'] = "1"
134
135
136            grid.element('#pre_reserves_init_time')['_required'] = "required"
137            #grid.element('#pre_reserves_init_time')['_type'] = "datetime-local"           
138            grid.element('#pre_reserves_finish_time')['_required'] = "required"
139            #grid.element('#pre_reserves_finish_time')['_type'] = "datetime-local"
140            grid.element('#pre_reserves_finish_time')['_onchange'] = "check_min_finish_time(event)"           
141           
142            grid.element('#pre_reserves_lab_name')['_readonly'] = 'readonly'
143            grid.element('#pre_reserves_lab_id')['_onchange'] = 'set_lab_name(event)'
144
145            grid.element('#pre_reserves_ou_id__row')['_style'] = "display: none;"
146
147            grid.element('#pre_reserves_image_name')['_onchange'] = 'set_image_id(event)'
148            grid.element('#pre_reserves_image_id__row')['_style'] = "display: none;"
149           
150
151
152        if request.args[0] == 'edit':
153            grid.element('#pre_reserves_lab_id__row')['_style'] = "display: none;"
154            grid.element('#delete_record__row')['_style'] = "display: none;"
155
156   
157    return dict(grid=grid, max_hosts_lab=max_hosts_lab,
158                lab_ous=lab_ous)
159   
160@auth.requires_membership('admin')
161def ous():   
162    opengnsys = Ognsys(db)
163    opengnsys.synchronize_table_ous(db)
164
165    grid = SQLFORM.grid(opengnsys.get_query_ous(db),fields=[db.ous_setup.ou_name, db.ous_setup.ou_user],
166                        csv=False, maxtextlength=500,
167                        details=False, deletable=False, paginate = 10)
168   
169    return dict(grid=grid)
170
171@auth.requires_membership('admin')
172def fileimport():
173    if request.vars.fichero != None:
174        # Check vars.fichero is FieldStorage
175        if isinstance(request.vars.fichero, bytes) == False:
176            resultado = import_users.insert(request.vars.fichero.value, db)
177            response.flash = resultado
178       
179    return {}
180
181@auth.requires_membership('admin')
182def manage():
183    if request.args and request.args[0] == 'edit':
184            if adoDB_users.is_admin(db, request.args[2]):
185                adoDB_users.enable_passwd_readable(db)               
186            else:
187                adoDB_users.disable_passwd_readable(db)
188
189
190
191    export_classes = dict(json=False, html=False,
192                          tsv=False, xml=False, csv_with_hidden_cols=False,
193                          tsv_with_hidden_cols=False)
194   
195    selectable = lambda ids : redirect(URL('setup', 'remove_selected_users', vars=dict(ids=ids)))
196   
197    grid = SQLFORM.grid(adoDB_users.get_users(db), exportclasses=export_classes,
198                         fields=[db.auth_user.first_name, db.auth_user.last_name, db.auth_user.email],
199                         selectable=selectable,
200                        details=False, paginate = 10)
201   
202   
203    heading=grid.elements('th')
204
205    if heading:           
206           heading[0].append(INPUT(_type='checkbox',
207            _onclick="jQuery('input[type=checkbox]').each(function(k){jQuery(this).prop('checked', \
208                        !jQuery(this).prop('checked'));});"))
209           heading[0].append(LABEL('Select',
210                                   _style="margin-bottom: 0; margin-left: 2px; \
211                                       font-size: 0.8em; font-weight: normal; \
212                                       vertical-align: top;"))
213           
214   
215    form = grid.element('.web2py_form')
216    if form:
217        password_input = form.element('input',_id='auth_user_password')
218        if password_input:
219            password_input['_type'] = 'text'
220   
221
222    return dict(grid=grid)
223
224@auth.requires_membership('admin')
225def remove_selected_users():
226    user_ids = []
227    if isinstance(request.vars.ids, list):
228        user_ids = request.vars.ids       
229    else:
230        user_ids.append(request.vars.ids)
231     
232    adoDB_users.remove_users(db, user_ids)
233    redirect(URL('setup', 'manage', vars=dict()))
234             
235@auth.requires_membership('admin')       
236def enable():
237    grid = SQLFORM.grid(adoDB_users.get_users_menbership(db), csv=False,
238                        details=False, paginate = 10)
239   
240    return dict(grid=grid)   
241
242@auth.requires_membership('admin')
243def services():
244    grid = SQLFORM.grid(adoDB_services.get_services_query(db), csv=False,
245                        details=False, paginate = 10)
246   
247    return dict(grid=grid)
248
249@auth.requires_membership('admin')
250def timetable():
251    opengnsys = Ognsys(db)
252   
253    labs = opengnsys.get_labs()
254    labs_set = {}
255    for ou_name, labs_ou in labs.items():             
256        for lab in labs_ou:
257            if 'id' in lab:               
258                labs_set.update({lab['id'] : lab['name'] + ' (' + ou_name + ')'})         
259               
260    adoDB_timetable.set_requires(db, labs_set)
261   
262    grid = SQLFORM.grid(adoDB_timetable.get_timetable_query(db), maxtextlength=500,
263                        fields = [db.labs_timetable.lab_name,
264                                  db.labs_timetable.Init_Day, db.labs_timetable.End_Day,
265                                  db.labs_timetable.Init_time,db.labs_timetable.End_time, db.labs_timetable.cod_asign],                       
266                        orderby=db.labs_timetable.lab_name,csv=False, details=False, paginate = 10)
267   
268
269    if request.args:
270        if request.args[0] == 'new' or request.args[0] == 'edit':
271            lab_name_input = grid.element('#labs_timetable_lab_name')
272
273            grid.element('#labs_timetable_lab_name')['_readonly'] = 'readonly'
274            grid.element('#labs_timetable_lab_id')['_onchange'] = 'set_lab_name(event)'
275           
276       
277       
278    return dict(grid=grid)
279
Note: See TracBrowser for help on using the repository browser.