Projekt

Obecné

Profil

Stáhnout (35.2 KB) Statistiky
| Větev: | Tag: | Revize:
1
from datetime import datetime, date
2

    
3
from sqlalchemy.orm import Session
4
from sqlalchemy import and_, desc
5
from . import models, schemas
6

    
7

    
8
def get_device(db: Session, device_id: int):
9
    """
10
    returns one specific devices by given id
11
    """
12
    return db.query(models.Device).filter(models.Device.id == device_id).first()
13

    
14

    
15
def get_devices(db: Session, skip: int = 0, limit: int = 100):
16
    """
17
    returns all devices in database
18
    """
19
    return db.query(models.Device).offset(skip).limit(limit).all()
20

    
21

    
22
def find_device(db: Session, device: schemas.DeviceTemp):
23
    """
24
    finds one device with  serial_number same as in given DeviceBase object
25
    """
26
    return db.query(models.Device).filter(and_(models.Device.serial_number == device.serial_number)).first()
27

    
28

    
29
def find_device_by_serial(db: Session, ser: str):
30
    """
31
    finds one device with serial_number same as in given DeviceBase object
32
    """
33
    return db.query(models.Device).filter(and_(models.Device.serial_number == ser)).first()
34

    
35

    
36
def get_devices_with_ids(db: Session, ids: []):
37
    """
38
    returns all devices with given ids
39
    """
40
    return db.query(models.Device).filter(models.Device.id.in_(ids)).all()
41

    
42

    
43
def get_bodydevices_with_ids(db: Session, ids: []):
44
    """
45
    returns all bodydevices with given ids
46
    """
47
    return db.query(models.BodyDevice).filter(models.BodyDevice.id.in_(ids)).all()
48

    
49

    
50
def get_headdevices_with_ids(db: Session, ids: []):
51
    """
52
    returns all headdevices with given ids
53
    """
54
    return db.query(models.HeadDevice).filter(models.HeadDevice.id.in_(ids)).all()
55

    
56

    
57
def find_headdevices_by_team(db: Session, team_id: int):
58
    """
59
    Returns all head devices in specific team
60
    """
61
    return db.query(models.HeadDevice).filter(models.HeadDevice.team_id == team_id).all()
62

    
63

    
64
def find_bodydevices_by_team(db: Session, team_id: int):
65
    """
66
    Returns all body devices in specific team
67
    """
68
    return db.query(models.BodyDevice).filter(models.BodyDevice.team_id == team_id).all()
69

    
70

    
71
def find_headdevices_by_license(db: Session, lic_id: int):
72
    """
73
    Returns all head devices with specific license
74
    """
75
    return db.query(models.HeadDevice).filter(models.HeadDevice.license_id == lic_id).all()
76

    
77

    
78
def find_bodydevices_by_license(db: Session, lic_id: int):
79
    """
80
    Returns all body devices with specific license
81
    """
82
    return db.query(models.BodyDevice).filter(models.BodyDevice.license_id == lic_id).all()
83

    
84

    
85
def get_devices_by_team(db: Session, team: int):
86
    """
87
    returns all devices with same team
88
    """
89
    return db.query(models.Device).filter(models.Device.team_id == team).all()
90

    
91

    
92
def create_device(db: Session, device: schemas.DeviceTemp):
93
    """
94
    creates new device with data from given DeviceBase object
95
    """
96
    db_device = models.Device(vendor_id=device.vendor_id, product_id=device.product_id,
97
                              serial_number=device.serial_number, inventory_number="", comment="")
98
    db.add(db_device)
99
    db.commit()
100
    db.refresh(db_device)
101
    return db_device
102

    
103

    
104
def get_license(db: Session, license_id: int):
105
    """
106
    returns one specific license by given id
107
    """
108
    return db.query(models.License).filter(models.License.id == license_id).first()
109

    
110

    
111
def get_licenses(db: Session, skip: int = 0, limit: int = 100):
112
    """
113
    returns all licenses in database
114
    """
115
    return db.query(models.License).offset(skip).limit(limit).all()
116

    
117

    
118
def find_license(db: Session, name: str):
119
    """
120
    finds one license by given string name
121
    """
122
    return db.query(models.License).filter(models.License.license_id == name).first()
123

    
124

    
125
def get_licenses_by_name(db: Session, name: str):
126
    return db.query(models.License).filter(models.License.name == name).all()
127

    
128

    
129
def create_license(db: Session, name: str, lic_id: str, expdate: date):
130
    """
131
    creates new license with given name and expiration date
132
    """
133
    db_license = models.License(name=name, license_id=lic_id, expiration_date=expdate)
134
    db.add(db_license)
135
    db.commit()
136
    db.refresh(db_license)
137
    return db_license
138

    
139

    
140
def get_license_devices(db: Session, license_id: int):
141
    """
142
    returns all entries in devices_licenses table with given license_id
143
    """
144
    return db.query(models.DeviceLicense).filter(models.DeviceLicense.license_id == license_id).all()
