Code Duplication    Length = 127-127 lines in 2 locations

myems-api/core/virtualmeter.py 2 locations

@@ 908-1034 (lines=127) @@
905
        resp.status = falcon.HTTP_200
906
        _ = id_
907
908
    @staticmethod
909
    def on_get(req, resp, id_):
910
        if 'API-KEY' not in req.headers or \
911
                not isinstance(req.headers['API-KEY'], str) or \
912
                len(str.strip(req.headers['API-KEY'])) == 0:
913
            access_control(req)
914
        else:
915
            api_key_control(req)
916
        if not id_.isdigit() or int(id_) <= 0:
917
            raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
918
                                   description='API.INVALID_VIRTUAL_METER_ID')
919
920
        cnx = mysql.connector.connect(**config.myems_system_db)
921
        cursor = cnx.cursor()
922
923
        query = (" SELECT id, name, uuid "
924
                 " FROM tbl_energy_categories ")
925
        cursor.execute(query)
926
        rows_energy_categories = cursor.fetchall()
927
928
        energy_category_dict = dict()
929
        if rows_energy_categories is not None and len(rows_energy_categories) > 0:
930
            for row in rows_energy_categories:
931
                energy_category_dict[row[0]] = {"id": row[0],
932
                                                "name": row[1],
933
                                                "uuid": row[2]}
934
935
        query = (" SELECT id, name, uuid, energy_category_id "
936
                 " FROM tbl_energy_items ")
937
        cursor.execute(query)
938
        rows_energy_items = cursor.fetchall()
939
940
        energy_item_dict = dict()
941
        if rows_energy_items is not None and len(rows_energy_items) > 0:
942
            for row in rows_energy_items:
943
                energy_item_dict[row[0]] = {"id": row[0],
944
                                            "name": row[1],
945
                                            "uuid": row[2]}
946
947
        query = (" SELECT id, name, uuid "
948
                 " FROM tbl_cost_centers ")
949
        cursor.execute(query)
950
        rows_cost_centers = cursor.fetchall()
951
952
        cost_center_dict = dict()
953
        if rows_cost_centers is not None and len(rows_cost_centers) > 0:
954
            for row in rows_cost_centers:
955
                cost_center_dict[row[0]] = {"id": row[0],
956
                                            "name": row[1],
957
                                            "uuid": row[2]}
958
959
        query = (" SELECT id, name, uuid, equation, energy_category_id, is_counted, cost_center_id, "
960
                 "        energy_item_id, description "
961
                 " FROM tbl_virtual_meters "
962
                 " WHERE id = %s ")
963
        cursor.execute(query, (id_,))
964
        row = cursor.fetchone()
965
        if row is None:
966
            raise falcon.HTTPError(status=falcon.HTTP_404, title='API.NOT_FOUND',
967
                                   description='API.VIRTUAL_METER_NOT_FOUND')
968
        else:
969
            meta_result = {"id": row[0],
970
                           "name": row[1],
971
                           "uuid": row[2],
972
                           "equation": row[3],
973
                           "energy_category": energy_category_dict.get(row[4], None),
974
                           "is_counted": True if row[5] else False,
975
                           "cost_center": cost_center_dict.get(row[6], None),
976
                           "energy_item": energy_item_dict.get(row[7], None),
977
                           "description": row[8],
978
                           "expression": {}}
979
980
        expression = dict()
981
982
        if meta_result["equation"] is not None:
983
            expression = {'equation': meta_result["equation"], 'variables': []}
984
985
            query_variables = (" SELECT v.id, v.name, v.meter_type, v.meter_id "
986
                               " FROM tbl_virtual_meters  vm, tbl_variables v "
987
                               " WHERE vm.id = %s AND v.virtual_meter_id = vm.id "
988
                               " ORDER BY v.name ")
989
            cursor.execute(query_variables, (meta_result["id"],))
990
            rows_variables = cursor.fetchall()
991
            if rows_variables is not None:
992
                for row_variable in rows_variables:
993
                    if row_variable[2].lower() == 'meter':
