Пример #1
0
def appCreateCatalog():
    "创建目录"
    curTimestamp = unit.getTimeInt()
    result = checkApiParam(True, [
        {"name": "parentId", "checkfunc": unit.checkParamForInt},
        {"name": "name", "checkfunc": lambda v: v if len(v) >= 1 and len(v) < 100 else None},
        {"name": "createTime", "checkfunc": unit.checkParamForTimestamp, "default": curTimestamp},
        {"name": "lastModifyTime", "checkfunc": unit.checkParamForTimestamp, "default": curTimestamp},
        {"name": "memo", "default": None},
        {"name": "helpInt", "default": None},
        {"name": "helpText", "default": None}])
    if not result[kParamForResult]:
        return result[kParamForErrorResponse]

    loginInfo = result[kParamForLoginInfo]
    param = result[kParamForRequestParams]

    #查询数据
    db = _getDbManager()
    parentItem = db.getCatalogByIdAndRootIds(param["parentId"], loginInfo.rootIdsString)
    if not parentItem:
        return responseHelp.buildErrorResponseData(responseHelp.kCmdUserError_CatalogIdInValid)

    #创建路径
    strPath = unit.makeUserCreateCatalogPath(parentItem[dataManager.kCatalogFieldPath], param["name"])
    if not strPath:
        return responseHelp.buildErrorResponseData(responseHelp.kCmdServerError_DbDataError)
    param["path"] = strPath

    item = db.makeCatalog(param)
    return responseHelp.buildSuccessResponseData(dataManager.buildCatalogInfo(item, db))
Пример #2
0
def appUpdateCatalog():
    result = checkApiParam(True, [
        {"name": "id", "checkfunc": unit.checkParamForInt},
        {"name": "parentId", "checkfunc": unit.checkParamForInt, "default": None},
        {"name": "name", "checkfunc": lambda v: v if len(v) >= 1 and len(v) < 100 else None, 
            "default": None},
        {"name": "memo", "default": None},
        {"name": "helpInt", "default": None},
        {"name": "helpText", "default": None}]) 

    if not result[kParamForResult]:
        return result[kParamForErrorResponse]

    loginInfo = result[kParamForLoginInfo]
    param = result[kParamForRequestParams]
    nId = param.pop("id")

    unit.filterNullValue(param)
    bOK = False
    if len(param) > 0:
        db = _getDbManager()
        bOK = db.updateCatalog(nId, param, loginInfo.rootIdsString)

    if bOK:
        item = db.getCatalogById(nId)
        return responseHelp.buildSuccessResponseData(dataManager.buildCatalogInfo(item, db))

    return responseHelp.buildErrorResponseData(responseHelp.kCmdUserError_NotModify)
Пример #3
0
def appGetCatalogs():
    "获取指定目录下的子目录信息"

    # 参数判断
    result = checkApiParam(True, [{"name": "pids", "checkfunc": unit.checkParamForIntList}])
    if not result[kParamForResult]:
        return result[kParamForErrorResponse]

    loginInfo = result[kParamForLoginInfo]
    strParentIds = result[kParamForRequestParams]["pids"]

    # 查询数据 
    db = _getDbManager()
    dbItems = db.getCatalogsByParentIds(strParentIds, loginInfo.rootIdsString)

    if strParentIds == "-1" and (not dbItems or len(dbItems) == 0):
        bOK, resp = _makeUserRootPath(loginInfo.userId)
        if not bOK:
            return resp
        else:
            dbItems = db.getCatalogsByParentIds(strParentIds, loginInfo.rootIdsString)

    #生成数据
    ltData = [];
    for item in dbItems:
        ltData.append(dataManager.buildCatalogInfo(item, db))
    return responseHelp.buildSuccessResponseData(ltData)