145

    
146

    
147
def find_devicelicenses_by_licid_array(db: Session, lcs: []):
148
    """
149
    Finds all device_licenses with license_id in given id array
150
    """
151
    return db.query(models.DeviceLicense).filter(models.DeviceLicense.license_id.in_(lcs)).all()
152

    
153

    
154
def get_device_licenses(db: Session, device_id: int):
155
    """
156
    returns all entries in devices_licenses table with given device_id
157
    """
158
    return db.query(models.DeviceLicense).filter(models.DeviceLicense.device_id == device_id).all()
159

    
160

    
161
def get_devicelicense_by_devicelicense(db: Session, device_id: int, license_id: int):
162
    """
163
    returns entry in devices_licenses table with given device id and license id
164
    """
165
    return db.query(models.DeviceLicense).filter(and_(models.DeviceLicense.device_id == device_id,
166
                                                      models.DeviceLicense.license_id == license_id)).first()
167

    
168

    
169
def create_device_license(db: Session, device: int, license: int, time: datetime):
170
    """
171
    creates new entry in devices_licenses table with device id, license id and time.
172
    """
173
    db_device_license = models.DeviceLicense(device_id=device, license_id=license,
174
                                             assigned_datetime=time)
175
    db.add(db_device_license)
176
    db.commit()
177
    db.refresh(db_device_license)
178
    return db_device_license
179

    
180

    
181
def delete_device_license(db: Session, device: int, license: int):
182
    """
183
    deletes entry in devices_licenses table with device id, license id and time.
184
    """
185
    db_device_license = get_devicelicense_by_devicelicense(db, device, license)
186
    db_lic = db.delete(db_device_license)
187
    db.commit()
188
    return db_lic
189

    
190

    
191
def find_pc_by_username(db: Session, name: str):
192
    """
193
    Finds one pc by given username
194
    """
195
    return db.query(models.PC).filter(models.PC.username == name).first()
196

    
197

    
198
def get_pc(db: Session, pc_id: int):
199
    """
200
    returns one specific pc by given id
201
    """
202
    return db.query(models.PC).filter(models.PC.id == pc_id).first()
203

    
204

    
205
def update_device(db: Session, device_id: int, team: str):
206
    """
207
    Updates team of one specific pc
208
    """
209
    old_dev = get_device(db, device_id)
210
    team = get_team(db, int(team))
211
    new = {'id': old_dev.id, 'vendor_id': old_dev.vendor_id, 'product_id': old_dev.product_id,
212
           'serial_number': old_dev.serial_number, 'inventory_number': old_dev.inventory_number,
213
           'comment': old_dev.comment, 'team_id': team.id}
214
    for key, value in new.items():
215
        setattr(old_dev, key, value)
216
    db.commit()
217
    db.refresh(old_dev)
218
    return old_dev
219

    
220

    
221
def update_device_inv(db: Session, device_id: int, inv: str):
222
    """
223
    Updates inventory number of one specific pc
224
    """
225
    old_dev = get_device(db, device_id)
226
    if old_dev.team_id != None:
227
        team = get_team(db, int(old_dev.team_id))
228
        teamid = team.id
229
    else:
230
        teamid = None
231
    new = {'id': old_dev.id, 'vendor_id': old_dev.vendor_id, 'product_id': old_dev.product_id,
232
           'serial_number': old_dev.serial_number, 'inventory_number': inv,
233
           'comment': old_dev.comment, 'team_id': teamid}
234
    for key, value in new.items():
235
        setattr(old_dev, key, value)
236
    db.commit()
237
    db.refresh(old_dev)
238
    return old_dev
239

    
240

    
241
def update_device_com(db: Session, device_id: int, comm: str):
242
    """
243
    Updates team of one specific pc
244
    """
245
    old_dev = get_device(db, device_id)
246
    if old_dev.team_id != None:
247
        team = get_team(db, int(old_dev.team_id))
248
        teamid = team.id
249
    else:
250
        teamid = None
251
    new = {'id': old_dev.id, 'vendor_id': old_dev.vendor_id, 'product_id': old_dev.product_id,
252
           'serial_number': old_dev.serial_number, 'inventory_number': old_dev.inventory_number,
253
           'comment': comm, 'team_id': teamid}
254
    for key, value in new.items():
255
        setattr(old_dev, key, value)
256
    db.commit()
257
    db.refresh(old_dev)
258
    return old_dev
259

    
260

    
261
def change_role(db: Session, usr_id: int, role: str):
262
    """
263
    Updates team of one specific pc
264
    """
265
    old_usr = find_user_byid(db, usr_id)
266
    new = {'id': old_usr.id, 'username': old_usr.username, 'password': old_usr.password, 'role': role}
267
    for key, value in new.items():
268
        setattr(old_usr, key, value)
269
    db.commit()
270
    db.refresh(old_usr)
271
    return old_usr
272

    
273

    
274
def get_pcs(db: Session, skip: int = 0, limit: int = 100):
275
    """
276
    returns all pcs in database
277
    """
278
    return db.query(models.PC).offset(skip).limit(limit).all()
279

    
280

    
281
def find_pc(db: Session, username: str, hostname: str):
282
    """
283
    Finds one pc with given username and hostname
284
    """
285
    return db.query(models.PC).filter(and_(models.PC.username == username,
286
                                           models.PC.hostname == hostname)).first()
287

    
288

    
289
def find_pc_by_name(db: Session, username: str):
290
    """
291
    Finds one pc by its username
292
    """
293
    return db.query(models.PC).filter(models.PC.username == username).first()
294

    
295

    
296
def find_pc_by_name_all(db: Session, username: str):
297
    """
298
    Finds all pcs with same username
299
    """
300
    return db.query(models.PC).filter(models.PC.username == username).offset(0).limit(100).all()
301

    
302

    
303
def find_pcs(db: Session, pcs: []):
304
    """
305
    Finds all pcs with ids in given id array
306
    """
307
    return db.query(models.PC).filter(models.PC.id.in_(pcs)).all()
308

    
309

    
310
def create_pc(db: Session, user: str, host: str):
311
    """
312
    creates new pc with given username and hostname
313
    """
314
    db_pc = models.PC(username=user, hostname=host)
315
    db.add(db_pc)
316
    db.commit()
317
    db.refresh(db_pc)
318
    return db_pc
319

    
320

    
321
def get_team(db: Session, team_id: int):
322
    """
323
    returns one specific team wit given id
324
    """
325
    return db.query(models.Team).filter(models.Team.id == team_id).first()
326

    
327

    
328
def get_teams(db: Session, skip: int = 0, limit: int = 100):
329
    """
330
    returns all teams currently saved in database
331
    """
332
    return db.query(models.Team).offset(skip).limit(limit).all()
333

    
334

    
335
def find_team(db: Session, name: str):
336
    """
337
    Finds one specific team by its name
338
    """
339
    return db.query(models.Team).filter(models.Team.name == name).first()
340

    
341

    
342
def create_team(db: Session, name: str):
343
    """
344
    Creates new team with given name
345
    """
346
    db_team = models.Team(name=name)
347
    db.add(db_team)
348
    db.commit()
349
    db.refresh(db_team)
350
    return db_team
351

    
352

    
353
def change_team(db: Session, team_id: int, name: str):
354
    """
355
    Updates name of one specific team
356
    """
357
    old_team = get_team(db, team_id)
358
    new = {'id': old_team.id, 'name': name}
359
    for key, value in new.items():
360
        setattr(old_team, key, value)
361
    db.commit()
362
    db.refresh(old_team)
363
    return old_team
364

    
365

    
366
def get_head_device(db: Session, head_id: int):
367
    """
368
    Returns one specific head device by given id
369
    """
370
    return db.query(models.HeadDevice).filter(models.HeadDevice.id == head_id).first()
371

    
372

    
373
def get_head_devices(db: Session, skip: int = 0, limit: int = 100):
374
    """
375
    Returns all head devices saved in database
376
    """
377
    return db.query(models.HeadDevice).offset(skip).limit(limit).all()
378

    
379

    
380
def find_head_device(db: Session, serial: schemas.HeadDeviceTemp):
381
    """
382
    Finds one head device by its serial number
383
    """
384
    return db.query(models.HeadDevice).filter(models.HeadDevice.serial_number == serial.serial_number).first()
385

    
386

    
387
def create_head_device(db: Session, log: schemas.HeadDeviceTemp):
388
    """
389
    Creates new head device
390
    """
391
    db_head = models.HeadDevice(serial_number=log.serial_number)
392
    db.add(db_head)
393
    db.commit()
394
    db.refresh(db_head)
395
    return db_head
396

    
397

    
398
def get_body_device(db: Session, body_id: int):
399
    """
400
    Returns one specific body device by given id
401
    """
402
    return db.query(models.BodyDevice).filter(models.BodyDevice.id == body_id).first()
403

    
404

    
405
def get_body_devices(db: Session, skip: int = 0, limit: int = 100):
406
    """
407
    Returns all body devices saved in database
408
    """
409
    return db.query(models.BodyDevice).offset(skip).limit(limit).all()
410

    
411

    
412
def find_body_device(db: Session, serial: schemas.BodyDeviceTemp):
413
    """
414
    Finds one body device by its serial number
415
    """
416
    return db.query(models.BodyDevice).filter(models.BodyDevice.serial_number == serial.serial_number).first()
417

    
418

    
419
def find_bodydevice_by_serial(db: Session, serial: str):
420
    """
421
    Finds one specific body device by given serial number
422
    """
423
    return db.query(models.BodyDevice).filter(models.BodyDevice.serial_number == serial).first()
424

    
425

    
426
def find_headdevice_by_serial(db: Session, serial: str):
427
    """
428
    Finds one specific head device by given serial number
429
    """