994
                        query_meter = (" SELECT m.name "
995
                                       " FROM tbl_meters m "
996
                                       " WHERE m.id = %s ")
997
                        cursor.execute(query_meter, (row_variable[3],))
998
                        row_meter = cursor.fetchone()
999
                        if row_meter is not None:
1000
                            expression['variables'].append({'id': row_variable[0],
1001
                                                            'name': row_variable[1],
1002
                                                            'meter_type': row_variable[2],
1003
                                                            'meter_id': row_variable[3],
1004
                                                            'meter_name': row_meter[0]})
1005
                    elif row_variable[2].lower() == 'offline_meter':
1006
                        query_meter = (" SELECT m.name "
1007
                                       " FROM tbl_offline_meters m "
1008
                                       " WHERE m.id = %s ")
1009
                        cursor.execute(query_meter, (row_variable[3],))
1010
                        row_meter = cursor.fetchone()
1011
                        if row_meter is not None:
1012
                            expression['variables'].append({'id': row_variable[0],
1013
                                                            'name': row_variable[1],
1014
                                                            'meter_type': row_variable[2],
1015
                                                            'meter_id': row_variable[3],
1016
                                                            'meter_name': row_meter[0]})
1017
                    elif row_variable[2].lower() == 'virtual_meter':
1018
                        query_meter = (" SELECT m.name "
1019
                                       " FROM tbl_virtual_meters m "
1020
                                       " WHERE m.id = %s ")
1021
                        cursor.execute(query_meter, (row_variable[3],))
1022
                        row_meter = cursor.fetchone()
1023
                        if row_meter is not None:
1024
                            expression['variables'].append({'id': row_variable[0],
1025
                                                            'name': row_variable[1],
1026
                                                            'meter_type': row_variable[2],
1027
                                                            'meter_id': row_variable[3],
1028
                                                            'meter_name': row_meter[0]})
1029
1030
        meta_result['expression'] = expression
1031
1032
        cursor.close()
1033
        cnx.close()
1034
        resp.text = json.dumps(meta_result)
1035
1036
1037
class VirtualMeterImport:
@@ 376-502 (lines=127) @@
373
        resp.status = falcon.HTTP_200
374
        _ = id_
375
376
    @staticmethod
377
    def on_get(req, resp, id_):
378
        if 'API-KEY' not in req.headers or \
379
                not isinstance(req.headers['API-KEY'], str) or \
380
                len(str.strip(req.headers['API-KEY'])) == 0:
381
            access_control(req)
382
        else:
383
            api_key_control(req)
384
        if not id_.isdigit() or int(id_) <= 0:
385
            raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
386
                                   description='API.INVALID_VIRTUAL_METER_ID')
387
388
        cnx = mysql.connector.connect(**config.myems_system_db)
389
        cursor = cnx.cursor()
390
391
        query = (" SELECT id, name, uuid "
392
                 " FROM tbl_energy_categories ")
393
        cursor.execute(query)
394
        rows_energy_categories = cursor.fetchall()
395
396
        energy_category_dict = dict()
397
        if rows_energy_categories is not None and len(rows_energy_categories) > 0:
398
            for row in rows_energy_categories:
399
                energy_category_dict[row[0]] = {"id": row[0],
400
                                                "name": row[1],
401
                                                "uuid": row[2]}
402
403
        query = (" SELECT id, name, uuid, energy_category_id "
404
                 " FROM tbl_energy_items ")
405
        cursor.execute(query)
406
        rows_energy_items = cursor.fetchall()
407
408
        energy_item_dict = dict()
409
        if rows_energy_items is not None and len(rows_energy_items) > 0:
410
            for row in rows_energy_items:
411
                energy_item_dict[row[0]] = {"id": row[0],
412
                                            "name": row[1],
413
                                            "uuid": row[2]}
414
415
        query = (" SELECT id, name, uuid "
416
                 " FROM tbl_cost_centers ")
417
        cursor.execute(query)
418
        rows_cost_centers = cursor.fetchall()
419
420
        cost_center_dict = dict()
421
        if rows_cost_centers is not None and len(rows_cost_centers) > 0:
422
            for row in rows_cost_centers:
423
                cost_center_dict[row[0]] = {"id": row[0],
424
                                            "name": row[1],
425
                                            "uuid": row[2]}
426
427
        query = (" SELECT id, name, uuid, equation, energy_category_id, is_counted, cost_center_id, "
428
                 "        energy_item_id, description "
429
                 " FROM tbl_virtual_meters "
430
                 " WHERE id = %s ")
431
        cursor.execute(query, (id_,))
432
        row = cursor.fetchone()
433
        if row is None:
434
            raise falcon.HTTPError(status=falcon.HTTP_404, title='API.NOT_FOUND',
435
                                   description='API.VIRTUAL_METER_NOT_FOUND')
436
        else:
437
            meta_result = {"id": row[0],
438
                           "name": row[1],
439
                           "uuid": row[2],
440
                           "equation": row[3],
441
                           "energy_category": energy_category_dict.get(row[4], None),
442
                           "is_counted": True if row[5] else False,
443
                           "cost_center": cost_center_dict.get(row[6], None),
444
                           "energy_item": energy_item_dict.get(row[7], None),
445
                           "description": row[8],
446
                           "expression": {}}
447
448
        expression = dict()
449
450
        if meta_result["equation"] is not None:
451
            expression = {'equation': meta_result["equation"], 'variables': []}
452
453
            query_variables = (" SELECT v.id, v.name, v.meter_type, v.meter_id "
454
                               " FROM tbl_virtual_meters  vm, tbl_variables v "
455
                               " WHERE vm.id = %s AND v.virtual_meter_id = vm.id "
456
                               " ORDER BY v.name ")
457
            cursor.execute(query_variables, (meta_result["id"],))
458
            rows_variables = cursor.fetchall()
459
            if rows_variables is not None:
460
                for row_variable in rows_variables:
461
                    if row_variable[2].lower() == 'meter':
462
                        query_meter = (" SELECT m.name "
463
                                       " FROM tbl_meters m "
464
                                       " WHERE m.id = %s ")
465
                        cursor.execute(query_meter, (row_variable[3],))
466
                        row_meter = cursor.fetchone()
467
                        if row_meter is not None:
468
                            expression['variables'].append({'id': row_variable[0],
469
                                                            'name': row_variable[1],
470
                                                            'meter_type': row_variable[2],
471
                                                            'meter_id': row_variable[3],
472
                                                            'meter_name': row_meter[0]})
473
                    elif row_variable[2].lower() == 'offline_meter':
474
                        query_meter = (" SELECT m.name "
475
                                       " FROM tbl_offline_meters m "
476
                                       " WHERE m.id = %s ")
477
                        cursor.execute(query_meter, (row_variable[3],))
478
                        row_meter = cursor.fetchone()
479
                        if row_meter is not None:
480
                            expression['variables'].append({'id': row_variable[0],
481
                                                            'name': row_variable[1],
482
                                                            'meter_type': row_variable[2],
483
                                                            'meter_id': row_variable[3],
484
                                                            'meter_name': row_meter[0]})
485
                    elif row_variable[2].lower() == 'virtual_meter':
486
                        query_meter = (" SELECT m.name "
487
                                       " FROM tbl_virtual_meters m "
488
                                       " WHERE m.id = %s ")
489
                        cursor.execute(query_meter, (row_variable[3],))
490
                        row_meter = cursor.fetchone()
491
                        if row_meter is not None:
492
                            expression['variables'].append({'id': row_variable[0],
493
                                                            'name': row_variable[1],
494
                                                            'meter_type': row_variable[2],
495
                                                            'meter_id': row_variable[3],
496
                                                            'meter_name': row_meter[0]})
497
498
        meta_result['expression'] = expression
499
500
        cursor.close()
501
        cnx.close()
502
        resp.text = json.dumps(meta_result)
503
504
    @staticmethod
505
    @user_logger