Пример #4
0
def appSetHelpInfo():
    "设置指定记录的辅助信息"

    # 参数判断
    result = checkApiParam(True, [
        {"name": "type", "checkfunc": unit.checkParamForInt},
        {"name": "id", "checkfunc": unit.checkParamForInt, "default": -1},
        {"name": "helpInt", "checkfunc": unit.checkParamForInt, "default": None},
        {"name": "helpText", "default": None}])
    if not result[kParamForResult]:
        return result[kParamForErrorResponse]

    userLoginInfo = result[kParamForLoginInfo]
    param = result[kParamForRequestParams]
    nType = param["type"]
    nId = userLoginInfo.userId if nType == 0 else param["id"]
    if nType not in (0, 1, 2) or nId <= 0:
        return responseHelp.buildErrorResponseData(responseHelp.kCmdUserError_Param)
    nHelpId = param["helpInt"]
    strHelpText = param["helpText"]

    # 设置
    if nHelpId != None or strHelpText != None:
        db = _getDbManager()
        db.setHelpInfo(nType, nId, nHelpId, strHelpText, userLoginInfo.rootIdsString)
        return responseHelp.buildSuccessResponseData(None)
    return responseHelp.buildErrorResponseData(kCmdUserError_Param)
Пример #5
0
def appGetHelpInfo():
    "获取指定记录的辅助信息"

    # 参数判断
    result = checkApiParam(True, [
        {"name": "type", "checkfunc": unit.checkParamForInt},
        {"name": "id", "checkfunc": unit.checkParamForInt, "default": -1}])
    if not result[kParamForResult]:
        return result[kParamForErrorResponse]

    userLoginInfo = result[kParamForLoginInfo]
    param = result[kParamForRequestParams]
    nType = param["type"]
    nId = userLoginInfo.userId if nType == 0 else param["id"]
    if nType not in (0, 1, 2) or nId <= 0:
        return responseHelp.buildErrorResponseData(responseHelp.kCmdUserError_Param)

    # 查询并返回数据
    db = _getDbManager()
    hi = db.getHelpInfo(nType, nId, userLoginInfo.rootIdsString)
    nLen = len(hi) if hi else 0
    ltData = {"helpInt": hi[0] if nLen > 0 else None,
              "helpText": hi[1] if nLen > 1 else None,
              "lastModifyTime": hi[2] if nLen > 2 else None}
    unit.filterNullValue(ltData)
    return responseHelp.buildSuccessResponseData(ltData)
Пример #6
0
def appGetShareFile(ext):
    "根据分享的KEY获取文件内容"
    result = checkApiParam(False, ("shareKey",))
    if not result[kParamForResult]:
        return result[kParamForErrorResponse]

    param = result[kParamForRequestParams]
    strFileName = cache.getAppFileCache().get(param["shareKey"])
    # print(strFileName)
    return responseHelp.sendFile(strFileName) if strFileName else \
            responseHelp.buildErrorResponseData(responseHelp.kCmdUserError_Param);
Пример #7
0
def appUploadingInfo():
    "获取所有正在上传的文件"
    result = checkApiParam(True, ())
    if not result[kParamForResult]:
        return result[kParamForErrorResponse]
    loginInfo = result[kParamForLoginInfo]
    # 查询数据
    db = _getDbManager();
    fileRows = db.getFileByUploading(loginInfo.userId)

    #生成数据
    ltData = dataManager.buildFileInfoList(fileRows, db)
    return responseHelp.buildSuccessResponseData(ltData)