430
    return db.query(models.HeadDevice).filter(models.HeadDevice.serial_number == serial).first()
431

    
432

    
433
def create_body_device(db: Session, log: schemas.BodyDeviceTemp):
434
    """
435
    Creates new Body device
436
    """
437
    db_body = models.BodyDevice(serial_number=log.serial_number, inventory_number="", comment="")
438
    db.add(db_body)
439
    db.commit()
440
    db.refresh(db_body)
441
    return db_body
442

    
443

    
444
def update_bodydevice_license(db: Session, device_id: int, lic_id: int):
445
    """
446
    Updates body devices license with one given by user
447
    """
448
    old_dev = get_body_device(db, device_id)
449
    lic = get_license(db, lic_id)
450
    new = {'id': old_dev.id, 'serial_number': old_dev.serial_number, 'inventory_number': old_dev.inventory_number,
451
           'comment': old_dev.comment, 'team_id': old_dev.team_id, 'license_id': lic.id}
452
    for key, value in new.items():
453
        setattr(old_dev, key, value)
454
    db.commit()
455
    db.refresh(old_dev)
456
    return old_dev
457

    
458

    
459
def update_bodydevice_team(db: Session, device_id: int, team_id: int):
460
    """
461
    Updates body devices team with one given by user
462
    """
463
    old_dev = get_body_device(db, device_id)
464
    team = get_team(db, team_id)
465
    new = {'id': old_dev.id, 'serial_number': old_dev.serial_number, 'inventory_number': old_dev.inventory_number,
466
           'comment': old_dev.comment, 'team_id': team.id, 'license_id': old_dev.license_id}
467
    for key, value in new.items():
468
        setattr(old_dev, key, value)
469
    db.commit()
470
    db.refresh(old_dev)
471
    return old_dev
472

    
473

    
474
def update_bodydevice_inv(db: Session, device_id: int, dev_inv: str):
475
    """
476
    Updates body devices inventory number with new one given by user
477
    """
478
    old_dev = get_body_device(db, device_id)
479
    new = {'id': old_dev.id, 'serial_number': old_dev.serial_number, 'inventory_number': dev_inv,
480
           'comment': old_dev.comment, 'team_id': old_dev.team_id, 'license_id': old_dev.license_id}
481
    for key, value in new.items():
482
        setattr(old_dev, key, value)
483
    db.commit()
484
    db.refresh(old_dev)
485
    return old_dev
486

    
487

    
488
def update_bodydevice_comm(db: Session, device_id: int, comm: str):
489
    """
490
    Updates body devices comment with new one given by user
491
    """
492
    old_dev = get_body_device(db, device_id)
493
    new = {'id': old_dev.id, 'serial_number': old_dev.serial_number, 'inventory_number': old_dev.inventory_number,
494
           'comment': comm, 'team_id': old_dev.team_id, 'license_id': old_dev.license_id}
495
    for key, value in new.items():
496
        setattr(old_dev, key, value)
497
    db.commit()
498
    db.refresh(old_dev)
499
    return old_dev
500

    
501

    
502
def update_headdevice_license(db: Session, device_id: int, lic_id: int):
503
    """
504
    Updates head devices license with one given by user
505
    """
506
    old_dev = get_head_device(db, device_id)
507
    lic = get_license(db, lic_id)
508
    new = {'id': old_dev.id, 'serial_number': old_dev.serial_number, 'inventory_number': old_dev.inventory_number,
509
           'comment': old_dev.comment, 'team_id': old_dev.team_id, 'license_id': lic.id}
510
    for key, value in new.items():
511
        setattr(old_dev, key, value)
512
    db.commit()
513
    db.refresh(old_dev)
514
    return old_dev
515

    
516

    
517
def update_headdevice_team(db: Session, device_id: int, team_id: int):
518
    """
519
    Updates head devices team with one given by user
520
    """
521
    old_dev = get_head_device(db, device_id)
522
    team = get_team(db, team_id)
523
    new = {'id': old_dev.id, 'serial_number': old_dev.serial_number, 'inventory_number': old_dev.inventory_number,
524
           'comment': old_dev.comment, 'team_id': team.id, 'license_id': old_dev.license_id}
525
    for key, value in new.items():
526
        setattr(old_dev, key, value)
527
    db.commit()
528
    db.refresh(old_dev)
529
    return old_dev
530

    
531

    
532
def update_headdevice_inv(db: Session, device_id: int, dev_inv: str):
533
    """
534
    Updates head devices inventory number with new one given by user
535
    """
536
    old_dev = get_head_device(db, device_id)
537
    new = {'id': old_dev.id, 'serial_number': old_dev.serial_number, 'inventory_number': dev_inv,
538
           'comment': old_dev.comment, 'team_id': old_dev.team_id, 'license_id': old_dev.license_id}
539
    for key, value in new.items():
540
        setattr(old_dev, key, value)
541
    db.commit()
542
    db.refresh(old_dev)
