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

Data Header finish

parent ebff2c2f
Branches
No related tags found
No related merge requests found
Pipeline #369694 failed
No preview for this file type
import pandas as pd
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 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
......@@ -49,6 +49,7 @@ def index():
session['self_defined_labels'] = []
session['schema_selected'] = ''
session['show_all'] = False
session['data_header']={'event':[], 'measurement':[], 'segment':[], 'segmentData':[]}
print("4")
# Initialize inspector here, outside the inner if-else
print("4.5")
......@@ -169,7 +170,7 @@ def get_table_data():
table_columns = [column.name for column in table_instance.columns]
sorted_table_columns = sorted(table_columns)
# de-nested the JSON columns from the feature_columns
feature_columns = sorted_table_columns
if check_json_column(engine, table_name) != []:
json_column_names = check_json_column(engine, table_name)
......@@ -179,8 +180,6 @@ def get_table_data():
for key in jsonKeys:
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 })
......@@ -220,6 +219,34 @@ def add_label():
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):
insp = inspect(engine)
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):
print(json_column_names)
return json_column_names
def handle_json_column(engine, table_name, column_name):
insp = inspect(engine)
......@@ -251,8 +279,9 @@ def handle_json_column(engine, table_name, column_name):
conn.close()
jsonKeys = []
for row in result:
name = tuple(sorted(row[0].keys()))
for row in result: # row is a tuple, row[0] is a dictionary
# 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:
jsonKeys.append(name)
print(jsonKeys)
......
No preview for this file type
......@@ -15,6 +15,19 @@ class Observation_Spec:
def remove_feature(self, 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):
def __init__(self, time, type, object, label, features_name:list = None, feature:dict = 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