def write_file(self, fullFileName):
        """10/24/08, called by ChapterListFormHandle.py."""

        if self.chapterList == None or self.chapterList == {}:
            #
            # then we remove the chapter list file.
            #
            ryw.db_print_info_browser('ChapterList.write_file: ' + \
                                      'chapterList is empty.', 41)
                              
            if ryw.cleanup_path(fullFileName,
                                'ChapterList.write_file'):
                return True
                
            ryw.give_bad_news('ChapterList.write_file:' +
                              'failed to remove file', logging.error)
            return False

        try:
            su.pickdump(self.chapterList, fullFileName)
        except:
            ryw.give_bad_news('ChapterList.write_file: pickdump failed: ' +
                              fullFileName, logging.error)
            return False
                
        ryw.db_print_info_browser('ChapterList.write_file success: ' +
                                  fullFileName, 41)
        return True
def out_done(tmpImgDir, mapDict):
    path = os.path.join(tmpImgDir, 'data_map')
    try:
        su.pickdump(mapDict, path)
    except:
        ryw.give_bad_news('out_done: pickdump failed: ' + path, logging.error)
        return False

    logging.debug('out_done: done writing map file: ' + path)
    return True
    def __init__(self, logdir, logfile, reverseListsFile, exclusive,
                 skipLock = False, searchFile = None,
                 repositoryRoot = None,
                 allowNullSearchFile = False):
        """raises exceptions.
        skipLock is set to True when called by merging incoming:
        the incoming ReverseLists file is not locked."""

        if logdir and logfile:
            ryw.check_logging(logdir, logfile)
        #logging.debug('ReverseLists: initializing: ' + repr(logdir) + ' ' +
        #              repr(logfile) + ' ' + reverseListsFile)

        self.reverseListsFile = reverseListsFile
        self.lockfile = reverseListsFile + '_LOCK'
        self.exclusive = exclusive
        self.skipLock = skipLock
        self.searchFile = searchFile
        self.repositoryRoot = repositoryRoot

        if not allowNullSearchFile:
            if not searchFile or not repositoryRoot:
                raise NameError('ReverseLists.__init__: ' +
                                'bad searchFile or ' +
                                'bad repositoryRoot.')

        if not skipLock:
            logging.info('ReverseLists.__init__: skipping locking.')
            if not self._ReverseLists__create_lock_file():
                raise NameError('ReverseLists.__init__: ' +
                                '__create_lock_file failed.')

        try:
            ryw.restore_cleanup_old_version(reverseListsFile)
        except:
            pass
        
        if not os.path.exists(reverseListsFile):
            logging.warning('ReverseLists.__init__: reverseListsFile ' +
                            'not found: ' + reverseListsFile)
            self.reverseDict = {}
            try:
                su.pickdump(self.reverseDict, reverseListsFile)
            except:
                ryw.give_bad_news('ReverseLists.__init__: pickdump ' +
                                  'failed.', logging.critical)
                raise NameError('ReverseLists.__init__: __lock failed')
            
        if not self._ReverseLists__read_reverse_lists_file():
            ryw.give_bad_news(
                'ReverseLists.__init__: ' +
                '__read_reverse_lists_file failed: ' +
                reverseListsFile, logging.critical)
            raise NameError('ReverseLists.__init__: ' +
                            '__read_reverse_lists_file failed')
Esempio n. 4
0
def write_tmp_metafile(meta, tmpdir):
    """write the attributes to a temporary metafile."""

    metafile = tmpdir + '.META'

    try:
        su.pickdump(meta, metafile)
        logging.debug('temporary meta file written.')
        return (True, metafile)
    except:
        ryw.give_bad_news(
            'fatal_error: failed to write temporary metafile: '+metafile,
            logging.critical)
        return (False, metafile)
Esempio n. 5
0
def empty_download_queue(rfpath):
    logging.debug("empty_download_queue: entered...")
    if not os.path.exists(rfpath):
        logging.debug("empty_download_queue: queue does not exist: " + rfpath)
        give_news("download queue already empty.", logging.info)
        return

    try:
        su.pickdump(set([]), rfpath)
    except:
        give_bad_news("empty_download_queue: failed to pickdump: " + rfpath, logging.warning)
        return

    logging.debug("empty_download_queue: done:" + rfpath)
Esempio n. 6
0
def write_meta(metaPath, meta, paths):
    #
    # if this fails, we need to restore the old meta file and old done flag.
    #
    try:
        su.pickdump(meta, metaPath)
        ryw.db_print_info_browser('write_meta: ' + repr(meta), 101)
    except:
        ryw.give_bad_news('write_meta: su.pickdump failed: ' + metaPath,
                          logging.critical)
        restore_old_meta(paths, metaPath)
        return False
        
    logging.debug('write_meta: metadata successfully written: ' + metaPath)
    return True