543
    return old_dev
544

    
545

    
546
def update_headdevice_comm(db: Session, device_id: int, comm: str):
547
    """
548
    Updates head devices comment with new one given by user
549
    """
550
    old_dev = get_head_device(db, device_id)
551
    new = {'id': old_dev.id, 'serial_number': old_dev.serial_number, 'inventory_number': old_dev.inventory_number,
552
           'comment': comm, 'team_id': old_dev.team_id, 'license_id': old_dev.license_id}
553
    for key, value in new.items():
554
        setattr(old_dev, key, value)
555
    db.commit()
556
    db.refresh(old_dev)
557
    return old_dev
558

    
559

    
560
def get_ld_logs(db: Session, skip: int = 0, limit: int = 100):
561
    """
562
    Returns all ld debugger logs in database
563
    """
564
    return db.query(models.LDLog).order_by(desc(models.LDLog.timestamp)).offset(skip).limit(limit).all()
565

    
566

    
567
def create_ld_logs(db: Session, item: schemas.LDTempBase, head_id: int, body_id: int, pc_id: int, date: datetime):
568
    """
569
    Creates new ld log for ld_logs database table
570
    """
571
    db_ld = models.LDLog(pc_id=pc_id, timestamp=date, status=item.status, head_id=head_id, body_id=body_id)
572
    db.add(db_ld)
573
    db.commit()
574
    db.refresh(db_ld)
575
    return db_ld
576

    
577

    
578
def get_logs(db: Session, skip: int = 0, limit: int = 100):
579
    """
580
    Returns all usb logs in database ordered by timestamp
581
    """
582
    return db.query(models.USBLog).order_by(desc(models.USBLog.timestamp)).offset(skip).limit(limit).all()
583

    
584

    
585
def get_log(db: Session, device_id: int, skip: int = 0, limit: int = 100):
586
    """
587
    Returns all usb logs in database sorted by id
588
    """
589
    return db.query(models.USBLog).filter(models.USBLog.device_id == device_id).offset(skip).limit(limit).all()
590

    
591

    
592
def find_filtered_logs(db: Session, logs: []):
593
    """
594
    Returns all usb logs with ids in given id array.
595
    """
596
    return db.query(models.USBLog).filter(models.USBLog.id.in_(logs)).order_by(desc(models.USBLog.timestamp)).all()
597

    
598

    
599
def find_filtered_ldlogs(db: Session, logs: []):
600
    """
601
    Returns all ld logs with ids in given id array.
602
    """
603
    return db.query(models.LDLog).filter(models.LDLog.id.in_(logs)).order_by(desc(models.LDLog.timestamp)).all()
604

    
605

    
606
def get_filtered_ldlogs(db: Session, pc: str, tema: str, lic: str):
607
    """
608
    Function creates query string used for filtering by pc username, team name and license name.
609
    Depending on selected filters assembles query string for database
610
    """
611
    execute_string = "SELECT * FROM ld_logs AS logs WHERE"
612
    before_me = False
613
    all_all = True
614
    if pc != "all":
615
        all_all = False
616
        pc = find_pc_by_username(db, pc)
617
        if pc != None:
618
            if before_me:
619
                execute_string += " AND logs.pc_id = " + str(pc.id)
620
            else:
621
                before_me = True
622
                execute_string += " logs.pc_id = " + str(pc.id)
623
        else:
624
            if before_me:
625
                execute_string += " AND logs.pc_id = -1"
626
            else:
627
                before_me = True
628
                execute_string += " logs.pc_id = -1"
629
    if tema != "all":
630
        all_all = False
631
        team = find_team(db, tema)
632
        if team != None:
633
            head_devices = find_headdevices_by_team(db, team.id)
634
            body_devices = find_bodydevices_by_team(db, team.id)
635
            if len(head_devices) > 0 and len(body_devices) > 0:
636
                h_ids = "("
637
                for h in head_devices:
638
                    h_ids += str(h.id) + ", "
639
                def_h_ids = h_ids[:-2] + ")"
640
                b_ids = "("
641
                for b in body_devices:
642
                    b_ids += str(b.id) + ", "
643
                def_b_ids = b_ids[:-2] + ")"
644
                if before_me:
645
                    execute_string += " AND (logs.head_id IN " + def_h_ids + " OR logs.body_id IN " + def_b_ids + ")"
646
                else:
647
                    before_me = True
648
                    execute_string += " (logs.head_id IN " + def_h_ids + " OR logs.body_id IN " + def_b_ids + ")"
649
            elif len(head_devices) == 0 and len(body_devices) > 0:
650
                b_ids = "("
651
                for b in body_devices:
652
                    b_ids += str(b.id) + ", "
653
                def_b_ids = b_ids[:-2] + ")"
654
                if before_me:
655
                    execute_string += " AND logs.body_id IN " + def_b_ids
656
                else:
657
                    before_me = True
658
                    execute_string += " logs.body_id IN " + def_b_ids
659
            elif len(head_devices) > 0 and len(body_devices) == 0:
660
                h_ids = "("
661
                for h in head_devices:
662
                    h_ids += str(h.id) + ", "
663
                def_h_ids = h_ids[:-2] + ")"
664
                if before_me:
665
                    execute_string += " AND logs.head_id IN " + def_h_ids
666
                else:
667
                    before_me = True
668
                    execute_string += " logs.head_id IN " + def_h_ids
669
            else:
670
                if before_me:
671
                    execute_string += " AND (logs.head_id = -1 OR logs.body_id = -1)"
672
                else:
673
                    before_me = True
674
                    execute_string += " (logs.head_id = -1 OR logs.body_id = -1)"
675
        else:
676
            if before_me:
677
                execute_string += " AND logs.pc_id = -1"
678
            else:
679
                before_me = True
680
                execute_string += " logs.pc_id = -1"
681
    if lic != "all":
682
        all_all = False
683
        license = find_license(db, lic)
684
        if license != None:
685
            head_devices = find_headdevices_by_license(db, license.id)
686
            body_devices = find_bodydevices_by_license(db, license.id)
687
            if len(head_devices) > 0 and len(body_devices) > 0:
688
                h_ids = "("
689
                for h in head_devices:
690
                    h_ids += str(h.id) + ", "
691
                def_h_ids = h_ids[:-2] + ")"
692
                b_ids = "("
693
                for b in body_devices:
694
                    b_ids += str(b.id) + ", "
695
                def_b_ids = b_ids[:-2] + ")"
696
                if before_me:
697
                    execute_string += " AND (logs.head_id IN " + def_h_ids + " OR logs.body_id IN " + def_b_ids + ")"
698
                else:
699
                    before_me = True
700
                    execute_string += " (logs.head_id IN " + def_h_ids + " OR logs.body_id IN " + def_b_ids + ")"
701
            elif len(head_devices) == 0 and len(body_devices) > 0:
702
                b_ids = "("
703
                for b in body_devices:
704
                    b_ids += str(b.id) + ", "
705
                def_b_ids = b_ids[:-2] + ")"
706
                if before_me:
707
                    execute_string += " AND logs.body_id IN " + def_b_ids
708
                else:
709
                    before_me = True
710
                    execute_string += " logs.body_id IN " + def_b_ids
711
            elif len(head_devices) > 0 and len(body_devices) == 0:
712
                h_ids = "("
713
                for h in head_devices:
714
                    h_ids += str(h.id) + ", "
715
                def_h_ids = h_ids[:-2] + ")"
716
                if before_me:
717
                    execute_string += " AND logs.head_id IN " + def_h_ids
718
                else:
719
                    before_me = True
720
                    execute_string += " logs.head_id IN " + def_h_ids
721
            else:
722
                if before_me:
723
                    execute_string += " AND (logs.head_id = -1 OR logs.body_id = -1)"
724
                else:
725
                    before_me = True
726
                    execute_string += " (logs.head_id = -1 OR logs.body_id = -1)"
727
        else:
728
            if before_me:
729
                execute_string += " AND logs.pc_id = -1"
730
            else:
731
                before_me = True
732
                execute_string += " logs.pc_id = -1"
733
    if all_all:
734
        before_me = True
735
        execute_string = "SELECT * FROM ld_logs AS logs"
736

    
737
    if not before_me:
738
        execute_string = "SELECT * FROM ld_logs AS logs WHERE logs.id = -1"
739
    result = db.execute(execute_string)
740
    return result
741

    
742

    
743
def get_filtered_logs(db: Session, pc: str, tema: str, lic: str):
744
    """
745
    Function creates query string used for filtering by pc username, team name and license name.
746
    Depending on selected filters assembles query string for database
747
    """
748
    execute_string = "SELECT * FROM usb_logs AS logs"
749
    pcs = find_pc_by_username(db, pc)
750
    if pc != "all":
751
        if pcs is not None:
752
            execute_string += "  WHERE logs.pc_id = " + str(pcs.id)
753
        else:
754
            execute_string += "  WHERE logs.pc_id = -1"
755
    if tema != "all":
756
        team = find_team(db, tema)
757
        if team is not None:
758
            devs = get_devices_by_team(db, team.id)
759
            d_ids = "("
760
            for p in devs:
761
                d_ids += str(p.id) + ", "
762
            def_d_ids = d_ids[:-2] + ")"
763
            if pc != "all":
764
                if len(def_d_ids) > 1:
765
                    execute_string += " AND logs.device_id IN " + def_d_ids
766
                else:
767
                    execute_string += " AND logs.device_id IN (-1)"
768
            else:
769
                if len(def_d_ids) > 1:
770
                    execute_string += " WHERE logs.device_id IN " + def_d_ids
771
                else:
772
                    execute_string += " WHERE logs.device_id IN (-1)"
773
        else:
774
            if pc != "all":
775
                execute_string += " AND logs.device_id IN (-1)"
