119 lines
3.6 KiB
Python
Executable File
119 lines
3.6 KiB
Python
Executable File
import os
|
|
|
|
import mongoengine
|
|
from bson import ObjectId
|
|
from mongoengine import connect as mongo_connect
|
|
from pandas import DataFrame
|
|
|
|
|
|
def connect_mongo_db(username=os.environ['MONGO_USER'] ,
|
|
password=os.environ['MONGO_PASSWD'] ,
|
|
host=os.environ['MONGO_URI'],
|
|
dbname=os.environ['MONGO_DB'] ):
|
|
|
|
c = mongo_connect(dbname,
|
|
username=username,
|
|
password=password,
|
|
host=host,
|
|
authentication_source='admin',
|
|
alias='dblabtests')
|
|
|
|
|
|
def mongo_upload_results(resultsmodel, results: DataFrame, datamodel,
|
|
data: DataFrame, filehash: str, org_id: ObjectId,
|
|
project_id: ObjectId, material_id: ObjectId,
|
|
user_id: ObjectId):
|
|
|
|
for idx, res in results.iterrows():
|
|
|
|
#upload results
|
|
meta['filehash'] = filehash
|
|
meta['org_id'] = org_id
|
|
meta['project_id'] = project_id
|
|
meta['material'] = material_id
|
|
meta['user_id'] = user_id
|
|
|
|
#check if result in db
|
|
#n = CITTSiffness.objects(**meta).count()
|
|
|
|
# write data
|
|
data_dict = res.to_dict()
|
|
data_dict.update(meta)
|
|
|
|
f = resultsmodel(**data_dict).save()
|
|
|
|
# upload data
|
|
data_sel = data[idx_fit]
|
|
|
|
# required data
|
|
data_out = dict(
|
|
time=data_sel.index,
|
|
F=list(data_sel['F']),
|
|
N=list(data_sel['N']),
|
|
s_hor_1=list(data_sel['s_hor_1']),
|
|
s_hor_2=list(data_sel['s_hor_2']),
|
|
s_hor_sum=list(data_sel['s_hor_sum']),
|
|
)
|
|
#optional data
|
|
for col in ['S_piston']:
|
|
if col in data_sel.columns:
|
|
data_out[col] = data_sel[col]
|
|
|
|
g = datamodel(result=f.id, **data_out).save()
|
|
|
|
|
|
def mongo_get_results(resultsmodel, results: DataFrame, datamodel,
|
|
data: DataFrame, filehash: str, org_id: ObjectId,
|
|
project_id: ObjectId, material_id: ObjectId,
|
|
user_id: ObjectId):
|
|
|
|
return True
|
|
|
|
def fetch_recursive(data, fetch_parameter=['norm', 'limits', 'assign_machine']):
|
|
|
|
fields = data._fields
|
|
|
|
data_out = data.to_mongo().to_dict()
|
|
|
|
for par in fetch_parameter:
|
|
if par in fields.keys():
|
|
|
|
try:
|
|
# if is LazyReferenceField
|
|
if isinstance(fields[par], mongoengine.fields.LazyReferenceField):
|
|
d = data[par].fetch()
|
|
else:
|
|
d = data[par]
|
|
|
|
except:
|
|
continue
|
|
|
|
if d is None:
|
|
continue
|
|
|
|
data_out[par] = d.to_mongo().to_dict()
|
|
|
|
return data_out
|
|
|
|
def mongo_to_dict(data, drop_parameters=['_cls','user_id', 'org_id', 'project_id']):
|
|
'''
|
|
data: dict
|
|
|
|
'''
|
|
for key in list(data.keys()):
|
|
if key in drop_parameters:
|
|
del data[key] # Remove the unwanted key
|
|
elif isinstance(data[key], dict):
|
|
mongo_to_dict(data[key]) # Recurse into nested dictionaries
|
|
elif isinstance(data[key], list): # Add this line to process lists
|
|
for i, item in enumerate(data[key]):
|
|
if isinstance(item, ObjectId):
|
|
data[key][i] = str(item)
|
|
elif isinstance(item, dict):
|
|
mongo_to_dict(item, drop_parameters) # Recurse into nested dictionaries in list
|
|
else:
|
|
# process data
|
|
if isinstance(data[key], ObjectId):
|
|
data[key] = str(data[key])
|
|
|
|
return data |