def write_reqs(rfpath, reqs):
    tmppath = rfpath + '.TMP'
    try:
        su.pickdump(reqs, tmppath)
    except:
        ryw.give_bad_news('fatal_error: write_reqs: pickdump failed: ' +
                          tmppath, logging.critical)
        return (False, tmppath, None)

    success,bakpath = ryw.make_tmp_file_permanent(tmppath, rfpath)
    if not success:
        return (False, tmppath, bakpath)

    logging.debug('write_reqs: file write succeeded.')
    return (True, tmppath, bakpath)
    def __write_to_disk(self):
        tmppath = self.reverseListsFile + '.TMP'
        try:
            su.pickdump(self.reverseDict, tmppath)
        except:
            ryw.give_bad_news('ReverseLists.add: pickdump failed.',
                              logging.critical)
            return False

        success,bakpath = ryw.make_tmp_file_permanent(
            tmppath, self.reverseListsFile)
        ryw.cleanup_path(tmppath, '_write_to_disk: cleanup, tmppath:')
        ryw.cleanup_path(bakpath, '_write_to_disk: cleanup, bakpath:')
        ryw.db_print('write_to_disk: written to disk...', 11)
        return success
    def write(self, file_name=None):
        if file_name is not None:
            self.file_name = file_name

        requests = set(self)

        tmp_file_name = self.file_name + '.TMP'
        bak_file_name = self.file_name + '.BAK'

        su.pickdump(requests, tmp_file_name)

        if os.path.exists(self.file_name):
            if os.path.exists(bak_file_name):
                os.remove(bak_file_name)
            os.rename(self.file_name, bak_file_name)

        os.rename(tmp_file_name, self.file_name)
Esempio n. 10
0
def process_download_requests(mydir, username):
    dlrq = os.path.join(mydir, 'downloadrequestqueue')
    if not os.path.exists(dlrq):
        logging.debug('process_download_requests: no incoming queue found.')
        return True

    try:
        newrq = su.pickload(dlrq)
    except:
        ryw.give_bad_news(
            'process_download_requests: failed to load new queue: ' + dlrq,
            logging.error)
        return False

    logging.debug('process_download_requests: found new queue: ' +
                  repr(newrq))

    oldrqfile = os.path.join(RepositoryRoot, 'QUEUES', username)

    oldrq = set([])
    if os.path.exists(oldrqfile):
        try:
            oldrq = su.pickload(oldrqfile)
        except:
            ryw.give_bad_news(
                'process_download_requests: failed to load old queue: ' +
                oldrqfile, logging.error)
            oldrq = set([])
    
    newrq = newrq.union(oldrq)
    logging.debug('process_download_requests: new queue: ' + repr(newrq))

    try:
        su.pickdump(newrq, oldrqfile)
    except:
        ryw.give_bad_news(
            'process_download_requests: failed to write new queue back: ' +
            oldrqfile, logging.error)
        return False
    return True
