コード例 #1
0
def issue_fix(request):
    ''' api/issue/fix POST
    维保资产
    para: nid(int) 资产nid username(str) 维保人名
    '''
    nid, username = parse_args(request.body, 'nid', 'username')
    asset: Asset = Asset.objects.get(id=int(nid))
    if Issue.objects.filter(initiator=request.user,
                            asset=asset,
                            status='DOING').exists():
        return issue_conflict_error()
    handler = User.objects.get(username=username)
    Issue.objects.create(
        initiator=request.user,
        handler=handler,
        asset=asset,
        type_name='MAINTAIN',
    )
    # 更新资产状态
    asset.owner = handler
    asset.status = 'IN_MAINTAIN'
    asset._change_reason = '维保'
    asset.save(tree_update=True)
    message = f'{request.user.username} 向 {handler.username} 维保资产 {asset.name}'
    return gen_response(code=200, message=message)
コード例 #2
0
def asset_query(request):
    ''' api/asset/query POST
    para: name(str), category(str), description(str)
    '''
    args = parse_args(request.body,
                      'name',
                      'category',
                      'description',
                      'customKey',
                      'customValue',
                      name='',
                      category='',
                      description='',
                      customKey='',
                      customValue='')
    name, category, description, key, value = args
    assets = Asset.objects.filter(owner__department=request.user.department)
    assets = assets.filter(name__contains=name)
    assets = assets.filter(description__contains=description)
    if category != '':
        category = AssetCategory.objects.get(name=category)
        assets = assets.filter(category=category)
    if key != '':
        assets = AssetCustomAttr.search_custom_attr(key, value, assets)
    res = get_assets_list(assets)
    return gen_response(data=res, code=200)
コード例 #3
0
def issue_permit_require(request):
    '''
    api/issue/permit-require POST
    资产管理员同意员工的资产申领请求,并向员工分配资产。
    para:
        nid(int): require issue id
        selectedRows(List[int]): 资产id列表
    '''
    issue_id, asset_ids = parse_args(request.body, 'nid', 'selectedRows')
    if not asset_ids:
        return gen_response(code=204, message='没有指定任何资产')
    issue: RequireIssue = RequireIssue.objects.get(id=issue_id)
    assets = set()
    for asset_id in asset_ids:
        asset: Asset = Asset.objects.get(id=asset_id)
        assets.update(asset.get_entire_tree())
    for asset in assets:
        asset.owner = issue.initiator
        asset.status = 'IN_USE'
        asset._change_reason = '领用'
        asset.save()
        issue.asset.add(asset)
    issue.status = 'SUCCESS'
    issue.save()
    return gen_response(code=200, message=f"{request.user.username} 批准资产领用请求")
コード例 #4
0
def user_add(request):
    '''  api/user/add POST
    添加用户。
    para: name(str), department(str), role([...])
    return: code =
        200: success
        201: parameter error
        400: Validation Error when saving user
    '''

    name, department_id, roles = parse_args(request.body,
                                            'name',
                                            'department',
                                            'role',
                                            department='')
    try:
        department = Department.objects.get(id=department_id)
    except Department.DoesNotExist:
        department = Department.root()

    user = User(username=name, department=department)
    user.set_password('123456')
    user.full_clean()
    user.save()
    user.set_roles(roles)
    return gen_response(code=200, message=f'添加用户 {name}')
コード例 #5
0
def user_edit(request):
    '''  api/user/edit POST
    编辑用户。
    para: name(str), password(str), department_id(str), role([...])
    return: code =
        200: success
        201: parameter error
        202:no such user
    '''
    name, pwd, department_id, roles = parse_args(request.body,
                                                 'name',
                                                 'password',
                                                 'department',
                                                 'role',
                                                 department='')

    if name == 'admin':
        return gen_response(code=203, message="admin 的信息不能被修改")

    user = User.objects.get(username=name)
    if pwd != '':
        user.set_password(pwd)
    try:
        department = Department.objects.get(id=department_id)
    except Department.DoesNotExist:
        department = Department.root()
    user.department = department
    user.save()
    user.set_roles(roles)

    return gen_response(code=200, message=f'{user.username} 信息修改')
コード例 #6
0
def asset_edit(request):
    '''  api/asset/edit POST
    编辑资产
    可编辑的条目有:name, description, parent_id
    return: code =
        200: success
        201: parameter error
        202:no such asset
    '''
    nid, name, description, parent_id, custom = parse_args(request.body,
                                                           'nid',
                                                           'name',
                                                           'description',
                                                           'parent_id',
                                                           'custom',
                                                           parent_id='',
                                                           custom={})

    asset = Asset.objects.get(id=nid)
    try:
        parent = Asset.objects.get(id=parent_id)
    except ValueError:
        parent = None
    else:
        if parent.status != 'IDLE' or asset.status != 'IDLE':
            return gen_response(code=204, message='只能修改空闲资产间的父子关系')

    asset.name, asset.parent = name, parent
    asset.description = description
    try:
        asset.save()
        AssetCustomAttr.update_custom_attrs(asset, custom)
    except InvalidMove:
        return gen_response(code=203, message='无法指定自己成为自己的父资产')
    return gen_response(code=200, message=f'修改资产 {asset.name} 信息')
コード例 #7
0
def department_add(request):
    ''' api/department/add POST
    para: parent_id(int), name(str)
    return: code =
        200: success
    '''
    parent_id, name = parse_args(request.body, 'parent_id', 'name')
    parent = Department.objects.get(id=parent_id)
    Department.objects.create(name=name, parent=parent)
    return gen_response(code=200, message=f'添加部门 {name}')
コード例 #8
0
def require_asset_list(request):
    ''' api/issue/require-asset-list  POST
    同意资产领用时需要的某类空闲中资产列表
    para: category(str)
    '''
    category = parse_args(request.body, 'category')[0]
    category = AssetCategory.objects.get(name=category)
    assets = Asset.objects.filter(owner__department=request.user.department,
                                  status='IDLE',
                                  category=category)
    res = get_assets_list(assets)
    return gen_response(data=res, code=200)
コード例 #9
0
def department_edit(request):
    ''' api/department/edit POST
    para: id(int), name(str)
    return: code =
        200: success
    '''
    nid, name = parse_args(request.body, 'id', 'name')
    department = Department.objects.get(id=nid)

    old_name, department.name = department.name, name
    department.save()
    return gen_response(code=200, message=f'将部门 {old_name} 更名为 {name}')
コード例 #10
0
def user_exist(request):
    ''' api/user/exist POST
    用户名是否存在。
    para: name(str)
    return: exist(bool), code =
        200: success
        201: parameter error
    '''
    name = parse_args(request.body, 'name')[0]

    exist = User.objects.filter(username=name).exists()
    return gen_response(code=200, exist=exist)
コード例 #11
0
def category_add(request):
    ''' api/asset/category/add POST
    para: parent_id(int), name(str)
    return: code =
        200: success
    '''
    parent_id, category_name = parse_args(request.body, 'parent_id', 'name')
    parent = AssetCategory.objects.get(id=parent_id)
    try:
        AssetCategory.objects.create(name=category_name, parent=parent)
    except IntegrityError:
        return gen_response(code=203, message="类型名不能重复")
    return gen_response(code=200, message=f'添加资产类别 {category_name}')
コード例 #12
0
def user_change_password(request):
    ''' api/user/change-password POST
    更改自己的密码。
    para: oldPassword(str), newPassword(str)
    '''
    user = request.user
    old_pwd, new_pwd = parse_args(request.body, 'oldPassword', 'newPassword')

    if not user.check_password(old_pwd):
        return gen_response(message='旧密码错误', code=202)
    user.set_password(new_pwd)
    user.save()
    return gen_response(code=200, message=f'用户 {user.username} 密码更改')
