Skip to content
Snippets Groups Projects
Commit c4066854 authored by Chieh Lin's avatar Chieh Lin
Browse files

Data Header finish

parent ebff2c2f
No related branches found
No related tags found
No related merge requests found
Pipeline #369694 failed
No preview for this file type
import pandas as pd import pandas as pd
from my_flask_app import app from my_flask_app import app
from .models.models import CustomTable, CustomColumn, Theme, CompressedDataType, RegType, RegRole from .models.models import CustomTable, CustomColumn, Theme, CompressedDataType, Observation_Spec, RegType, RegRole
from flask_sqlalchemy import SQLAlchemy from flask_sqlalchemy import SQLAlchemy
from flask import jsonify, redirect, render_template, request, session, url_for, json from flask import jsonify, redirect, render_template, request, session, url_for, json
from sqlalchemy import ARRAY, BIGINT, BOOLEAN, DOUBLE_PRECISION, FLOAT, INTEGER, JSON, NUMERIC, SMALLINT, TIMESTAMP, UUID, VARCHAR, MetaData, String, create_engine, text, inspect from sqlalchemy import ARRAY, BIGINT, BOOLEAN, DOUBLE_PRECISION, FLOAT, INTEGER, JSON, NUMERIC, SMALLINT, TIMESTAMP, UUID, VARCHAR, MetaData, String, create_engine, text, inspect
...@@ -49,6 +49,7 @@ def index(): ...@@ -49,6 +49,7 @@ def index():
session['self_defined_labels'] = [] session['self_defined_labels'] = []
session['schema_selected'] = '' session['schema_selected'] = ''
session['show_all'] = False session['show_all'] = False
session['data_header']={'event':[], 'measurement':[], 'segment':[], 'segmentData':[]}
print("4") print("4")
# Initialize inspector here, outside the inner if-else # Initialize inspector here, outside the inner if-else
print("4.5") print("4.5")
...@@ -169,7 +170,7 @@ def get_table_data(): ...@@ -169,7 +170,7 @@ def get_table_data():
table_columns = [column.name for column in table_instance.columns] table_columns = [column.name for column in table_instance.columns]
sorted_table_columns = sorted(table_columns) sorted_table_columns = sorted(table_columns)
# de-nested the JSON columns from the feature_columns
feature_columns = sorted_table_columns feature_columns = sorted_table_columns
if check_json_column(engine, table_name) != []: if check_json_column(engine, table_name) != []:
json_column_names = check_json_column(engine, table_name) json_column_names = check_json_column(engine, table_name)
...@@ -179,8 +180,6 @@ def get_table_data(): ...@@ -179,8 +180,6 @@ def get_table_data():
for key in jsonKeys: for key in jsonKeys:
feature_columns.append( column_name + str(key) ) if len(key) > 1 else feature_columns.append( column_name + str(key).replace(',', '')) feature_columns.append( column_name + str(key) ) if len(key) > 1 else feature_columns.append( column_name + str(key).replace(',', ''))
return jsonify({ 'html_table': html_table, 'table_columns': sorted_table_columns, 'feature_columns': feature_columns }) return jsonify({ 'html_table': html_table, 'table_columns': sorted_table_columns, 'feature_columns': feature_columns })
...@@ -220,6 +219,34 @@ def add_label(): ...@@ -220,6 +219,34 @@ def add_label():
return jsonify({'defined_labels': self_defined_labels}) return jsonify({'defined_labels': self_defined_labels})
@app.route('/add-data-header', methods=['POST'])
def add_data_header():
data_header = session.get('data_header', {'event':[], 'measurement':[], 'segment':[], 'segmentData':[]})
data = request.json
type = data.get('type') if data.get('type') != None else ''
label = data.get('label') if data.get('label') != None else ''
object_column = data.get('object_column') if data.get('object_column') != None else ''
value_list = data.get('value_list') if data.get('value_list') != None else []
if type == 'event':
observation = Observation_Spec(type, label, value_list)
data_header['event'].append(observation.to_dict())
elif type == 'measurement':
observation = Observation_Spec(type, label, value_list)
data_header['measurement'].append(observation.to_dict())
elif type == 'segment':
observation = Observation_Spec(type, label, value_list)
data_header['segment'].append(observation.to_dict())
elif type == 'segmentData':
observation = Observation_Spec(type, label, value_list)
data_header['segmentData'].append(observation.to_dict())
print("88888")
print(data_header)
session['data_header'] = data_header
return jsonify({'data_header': data_header})
def check_json_column(engine, table_name): def check_json_column(engine, table_name):
insp = inspect(engine) insp = inspect(engine)
schema = getTableSchema(table_name) if insp.dialect.name == 'postgresql' else insp.default_schema_name schema = getTableSchema(table_name) if insp.dialect.name == 'postgresql' else insp.default_schema_name
...@@ -233,6 +260,7 @@ def check_json_column(engine, table_name): ...@@ -233,6 +260,7 @@ def check_json_column(engine, table_name):
print(json_column_names) print(json_column_names)
return json_column_names return json_column_names
def handle_json_column(engine, table_name, column_name): def handle_json_column(engine, table_name, column_name):
insp = inspect(engine) insp = inspect(engine)
...@@ -251,8 +279,9 @@ def handle_json_column(engine, table_name, column_name): ...@@ -251,8 +279,9 @@ def handle_json_column(engine, table_name, column_name):
conn.close() conn.close()
jsonKeys = [] jsonKeys = []
for row in result: for row in result: # row is a tuple, row[0] is a dictionary
name = tuple(sorted(row[0].keys())) # print(row[0])
name = tuple(sorted(row[0].keys()))if type(row[0]) == dict else json.loads(row[0]).keys()
if name not in jsonKeys: if name not in jsonKeys:
jsonKeys.append(name) jsonKeys.append(name)
print(jsonKeys) print(jsonKeys)
......
No preview for this file type
...@@ -15,6 +15,19 @@ class Observation_Spec: ...@@ -15,6 +15,19 @@ class Observation_Spec:
def remove_feature(self, name): def remove_feature(self, name):
self.features_name.remove(name) self.features_name.remove(name)
def to_dict(self):
return {
'type': self.type,
'label': self.label,
'features_name': self.features_name
}
@staticmethod
def from_dict(data):
observation_spec = Observation_Spec(data['type'], data['label'], data['features_name'])
return observation_spec
class Obesrvation(Observation_Spec): class Obesrvation(Observation_Spec):
def __init__(self, time, type, object, label, features_name:list = None, feature:dict = None): def __init__(self, time, type, object, label, features_name:list = None, feature:dict = None):
super().__init__(type, label, features_name=None) super().__init__(type, label, features_name=None)
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment