import json import uuid from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt from django.core import serializers from django.utils import timezone from MySQLdb import _mysql from vislib.models import SourceDataBase, SourceDataTable from common.utils.aes import pc def default_datetime(): now = timezone.now() return now @csrf_exempt def createSource(request): body_unicode = request.body.decode('utf-8') body = json.loads(body_unicode) host = body['host'] port = body.get('port', 3306) username = body.get('username') password = pc.encrypt(body.get('password')).decode('utf-8') database = body.get('database') base_alias = body.get('base_alias') creator = request.user source_id = uuid.uuid4() SourceDataBase.objects.create( source_id=source_id, host=host, port=port, username=username, password=password, database=database, base_alias=base_alias, creator=creator, is_private=True, status=1, updated_at=default_datetime() ) return JsonResponse({'code': 20000, 'message': 'success', 'data': {'id': source_id}}) @csrf_exempt def deleteSource(request): body_unicode = request.body.decode('utf-8') body = json.loads(body_unicode) source = SourceDataBase.objects.get(source_id=body['source_id']) source.delete() return JsonResponse({'code': 20000, 'message': 'success'}) @csrf_exempt def updateSource(request): body_unicode = request.body.decode('utf-8') body = json.loads(body_unicode) source = SourceDataBase.objects.get(source_id=body['source_id']) source.host = body['host'] source.port = body.get('port', 3306) source.username = body.get('username') if body.get('password'): source.password = pc.encrypt(body.get('password')).decode('utf-8') else: source = serializers.serialize('json', [source]) source = json.loads(source)[0]['fields'] source.password = source['password'] source.database = body.get('database') source.base_alias = body.get('base_alias') source.save() return JsonResponse({'code': 20000, 'message': 'success'}) @csrf_exempt def sourceList(request): sources = SourceDataBase.objects.filter(creator=request.user) sources = serializers.serialize('json', sources) sources = json.loads(sources) sourceArr = [] for source in sources: source['fields']['source_id'] = source['pk'] source['fields']['password'] = None sourceArr.append(source['fields']) return JsonResponse({'code': 20000, 'data': sourceArr}) @csrf_exempt def sourceDetail(request, sourceId): sourceItem = SourceDataBase.objects.get(source_id=sourceId) sourceItem = serializers.serialize('json', [sourceItem]) sourceItem = json.loads(sourceItem)[0] return JsonResponse({'code': 20000, 'message': 'success', 'data':sourceItem['fields'] }) @csrf_exempt def sourceTables(request, sourceId): json_data = [] try: tables = SourceDataTable.objects.filter(database=sourceId) tables = serializers.serialize('json', tables) tables = json.loads(tables) for table in tables: json_data.append(table['fields']) except Exception as e: print('no linked tables before', e) source = SourceDataBase.objects.get(source_id=sourceId) source = serializers.serialize('json', [source]) source = json.loads(source)[0]['fields'] password = source['password'].encode(('utf-8')) host = source['host'] username = source['username'] port = source['port'] password = pc.decrypt(password) database = source['database'] db=_mysql.connect( host=host, port=int(port), user=username, passwd=password, db=database ) db.query('show tables;') tables = db.store_result().fetch_row(maxrows=0, how=2) db.close() tables = list(tables) for i, table in enumerate(tables): tableName = list(table.values())[0].decode('utf-8') if next((x for x in json_data if x['table'] == tableName), None): print(tableName + ' linked') else: json_data.append({ 'table': tableName, 'status': 0 }) return JsonResponse({'code': 20000, 'message': 'success', 'data': json_data }) @csrf_exempt def sourceTableSave(request): body_unicode = request.body.decode('utf-8') body = json.loads(body_unicode) print(body) source_id = body['source_id'] SourceDataTable.objects.filter(database=source_id).delete() source = SourceDataBase.objects.get(source_id=source_id) for table in body['tables']: tableConfig = SourceDataTable.objects.create( id=uuid.uuid4(), database=source, table=table['table'], # table_alias=table['table_alias'], creator=request.user, status=table['status'], updated_at=default_datetime() ) tableConfig.save() return JsonResponse({'code': 20000, 'message': 'success' }) @csrf_exempt def sourceLinkedTables(request, sourceId): try: tables = SourceDataTable.objects.filter(database=sourceId) tables = serializers.serialize('json', tables) tables = json.loads(tables) json_data = [] for table in tables: json_data.append(table['fields']) except Exception as e: json_data = [] print(e) return JsonResponse({'code': 20000, 'message': 'success', 'data': json_data })