コード例 #13
0
def asset_history(request):
    ''' api/asset/history POST
    para: nid(int)
    return: code = ...
    data = [
        {time(str), user(str), type(str), info(str)}, ...
    ]
    '''
    nid = parse_args(request.body, 'nid')[0]
    asset = Asset.objects.get(id=nid)
    history = asset.history.all()
    res = [gen_history(record) for record in history]
    return gen_response(code=200, data=res)
コード例 #14
0
def custom_attr_edit(request):
    ''' api/asset/custom/edit POST
    修改自定义属性
    para:
        - custom(list)
    '''
    attrs = parse_args(request.body, 'custom')[0]
    CustomAttr.objects.all().delete()
    for attr in attrs:
        try:
            CustomAttr.objects.create(name=attr)
        except IntegrityError:
            return gen_response(code=203, message='不能设置两个相同自定义属性')
    return gen_response(code=200, message='修改自定义属性')
コード例 #15
0
def category_edit(request):
    ''' api/asset/category/edit POST
    para: id(int), name(str)
    return: code =
        200: success
    '''
    category_id, name = parse_args(request.body, 'id', 'name')
    category = AssetCategory.objects.get(id=category_id)

    old_name, category.name = category.name, name
    try:
        category.save()
    except IntegrityError:
        return gen_response(code=203, message="类型名不能重复")
    return gen_response(code=200, message=f'将资产类别 {old_name} 更名为 {name}')
コード例 #16
0
def issue_handle(request):
    ''' api/issue/handle POST
    处理代办issue
    para:
        nid(int): issue id
        success(bool): 批准或拒绝
        type_name(str): issue name
    '''
    def fix(asset: Asset, issue: Issue):
        ''' 资产维保 成功或失败 后 '''
        asset.owner = issue.initiator
        asset.status = 'IN_USE'
        asset._change_reason = '维保结束'
        asset.save(tree_update=True)

    def return_success(asset: Asset, issue: Issue):
        ''' 资产退还成功后 '''
        asset.owner = issue.handler
        asset.status = 'IDLE'
        asset._change_reason = '退还'
        asset.save(tree_update=True)

    def transfer_success(asset: Asset, issue: Issue):
        ''' 资产转移成功后 '''
        asset.owner = issue.assignee
        asset._change_reason = '转移'
        asset.save(tree_update=True)

    issue_id, success, type_name = parse_args(request.body, 'nid', 'success',
                                              'type_name')

    if type_name == 'REQUIRE':
        issue: RequireIssue = RequireIssue.objects.get(id=issue_id)
    else:
        issue: Issue = Issue.objects.get(id=issue_id)
    issue.status = 'SUCCESS' if success else 'FAIL'
    issue.save()

    asset = issue.asset

    if type_name == 'MAINTAIN':
        fix(asset, issue)
    elif success and type_name == 'TRANSFER':
        transfer_success(asset, issue)
    elif success and type_name == 'RETURN':
        return_success(asset, issue)

    return gen_response(code=200, message=f"{request.user.username} 处理待办事项")
コード例 #17
0
def user_delete(request):
    ''' api/user/delete POST
    删除用户。
    para: name(str)
    return: code =
        200: success
        201: parameter error
        202: no such named user
        203: admin can't be deleted
    '''
    name = parse_args(request.body, 'name')[0]
    if name in ['admin', request.user.username]:
        return gen_response(message='不能删除自己或admin', code=203)
    user = User.objects.get(username=name)
    user.delete()
    return gen_response(code=200, message=f'删除用户 {name}')
コード例 #18
0
def issue_delete(request):
    ''' api/issue/delete POST
    删除issue.
    para:
        nid(int): issue id
        type_name(str): issue类型
    '''
    issue_id, type_name = parse_args(request.body, 'nid', 'type_name')
    if type_name == 'REQUIRE':
        issue: RequireIssue = RequireIssue.objects.get(id=issue_id)
    else:
        issue: Issue = Issue.objects.get(id=issue_id)
    if issue.status != 'DOING':
        return gen_response(code=203, message='已办结的事项不能删除')
    issue.delete()
    return gen_response(code=200, message=f"{request.user.username} 删除待办事项")
コード例 #19
0
def department_delete(request):
    ''' api/department/delete POST
    para: id(int)
    return: code =
        200: success
        201: parameter error
        202: 对应部门不存在
        203: 顶层部门不能删除
    '''
    nid = parse_args(request.body, 'id')[0]

    if int(nid) == Department.root().id:
        return gen_response(code=203, message='顶层部门不能删除')

    department = Department.objects.get(id=nid)
    department.delete()
    return gen_response(code=200, message=f'删除部门 {department.name}')
コード例 #20
0
def category_delete(request):
    ''' api/asset/category/delete POST
    para: id(int)
    return: code =
        200: success
        201: parameter error
        202: 对应部门不存在
        203: 顶层部门不能删除
    '''
    category_id = parse_args(request.body, 'id')[0]

    if int(category_id) == AssetCategory.root().id:
        return gen_response(code=203, message='顶级资产类型不能删除')

    category = AssetCategory.objects.get(id=category_id)
    category.delete()
    return gen_response(code=200, message=f'删除资产类别 {category.name}')
コード例 #21
0
def user_lock(request):
    ''' api/user/lock POST
    锁定用户
    para: username(str), active(0/1)
    return: code =
        200: success
        201: parameter error
        202:no such user
        203: admin can not be locked
    '''
    username, active = parse_args(request.body, 'username', 'active')
    if username in ['admin', request.user.username]:
        return gen_response(message='不能锁定自己或admin', code=203)
    user = User.objects.get(username=username)

    user.active = active
    user.save()
    return gen_response(code=200)
コード例 #22
0
def issue_return(request):
    ''' api/issue/return POST
    退还资产
    para: nid(int) 资产nid
    '''
    nid = parse_args(request.body, 'nid')[0]
    asset: Asset = Asset.objects.get(id=int(nid))
    if Issue.objects.filter(initiator=request.user,
                            asset=asset,
                            status='DOING').exists():
        return issue_conflict_error()
    Issue.objects.create(
        initiator=request.user,
        handler=asset.get_asset_manager(),
        asset=asset,
        type_name='RETURN',
    )
    message = f'{request.user.username} 请求退还资产 {asset.name}'
    return gen_response(code=200, message=message)
コード例 #23
0
def asset_retire(request):
    ''' api/asset/retire POST
    para: nid(int) 资产id, retire_family(bool) 是否清退关联资产
    '''
    nid, retire_family = parse_args(request.body,
                                    'nid',
                                    'retire_family',
                                    retire_family=False)
    asset: Asset = Asset.objects.get(id=int(nid))
    if asset.status != 'IDLE':
        return gen_response(code=203, message='只能清退空闲中的资产')
    asset.status = 'RETIRED'
    asset._change_reason = '清退'
    if retire_family:
        asset.save(tree_update=True)
    else:
        asset.parent = None
        asset.save()
        Asset.objects.filter(parent=asset).update(parent=None)
    return gen_response(code=200, message=f'清退资产 {asset.name}')
コード例 #24
0
def asset_allocate(request):
    ''' /api/asset/allocate POST
    调拨资产到请求者(资产管理员)的部门中
    para:  '''
    asset_id_list, department_id = parse_args(request.body, 'idList', 'id')
    department: Department = Department.objects.get(id=department_id)
    target_manager = department.get_asset_manager()
    if target_manager is None:
        return gen_response(code=203, message=f'{department.name} 没有资产管理员')
    assets = set()
    for nid in asset_id_list:
        asset: Asset = Asset.objects.get(id=nid)
        assets.update(asset.get_entire_tree())
    for asset in assets:
        asset.owner = target_manager
        asset._change_reason = '调拨'
        asset.save()
    return gen_response(
        code=200,
        message=f'{request.user.username} 向部门 {department.name} '
        f'调拨 {len(asset_id_list)}资产')
