Esempio n. 1
0
async def create_user(user: NewUser,
                      request: Request,
                      db: Session = Depends(get_db),
                      current_user: User = Depends(
                          check_perm('/users/create_user'))):
    old_user = db.query(User).filter(
        or_(User.username == user.username, User.email == user.email)).first()
    if old_user:
        raise HTTPException(status_code=406, detail="创建的用户已经存在")
    user_dict = {
        "username": user.username,
        "email": user.email,
        "nick_name": user.nick_name,
        "is_active": user.is_active
    }
    new_user = User(**user_dict)
    new_record = deepcopy(new_user)
    new_user.convert_pass_to_hash(user.password)
    db.add(new_user)
    db.commit()
    # 调用数据修改记录器
    Record.create_operate_record(new_object=new_record,
                                 username=current_user.username,
                                 ip=request.client.host)
    return {"message": "用户创建成功"}
Esempio n. 2
0
async def cmdb_edit_type(edit_type: CMDBBase,
                         request: Request,
                         db: Session = Depends(get_db),
                         current_user: User = Depends(
                             check_perm('/cmdb/edit_type'))):
    old_type = db.query(CMDBType).filter(
        CMDBType.cmdb_type_id == int(edit_type.type_id)).first()
    if not old_type:
        raise HTTPException(status_code=406, detail="要修改的类型不存在")
    if old_type.cmdb_type_name != edit_type.type_name:
        # 说明修改了类型名,需要判断修改后的类型是否已经存在
        if db.query(CMDBType).filter(
                CMDBType.cmdb_type_name == edit_type.type_name).first():
            raise HTTPException(status_code=406, detail="修改的类型已存在")
    old_record = deepcopy(old_type)
    old_type.cmdb_type_name = edit_type.type_name
    old_type.cmdb_type_icon = edit_type.type_icon
    old_type.cmdb_type_label = edit_type.type_label
    new_record = deepcopy(old_type)
    db.add(old_type)
    db.commit()
    Record.create_operate_record(username=current_user.username,
                                 old_object=old_record,
                                 new_object=new_record,
                                 ip=request.client.host)
    return {"message": "类型修改成功"}
Esempio n. 3
0
async def edit_type_item(request: Request,
                         edit_item: CMDBItemBase,
                         db: Session = Depends(get_db),
                         current_user: User = Depends(
                             check_perm('/cmdb/edit_type_item'))):
    type_id = int(edit_item.item_id)
    old_item = db.query(CMDBItem).filter(CMDBItem.item_id == type_id).first()
    if not old_item:
        raise HTTPException(status_code=406, detail="要修改的属性不存在")
    # 判断是否存在
    if old_item.item_name != edit_item.item_name:
        if db.query(CMDBItem).filter(
                and_(CMDBItem.cmdb_type_id == int(edit_item.cmdb_type_id),
                     CMDBItem.item_name == edit_item.item_name)).first():
            raise HTTPException(status_code=406, detail="要修改的属性名已存在")
    if old_item.item_label != edit_item.item_label:
        if db.query(CMDBItem).filter(
                and_(CMDBItem.cmdb_type_id == int(edit_item.cmdb_type_id),
                     CMDBItem.item_label == edit_item.item_label)).first():
            raise HTTPException(status_code=406, detail="要修改的标签名已存在")
    old_record = deepcopy(old_item)
    old_item.item_name = edit_item.item_name
    old_item.item_label = edit_item.item_label
    new_record = deepcopy(old_item)
    db.add(old_item)
    db.commit()
    Record.create_operate_record(username=current_user.username,
                                 new_object=new_record,
                                 old_object=old_record,
                                 ip=request.client.host)
    return {"message": "属性修改成功"}
Esempio n. 4
0
async def edit_perm(perm_id: str,
                    perm_edit: PermBase,
                    request: Request,
                    db: Session = Depends(get_db),
                    current_user: User = Depends(
                        check_perm("/perm/edit_perm"))):
    # 查询
    perm = db.query(Permission).filter(
        Permission.perm_id == int(perm_id)).first()
    if not perm:
        raise HTTPException(status_code=406, detail="需要修改的权限不存在")
    # 判断是否重复
    if perm_edit.perm_name != perm.perm_name:
        old_perm = db.query(Permission).filter(
            Permission.perm_name == perm_edit.perm_name).first()
        if old_perm:
            raise HTTPException(status_code=406, detail="修改后的权限名称重复")
    if perm_edit.perm_interface != perm.perm_interface:
        old_perm = db.query(Permission).filter(
            Permission.perm_interface == perm_edit.perm_interface).first()
        if old_perm:
            raise HTTPException(status_code=406, detail="修改后的权限接口重复")
    old_perm = deepcopy(perm)
    perm.perm_name = perm_edit.perm_name
    perm.perm_interface = perm_edit.perm_interface
    new_perm = deepcopy(perm)
    db.add(perm)
    db.commit()
    Record.create_operate_record(username=current_user.username,
                                 new_object=new_perm,
                                 old_object=old_perm,
                                 ip=request.client.host)
    return {"message": "权限修改成功"}
Esempio n. 5
0
async def update_user(request: Request,
                      modify_user: ModifyUser,
                      db: Session = Depends(get_db),
                      current_user: User = Depends(
                          check_perm('/users/update_user'))):
    """
    用户名不可以修改
    """
    user = db.query(User).filter(User.username == modify_user.username).first()
    if user:
        old_user = deepcopy(user)
        if modify_user.password:
            user.convert_pass_to_hash(modify_user.password)
        user.is_active = modify_user.is_active
        user.email = modify_user.email
        user.nick_name = modify_user.nick_name
        new_user = deepcopy(user)
        db.add(user)
        db.commit()
        # 调用数据修改记录器
        Record.create_operate_record(old_object=old_user,
                                     new_object=new_user,
                                     username=current_user.username,
                                     ip=request.client.host)
        return {"message": "用户信息更新成功"}
    else:
        raise HTTPException(status_code=406, detail="用户不存在")
Esempio n. 6
0
async def add_perm(new_perm: PermBase, request: Request, db: Session = Depends(get_db),
                   current_user: User = Depends(check_perm('/perm/add_perm'))):
    # 查询是否存在
    old_perm = db.query(Permission).filter(
        or_(Permission.perm_name == new_perm.perm_name, Permission.perm_interface == new_perm.perm_interface)).first()
    if old_perm:
        raise HTTPException(status_code=406, detail="权限已存在")
    perm = Permission(perm_name=new_perm.perm_name, perm_interface=new_perm.perm_interface)
    new_record = deepcopy(perm)
    db.add(perm)
    db.commit()
    Record.create_operate_record(username=current_user.username, new_object=new_record, ip=request.client.host)
    return {"message": "权限已添加"}
Esempio n. 7
0
async def add_menu(menu: MenuBase, request: Request, db: Session = Depends(get_db),
                   current_user: User = Depends(check_perm('/menu/add_menu'))):
    # 确认menu不存在
    old_menu = db.query(Menu).filter(or_(Menu.menu_name == menu.menu_name, Menu.menu_flag == menu.menu_flag)).first()
    if old_menu:
        raise HTTPException(status_code=406, detail="菜单已存在")
    new_menu = Menu(menu_name=menu.menu_name, menu_flag=menu.menu_flag,
                    parent_id="0" if not menu.parent_id else int(menu.parent_id))
    new_record = deepcopy(new_menu)
    db.add(new_menu)
    db.commit()
    Record.create_operate_record(username=current_user.username, new_object=new_record, ip=request.client.host)
    settings.logger.info(f"新增菜单{menu.menu_name}")
    return {"message": "菜单新增成功"}
Esempio n. 8
0
async def add_role(role: RoleBase,
                   request: Request,
                   db: Session = Depends(get_db),
                   current_user: User = Depends(check_perm('/role/add_role'))):
    old_role = db.query(Role).filter(Role.role_name == role.role_name).first()
    if old_role:
        raise HTTPException(status_code=406, detail="创建的角色已存在")
    new_role = Role(role_name=role.role_name, role_desc=role.role_desc)
    new_record = deepcopy(new_role)
    db.add(new_role)
    db.commit()
    Record.create_operate_record(username=current_user.username,
                                 new_object=new_record,
                                 ip=request.client.host)
    return {"message": "角色添加成功"}
