Projekt

Obecné

Profil

Stáhnout (21.3 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
def get_devices_with_ids(db: Session, ids: []):
36
    """
37
    returns all devices with given ids
38
    """
39
    return db.query(models.Device).filter(models.Device.id.in_(ids)).all()
40

    
41
def get_devices_by_team(db: Session, team: int):
42
    """
43
    returns all devices with same team
44
    """
45
    return db.query(models.Device).filter(models.Device.team_id == team).all()
46

    
47
def create_device(db: Session, device: schemas.DeviceTemp):
48
    """
49
    creates new device with data from given DeviceBase object
50
    """
51
    db_device = models.Device(vendor_id=device.vendor_id, product_id=device.product_id,
52
                              serial_number=device.serial_number, inventory_number="", comment="")
53
    db.add(db_device)
54
    db.commit()
55
    db.refresh(db_device)
56
    return db_device
57

    
58

    
59
def get_license(db: Session, license_id: int):
60
    """
61
    returns one specific license by given id
62
    """
63
    return db.query(models.License).filter(models.License.id == license_id).first()
64

    
65

    
66
def get_licenses(db: Session, skip: int = 0, limit: int = 100):
67
    """
68
    returns all licenses in database
69
    """
70
    return db.query(models.License).offset(skip).limit(limit).all()
71

    
72

    
73
def find_license(db: Session, name: str):
74
    """
75
    finds one license by given string name
76
    """
77
    return db.query(models.License).filter(models.License.license_id == name).first()
78

    
79

    
80
def get_licenses_by_name(db: Session, name: str):
81
    return db.query(models.License).filter(models.License.name == name).all()
82

    
83

    
84
def create_license(db: Session, name: str, lic_id: str, expdate: date):
85
    """
86
    creates new license with given name and expiration date
87
    """
88
    db_license = models.License(name=name, license_id=lic_id, expiration_date=expdate)
89
    db.add(db_license)
90
    db.commit()
91
    db.refresh(db_license)
92
    return db_license
93

    
94

    
95
def get_license_devices(db: Session, license_id: int):
96
    """
97
    returns all entries in devices_licenses table with given license_id
98
    """
99
    return db.query(models.DeviceLicense).filter(models.DeviceLicense.license_id == license_id).all()
100

    
101

    
102
def find_devicelicenses_by_licid_array(db: Session, lcs: []):
103
    """
104
    Finds all device_licenses with license_id in given id array
105
    """
106
    return db.query(models.DeviceLicense).filter(models.DeviceLicense.license_id.in_(lcs)).all()
107

    
108

    
109
def get_device_licenses(db: Session, device_id: int):
110
    """
111
    returns all entries in devices_licenses table with given device_id
112
    """
113
    return db.query(models.DeviceLicense).filter(models.DeviceLicense.device_id == device_id).all()
114

    
115

    
116
def get_devicelicense_by_devicelicense(db: Session, device_id: int, license_id: int):
117
    """
118
    returns entry in devices_licenses table with given device id and license id
119
    """
120
    return db.query(models.DeviceLicense).filter(and_(models.DeviceLicense.device_id == device_id,
121
                                                      models.DeviceLicense.license_id == license_id)).first()
122

    
123

    
124
def get_bodydevicelicense_by_bodydevicelicense(db: Session, device_id: int, license_id: int):
125
    """
126
    returns entry in bodydevices_licenses table with given body device id and license id
127
    """
128
    return db.query(models.BodyDeviceLicense).filter(and_(models.BodyDeviceLicense.bodydevice_id == device_id,
129
                                                          models.BodyDeviceLicense.license_id == license_id)).first()
130

    
131

    
132
def get_license_bodydevice(db: Session, license_id: int):
133
    """
134
    returns all entries in bodydevices_licenses with given license_id
135
    """
136
    return db.query(models.BodyDeviceLicense).filter(models.BodyDeviceLicense.license_id == license_id).all()
137

    
138

    
139
def get_bodydevice_license(db: Session, device_id: int):
140
    """
141
    returns all entries in bodydevices_licenses with given license_id
142
    """
143
    return db.query(models.BodyDeviceLicense).filter(models.BodyDeviceLicense.bodydevice_id == device_id).all()
144

    
145

    
146
def create_device_license(db: Session, device: int, license: int, time: datetime):
147
    """
148
    creates new entry in devices_licenses table with device id, license id and time.
149
    """
150
    db_device_license = models.DeviceLicense(device_id=device, license_id=license,
151
                                             assigned_datetime=time)
152
    db.add(db_device_license)
153
    db.commit()
154
    db.refresh(db_device_license)
155
    return db_device_license
156

    
157

    
158
def delete_device_license(db: Session, device: int, license: int):
159
    """
160
    deletes entry in devices_licenses table with device id, license id and time.
161
    """
162
    db_device_license = get_devicelicense_by_devicelicense(db, device, license)
163
    db_lic = db.delete(db_device_license)
164
    db.commit()
165
    return db_lic
166

    
167

    
168
def delete_bodydevice_license(db: Session, device: int, license: int):
169
    """
170
    deletes entry in devices_licenses table with device id, license id and time.
171
    """
172
    db_device_license = get_bodydevicelicense_by_bodydevicelicense(db, device, license)
173
    db_lic = db.delete(db_device_license)
174
    db.commit()
175
    return db_lic
176

    
177

    
178
def create_body_device_license(db: Session, device: int, license: int, time: datetime):
179
    """
180
    creates new entry in devices_licenses table with device id, license id and time.
181
    """
182
    db_device_license = models.BodyDeviceLicense(bodydevice_id=device, license_id=license,
183
                                                 assigned_datetime=time)
184
    db.add(db_device_license)
185
    db.commit()
186
    db.refresh(db_device_license)
187
    return db_device_license
188

    
189

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

    
196

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

    
203

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

    
219

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

    
239

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

    
259

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

    
272

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

    
279

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

    
287

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

    
294

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

    
301

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

    
308

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

    
319

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

    
326

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

    
333

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

    
340

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

    
351

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

    
364

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

    
371

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

    
378

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

    
385

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

    
396

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

    
403

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

    
410

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

    
417

    
418
def create_body_device(db: Session, log: schemas.BodyDeviceTemp):
419
    """
420
    Creates new Body device
421
    """
422
    db_body = models.BodyDevice(serial_number=log.serial_number)
423
    db.add(db_body)
424
    db.commit()
425
    db.refresh(db_body)
426
    return db_body
427

    
428

    
429
def get_ld_logs(db: Session, skip: int = 0, limit: int = 100):
430
    """
431
    Returns all ld debugger logs in database
432
    """
433
    return db.query(models.LDLog).order_by(desc(models.LDLog.timestamp)).offset(skip).limit(limit).all()
434

    
435

    
436
def create_ld_logs(db: Session, item: schemas.LDTempBase, head_id: int, body_id: int, pc_id: int, date: datetime):
437
    """
438
    Creates new ld log for ld_logs database table
439
    """
440
    db_ld = models.LDLog(pc_id=pc_id, timestamp=date, status=item.status, head_id=head_id, body_id=body_id)
441
    db.add(db_ld)
442
    db.commit()
443
    db.refresh(db_ld)
444
    return db_ld
445

    
446

    
447
def get_logs(db: Session, skip: int = 0, limit: int = 100):
448
    """
449
    Returns all usb logs in database ordered by timestamp
450
    """
451
    return db.query(models.USBLog).order_by(desc(models.USBLog.timestamp)).offset(skip).limit(limit).all()
452

    
453

    
454
def get_log(db: Session, device_id: int, skip: int = 0, limit: int = 100):
455
    """
456
    Returns all usb logs in database sorted by id
457
    """
458
    return db.query(models.USBLog).filter(models.USBLog.device_id == device_id).offset(skip).limit(limit).all()
459

    
460

    
461
def find_filtered_logs(db: Session, logs: []):
462
    """
463
    Returns all usb logs with ids in given id array.
464
    """
465
    return db.query(models.USBLog).filter(models.USBLog.id.in_(logs)).order_by(desc(models.USBLog.timestamp)).all()
466

    
467

    
468
def find_filtered_ldlogs(db: Session, logs: []):
469
    """
470
    Returns all ld logs with ids in given id array.
471
    """
472
    return db.query(models.LDLog).filter(models.LDLog.id.in_(logs)).order_by(desc(models.LDLog.timestamp)).all()
473

    
474

    
475
def get_filtered_ldlogs(db: Session, pc: str, tema: str, lic: str):
476
    """
477
    Function creates query string used for filtering by pc username, team name and license name.
478
    Depending on selected filters assembles query string for database
479
    """
480
    execute_string = "SELECT * FROM ld_logs AS logs"
481
    pcs = find_pc_by_username(db, pc)
482
    if pc != "all":
483
        if pcs is not None:
484
            execute_string += "  WHERE logs.pc_id = " + str(pcs.id)
485
    if tema != "all":
486
        team = find_team(db, tema)
487
        if team is not None:
488
            devs = get_devices_by_team(db, team.id)
489
            d_ids = "("
490
            for p in devs:
491
                d_ids += str(p.id) + ", "
492
            def_d_ids = d_ids[:-2] + ")"
493
            if pc != "all" and pcs is not None:
494
                if len(def_d_ids) > 1:
495
                    execute_string += " AND logs.device_id IN " + def_d_ids
496
            else:
497
                if len(def_d_ids) > 1:
498
                    execute_string += " WHERE logs.device_id IN " + def_d_ids
499
    if lic != "all":
500
        license = get_licenses_by_name(db, lic)
501
        if license is not None:
502
            device_licenses = get_license_bodydevice(db, license.id)
503
            dev_ids = "("
504
            for dev in device_licenses:
505
                dev_ids += str(dev.bodydevice_id) + ", "
506
            defin_ids = dev_ids[:-2] + ")"
507
            if pc != "all" or tema != "all":
508
                if len(defin_ids) > 1:
509
                    execute_string += " AND logs.body_id IN " + defin_ids
510
            else:
511
                if len(defin_ids) > 1:
512
                    execute_string += " WHERE logs.body_id IN " + defin_ids
513

    
514
    # executing assembled query string
515
    result = db.execute(execute_string)
516
    return result
517

    
518

    
519
def get_filtered_logs(db: Session, pc: str, tema: str, lic: str):
520
    """
521
    Function creates query string used for filtering by pc username, team name and license name.
522
    Depending on selected filters assembles query string for database
523
    """
524
    execute_string = "SELECT * FROM usb_logs AS logs"
525
    pcs = find_pc_by_username(db, pc)
526
    if pc != "all":
527
        if pcs is not None:
528
            execute_string += "  WHERE logs.pc_id = " + str(pcs.id)
529
    if tema != "all":
530
        team = find_team(db, tema)
531
        if team is not None:
532
            devs = get_devices_by_team(db, team.id)
533
            d_ids = "("
534
            for p in devs:
535
                d_ids += str(p.id) + ", "
536
            def_d_ids = d_ids[:-2] + ")"
537
            if pc != "all" and pcs is not None:
538
                if len(def_d_ids) > 1:
539
                    execute_string += " AND logs.device_id IN " + def_d_ids
540
            else:
541
                if len(def_d_ids) > 1:
542
                    execute_string += " WHERE logs.device_id IN " + def_d_ids
543
    if lic != "all":
544
        license = get_licenses_by_name(db, lic)
545
        if license is not None:
546
            device_licenses = get_license_devices(db, license.id)
547
            dev_ids = "("
548
            for dev in device_licenses:
549
                dev_ids += str(dev.device_id) + ", "
550
            defin_ids = dev_ids[:-2] + ")"
551
            if pc != "all" or tema != "all":
552
                if len(defin_ids) > 1:
553
                    execute_string += " AND logs.device_id IN " + defin_ids
554
            else:
555
                if len(defin_ids) > 1:
556
                    execute_string += " WHERE logs.device_id IN " + defin_ids
557

    
558
    # executing assembled query string
559
    result = db.execute(execute_string)
560
    return result
561

    
562

    
563
def get_filtered_devices(db: Session, keyman_id: str, license_name: str, license_id: str, team: str):
564
    """
565
    returns filtered devices based on given atributes
566
    """
567
    execute_string = "SELECT * FROM devices AS device WHERE"
568
    before_me = False
569
    all_all = True
570
    if keyman_id != "all":
571
        all_all = False
572
        keyman_dev = find_device_by_serial(db, keyman_id)
573
        if keyman_dev != None:
574
            if before_me:
575
                execute_string += " AND device.id = " + str(keyman_dev.id)
576
            else:
577
                before_me = True
578
                execute_string += " device.id = " + str(keyman_dev.id)
579
    if license_name != "all":
580
        all_all = False
581
        license = get_licenses_by_name(db, license_name)
582
        if len(license) > 0:
583
            lic_ids = []
584
            for l in license:
585
                lic_ids.append(l.id)
586
            dev_lics = find_devicelicenses_by_licid_array(db, lic_ids)
587
            lic_ids = "("
588
            for l in dev_lics:
589
                lic_ids += str(l.device_id) + ", "
590
            def_lic_ids = lic_ids[:-2] + ")"
591
            if before_me:
592
                execute_string += " AND device.id IN " + def_lic_ids
593
            else:
594
                before_me = True
595
                execute_string += " device.id IN " + def_lic_ids
596
    if license_id != "all":
597
        all_all = False
598
        license = find_license(db, license_id)
599
        licen_devs = get_license_devices(db, license.id)
600
        ids = "("
601
        for lic in licen_devs:
602
            ids += str(lic.device_id) + ", "
603
        def_ids = ids[:-2] + ")"
604
        if license != None:
605
            if before_me:
606
                execute_string += " AND device.id IN " + def_ids
607
            else:
608
                before_me = True
609
                execute_string += " device.id IN " + def_ids
610
    if team != "all":
611
        all_all = False
612
        tem = find_team(db, team)
613
        if tem != None:
614
            if before_me:
615
                execute_string += " AND device.team_id = " + str(tem.id)
616
            else:
617
                before_me = True
618
                execute_string += " device.team_id = " + str(tem.id)
619
    if all_all:
620
        before_me = True
621
        execute_string = "SELECT * FROM devices AS devices"
622

    
623
    if not before_me:
624
        execute_string = "SELECT * FROM devices AS devices WHERE devices.id = -1"
625
    result = db.execute(execute_string)
626
    return result
627

    
628

    
629
def create_device_logs(db: Session, item: schemas.USBTempBase, dev_id: int, pc_id: int, date: datetime):
630
    """
631
    Creates new USB log for usb_logs database table
632
    """
633
    db_log = models.USBLog(pc_id=pc_id, timestamp=date, status=item.status, device_id=dev_id)
634
    db.add(db_log)
635
    db.commit()
636
    db.refresh(db_log)
637
    return db_log
638

    
639

    
640
def get_users(db: Session, skip: int = 0, limit: int = 100):
641
    """
642
    Returns all users saved in database
643
    """
644
    return db.query(models.User).offset(skip).limit(limit).all()
645

    
646

    
647
def find_user(db: Session, name: str):
648
    """
649
    Finds one user by given username
650
    """
651
    return db.query(models.User).filter(models.User.username == name).first()
652

    
653

    
654
def find_user_byid(db: Session, id: int):
655
    """
656
    Finds one user by given id
657
    """
658
    return db.query(models.User).filter(models.User.id == id).first()
659

    
660

    
661
def create_user(db: Session, name: str, passw: str, rol: str):
662
    """
663
    Creates new user
664
    """
665
    db_user = models.User(username=name, password=passw, role=rol)
666
    db.add(db_user)
667
    db.commit()
668
    db.refresh(db_user)
669
    return db_user
(2-2/6)