def addRobotWriteRequest(name, items, itempath, currentSize, tmpStoreName,
                         tmpDirOption = '', onlyMeta = False):
    logging.debug('addRobotWriteRequest: entered...')

    success,resources,robotJobsDir,tmpOutDir,searchFile,viewRoot,firstRoot, \
        robotPresent = get_resources(tmpDirOption = tmpDirOption)
    if not success:
        return (False, None, None)

    if not onlyMeta and not check_free_disk_space(currentSize, tmpOutDir):
        return (False, None, None)
            
    tmpImgDir,objPrefix = ryw_upload.attempt_just_make_tmpdir(
        tmpOutDir, 'Im_'+name[:3]+'_', '')
    if not tmpImgDir:
        return (False, None, None)

    ryw.give_news2('<BR>outgoing data image name: ' + tmpImgDir, logging.info)

    if not write_recipient_file(tmpImgDir, name):
        cleanup_image(tmpImgDir)
        return (False, None, None)

    repDir = os.path.join(tmpImgDir, 'repository')
    if not ryw.try_mkdir(repDir, 'addRobotWriteRequest'):
        cleanup_image(tmpImgDir)
        return (False, None, None)

    # noObjStore:
    #   not copy_objectstore(firstRoot, repDir, tmpStoreName) or \
    #   not copy_view(repDir, viewRoot) or \
    if not write_user_credentials(repDir, name) or \
       not copy_scripts(repDir) or \
       not copy_search_file(searchFile, repDir) or \
       not copy_reverse_lists(repDir) or \
       not copy_objects(items, itempath, repDir,
                        tmpImgDir, metaOnly = onlyMeta) or \
       not generate_html(items, itempath, repDir, tmpImgDir) or \
       not copy_autorunfiles(tmpImgDir):
        cleanup_image(tmpImgDir)
        return (False, None, None)

    ryw.give_news(' ', logging.info)
    ryw.give_news('done copying all data, now invoking the robot.',
                  logging.info)
    
#    success,jrq = write_robot_job_file(robotJobsDir, tmpImgDir, objPrefix, robotPresent = robotPresent)
#    if not success:
#        cleanup_image(tmpImgDir)
#        ryw.cleanup_path(jrq, 'addRobotWriteRequest:')
#        return (False, None, None)

    return (True, tmpImgDir, "blah")
def main_nonoverlap():
    ryw.check_logging(os.path.join(RepositoryRoot, "WWW", "logs"), "upload.log")
    logging.debug("ReadIncomingCDStack: entered...")

    success, numDiscs, resources, robotJobsDir, tmpIn = get_init_vals()
    if not success:
        sys.exit(1)

    freeGB = ryw.free_MB(tmpIn) / 1000.0
    ryw.give_news("current available disk space: " + repr(freeGB) + " GB.", logging.info)

    tmpdir, objPrefix = ryw_upload.attempt_just_make_tmpdir(tmpIn, "I_", "")
    if not tmpdir:
        ryw.give_bad_news("ReadIncomingCDStack: failed to make tmpdir.", logging.critical)
        sys.exit(1)

    ryw.give_news("begin copying incoming discs...", logging.info)

    jobFile = robot_read_all(robotJobsDir, objPrefix, numDiscs, tmpdir)
    if not jobFile:
        ryw_upload.cleanup_incoming(tmpdir, jobFile)
        sys.exit(1)

    # monitor the robot's job folder for completion of job.

    ryw.give_news("", logging.info)
    oldDone = []
    while True:
        ryw.give_news2("*", logging.info)
        time.sleep(5)
        logging.debug("ReadIncomingCDStack: done sleeping...")

        success, done, doneList = check_finished(jobFile, tmpdir)
        if not success:
            ryw_upload.cleanup_incoming(tmpdir, jobFile)
            sys.exit(1)

        if not done:
            success, doneList = check_partial_completion(tmpdir)
            if not success:
                ryw_upload.cleanup_incoming(tmpdir, jobFile)
                sys.exit(1)

        # process_finished_copies(tmpdir, doneList)
        print_done_discs(doneList, oldDone)
        oldDone = doneList

        if done:
            logging.debug("ReadIncomingCDStack: done.")
            break

    print_conclusion(doneList, tmpdir, jobFile)
