def fields_from_file(file, domain_id): col_field = { 'MANDATORY': 'mandatory', 'DESCRIPTION': 'description', 'FIELD': 'label', 'EDITABLE': 'editable', 'TYPE': 'type' } wb = xlrd.open_workbook(file_contents=file.read()) sh = wb.sheet_by_index(0) first_row = [] # The row where we stock the name of the column for col in range(sh.ncols): first_row.append(sh.cell_value(0, col)) fields_data = [] for row in range(1, sh.nrows): elm = {} for col in range(sh.ncols): data_field_name = col_field[first_row[col]] elm[data_field_name] = sh.cell_value(row, col) if elm.get('mandatory', None): elm.setdefault('rules', []).append({'type': EmptyCheck.id}) fields_data.append(elm) TargetField.drop(domain_id=domain_id) for data in fields_data: save_field(data, domain_id) return
def delete_domain(data): dom = Domain(**data) TargetField.drop(domain_id=dom.id) dom.delete() return {"message": "Collection Deleted", "status": 'success'}, 200
def delete_super_domain(data): super_dom = SuperDomain(**data).load() if super_dom.id: dms = Domain.get_all(query={'super_domain_id': super_dom.id}) dm: Domain for dm in dms: TargetField.drop(domain_id=dm.id) dm.delete() User.remove_domain_for_users(super_dom.id) super_dom.delete() return super_dom
def delete_field(data, domain_id): tf = TargetField(**data).load(domain_id=domain_id) if tf.is_used(domain_id): return { "status": "fail", "message": "Target Field cannot be deleted." }, 409 elif Mapping.is_using_field(tf.name, domain_id): return { "status": "fail", "message": "Target Field is used in mapping." }, 409 tf.delete(domain_id=domain_id) return {"status": "success", "message": "Target Field deleted."}, 200
def get_simple(domain_id): return list(TargetField().db(domain_id=domain_id).aggregate([{ "$project": { 'label': 1, 'value': '$name', "type": 1 } }]))
def from_dao_to_dto(dao: TargetField, domain_id): dto = DTOFields() dto.__dict__ = {**dao.__dict__, "rules": []} dto.id = dao.id if dao.ref_type_id: ref_type_obj = ReferenceType().load({'_id': dao.ref_type_id}) ref_type = dict(value=ref_type_obj.id, label=ref_type_obj.label) dto.ref_type = ref_type else: dto.ref_type = None dto.rules = [] for rule in dao.rules: if "property" in rule and rule["property"]: tf = TargetField().load({'name': rule["property"]}, domain_id=domain_id) rule["property"] = {'value': tf.name, 'label': tf.label} dto.rules.append(rule) return dto
def get_all_fields(domain_id): return TargetField.get_all(domain_id=domain_id)
def save_field(data, domain_id): target_field = TargetField(**data).load(domain_id=domain_id) if not target_field.id: identifier = uuid.uuid4().hex.upper() new_dom = TargetField( **{ 'id': identifier, 'created_on': datetime.datetime.utcnow(), 'name': camelCase(data['label']) }) target_field = new_dom target_field.label = data['label'] # target_field.name = data['name'] target_field.description = data.get('description', None) # target_field.category = data.get('category', None) target_field.type = data['type'] target_field.mandatory = data.get('mandatory', False) target_field.editable = data.get('editable', False) target_field.rules = data.get('rules', []) target_field.modified_on = datetime.datetime.utcnow() target_field.save(domain_id=domain_id) return target_field
def save_field(data, domain_id): dom = Domain(**{'id': domain_id}).load() if dom.id: target_field = TargetField(**data).load(domain_id=domain_id) original_field = copy(target_field) if not target_field.id: identifier = uuid.uuid4().hex.upper() new_dom = TargetField( **{ 'id': identifier, 'created_on': datetime.datetime.utcnow(), 'name': camelCase(data['label']) }) target_field = new_dom target_field.label = data['label'] target_field.description = data.get('description', None) target_field.type = data['type'] target_field.mandatory = data.get('mandatory', False) target_field.editable = data.get('editable', False) target_field.rules = data.get('rules', []) target_field.modified_on = datetime.datetime.utcnow() target_field.ref_type_id = data.get('ref_type_id', None) if original_field.id: if original_field.type != target_field.type: if FlowContext().db().find_one({ "domain_id": domain_id, "columns": { "$in": [target_field.name] } }): return { 'status': 'fail', 'message': 'Unable to change Field Type After Upload' }, 409 target_field.save(domain_id=domain_id) else: return {"status": "fail", "message": "Domain does exist"}, 409 return {"status": "success", "message": "Field Created"}, 200