Пример #8
0
def _getFileInfo(aOtherParams, aValideFileTypes):
    """获取指定文件资源,返回值参考 checkApiParam, 若成功时,返回值result[kParamForRequestParams]会加上
        "_x_file": 资源对应的全路径
        "_x_fileInfo": 在数据库中对应的Row信息

    :aOtherParam: 除了"id"之后的其它信息,必须为一个可变数组[]
    :aValideFileTypes: 有效的文件类型,一个list(int),None 表示不判断
    :returns: 参考 checkApiParam
    """
    param = aOtherParams if aOtherParams else []
    param.append({"name": "id", "checkfunc": unit.checkParamForInt})

    result = checkApiParam(True, param)
    if not result[kParamForResult]:
        return result

    loginInfo = result[kParamForLoginInfo]
    param = result[kParamForRequestParams]

    nId = param["id"]

    #获取文件信息
    db = _getDbManager();
    dbFile = db.getFileByIdAndRootIds(nId, loginInfo.rootIdsString)
    if dbFile is None:
        return False, responseHelp.buildErrorResponseData(responseHelp.kCmdUserError_NotResource), 301


    #文件类型判断
    if aValideFileTypes:
        nType = dbFile[dataManager.kFileFieldType];
        if nType not in aValideFileTypes:
            return False, responseHelp.buildErrorResponseData(responseHelp.kCmdUserError_ErrorFileTypeForOpt), 416

    #获取文件位置
    nCatalog = dbFile[dataManager.kFileFieldRealCatalogId]
    dbCatalog = db.getCatalogByIdAndRootIds(nCatalog, loginInfo.rootIdsString);
    if dbCatalog is None:
        appLog.logObject().error("数据库中的数据有误,找不到对应的路径信息=> 文件ID=%d" % nId);
        return False, responseHelp.buildErrorResponseData(responseHelp.kCmdServerError_DbDataError), 500

    #文件判断
    strFileName = os.path.join(dbCatalog[dataManager.kCatalogFieldPath], \
            dbFile[dataManager.kFileFieldFileName]);
    if not os.path.isfile(strFileName):
        appLog.logObject().error("找不到文件=> 文件ID=%d" % nId);
        return False, responseHelp.buildErrorResponseData(responseHelp.kCmdUserError_ResourceHasBeenRemove), 500

    param["_x_file"] = strFileName
    param["_x_fileInfo"] = dbFile
    return result
Пример #9
0
def appDeleteFiles():
    "获取指定目录下的文件"
    result = checkApiParam(True, ({"name": "ids", "checkfunc": unit.checkParamForIntList},))

    if not result[kParamForResult]:
        return result[kParamForErrorResponse]

    loginInfo = result[kParamForLoginInfo]
    param = result[kParamForRequestParams]

    # 查询数据
    db = _getDbManager()
    db.deleteFiles(param["ids"], loginInfo.rootIdsString)
    return responseHelp.buildSuccessResponseData("OK")
Пример #10
0
def appDeleteCatalog():
    "删除目录"
    result = checkApiParam(True, [{"name": "ids", "checkfunc": unit.checkParamForIntList}])
    if not result[kParamForResult]:
        return result[kParamForErrorResponse]

    loginInfo = result[kParamForLoginInfo]
    param = result[kParamForRequestParams]
    db = _getDbManager()
    try:
        db.deleteCatalogs(param["ids"], loginInfo.rootIdsString)
        return responseHelp.buildSuccessResponseData("OK")
    except Exception as e:
        return responseHelp.buildErrorResponseData(responseHelp.kCmdServerError_DeleteError)