コード例 #25
0
def issue_transfer(request):
    ''' api/issue/transfer POST
    转移资产
    para: nid(int) 资产nid username(str) 转移人名
    '''
    nid, username = parse_args(request.body, 'nid', 'username')
    asset: Asset = Asset.objects.get(id=int(nid))
    if Issue.objects.filter(initiator=request.user,
                            asset=asset,
                            status='DOING').exists():
        return issue_conflict_error()
    manager = asset.get_asset_manager()
    assignee = User.objects.get(username=username)
    Issue.objects.create(
        initiator=request.user,
        handler=manager,
        assignee=assignee,
        asset=asset,
        type_name='TRANSFER',
    )
    message = f'{request.user.username} 请求向 {assignee.username} 转移资产 {asset.name}'
    return gen_response(code=200, message=message)
コード例 #26
0
def issue_require(request):
    ''' api/issue/require POST
    领用资产的新API
    para: category(str) 资产类别名 reason(str) 申领理由
    '''
    category, reason = parse_args(request.body,
                                  'category',
                                  'reason',
                                  reason='')
    category: AssetCategory = AssetCategory.objects.get(name=category)
    if RequireIssue.objects.filter(initiator=request.user,
                                   status='DOING',
                                   asset_category=category).exists():
        return gen_response(code=203, message='不能对同一类资产发起多个领用请求')
    manager = request.user.department.get_asset_manager()
    if manager is None:
        return gen_response(code=204, message='本部门暂无资产管理员,无法进行领用')
    RequireIssue.objects.create(initiator=request.user,
                                handler=manager,
                                asset_category=category,
                                reason=reason)
    return gen_response(
        code=200, message=f'{request.user.username} 请求领用 {category.name} 类型资产')
コード例 #27
0
def user_login(request):
    '''  api/user/login POST
    用户登录。
    para: username(str), password(str)
    return: code =
        201: parameter error
            status =
        0: success
        1: fall
    '''

    name, pwd = parse_args(request.body, 'username', 'password')
    user = User.objects.get(username=name)

    if not user.check_password(pwd):
        return gen_response(message='密码有误', status=1)
    if not user.active:
        return gen_response(message='用户不处于活跃状态', status=1)

    user.token = user.generate_jwt_token()
    user.save()

    return gen_response(token=user.token, status=0, message=f'{name} 登录')
コード例 #28
0
ファイル: sync.py プロジェクト: ioanachirca/es-parallel-scan
from app.utils import parse_args, get_arg_parser, init_es
from app.shards import scan_shard, get_shards_to_routing

if __name__ == '__main__':
    parser = get_arg_parser()
    args = parse_args(parser)

    es = init_es(args)

    shards_to_routing = get_shards_to_routing(es, args.index, args.doc_type)

    jobs = []
    for shard, routing in shards_to_routing.items():
        print(f"shard: {shard}, routing: {routing}")
        query = {"query": {"match_all": {}}}
        scan_shard(es, args.index, args.doc_type, query, routing,
                   lambda doc: print(doc))
コード例 #29
0
def main():
    options = parse_args()
    logger.info("Server start")
    uvicorn.run(app, host=options.host, port=options.port)
コード例 #30
0
from app.utils import (
    run_classifier,
    draw_boxes,
    get_video_source,
    log_metrics,
    parse_args,
    get_classifier,
    dump_results,
    detect_api,
)
from app.tasks import detect_and_compare
from app.redis import get_redis

if __name__ == '__main__':
    args = parse_args()

    video = get_video_source(args)

    # if args.redis:
    #     r = get_redis()
    #     p = r.pubsub(ignore_subscribe_messages=True)
    #     p.subscribe('ack')
    #     r.set('threshold', args.threshold)

    # TODO: perform this conditionally
    # r = get_redis()
    # r.set('q1', args.threshold)
    # r.set('q2', args.threshold)
    # r.set('q3', args.threshold)
    # r.set('q4', args.threshold)