예제 #1
0
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
예제 #2
0
def delete_domain(data):

    dom = Domain(**data)
    TargetField.drop(domain_id=dom.id)
    dom.delete()

    return {"message": "Collection Deleted", "status": 'success'}, 200
예제 #3
0
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
예제 #4
0
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
예제 #5
0
def get_simple(domain_id):
    return list(TargetField().db(domain_id=domain_id).aggregate([{
        "$project": {
            'label': 1,
            'value': '$name',
            "type": 1
        }
    }]))
예제 #6
0
    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
예제 #7
0
def get_all_fields(domain_id):
    return TargetField.get_all(domain_id=domain_id)
예제 #8
0
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
예제 #9
0
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