Пример #11
0
def appUploadFileInfo():
    "上传文件信息"
    funcCheckStatus = lambda v: int(v) if int(v) in (defines.kFileStatusFromLocal, defines.kFileStatusFromUploading) else defines.kFileStatusFromLocal
    curTimestamp = unit.getTimeInt()
    result = checkApiParam(True, (
        {"name": "cid", "checkfunc": unit.checkParamForInt},
        {"name": "name", "checkfunc": lambda v: v if len(v) > 0 and len(v) <= 100 else None},
        {"name": "size", "checkfunc": unit.checkParamForInt},
        {"name": "type", "checkfunc": unit.checkParamForFileType},
        {"name": "ext", "checkfunc": lambda v: v if len(v) <= 10 else None},
        {"name": "statusForThumb", "checkfunc": funcCheckStatus, "default": defines.kFileStatusFromLocal},
        {"name": "statusForScreen", "checkfunc": funcCheckStatus, "default": defines.kFileStatusFromLocal},
        {"name": "createTime", "checkfunc": unit.checkParamForTimestamp, "default": curTimestamp},
        {"name": "importTime", "checkfunc": unit.checkParamForTimestamp, "default": curTimestamp},
        {"name": "lastModifyTime", "checkfunc": unit.checkParamForTimestamp, "default": curTimestamp},
        {"name": "duration", "checkfunc": lambda v: float(v), "default": None},
        {"name": "width", "checkfunc": unit.checkParamForInt, "default": None},
        {"name": "height", "checkfunc": unit.checkParamForInt, "default": None},
        {"name": "orientation", "checkfunc": unit.checkParamForInt, "default": None},
        {"name": "longitude", "checkfunc": unit.checkParamForDouble, "default": None},
        {"name": "latitude", "checkfunc": unit.checkParamForDouble, "default": None},
        {"name": "memo", "checkfunc": unit.checkParamForLess1024, "default": None},
        {"name": "helpInt", "checkfunc": unit.checkParamForInt, "default": None},
        {"name": "helpText", "default": None},))

    if not result[kParamForResult]:
        return result[kParamForErrorResponse]

    loginInfo = result[kParamForLoginInfo]
    param = result[kParamForRequestParams]
    nCatalogId = param.pop("cid")
    #目录信息
    db = _getDbManager()
    catalogRow = db.getCatalogByIdAndRootIds(nCatalogId, loginInfo.rootIdsString)
    if not catalogRow:
        return responseHelp.buildErrorResponseData(responseHelp.kCmdUserError_Param)

    strFileName = unit.buildOriginFileName(catalogRow[dataManager.kCatalogFieldPath], param["ext"])
    param["uploadUserId"] = loginInfo.userId
    param["fileName"] = strFileName
    param["statusForOrigin"] = defines.kFileStatusFromUploading
    param["uploadTime"] = unit.getTimeInt()
    nNewFileId = db.addFile(catalogRow[dataManager.kCatalogFieldRootId], nCatalogId, param)
    fileRow = db.getFileByIdAndRootIds(nNewFileId, None)
    funcForIdRelatePath = lambda : db.getCatalogIdRelatePathInfo(nCatalogId)
    return responseHelp.buildSuccessResponseData(dataManager.buildFileInfo(fileRow, funcForIdRelatePath))
Пример #12
0
def appUpdateFile():
    "上传文件信息"
    funcCheckStatus = lambda v: int(v) if int(v) in (defines.kFileStatusFromLocal, defines.kFileStatusFromUploading) else defines.kFileStatusFromLocal
    result = checkApiParam(True, (
        {"name": "id", "checkfunc": unit.checkParamForInt},
        {"name": "catalogId", "checkfunc": unit.checkParamForInt, "default": None},
        {"name": "name", "checkfunc": lambda v: v if len(v) > 0 and len(v) <= 100 else None, "default": None},
        {"name": "ext", "checkfunc": lambda v: v if len(v) <= 10 else None, "default": None},
        {"name": "size", "checkfunc": unit.checkParamForInt, "default": None},
        {"name": "type", "checkfunc": unit.checkParamForFileType, "default": None},
        {"name": "statusForThumb", "checkfunc": funcCheckStatus, "default": None},
        {"name": "statusForScreen", "checkfunc": funcCheckStatus, "default": None},
        {"name": "createTime", "checkfunc": unit.checkParamForTimestamp, "default": None},
        {"name": "importTime", "checkfunc": unit.checkParamForTimestamp, "default": None},
        {"name": "lastModifyTime", "checkfunc": unit.checkParamForTimestamp, "default": None},
        {"name": "duration", "checkfunc": lambda v: float(v), "default": None},
        {"name": "width", "checkfunc": unit.checkParamForInt, "default": None},
        {"name": "height", "checkfunc": unit.checkParamForInt, "default": None},
        {"name": "orientation", "checkfunc": unit.checkParamForInt, "default": None},
        {"name": "longitude", "checkfunc": unit.checkParamForDouble, "default": None},
        {"name": "latitude", "checkfunc": unit.checkParamForDouble, "default": None},
        {"name": "memo", "checkfunc": unit.checkParamForLess1024, "default": None},
        {"name": "helpInt", "checkfunc": unit.checkParamForInt, "default": None},
        {"name": "helpText", "default": None},))

    if not result[kParamForResult]:
        return result[kParamForErrorResponse]

    loginInfo = result[kParamForLoginInfo]
    param = result[kParamForRequestParams]
    nFileId = param.pop("id")
    #目录信息
    unit.filterNullValue(param)
    bOK = False
    if len(param) > 0:
        db = _getDbManager()
        bOK = db.updateFile(nFileId, param, loginInfo.rootIdsString)
    if bOK:
        fileRow = db.getFileByIdAndRootIds(nFileId, loginInfo.rootIdsString)
        funcForIdRelatePath = lambda : db.getCatalogIdRelatePathInfo(fileRow[dataManager.kFileFieldRealCatalogId])
        fileInfo = dataManager.buildFileInfo(fileRow, funcForIdRelatePath)
        return responseHelp.buildSuccessResponseData(fileInfo)
    return responseHelp.buildErrorResponseData(responseHelp.kCmdUserError_NotModify)