def NOTUSED_main_overlap():
    ryw.check_logging(os.path.join(RepositoryRoot, "WWW", "logs"), "upload.log")
    logging.debug("ReadIncomingCDStack: entered...")

    success, numDiscs, resources, robotJobsDir, tmpIn = get_init_vals()
    if not success:
        sys.exit(1)

    freeGB = ryw.free_MB(tmpIn) / 1000.0
    ryw.give_news("ReadIncomingCDStack: current available disk space: " + repr(freeGB) + " GB.", logging.info)

    tmpdir, objPrefix = ryw_upload.attempt_just_make_tmpdir(tmpIn, "I_", "")
    if not tmpdir:
        ryw.give_bad_news("ReadIncomingCDStack: failed to make tmpdir.", logging.critical)
        sys.exit(1)

    jobFile = robot_read_all(robotJobsDir, objPrefix, numDiscs, tmpdir)
    if not jobFile:
        ryw_upload.cleanup_incoming(tmpdir, jobFile)
        sys.exit(1)

    # monitor the robot's job folder for completion of job
    # also periodically monitor the tmp folder for completed disk reads

    while True:
        ryw.give_news2("*", logging.info)
        time.sleep(5)
        logging.debug("ReadIncomingCDStack: done sleeping...")

        success, done, doneList = check_finished(jobFile, tmpdir)
        if not success:
            ryw_upload.cleanup_incoming(tmpdir, jobFile)
            sys.exit(1)

        if not done:
            success, doneList = check_partial_completion(tmpdir)
            if not success:
                ryw_upload.cleanup_incoming(tmpdir, jobFile)
                sys.exit(1)

        process_finished_copies(tmpdir, doneList)

        if done:
            logging.debug("ReadIncomingCDStack: done.")
            break

    logging.debug("ReadIncomingCDStack: removing robot job data: " + tmpdir + " " + jobFile)
    ryw_upload.cleanup_incoming(tmpdir, jobFile)
def obj_store_size_inKB_not_used(tmpdir=""):
    if tmpdir:
        ryw.give_news2('temp objectstore copied to: ' + tmpdir + '<BR>',
                       logging.info)
    ryw.give_news2('computing outgoing objectstore size...',
                   logging.info)
    
    try:
        resources = su.parseKeyValueFile(os.path.join(RepositoryRoot,
                                                      'Resources.txt'))
        objectstoreroots = resources['objectstore'].split(';')
        firstRoot = objectstoreroots[0]
        if tmpdir:
                tmpOutDir = tmpdir
        else:
                tmpOutDir = resources['tmpout']
    except:
        ryw.give_bad_news('obj_store_size_inKB: get_resources failed.',
                          logging.critical)
        return (False, None, None, None)

    tmpStoreDir,objPrefix = ryw_upload.attempt_just_make_tmpdir(
        tmpOutDir, 'outgoing_obj_store_', '')
    if not tmpStoreDir:
        ryw.give_bad_news('obj_store_size_inKB: failed to make tmpdir: ' +
                          tmpOutDir, logging.critical)
        return (False, None, None, None)

    tmpStoreName = os.path.join(tmpStoreDir, 'outgoing_store')

    try:
        success = ryw_copytree.copy_tree_diff_repo(firstRoot, tmpStoreName)
        if not success:
            raise 'copy_tree_diff_repo failed.'
    except:
        ryw.give_bad_news('obj_store_size_inKB: copy_tree_diff_repo failed: '+
                          firstRoot + ' -> ' + tmpStoreName, logging.critical)
        return (False, None, None, None)

    kB = ryw_disc.getRecursiveSizeInKB(tmpStoreName)
    logging.debug('obj_store_size_inKB: ' + tmpStoreName + ' = ' + str(kB))

    ryw.give_news2 (str(kB) + ' KB<BR>', logging.info)
    return (True, kB, tmpStoreDir, tmpStoreName)