Esempio n. 11
0
def add_to_object_store(values, data, objectstoreroot, objectid, version,
                        auxDir, cloneVersion=False):
    """put (DATA, META, DONE) in the object store."""

    ##################################################
    # check free disk space.
    ##################################################
    if not cloneVersion and \
       not ryw_uploadObj.check_free_space(values, objectstoreroot):
        return (False, None, None, None, None, None)
    
    ##################################################
    # acquire prefix.
    ##################################################
    try:
        prefix = objectstore.nameversiontoprefix(objectstoreroot, objectid,
                                                 version)
    except:
        ryw.give_bad_news(
            'fatal_error: add_to_object_store: objectstore.nameversiontoprefix() failed.',
            logging.critical)
        return (False, None, None, None, None, None)
    
    datapath = prefix + '_DATA'
    metapath = prefix + '_META'
    donepath = prefix + '_DONE'
    auxpath  = prefix + '_AUXI'

    ##################################################
    # create parent directory.
    ##################################################
    parent = None
    try:
        parent = su.createparentdirpath(prefix)
        logging.debug('add_to_object_store: created parent dir: ' + parent)
    except:
        ryw.give_bad_news(
            'fatal_error: add_to_object_store: su.createparentdirpath() failed.',
            logging.critical)
        return (False, parent, None, None, None, None)
    
    if os.path.exists(donepath):
        ryw.give_news(
            'add_to_object_store: destination object already exists: ' +
            donepath, logging.warning)
        return (True, parent, datapath, metapath, auxpath, donepath)

    datapath = os.path.abspath(os.path.normpath(datapath))
    if (not cloneVersion):
        data = os.path.abspath(os.path.normpath(data))
        logging.debug('add_to_object_store: ' + datapath + ' ' +
                      metapath + ' ' + donepath + '.  source: ' + data)
    auxpath = os.path.abspath(os.path.normpath(auxpath))


    ##################################################
    # move data into the object store.
    ##################################################
    if cloneVersion:
        try:
            os.mkdir(datapath)
            ryw.db_print_info_browser('add_to_object_store: mkdir: ' +
                                      datapath, 29)
        except:
            ryw.give_bad_news(
                'fatal_error: add_to_object_store: cloneVersion mkdir: ' +
                datapath, logging.critical)
            return (False, parent, datapath, None, None, None)

        #
        # now deal with cloning a list, if necessary.
        #
        isList = ryw_meta.isList(values)
        if isList:
            baseName = os.path.basename(data)
            dirName = os.path.dirname(data)
            ryw.db_print2('UploadObject.add_to_object_store: basename: ' +
                          baseName, 44)
            ryw.db_print2('UploadObject.add_to_object_store: dirname: ' +
                          dirName, 44)
            destPath = os.path.join(datapath, baseName)
            srcChapterPath = os.path.join(dirName,
                                          ChapterList.CHAPTER_LIST_NAME)
            destChapterPath = os.path.join(datapath,
                                           ChapterList.CHAPTER_LIST_NAME)
            try:
                shutil.copyfile(data, destPath)
                ryw.db_print_info_browser(
                    'add_to_object_store: ' +
                    data + ' --> ' + destPath, 36)
                if os.path.exists(srcChapterPath):
                    shutil.copyfile(srcChapterPath, destChapterPath)
                    ryw.db_print_info_browser(
                        'UploadObject.add_to_object_store: ' +
                        srcChapterPath + ' --> ' + destChapterPath, 44)
                else:
                    ryw.db_print_info_browser(
                        'UploadObject.add_to_object_store: no chapter file.',
                        44)
            except:
                ryw.give_bad_news(
                    'add_to_object_store: failed to copy selection file.',
                    logging.critical)
                return (False, parent, datapath, None, None, None)
        
    elif os.path.isdir(data):
        try:
            mymove(data, datapath)
            logging.debug('add_to_object_store: moved dir: ' + data + ' ' +
                          datapath)
        except:
            ryw.give_bad_news(
                'fatal_error: add_to_object_store: move dir failed: ' +
                data + ' ' + datapath,
                logging.critical)
            return (False, parent, datapath, None, None, None)
        
    else:
        try:
            os.mkdir(datapath)
            mymove(data, os.path.join(datapath, os.path.basename(data)))
            logging.debug('add_to_object_store: moved file: ' + data + ' ' +
                          os.path.join(datapath, os.path.basename(data)))
        except:
            ryw.give_bad_news(
                'fatal_error: add_to_object_store: move file failed: ' +
                data + ' ' + datapath,
                logging.critical)
            return (False, parent, datapath, None, None, None)

    ##################################################
    # put metadata in the object store.
    ##################################################
    try:
        su.pickdump(values, metapath)
        logging.debug('add_to_object_store: written metapath: ' + metapath)
    except:
        ryw.give_bad_news(
            'fatal_error: add_to_object_store: su.pickdump() failed.',
            logging.critical)
        return (False, parent, datapath, metapath, None, None)

    ##################################################
    # put aux files in the object store.
    ##################################################
    try:
        if auxDir and os.path.exists(auxDir) and os.path.isdir(auxDir):
            mymove(auxDir, auxpath)
            logging.debug('add_to_object_store: moved auxpath: ' + auxpath)
    except:
        ryw.give_bad_news(
            'add_to_object_store: moving aux directory failed: ' + auxDir +
            ' -> ' + auxpath, logging.critical)
        return (False, parent, datapath, metapath, auxpath, None)


    ##################################################
    # put DONE flag in the object store.
    ##################################################
    try:
        f = open(donepath, 'w')
        f.close()
        logging.debug('add_to_object_store: written donepath: ' + donepath)
    except:
        ryw.give_bad_news(
            'fatal_error: add_to_object_store: write DONE file failed.',
            logging.critical)
        return (False, parent, datapath, metapath, auxpath, donepath)

    # TODO: In case of ANY failure, upload request copied to a REJECTED folder which can be looked upon later.

    return (True, parent, datapath, metapath, auxpath, donepath)
if address:
    ep[username] = address.replace('\r', '')
    epupdated = True
    print '<P><FONT COLOR=red>Updating address.</FONT>'
else:
    if ep.has_key(username):
        address = ep[username]

if epupdated:
    try:
##        print '<P>Before dumping'
        if os.path.exists(endpointfile + '.OLD'):
            os.remove(endpointfile + '.OLD')
            os.rename(endpointfile, endpointfile + '.OLD')
##        print '<P>Dumping'
        su.pickdump(ep, endpointfile)
##        print '<P>Dumped'
    except:
        print '<P>Could not update endpoint information. Look into files "%s" and "%s".' % (endpointfile, endpointfile + '.OLD')
        sys.exit(1)

print '\n<FORM action="/cgi-bin/UpdateUserInfo.py" method="post" enctype="multipart/form-data">\n\n'

print '<P><B>Username</B><BR> <INPUT type=text name=username value=%s size=30>' % username

print '<P><B>Address</B>'
if address:
    print '(%s)' % address
print '<BR><TEXTAREA name=address rows=5 cols=60></TEXTAREA>'

print '<P><B>New Password</B><BR> <INPUT type=password name=passwd size=30>'