Пример #13
0
def appLogin():
    "登陆"
    result = checkApiParam(False, ["userName", "password"])
    if not result[kParamForResult]:
        return result[kParamForErrorResponse]

    param = result[kParamForRequestParams]
    db = _getDbManager()
    row = db.getUser(param["userName"], param["password"])
    if row is None:
        return responseHelp.buildErrorResponseData(responseHelp.kCmdUserError_LoginNamePassword)

    #查询根目录信息
    nUserId = row[dataManager.kUserFieldId]
    strUserName = row[dataManager.kUserFieldName]
    bOK, resp = _makeUserRootPath(nUserId)
    if not bOK:
        return resp

    userInfo = dataManager.buildUserInfo(row)
    return responseHelp.buildSuccessResponseData(userInfo)
Пример #14
0
def appGetFiles():
    "获取指定目录下的文件"

    result = checkApiParam(True, [
        {"name": "pageIndex", "checkfunc": lambda v: int(v) if int(v) >= 0 else None},
        {"name": "maxPerPage", "checkfunc": lambda v: int(v) if int(v) >= 10 and int(v) <= 10000 else 100, "default": 100},
        {"name": "rootIds", "checkfunc": unit.checkParamForIntList, "default": None},
        {"name": "pids", "checkfunc": unit.checkParamForIntList, "default": None},
        {"name": "types", "checkfunc": unit.checkParamForIntList, "default": None},
        {"name": "onlySelfUpload", "checkfunc": unit.checkParamForInt, "default": 0},
        {"name": "sort", "checkfunc": unit.checkParamForInt, "default": 0}])

    if not result[kParamForResult]: 
        return result[kParamForErrorResponse]

    loginInfo = result[kParamForLoginInfo]
    param = result[kParamForRequestParams]

    # 根目录判断
    rootIds = param["rootIds"]
    if not rootIds or not unit.judgeIntStringsInList(rootIds, loginInfo.rootIdList):
        rootIds = loginInfo.rootIdsString

    # 上传者信息
    uploadUserId = None
    if param["onlySelfUpload"] != 0:
        uploadUserId = loginInfo.userId

    # 查询数据
    db = _getDbManager();
    fileRows, pageInfo = db.getFiles(rootIds, param["pids"], param["types"], 
            uploadUserId,  param["sort"], param["pageIndex"], param["maxPerPage"])

    #生成数据
    ltData = dataManager.buildFileInfoList(fileRows, None)
    return responseHelp.buildSuccessResponseData({"list": ltData, "page": pageInfo});