776
            else:
777
                execute_string += " WHERE logs.device_id IN (-1)"
778
    if lic != "all":
779
        license = get_licenses_by_name(db, lic)
780
        if len(license) > 0:
781
            ids = []
782
            for l in license:
783
                ids.append(l.id)
784
            device_licenses = find_devicelicenses_by_licid_array(db, ids)
785
            dev_ids = "("
786
            for dev in device_licenses:
787
                dev_ids += str(dev.device_id) + ", "
788
            defin_ids = dev_ids[:-2] + ")"
789
            if pc != "all" or tema != "all":
790
                if len(defin_ids) > 1:
791
                    execute_string += " AND logs.device_id IN " + defin_ids
792
                else:
793
                    execute_string += " AND logs.device_id IN (-1)"
794
            else:
795
                if len(defin_ids) > 1:
796
                    execute_string += " WHERE logs.device_id IN " + defin_ids
797
                else:
798
                    execute_string += " WHERE logs.device_id IN (-1)"
799
        else:
800
            if pc != "all" or tema != "all":
801
                execute_string += " AND logs.device_id IN (-1)"
802
            else:
803
                execute_string += " WHERE logs.device_id IN (-1)"
804

    
805
    # executing assembled query string
806
    result = db.execute(execute_string)
807
    return result
808

    
809

    
810
def get_filtered_bodydevices(db: Session, body_id: str, license_id: str, team: str):
811
    """
812
    returns filtered body devices based on given attributes
813
    """
814
    execute_string = "SELECT * FROM body_devices AS device WHERE"
815
    before_me = False
816
    all_all = True
817
    if body_id != "all":
818
        all_all = False
819
        body_dev = find_bodydevice_by_serial(db, body_id)
820
        if body_dev != None:
821
            if before_me:
822
                execute_string += " AND device.id = " + str(body_dev.id)
823
            else:
824
                before_me = True
825
                execute_string += " device.id = " + str(body_dev.id)
826
        else:
827
            if before_me:
828
                execute_string += " AND device.id = -1"
829
            else:
830
                before_me = True
831
                execute_string += " device.id = -1"
832
    if license_id != "all":
833
        all_all = False
834
        license = find_license(db, license_id)
835
        if license != None:
836
            if before_me:
837
                execute_string += " AND device.license_id = " + str(license.id)
838
            else:
839
                before_me = True
840
                execute_string += " device.license_id = " + str(license.id)
841
        else:
842
            if before_me:
843
                execute_string += " AND device.id = -1"
844
            else:
845
                before_me = True
846
                execute_string += " device.id = -1"
847
    if team != "all":
848
        all_all = False
849
        tem = find_team(db, team)
850
        if tem != None:
851
            if before_me:
852
                execute_string += " AND device.team_id = " + str(tem.id)
853
            else:
854
                before_me = True
855
                execute_string += " device.team_id = " + str(tem.id)
856
        else:
857
            if before_me:
858
                execute_string += " AND device.id = -1"
859
            else:
860
                before_me = True
861
                execute_string += " device.id = -1"
862
    if all_all:
863
        before_me = True
864
        execute_string = "SELECT * FROM body_devices AS devices"
865

    
866
    if not before_me:
867
        execute_string = "SELECT * FROM body_devices AS devices WHERE devices.id = -1"
868
    result = db.execute(execute_string)
869
    return result
870

    
871

    
872
def get_filtered_headdevices(db: Session, body_id: str, license_id: str, team: str):
873
    """
874
    returns filtered head devices based on given attributes
875
    """
876
    execute_string = "SELECT * FROM head_devices AS device WHERE"
877
    before_me = False
878
    all_all = True
879
    if body_id != "all":
880
        all_all = False
881
        head_dev = find_headdevice_by_serial(db, body_id)
882
        if head_dev != None:
883
            if before_me:
884
                execute_string += " AND device.id = " + str(head_dev.id)
885
            else:
886
                before_me = True
887
                execute_string += " device.id = " + str(head_dev.id)
888
        else:
889
            if before_me:
890
                execute_string += " AND device.id = -1"
891
            else:
892
                before_me = True
893
                execute_string += " device.id = -1"
894
    if license_id != "all":
895
        all_all = False
896
        license = find_license(db, license_id)
897
        if license != None:
898
            if before_me:
899
                execute_string += " AND device.license_id = " + str(license.id)
900
            else:
901
                before_me = True
902
                execute_string += " device.license_id = " + str(license.id)
903
        else:
904
            if before_me:
905
                execute_string += " AND device.id = -1"
906
            else:
907
                before_me = True
908
                execute_string += " device.id = -1"
909
    if team != "all":
910
        all_all = False
911
        tem = find_team(db, team)
912
        if tem != None:
913
            if before_me:
914
                execute_string += " AND device.team_id = " + str(tem.id)
915
            else:
916
                before_me = True
917
                execute_string += " device.team_id = " + str(tem.id)