Esempio n. 9
0
async def delete_record(request: Request,
                        record_id: str,
                        db: Session = Depends(get_db),
                        current_user: User = Depends(
                            check_perm('/cmdb/delete_record'))):
    record = db.query(CMDBRecord).filter(
        CMDBRecord.cmdb_record_id == int(record_id)).first()
    if not record:
        raise HTTPException(status_code=406, detail="要删除的ID不存在")
    old_record = deepcopy(record)
    db.delete(record)
    db.commit()
    Record.create_operate_record(username=current_user.username,
                                 old_object=old_record,
                                 ip=request.client.host)
    return {"message": "记录删除成功"}
Esempio n. 10
0
async def cmdb_add_type(new_type: CMDBBase,
                        request: Request,
                        db: Session = Depends(get_db),
                        current_user: User = Depends(
                            check_perm('/cmdb/add_type'))):
    # type_name唯一
    old_type = db.query(CMDBType).filter(
        CMDBType.cmdb_type_name == new_type.type_name).first()
    if old_type:
        raise HTTPException(status_code=406, detail="创建的类型已经存在")
    cmdb_type = CMDBType(cmdb_type_name=new_type.type_name,
                         cmdb_type_icon=new_type.type_icon,
                         cmdb_type_label=new_type.type_label)
    new_record = deepcopy(cmdb_type)
    db.add(cmdb_type)
    db.commit()
    Record.create_operate_record(username=current_user.username,
                                 new_object=new_record,
                                 ip=request.client.host)
    return {"message": "类型创建成功"}
Esempio n. 11
0
async def add_record(request: Request,
                     new_record: Dict[str, str],
                     db: Session = Depends(get_db),
                     current_user: User = Depends(
                         check_perm('/cmdb/add_record'))):
    type_id = int(new_record.get("cmdb_type_id", "0"))
    if type_id == 0:
        raise HTTPException(status_code=406, detail="请传入cmdb_type_id")
    # 删除id就是记录详情了
    del new_record['cmdb_type_id']
    cmdb_record = CMDBRecord()
    cmdb_record.cmdb_type_id = type_id
    cmdb_record.cmdb_record_detail = new_record
    record = deepcopy(cmdb_record)
    db.add(cmdb_record)
    db.commit()
    Record.create_operate_record(username=current_user.username,
                                 new_object=record,
                                 ip=request.client.host)
    return {"message": "实例添加成功"}
Esempio n. 12
0
async def import_record(request: Request,
                        type_id: str,
                        file: UploadFile = File(...),
                        db: Session = Depends(get_db),
                        current_user: User = Depends(
                            check_perm('/cmdb/import_record'))):
    # 获取用户上传的文件并存储,命名规则:{type_name}-{username}-{时间戳}
    type_id = int(type_id)
    cmdb_type = db.query(CMDBType).filter(
        CMDBType.cmdb_type_id == type_id).first()
    if not cmdb_type:
        raise HTTPException(status_code=406, detail="上传的类型不存在")
    # 上传文件必须为Excel
    if not file.content_type == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":
        raise HTTPException(status_code=406, detail="请上传Excel文件")
    cmdb_type_name = cmdb_type.cmdb_type_name
    total_miles = str(int(round(time.time() * 1000)))
    store_filename = f"{cmdb_type_name}-{total_miles}-{file.filename}"
    content = await file.read()
    # 保存用户上传的文件
    with open(os.path.join(Settings.UPLOAD_FOLDER, store_filename),
              "wb+") as f:
        f.write(content)
    # 解析Excel
    excel = Excel(
        filepath=os.path.join(Settings.UPLOAD_FOLDER, store_filename))
    all_records = excel.import_cmdb_record()
    if len(all_records) == 0:
        raise HTTPException(status_code=406, detail="请填入具体数据")
    # record插入数据库
    for record in all_records:
        cmdb_record = CMDBRecord()
        cmdb_record.cmdb_type_id = type_id
        cmdb_record.cmdb_record_detail = record
        new_record = deepcopy(cmdb_record)
        db.add(cmdb_record)
        db.commit()
        Record.create_operate_record(username=current_user.username,
                                     new_object=new_record,
                                     ip=request.client.host)
    return {"all_records": all_records}
Esempio n. 13
0
async def add_type_desc(request: Request,
                        new_item: CMDBItemBase,
                        db: Session = Depends(get_db),
                        current_user: User = Depends(
                            check_perm('/cmdb/add_type_item'))):
    # 确认属性是否重复
    old_item = db.query(CMDBItem).filter(
        and_(
            CMDBItem.cmdb_type_id == new_item.cmdb_type_id,
            or_(CMDBItem.item_name == new_item.item_name,
                CMDBItem.item_label == new_item.item_label))).first()
    if old_item:
        raise HTTPException(status_code=406, detail="此属性已存在")
    item = CMDBItem(cmdb_type_id=int(new_item.cmdb_type_id),
                    item_name=new_item.item_name,
                    item_label=new_item.item_label)
    new_record = deepcopy(item)
    db.add(item)
    db.commit()
    Record.create_operate_record(username=current_user.username,
                                 new_object=new_record,
                                 ip=request.client.host)
    return {"message": "属性新增成功"}
Esempio n. 14
0
async def edit_menu(menu: MenuBase, request: Request, db: Session = Depends(get_db),
                    current_user: User = Depends(check_perm('/menu/edit_menu'))):
    # 确认menu不存在
    old_menu = db.query(Menu).filter(Menu.menu_id == int(menu.menu_id)).first()
    if not old_menu:
        raise HTTPException(status_code=406, detail="要修改的菜单不存在")
    # 确认菜单是否重复
    old_record = deepcopy(old_menu)
    if menu.menu_name != old_menu.menu_name:
        if db.query(Menu).filter(Menu.menu_name == menu.menu_name).first():
            raise HTTPException(status_code=406, detail="菜单名已存在")
    if menu.menu_flag != old_menu.menu_flag:
        if db.query(Menu).filter(Menu.menu_flag == menu.menu_flag).first():
            raise HTTPException(status_code=406, detail="菜单标识已存在")
    old_menu.menu_name = menu.menu_name
    old_menu.menu_flag = menu.menu_flag
    old_menu.parent_id = int(menu.parent_id)
    new_record = deepcopy(old_menu)
    db.add(old_menu)
    db.commit()
    Record.create_operate_record(username=current_user.username, old_object=old_record, new_object=new_record,
                                 ip=request.client.host)
    return {"message": "菜单修改成功"}
Esempio n. 15
0
async def edit_instance(request: Request,
                        edit_record: Dict[str, str],
                        db: Session = Depends(get_db),
                        current_user: User = Depends(
                            check_perm('/cmdb/edit_record'))):
    type_id = int(edit_record.get("cmdb_type_id", "0"))
    record_id = int(edit_record.get("cmdb_record_id", "0"))
    if type_id == 0 or record_id == 0:
        raise HTTPException(status_code=406, detail="请传入id")
    # 删除id就是记录详情了
    del edit_record["cmdb_type_id"]
    del edit_record["cmdb_record_id"]
    instance = db.query(CMDBRecord).filter(
        CMDBRecord.cmdb_record_id == record_id).first()
    old_record = deepcopy(instance)
    instance.cmdb_record_detail = edit_record
    new_record = deepcopy(instance)
    db.add(instance)
    db.commit()
    Record.create_operate_record(username=current_user.username,
                                 new_object=new_record,
                                 old_object=old_record,
                                 ip=request.client.host)
    return {"message": "实例修改成功"}
Esempio n. 16
0
def generate_date(period, amount):
    """
    This function generates random data for given models.
    """
    fps = 20
    dT = 1 / fps
    model_name = ['Ball3D', 'RobotArm', 'SCARA', 'Unicycle']

    human_start = [10, 0, 10, 0]
    robot_start = [1e5, 0, 1e5, 0]

    for k in range(amount):
        robot = RobotArm(SafeSet(), dT)
        human = HumanBall3D(MobileAgent(), dT, True)
        record = Record(period, dT, human.goals, robot.goals, human.x, robot.x)
        for i in range(fps * period):
            human.update(robot)
            human.move()
            if record.cnt < record.period * fps:
                record.human_moves[:, record.cnt] = human.x
                record.cnt = record.cnt + 1

        record.human_achieved = human.goal_achieved
        save_data('simulate_data', 'data_', record)
