def promote(confObj, newProjName, parProj, taskObj):
    check = confObj.projCheck(newProjName)
    if isinstance(check, str) and not check == confObj.projValid[3]:
        return check

    check = confObj.projStoreCheck(parProj)
    if isinstance(check, list):
        storeType = check[0]
        storeLoc = check[1]
        projFile = check[2]
    else:
        return check

    newProj = makeProj(confObj, projName, storeType, storeLoc, None, None)
    if isinstance(newProj, str):
        return newProj

    taskDat = taskObj.dumpDat()
    for key, value in taskDat.items():
        if (key in newProj.projDat\
                and not key == 'parent'\
                and not key == 'children'\
                and not key == 'assignee'\
                and not key == 'name'):
            newProj.projDat[key] = value
        if key == 'assignee':
            for i, j in taskDat['assignee'].items():
                newProj.projDat['team'][i] = j

    writeProj(newProj)
def copyProj(confObj, projName, newProjName, deleteold):
    proj = loadProj(confObj, projName)
    if isinstance(proj, str):
        return proj

    check = confObj.projStoreCheck(projName)
    if isinstance(check, list):
        storeType = check[0]
        storeLoc = check[1]
        projFile = check[2]
    else:
        return check

    if deleteold:
        output = deleteProj(confObj, projName)
        if isinstance(output, str):
            return output

    output = makeProj(confObj,
                      newProjName,
                      storeType,
                      storeLoc,
                      None,
                      dat=proj.dumpDat()[0])
    if isinstance(output, str):
        return output
def makeProj(confObj, projName, storeType, storeLoc, force=False,\
             dat=None, *args, **kwargs):
    names = projName.split('.')
    check = confObj.projCheck(projName)
    if isinstance(check, str) and (check.endswith(confObj.projValid[0]) or\
                                   check.endswith(confObj.projValid[1])):
        return check

    elif check.endswith(confObj.projValid[3]):
        if not force and cliUtils.getConfirmation(check+\
                '\nWould you like to overwrite it?'):
            deleteProj(projName)
        elif force:
            deleteProj(projName)

    check = confObj.projStoreCheck(projName)
    if isinstance(check, list):
        storeType = check[0]
        storeLoc = check[1]
        projFile = check[2]
    else:
        return check

    createdProj = projObj.projObj(projName, projFile, confObj=confObj, dat=dat)
    if len(names) > 1:
        check = confObj.projCheck(names[0])
        if check.endswith(confObj.projValid[2]):
            if not force:
                cliUtils.getConfirmation('Parent ' + check +
                                         '\nWould you like to create it?')

            createdProj.giveParent(names[0])
            parProj = makeProj(names[0], storeType=StoreType,\
                                  storeLoc=storeLoc, force=force)
            if isinstance(parProj, str):
                return parProj

            confObj.addProj(parProj, storeType, storeLoc)

        elif check.endswith(confObj.projValid[3]):
            parProj = loadProj(confObj, names[0])

        else:
            return check

        parProj.giveChild(names[-1])
        writeProj(parProj)

    writeProj(createdProj)
    confObj.addProj(createdProj, storeType, storeLoc)
    writeConf(confObj)
    return createdProj
def deleteProj(confObj, projName, storeType=None, storeLoc=None):
    names = projName.split('.')
    check = confObj.projCheck(projName)
    if isinstance(check, str) and (check.endswith(confObj.projValid[0]) or\
                                   check.endswith(confObj.projValid[1]) or \
                                   check.endswith(confObj.projValid[2])):
        return check

    check = confObj.projStoreCheck(projName)
    if isinstance(check, list):
        storeType = check[0]
        storeLoc = check[1]
        projFile = check[2]
    else:
        return check

    childList = []
    parProj = loadProj(confObj, names[0])
    if isinstance(parProj, str):
        return parProj

    if len(names) > 1:
        if cliUtils.getConfirmation('Are you sure you want to'+\
                ' delete this subproject'):

            os.remove(projFile)
            parProj.projDat['children'].remove(names[-1])
            writeProj(parProj)

    elif cliUtils.getConfirmation('Are you sure you want to'+\
            ' delete this project, its folder,'+\
            ' and contents?'):

        try:
            childList = parProj.projDat['children']
        except:
            childList = []
        shutil.rmtree(storeLoc)
        if childList:
            for i in childList:
                del confObj.confDat['session']['projs']['.'.join([projName,
                                                                  i])]

    del confObj.confDat['session']['projs'][projName]

    if confObj.confDat['session']['active'] == projName:
        makeActive(confObj)

    writeConf(confObj)
def loadProj(confObj, projName, storeType=None, storeLoc=None):
    names = projName.split('.')
    check = confObj.projCheck(projName)
    if isinstance(check, str) and (check.endswith(confObj.projValid[0]) or\
                                   check.endswith(confObj.projValid[1]) or \
                                   check.endswith(confObj.projValid[2])):
        return check

    check = confObj.projStoreCheck(projName)
    if isinstance(check, list):
        storeType = check[0]
        storeLoc = check[1]
        projFile = check[2]
    else:
        return check

    loadedProj = projObj.projObj(projName,
                                 projFile,
                                 dat=datIO.yamlRead(projFile))
    loadedProj.loadDat()
    return loadedProj