918
        else:
919
            if before_me:
920
                execute_string += " AND device.id = -1"
921
            else:
922
                before_me = True
923
                execute_string += " device.id = -1"
924
    if all_all:
925
        before_me = True
926
        execute_string = "SELECT * FROM body_devices AS devices"
927

    
928
    if not before_me:
929
        execute_string = "SELECT * FROM body_devices AS devices WHERE devices.id = -1"
930
    result = db.execute(execute_string)
931
    return result
932

    
933

    
934
def get_filtered_devices(db: Session, keyman_id: str, license_name: str, license_id: str, team: str):
935
    """
936
    returns filtered keyman devices based on given attributes
937
    """
938
    execute_string = "SELECT * FROM devices AS device WHERE"
939
    before_me = False
940
    all_all = True
941
    if keyman_id != "all":
942
        all_all = False
943
        keyman_dev = find_device_by_serial(db, keyman_id)
944
        if keyman_dev != None:
945
            if before_me:
946
                execute_string += " AND device.id = " + str(keyman_dev.id)
947
            else:
948
                before_me = True
949
                execute_string += " device.id = " + str(keyman_dev.id)
950
        else:
951
            if before_me:
952
                execute_string += " AND device.id = -1"
953
            else:
954
                before_me = True
955
                execute_string += " device.id = -1"
956
    if license_name != "all":
957
        all_all = False
958
        license = get_licenses_by_name(db, license_name)
959
        if len(license) > 0:
960
            lic_ids = []
961
            for l in license:
962
                lic_ids.append(l.id)
963
            dev_lics = find_devicelicenses_by_licid_array(db, lic_ids)
964
            lic_ids = "("
965
            for l in dev_lics:
966
                lic_ids += str(l.device_id) + ", "
967
            def_lic_ids = lic_ids[:-2] + ")"
968
            if len(def_lic_ids) <= 1:
969
                def_lic_ids = "(-1)"
970
            if before_me:
971
                execute_string += " AND device.id IN " + def_lic_ids
972
            else:
973
                before_me = True
974
                execute_string += " device.id IN " + def_lic_ids
975
        else:
976
            if before_me:
977
                execute_string += " AND device.id = -1"
978
            else:
979
                before_me = True
980
                execute_string += " device.id = -1"
981
    if license_id != "all":
982
        all_all = False
983
        license = find_license(db, license_id)
984
        if license != None:
985
            licen_devs = get_license_devices(db, license.id)
986
            ids = "("
987
            for lic in licen_devs:
988
                ids += str(lic.device_id) + ", "
989
            def_ids = ids[:-2] + ")"
990
            if len(def_ids) <= 1:
991
                def_ids = "(-1)"
992
            if before_me:
993
                execute_string += " AND device.id IN " + def_ids
994
            else:
995
                before_me = True
996
                execute_string += " device.id IN " + def_ids
997
    if team != "all":
998
        all_all = False
999
        tem = find_team(db, team)
1000
        if tem != None:
1001
            if before_me:
1002
                execute_string += " AND device.team_id = " + str(tem.id)
1003
            else:
1004
                before_me = True
1005
                execute_string += " device.team_id = " + str(tem.id)
1006
    if all_all:
1007
        before_me = True
1008
        execute_string = "SELECT * FROM devices AS devices"
1009

    
1010
    if not before_me:
1011
        execute_string = "SELECT * FROM devices AS devices WHERE devices.id = -1"
1012
    result = db.execute(execute_string)
1013
    return result
1014

    
1015

    
1016
def create_device_logs(db: Session, item: schemas.USBTempBase, dev_id: int, pc_id: int, date: datetime):
1017
    """
1018
    Creates new USB log for usb_logs database table
1019
    """
1020
    db_log = models.USBLog(pc_id=pc_id, timestamp=date, status=item.status, device_id=dev_id)
1021
    db.add(db_log)
1022
    db.commit()
1023
    db.refresh(db_log)
1024
    return db_log
1025

    
1026

    
1027
def get_users(db: Session, skip: int = 0, limit: int = 100):
1028
    """
1029
    Returns all users saved in database
1030
    """
1031
    return db.query(models.User).offset(skip).limit(limit).all()
1032

    
1033

    
1034
def find_user(db: Session, name: str):
1035
    """
1036
    Finds one user by given username
1037
    """
1038
    return db.query(models.User).filter(models.User.username == name).first()
1039

    
1040

    
1041
def find_user_byid(db: Session, id: int):
1042
    """
1043
    Finds one user by given id
1044
    """
1045
    return db.query(models.User).filter(models.User.id == id).first()
1046

    
1047

    
1048
def create_user(db: Session, name: str, passw: str, rol: str):
1049
    """
1050
    Creates new user
1051
    """
1052
    db_user = models.User(username=name, password=passw, role=rol)
1053
    db.add(db_user)
1054
    db.commit()
1055
    db.refresh(db_user)
1056
    return db_user
(2-2/6)