Esempio n. 17
0
    # define cell
    cell = CellRxDCaSpineCellCellCell(name="cell")
    cell.load_morpho(filepath='morphologies/swc/my.swc',
                     seg_per_L_um=1,
                     add_const_segs=11)
    cell.add_spines(spine_number=10,
                    head_nseg=10,
                    neck_nseg=10,
                    sections='dend')
    cell.add_rxd(rxd_obj=RxDCa(), sec_names="soma dend head neck")
    cell.add_rxd(rxd_obj=RxDpmca(), sec_names="soma dend head neck")
    cell.add_rxd(rxd_obj=RxDncx(), sec_names="head neck")

    # plots
    ps_cai = get_shape_plot(variable='cai', min_val=0, max_val=0.01)
    ps_v = get_shape_plot(variable='v', min_val=-70, max_val=40)
    rec = Record(cell.filter_secs("head[0]"), locs=1, variables='ica cai')

    # init and run
    h.finitialize(-65 * mV)
    # make_stim(cell)
    make_head_ca2_concentration(cell)
    h.cvode.re_init()
    run_sim(runtime=100,
            stepsize=0.1,
            init_sleep=3,
            delay_between_steps=50,
            plot_shapes=[ps_cai, ps_v])

    rec.plot()
if __name__ == '__main__':
    h.load_file('stdrun.hoc')

    # define cell
    cell = EbnerRxDCaSpineCell(name="cell")
    cell.load_morpho(filepath='morphologies/swc/my.swc', seg_per_L_um=1, add_const_segs=11)
    cell.add_spines(spine_number=10, head_nseg=10, neck_nseg=10, sections='dend')
    cell.add_soma_mechanisms()
    cell.add_apical_mechanisms(sections='dend head neck')
    cell.add_4p_ach_da_synapse(sec_names="head", loc=1)  # add synapse at the top of each spine's head

    # Create stims
    s1 = NetStimCell("stim_cell")
    stim1 = s1.add_netstim("stim1", start=WARMUP + 1)
    stim2 = s1.add_netstim("stim2", start=WARMUP + 100)

    # stimulation
    cell.add_netcons(source=stim1, weight=WEIGHT, delay=1, pp_type_name="SynACh", sec_names="head[0][0]")
    cell.add_netcons(source=stim2, weight=WEIGHT, delay=1, pp_type_name="SynDa", sec_names="head[0][0]")

    # create plots
    rec_4psyn = Record(cell.filter_point_processes(pp_type_name="Syn4PAChDa", sec_names="head[0][0]"), variables="LTD_pre w")

    # init and run
    h.finitialize(-70 * mV)
    run_sim(runtime=500, warmup=WARMUP)

    # plot
    rec_4psyn.plot()
    plt.show()
Esempio n. 19
0
                    neck_nseg=10,
                    sections='dend')
    cell.add_soma_mechanisms()
    cell.add_apical_mechanisms(sections='dend head neck')
    cell.add_4p_synapse(sec_names="head",
                        loc=1)  # add synapse at the top of each spine's head

    # stimulation
    stim = NetStimCell("stim_cell").add_netstim("stim1",
                                                start=WARMUP + 1,
                                                number=300,
                                                interval=1)
    cell.add_netcons(source=stim, weight=WEIGHT, delay=1)

    # create plots
    rec_w = Record(cell.filter_point_processes(pp_type_name="Syn4P",
                                               sec_names="head[0][0]"),
                   variables="w")
    rec_v = Record(cell.filter_secs(sec_names="head[0]"),
                   locs=1.0,
                   variables="v")

    # init and run
    h.finitialize(-70 * mV)
    run_sim(runtime=500, warmup=WARMUP)

    # plot
    rec_w.plot()
    rec_v.plot()
    plt.show()